




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章 MATLAB数据及运算21 变量及其操作一、变量命名规则1变量名、函数名对字母大小写是敏感的myfile与MyFile表示不同的变量sin是MATLAB定义的正弦函数名,但SIN、Sin都不是2变量名的第一个字符必须是英文字母3变量名最多可包含63个字符(英文、数字和下划线)4变量名中不能包含空格、标点my_exemple12是合法的变量名,12exemple、_exemple12、my exemple12、my.exemple12是非法变量名二、MATLAB默认的预定义变量每当MATLAB启动时,不经定义和赋值就会产生一些变量,称为MATLAB默认的预定义变量这些变量都可以重新赋值。但最好不要对这些变量名重新赋值预定义变量含义预定义变量含义ans计算结果的缺省变量名nargin函数输入参数个数eps机器零阈值(机器的浮点运算误差限)narout函数输出参数个数Inf或inf无穷大,如1/0realmax最大正浮点数i或j虚数单位realmin最小正浮点数pi圆周率plasterr存放最新的错误信息NaN或nan不是一个数(Not a Number),如0/0,/lastwarn存放最新的警告信息例1 用键盘在MATLAB指令窗中输入以下内容epseps 机器的浮点运算误差限。PC机上eps的默认值为 2.220410-16 ,若某个量的绝对值小于eps,则可以认为这个量为0。例2 用键盘在MATLAB指令窗中输入以下内容1/0,1.e1000,log(0)Inf 无穷大量 + 的MATLAB表示,也可以写成inf 。同样地,- 可以表示为 - Inf 。在 MATLAB 程序执行时,即使遇到了以 0 为除数的运算,也不会终止程序的运行,而只给出一个“除0”警告,并将结果赋成Inf ,这样的定义方式符合 IEEE 的标准。从数值运算编程角度看,这样的实现形式明显优于C语言。例3 用键盘在MATLAB指令窗中输入以下内容0/0,inf/inf,inf*0注意在MATLAB中,即使遇到以0为除数的运算,程序也不会终止运行。这时只给出一个警告,并将结果赋给inf或NaNNaN 不定式( not a number ) ,通常由 0 / 0 运算、Inf / Inf 及其他可能的运算得出。 NaN 是一个很奇特的量,如 NaN 与Inf 的乘积仍为 NaN 。例4 用键盘在MATLAB指令窗中输入以下内容n= realmax,n= 1.7977e+309例5 用键盘在MATLAB指令窗中输入以下内容m= realmin,m=2.2251e-309i 和 j 若i或j量不被改写,则它们表示纯虚数量j 。但在 MATLAB 程序编写过程中经常事先改写这两个变量的值,比如在循环过程中常用这两个变量来表示循环变量。如果想恢复该变量,则可以用语句 i = sqrt(-1)设置,即对 -1 求平方根。三、MATLAB运算符和表达式运算符操作数学表达式MATLAB运算符MATLAB表达式加a+b+a+b减a-b-a-b乘ab*a*b除ab/或a/b或ba幂abab注意所有运算都定义在复数域上例1 用键盘在MATLAB指令窗中输入以下内容u=sqrt(-4)注意对于方根,运算只给出处于第1象限的解例2 用左除()和右除(/)计算表达式的值用键盘在MATLAB指令窗中输入以下内容(5+cos(47*pi/180)/(1+sqrt(7)-2*i)、(1+sqrt(7)-2*i) (5+cos(180 47*pi)注意对于标量,左除()或右除(/)所得到的结果是一样的对于矩阵,左除()和右除(/)所得到的结果是不一样的 AX=B A-1AX= A-1B X=A-1B=AB,XA=B XA A-1=B A-1 X= BA-1= B/A表达式表达式由变量名、运算符、函数名组成表达式按优先级和自左向右的顺序运算优先级从高向低的排序是:指数运算、乘除运算、加减运算括号可以改变运算的顺序赋值符“=”和运算符的两侧允许有空格复数和复数矩阵MATLAB把复数看成一个整体来处理(不像其它程序,把实部和虚部分开处理)虚数单位用预定义变量i或j表示复数z=a+bi=reiq直角坐标表示与极坐标表示之间的转换real(z):给出复数z的实部a=rcosqimag(z):给出复数z的虚部b=rsinqabs(z):给出复数z的模r=sqrt(a2+b2)angle(z):以弧度为单位给出复数z的相角q=arctg(b/a)例1 写出复数表达式,计算用键盘在MATLAB指令窗中输入以下内容z1= 3 + 4i %书写格式1z2 = 1 + 2 * i %书写格式2z3=2*exp(i*pi/6) %书写格式2z=z1*z2/z3 注意%是注释号,在它后面及回车之前的输入部分是非执行的注释在格式1中,4i表示一个完整的虚数,4和i之间不能有空格在格式2中,i被看作一个预定义变量参与运算格式1的运算速度要比格式2快,宜于在循环中采用例2 复数矩阵的生成及运算 用键盘在MATLAB指令窗中输入以下内容A=1,3;2,4-5,8;6,9iA=1,3;2,4-5,8;6,9*iB=1+5i,2+6i;3+8*i,4+9*i C=A*B 注意格式1仅用于复数标量的表达,不能表达复数矩阵例3 求上例复数矩阵C的实部、虚部、模和相角 用键盘在MATLAB指令窗中输入以下内容 C_real=real(C)C_imag=imag(C)C_magnitude=abs(C)C_phase=angle(C)*180/pi%以度为单位计算相角四、MATLAB的数据结构 数据型、符号型、字符串型、多维数组、单元数组、类数据型:可以单独输入,也可以赋值给数值变量符号型:可用于公式推导,得到数学问题解析解字符串型:C语言中字符串是用双引号括起来的,而MATLAB字符串是用单引号括起来的1数据型: 双精度浮点数,占8字节(64位),指数11位,尾数53位,符号1位。 在一般情况下,数据的存储和计算都是以双精度进行的。但是,可以用format命令改变数据在屏幕上的显示格式指令含义formatformat short通常保证小数点后4位有效数字;对于大于1000的实数,用5位有效数字的科学记数形式显示format long15位数字表示format short e5位科学记数表示format long e15位科学记数表示format short g从format short和format short e中自动选择最佳记数方式(缺省设置)format long g从format long和format long e中自动选择最佳记数方式format rat近似有理数表示format hex16进制表示format bank(金融)元、角、分表示format +正数、负数和零分别用、和空格表示例1:用format和format short格式显示p的数值输入:format(或format short) 回车输入:pi 回车例2:用format和format short格式显示1000p的数值输入:format(或format short) 回车输入:1000*pi 回车例3:分别用format long、format short e、format long e、format short g、format long g、format rat和format bank格式显示p的数值例4:用format 格式分别显示p、p2p和pp的数值五、MATLAB常用函数三角函数函数名称数学表达MATLAB表达正弦sinsin反正弦arcsinasin余弦coscos反余弦arccosacos正切tgtan反正切arctgatan余切ctgcot反余切arcctgacot正割secsec反正割arcsecasec余割csccsc反余割arccscacsc双曲函数函数名称数学表达MATLAB表达双曲正弦shsinh反双曲正弦Arshasinh双曲余弦chcosh反双曲余弦Archacosh双曲正切thtan反双曲正切Arthatan双曲余切cthcoth反双曲余切Arcthacoth双曲正割sechsech反双曲正割Arsechasech双曲余割cschcsch反双曲余割Arcschacsch指数函数函数名称数学表达MATLAB表达自然指数函数exexp(x)自然对数函数lnlog常用对数函数log10log10以2为底的对数函数log2log22的幂函数2xpow2(x)平方根函数x1/2sqrt(x)复数函数MATLAB表达含义MATLAB表达含义MATLAB表达含义abs模,或绝对值conj复数共轭real复数实部angle相角(弧度)imag复数虚部例:求-p的绝对值输入:abs(-pi)圆整函数和求余函数函数名称MATLAB表达含义例向+圆整函数(天花板函数)ceil不小于自变量的最小整数ceil()=?ceil(-)=?向0圆整函数fix向0方向取整数fix()=?fix(-)=?向-圆整函数(地板函数)floor不大于自变量的最大整数floor()=?floor(-)=?模除求余函数mod(x,y)y不等于0时,mod(x,y)x- y*floor(x/y);y=0时,mod(x,y)=x求余数函数rem(x,y)y不等于0时,rem(x,y)x- y*fix(x/y);y=0时,rem(x,y)=NaN向最近整数圆整函数round四舍五入到最邻近的整数round()=?, round(-)=?, round(6.5)=?符号函数signx0,sign(x)=1注意1若a为正整数,ceil, fix, floor, round函数之间的区别如图2对于模除求余函数mod(x,y)和求余数函数rem(x,y),y=rem(13,3)1y=mod(13,3) = 1y=rem(-13,-3) = -1y=mod(-13,-3) = -1y=rem(-13,3) = -1y=mod(-13,3) = 2y=rem(13,-3) = 1y=mod(13,-3) = -2rem(x,y)的符号与x相同,mod(x,y)的符号与y相同当x、y的符号相同时,rem(x,y)mod(x,y)例1:当x=5,y=3,求rem(x,y)和mod(x,y)1先输入:x-y*fix(x/y),再输入rem(x,y),比较结果2先输入:x-y*floor(x/y),再输入mod(x,y),比较结果例2:当x=-5,y=3,求rem(x,y)和mod(x,y)remPurpose 2Remainder after divisionSyntax R = rem(X,Y)如果Y = 0, R = rem(X,Y) 给出 X - n.*Y,这里n = fix(X./Y). 如果Y不是一个整数,而且商X./Y 是在一个整数的四舍五入的误差内, 那么n就是那个整数。根据惯例, rem(X,0)是NaN。输入X and Y 必须是相同维数的实矩阵, 或实标量。只要X和Y同号, rem(X,Y)给出和mod(X,Y)一样的结果。但是, 对于正的X和Y, rem(-X,Y) = mod(-X,Y)-YRem函数给出一个在0和sign(X)*abs(Y)之间的结果。如果Y为0, rem给出NaN。mod Purpose 2Modulus after divisionSyntax M = mod(X,Y)Definition mod(x,y) is x mod y.如果Y = 0, M = mod(X,Y)给出X - n.*Y,这里n = floor(X./Y) .如果Y不是一个整数,而且商X./Y 是在一个整数的四舍五入的误差内, 那么n就是那个整数。根据惯例, mod(X,0)是X.。输入X and Y 必须是相同维数的实矩阵, 或实标量。只要X和Y同号, 函数mod(X,Y) 给出和rem(X,Y) 一样的结果。但是, 对于正的X和Y,mod(-X,Y) = rem(-X,Y)+Ymod函数对于同余关系是有用的: 当且仅当mod(x,m) = mod(y,m),X和y是同余的(congruent被一个模数所分成的差额) (mod m).例3:当x1 = -pi,x2 = 0,x3 = pi时,求sign(x1),sign(x2),sign(x3)22 数值数组及其运算由MATLAB软件构成的“矩阵”在外观形状和数据结构上与数学意义上的矩阵是及其相似的但MATLAB中的矩阵在操作上具有二重性既可以按数学中的矩阵运算规则操作又可以按照MATLAB软件自己定义的规则操作具有这样特性的“矩阵”数组按MATLAB软件自己定义的规则进行的运算数组运算数组可分为1维、2维、3维,甚至更多维数一、一维数组(矩阵)的创建1逐个元素输入法例:输入 x=2 pi/2 sqrt(3) 3+5i2冒号生成法通过设定步长生成一维数组x=a:inc:ba是数组的第1个元素。inc是采样点之间的间隔,即步长。如果(b-a)是步长inc的整数倍,则生成的数组的最后一个元素是b如果(b-a)不是步长inc的整数倍,则生成的数组的最后一个元素小于ba、inc、b之间必须用冒号“:”分隔例1:取步长为0.2,在0,p区间生成一个1维数组输入:x1=0:0.2:pi %注意最后一个生成元素是不是p输入:x1(5) % 显示数组x1的第5个元素inc可以省略。省略时,inc默认为1例2:取步长为1,在0,p区间生成一个1维数组 输入:x2=0:pi 步长inc可以是正数,也可以是负数当步长inc取正数时,要保证ab例3:取步长为1,在0,p区间逆向生成一个1维数组输入:x3=pi:-1:0 %注意比较本例与例1中数组的第1个元素输入:x3=0:-1:pi %注意结果例4:取步长为0.1,在0,2p区间画出正弦曲线输入:x4=0:0.1:2*pi; %在0,2p区间生成一个1维数组输入:y=sin(x4); %建立正弦函数输入:plot (x4, y) %画出y-x曲线3定数线性采样法在给定的总点数下,均匀采样生成一维数组x=linspace(a,b,n)a和b分别是数组的第1个和最后一个元素,n是采样总点数(包括a和b)步长(b-a)/(n-1)相当于x=a: (b-a)/(n-1):b例3:在0,p区间生成具有16个均匀采样点的一维数组输入:x4=linspace(0,pi,16) %注意最后一个元素是不是p4定数对数采样法在给定的总点数下,通过常用对数采样生成一维数组x=logspace(a,b,n)数组的第1个元素是10a,最后一个元素是10b。n是采样总点数(包括a和b)。步长10(b-a)/(n-1)例:输入:logspace(1,6,6)二、二维数组(矩阵) 特点:具有行和列例:A=1:3;4:6;7:9 % 33数组(矩阵)二维数组(矩阵)元素的标识“全下标”标识“单下标”标识例:产生一个5阶的魔方数组,并显示全下标第2行第4列的元素和单下标第14个元素输入:D=magic(5) % magic为MATLAB提供的魔方数组(矩阵)函数输入:D(2,4), D(14)三、数组运算和矩阵运算加减运算设两个行数和列数相同矩阵A=(aij)mn和B=(bij)mn。它们相加和相减,分别得到新的矩阵A+B和A-B。它们的行数和列数与原来的矩阵相同, 新的矩阵的元素等于原来矩阵的元素的相加或相减A+B=( aijn+bij)mn,A-B=( aij-bij)mn。MATLAB软件构成的数组(“矩阵”)可以实现矩阵的加减运算例 设,求,输入:A=1,-2;0,1;-1,3, B=0,2;-1,1;2,5输入:C=A+B, D=A-B注意:对于数学意义上的矩阵来说,只有两个矩阵的行数和列数相同时,才能进行加减运算对于非一行一列的矩阵,不能与标量相加减但是,对于MATLAB软件来说,允许数组(“矩阵”)与标量相加减,这时就是数组加减运算。数组与标量相加或相减,相当于数组中的每个元素与标量相加或相减设s为一个标量,A=(aij)mn为一个非一行一列的矩阵,那么s+A生成与A同行同列的数组而且新数组的每一元素等于原来元素与标量之和s+A=( s+aij)mns-A或A-s也生成与A同行同列的数组s-A=( s-aij)mn,A-s=(aij-s)mn例 s=3,求E=s+A, F=s-A, G=A-s乘法运算在数学上,两个矩阵相乘,第一个矩阵的列数必须等于第二个矩阵的行数,设A=(aij)mt,B=(bij)tn,它们相乘生成新矩阵C=AB新矩阵的行数等于第一个矩阵的行数,新矩阵的列数等于第二个矩阵的列行数,C=(cij)mn。新矩阵的元素按下面规则构成:在MATLAB中,可以实现这种运算,C=A*B。例 设,求 输入:A1=3,-2;1,0;-1,-3, B1=1,2,0,4;5,-2,-1,0输入:C1=A1*B1此外,在MATLAB中,还可以实现下面的乘积运算,这在数学上没有定义设A=(aij)mn,B=(bij)mn,它们的行数和列数相同,那么A.*B生成一个新的数组,其行数和列数与原来数组相同,新数组的元素等于原来数组相应元素的乘积,称为数组乘积运算。A.*B=(aij bij)mn例 设,求, 输入:A=1,-2;0,1;-1,3, B=0,2;-1,1;2,5输入:C=A.*B在数学上,一个标量与矩阵的乘积对于矩阵的每个元素与这个标量的乘积sA=(saij)mn在MATLAB中,可以实现这种运算,C=s*A。此外,s.*A也给出同样的结果例 求C=s*A,D=s.*A除法运算对于矩阵,分左除()和右除(/)两种,而且所得到的结果是不一样的 AX=B A-1AX= A-1B X=A-1B=AB,XA=B XA A-1=B A-1 X= BA-1= B/A此外,在MATLAB中,还可以实现一种数组除法运算设A=(aij)mn,B=(bij)mn,它们的行数和列数相同B./A或A.B给出与原数组行和列相同的数组而且它们的结果都是一样的,等于两个数组相应元素的分别相除B. / A ( A. B ) = ( bij / aij ) mn例 设,求,在MATLAB中,还可以实现一种标量除以数组的运算s. / A ( A. s )= (s / aij) mn转置设A=(aij)mn在数学上,表示矩阵的共轭转置在MATLAB中,矩阵的共轭转置仍然用A表示此外,在MATLAB中,还可以实现下面的数组转置A.=(aji)nm,为非共轭转置它与矩阵的共轭转置的关系为:A.=conj(A)例 设z = 1+2i 3+4i,求z及z.四、数组的关系和逻辑运算关系(比较)运算关系运算符指令含义小于大于=大于等于=等于=不等于注意1等式成立时,表示逻辑真,输出为1等式不成立时,表示逻辑假,输出为02当两个非标量数组进行比较时两个数组的维数必须相同比较是在两个数组的对应元素之间进行比较的结果是与原来维数相同的数组3标量可以与非标量数组进行比较比较是在标量和数组的每一个元素之间进行比较的结果是与非标量数组维数相同的数组例 设A=1:9,B=10-A,求r0=(A0),L2=A0,L3=A ,L4=A-2&A5)注意乘除运算优先于关系运算例2 设a=6, 当b=0时,判断(b=0)&(a/b5)先决或:(expression 1)|(expression 2)当(expression 1)0时再对(expression 2)进行逻辑运算然后对(expression 1)与(expression 2)执行“或”运算当(expression 1)1时不再对(expression 2)进行逻辑运算立即给出“逻辑真”的结果例3 设a=6, 当b=0, b=1, b=-1时,分别判断(b=0)|(a/b0)注意先决与&优先于先决或|,它们排在其它运算之后例4 设a=6,b=-2, 判断 (b=0)| (a/b0)&(a/b5)关系与逻辑函数函数名功能xor(A,B),异或运算“exclusive or”。当两个数组对应元素同为0或同为非0,相应元素取0,否则取1any(A)如果A是向量(一维数组),只要向量中有一个元素不为0,结果为1,否则为0如果A是矩阵(二维数组),any(A)把每一列元素作为向量处理,给出对多个向量判断的结果all(A)如果A是向量(一维数组),向量中所有元素不为0时,结果为1;否则为0如果A是矩阵(二维数组),any(A)把每一列元素作为向量处理,给出对多个向量判断的结果例1 A = 0 0 pi eps, B = 0 -2.4 0 1,求C = xor(A,B)注意,eps虽然显示为0,实际上是非0例2 A = 1,2,3;4,5,6;7,8,0,求B=any(A)、C=any(A=5)例3 A = 1,2,0;4,5,0;7,8,0,求B=any(A)例4 A = 1,2,3;4,5,6;7,8,0,求B=all(A)、C=all(A=5)例4 A = 1,2,3;4,5,6;7,8,9,求B=all(A)五、数组(矩阵)操作技巧1测试函数find设A是一数组,k = find(A)给出数组A非0元素的单下标。如果数组没有非0元素,则给出一个空矩阵例1 设A = 11 0 33 0 55,求find(A)、find(A = 0)、find(0 A& A 5)设A是一数组,n,m = find(A) 给出数组A非0元素的全下标例4 设M = magic(3),求n,m = find(M7)2数组大小的判别对于简单的数组,可以通过观察来判别它的维数和每一维的长度对于复杂的数组,要通过size命令或length命令观察来判别它的维数和每一维的长度sized = size(A) 给出数组A每一维的长度例1 设A=0:0.2:pi;0:0.4:2*pi,求size(A)m,n = size(A) 以变量m和n分别给出A每一维的长度例2 设A=0:0.2:pi;0:0.4:2*pi,求m,n = size(A)length(A) 给出数组A中所有维的最大长度即:length(A)= max(size(A)例3 设A=0:0.2:pi;0:0.4:2*pi,求length(A)3数组操作函数reshape在数组总元素数不变得前提下,改变各维的大小B = reshape(A,m,n) 从数组A按列取出元素构成m行n列数组B例3 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求B = reshape(A,2,6)B = reshape(A,m,n.,.)这里,占位符表示一个未明确显示的维的长度,它和其余维的长度乘积等于数组A各维长度的乘积例4 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求B = reshape(A,2,),C = reshape(A,1,),D = reshape(A,4,),E = reshape(A,2,3,)repmat按指定维的数目铺放模块数组B = repmat(A,m,n)或B = repmat(A,m n)将数组A作为整体按m行n列堆放例5将eye(2) 作为整体按3行4列堆放输入:B = repmat(eye(2),3,4)4数组的寻访与赋值一维数组的寻访与赋值例1 设x=0.9501, 0.2311, 0.6068, 0.4860, 0.8913,求x(3),x(1 2 5),x(1:3),x(3:end),x(3:-1:1),x(find(x0.5),x(1 2 3 4 4 3 2 1) 注意 end是一维数组的长度,即最大下标 寻访什么样的子数组,取决于数组x(index)中的下标index 下标index可以是单个正整数或正整数数组,但index中的每个元素的取值必须在闭区间1,end内例2,将上例的x数组的第3个元素重新赋值为0x(3)=0例3,将当前的x数组的第1和第4个元素重新赋值为1x(1 4)=1 1二维数组的寻访与赋值A(r,c),由A的“r指定行”和“c指定列”上的元素组成例1 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(2,3)例2 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(2,3,1,3),A(2,3,3)注意,方括号的作用设数组Sa的行宽和列长与A(r,c) 的行宽和列长相同则可以以双下标方式将Sa赋值给A(r,c),A(r,c)=Sa例3 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,Sa=20,30;40,50,求A(2,3,1,3)=SaA(r,:),由A的“r指定行”和“全部列”上的元素组成例2 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(2,:),A(2 3,:)A(:,c),由A的“全部行”和“c指定列”上的元素组成例3 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(:,3),A(:,2 4)例3 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(:,2 4 1)=ones(3)左右两边的数组的行宽和列长必须相同A(q),“单下标寻访”,由A的列按自左向右、首尾相接排序例4 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(7)A(:),“单下标全元素”寻访,由A的各列按自左向右、首尾相接生成“一维长列”例5 设A=1, 4, 7, 10; 2, 5, 8, 11; 3, 6, 9, 12,求A(:)设s是数组,而且它的元素是从数组A的单下标中选取A(s),“单下标寻访”,生成由“s”指定的数组并且数组A(s)的维数与长度与数组s相同例6 设s=2 3 5,B=16,2,3,13;5,11,10,8;9,7,6,12,求B(s)例7 设t=7 5;9 2,B=16,2,3,13;5,11,10,8;9,7,6,12,求B(t)设L是逻辑数组(其元素为1或0),且与数组A的维数和长度相同A(L)给出逻辑数组L中由“1”元素选出A的对应元素,并按单下标次序排成列例8 A=zeros(2,5); A(:)=-4:5,L=abs(A)3,求X=A(L)23 符号对象2. 3.1 建立符号对象MATLAB除了具有数值计算功能外,还具有符号计算功能。MATLAB提供了一种符号数据类型,这种数据类型是用sym或syms函数定义的,相应的定义对象称为符号对象。MATLAB提供的两个建立符号对象的函数sym和syms的用法不同。1建立符号变量和符号常量 (1) sym函数sym函数用来建立单个符号量,一般调用格式为:符号量名=sym(符号字符串)该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。a=sym(a)将建立符号变量,它与非符号变量是不同的。非符号变量在参与运算前是需要赋值的。变量的运算实际上是针对所赋的值运算,运算的结果是与变量类型对应的值。而对于符号变量,在运算前不需要赋值,其运算结果是一个表达式。例1 a=sym(a); b= sym(b); c= sym(c); %定义符号变量a、b、cx=5; y=-6; z=11; %定义数值变量x、y、zw=a*a+b*b+c*c %符号运算w=x*x+y*y+z*z %数值运算whos %查看内存变量这里,w开始是符号变量,重新赋值后,成为数值变量。应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。下面的例子用于比较符号常量与数值常量在代数运算时的差别。例2 pi1= sym(pi); k1= sym(8); k2= sym(3); %定义符号常量pi2= pi; r1= 8; r2= 3; %定义数值常量sin(pi1/3) %符号计算sin(pi2/3) %数值计算sqrt(k1+sqrt(k2) %符号计算sqrt(r1+sqrt(r2) %数值计算用符号常量计算所得到的结果是精确的数学表达式而数值计算的结果往往是近似的有限小数(2) syms函数函数sym一次只能定义一个符号变量,使用不方便。MATLAB提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:syms 符号变量名1 符号变量名2 符号变量名n用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量之间用空格而不要用逗号分隔。例 用syms函数定义符号变量a、b、c、dsyms a b c dwhos %查看内存变量例3 a=sym(a); b= sym(b); c= sym(c); %定义符号变量a、b、cx=5; y=-6; z=11; %定义数值变量x、y、zw=a*a+b*b+c*c %符号运算w=x*x+y*y+z*z %数值运算whos %查看内存变量这里,w开始是符号变量,重新赋值后,成为数值变量。应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。下面的例子用于比较符号常量与数值常量在代数运算时的差别。2建立符号表达式含有符号对象的表达式称为符号表达式。建立符号表达式有以下3种方法:(1)利用单引号来生成符号表达式。例1 y= 1/sqrt(2*x) %生成一般的符号表达式f= cos(x2)-sin(2*x)=0 %生成符号方程(2)用sym函数建立符号表达式。例2 U= sym(3*x2-5*y+2*x*y+6) %建立符号表达式“3*x2-5*y+2*x*y+6”M=sym(a, b; c,d) 生成符号矩阵(3) 使用已经定义的符号变量组成符号表达式。例3 syms x yV=3*x2-5*y+2*x*y+62. 3.2 符号表达式运算1符号表达式的四则运算符号表达式的加、减、乘、除运算可分别由函数symadd、symsub、symmul和symdiv来实现,幂运算可以由sympow来实现。运算结果仍然是符号表达式例1 f=2*x2+3*x-5 %定义符号表达式g=x2-x+7symadd(f,g) %求f+gsymsub(f,g) %求f-gsymmul(f,g) %求F*gsymdiv(f,g) %求f/gsympow(f, 3*x) %求f(3x)此外,也可以用+、-、*、/、运算实现符号运算例2 syms x y z;f=2*x+x2*x-5*x+x3+exp(2)f=2*x/(5*x)f=(x*x-y*y)/(x-y)2符号表达式的提取分子和分母运算如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:n,d=numden(s)该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。例1 a=sym(0.333) %数字加与不加单引号结果一样,都是符号常量n, d=numden(a)numden函数是在符号表达式有理化后提取分子和分母例2 g=sym(x2+3)/(2*x-1)+3*x/(x-1) n, d=numden(g)如果符号表达式s是一个符号数组,n,d=numden(s)函数给出两个新数组n和d。其中n是分子数组,d是分母数组。例3 h= sym(3/2, (2*x+1)/3; a/x+a/y, 3*x+4) n, d=numden(h)3符号表达式的因式分解与展开MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:factor(s):对符号表达式s分解因式。expand(s):对符号表达式s进行展开。collect(s):对符号表达式s合并同类项。collect(s,v):对符号表达式s按变量v合并同类项。例 syms a b x y;A=a3-b3;factor(A) %对A分解因式s=(-7*x2-8*y2)*(-x2+3*y2);expand(s) %对s展开collect(s,x) %对符号表达式s按变量x合并同类项(此例无同类项)factor(sym(420) %对符号整数分解因式注意,factor(s)中的s必须为符号,不能是数值4符号表达式的化简MATLAB提供的对符号表达式化简的函数有:simplify(s)、simple(s)simplify(s):应用函数规则对s进行化简。例1化简 (应该为)syms x ys=log(2*x/y)simplify(s)例2化简 (应该为)syms as=(1-a2)/(1-a)simplify(s)simple(s):调用MATLAB的其他函数对表达式进行综合化简,并显示化简过程。这种函数可以试用几种不同的化简工具,然后在结果表达式中选择含有最少字符的那种形式。例1化简 (应该为)syms x ys=(x2+y2) 2+(x2-y2) 2simple(s)5符号表达式与数值表达式之间的转换利用函数sym可以将数值表达式变换成它的符号表达式。例1sym(1.5) %注意与建立单个符号量a=sym(a)的区别sym(3.14)利用函数numeric或eval可以将符号表达式变换成数值表达式。例1phi=(1+sqrt(5)/2numeric(phi)例2eval(234/5)6符号表达式中变量的确定MATLAB中的符号可以表示符号变量和符号常量。函数findsym可以帮助用户查找一个符号表达式中的的符号变量。该函数的调用格式为:findsym(s,n)函数返回符号表达式s中的n个符号变量,若没有指定n,则返回s中的全部符号变量。例:syms x a y z b; %定义5个符号变量s1=3*x+y;s2=a*y+b; %定义2个符号表达式findsym(s1) %返回s1中的全部符号变量findsym(s2,2) %返回s2中的2个符号变量findsym(5*x+2)c=sym(3) %定义符号常量cfindsym(a*x+b*y+c) %符号常量c应该不在结果中在求函数的极限、导数和积分时,如果用户没有定义自变量,MATLAB将按离字母x最近的原则确定默认变量。可以用findsym(s,1)查找系统的默认变量。例syms x a y w z b;findsym(a*y+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年管线钢项目申请报告
- 箱式储能电站施工方案
- 地产咨询转型方案怎么写
- 山西黄河大桥施工方案
- 活动策划方案用什么做的
- 音乐活动走进社区策划方案
- 基于用户行为的站点内容优化策略-洞察及研究
- 钢楼梯电梯井道施工方案
- 2025年光伏组件效率提升技术安全性与市场应用报告
- 2025年光伏组件效率提升在光伏发电项目成本控制中的应用报告
- 七上语文月考必考名著《朝花夕拾》高频考点简答70道
- GB/T 10454-2025包装非危险货物用柔性中型散装容器
- 2025年秋统编版九年级上册道德与法治全册知识点复习提纲
- 2025年秋青岛版三年级数学上册第一二单元学业质量检测试题
- 铝材厂跟单员培训课件
- BIM概述课件教学课件
- 农作物施肥精准手册
- 医疗机构医疗质量安全专项整治行动自查自纠报告
- 中建土建劳务招标标准清单编制参考
- 待灭菌物品的装载
- 2025年职业病诊断医师考核试题(答案)
评论
0/150
提交评论