1、2:251第二章第二章 符号计算符号计算2:252符号计算功能符号计算功能matlab自产生起就在数值计算上功能卓著自产生起就在数值计算上功能卓著,深受各专业计算人员深受各专业计算人员的欢迎的欢迎.但由于在数学但由于在数学,物理等各种科研和工程应用中经常会遇到物理等各种科研和工程应用中经常会遇到符号运算的问题符号运算的问题.为此为此,公司于公司于1993年购买了年购买了 Maple 软件的使用软件的使用权权,并在此基础上并在此基础上,开发了符号计算工具箱开发了符号计算工具箱(Symbolic Toolbox)MATLAB中实现符号计算功能的三种途径中实现符号计算功能的三种途径1)调用调用mat
2、lab自己开发的各种功能函数进行常用的符自己开发的各种功能函数进行常用的符号运算号运算.包括符号表达式与符号矩阵的基本操作包括符号表达式与符号矩阵的基本操作,符号矩符号矩阵的运算阵的运算,符号微积分符号微积分,符号线性方程求解符号线性方程求解,符号微分方符号微分方程求解等程求解等.2)为了特殊专业人员提供方便为了特殊专业人员提供方便,matlab还保留还保留mpa.m 和和maple.m两个函数与两个函数与Maple接口接口3)符号函数计算器功能符号函数计算器功能2:253符号运算与数值运算的区别:符号运算与数值运算的区别:符号运算中,解算数学表达式、方程时,不符号运算中,解算数学表达式、方程
3、时,不是在离散化的数值点上进行,而是凭借一系是在离散化的数值点上进行,而是凭借一系列恒等式和数学定理,通过推理和演绎,获列恒等式和数学定理,通过推理和演绎,获得解析结果。这种计算建立在数值完全准确得解析结果。这种计算建立在数值完全准确表达和推演严格解析的基础上,所得结果是表达和推演严格解析的基础上,所得结果是完全准确的。完全准确的。符号运算符号运算-代数运算,公式推导代数运算,公式推导数值运算数值运算-算术运算算术运算代值代值2:2542.1 符号对象和符号表达式符号对象和符号表达式在在matlab中中,数值和数值变量用于数值的存储和各种数值计算数值和数值变量用于数值的存储和各种数值计算.而符
4、号常量而符号常量,符号变量符号变量,符号函数符号函数,符号操作等则是用来形成符号符号操作等则是用来形成符号表达式表达式,严格按照代数严格按照代数,微积分等课程中的规则微积分等课程中的规则,公式进行运算公式进行运算,并并尽可能给出解析表达式尽可能给出解析表达式.2.1.1 符号对象的生成和使用符号对象的生成和使用 数值计算数值计算-变量先赋值变量先赋值,再使用再使用.符号计算符号计算-先定义基本的符号对象先定义基本的符号对象(可以是常量可以是常量,变变 量量,表达式表达式),然后用这些基本符号对象去构成新的表达然后用这些基本符号对象去构成新的表达式式,再进行所需的符号运算再进行所需的符号运算2:
5、255符号对象的创建和衍生符号对象的创建和衍生1.生成符号对象的基本规则生成符号对象的基本规则 任何基本符号对象(数字、参数、变量、表达任何基本符号对象(数字、参数、变量、表达式)都必须借助专门的符号函数指令式)都必须借助专门的符号函数指令sym或或syms定义。定义。任何包含符号对象的表达式或方程,将任何包含符号对象的表达式或方程,将继承符号对象的属性。即任何包含符号对象继承符号对象的属性。即任何包含符号对象的表达式、方程也一定是符号对象。的表达式、方程也一定是符号对象。2:256符号对象的定义:符号对象的定义:f=sym(arg)-把数字把数字,字符串或表达式字符串或表达式arg转为符号对
6、象转为符号对象f=sym(argn,flagn)-把数值或数值表达式转换为把数值或数值表达式转换为flagn格式的符号对象格式的符号对象f=sym(1/2),s=sym(1/3),y=sym(pi),a=sym(b*c)f=1/2,s=1/3,y=pi,a=b*cf=sym(1/2,d),s=sym(1/3,d),y=sym(pi,d)f=sym(1/2,r)=sym(1/2)f=.50000000000000000000000000000000s=.333333333333333314829616256247392:257syms(argv1,argv2,argvk)-把字符把字符argv1
7、,argv2,argvk定义为基本符号对象定义为基本符号对象syms argv1 argv2 argvk-上述格式的简洁形式上述格式的简洁形式,各符各符号对象间不得有逗号号对象间不得有逗号argv=sym(argv,flagv)-按按flagv指定的要求把字符串指定的要求把字符串argv定义为符号对象定义为符号对象argvf=sym(pi),s=sym(2*pi+sin(60*pi*180)+exp(2)f=pi,s=2*pi+sin(60*pi*180)+exp(2)syms(a,b,c)a=a,b=b,c=csyms a b ca=a,b=b,c=c只能定义符号变量只能定义符号变量2:25
8、8说明:说明:f=sym(argn,flagn)中的中的argn是数值或数值表达式时是数值或数值表达式时,flagn可可 选选:d-最接近的十进制浮点精确表示最接近的十进制浮点精确表示.r-最接近的有理表示最接近的有理表示,缺省选项缺省选项.有理是指用两有理是指用两 个正整数个正整数p,q 构成的构成的p/q,p*pi/q,sqrt(p),2q,10q的形式之一的形式之一 argv=sym(argv,flagv)中的中的argv是字符时是字符时,flagv可取限定可取限定选项选项 positive-限定限定argv是是“正,实正,实”符号变量符号变量 real-限定限定argv是是“实实”符号
9、变量符号变量 unreal-argv是非实符号变量是非实符号变量2:2592 符号数字的定义符号数字的定义格式:格式:sc=sym(num)%sc为值为为值为num的符号数字的符号数字注意:注意:i)单引号必须在英文状态下输入,构成字符串单引号必须在英文状态下输入,构成字符串 ii)num为一个具体的数字为一个具体的数字如:如:sc=sym(2/3)sb=sym(pi+sqrt(5)sc=2/3sb=pi+sqrt(5)2:25103 符号参数符号参数定义格式:定义格式:i)syms para para=sym(para)syms a;a=sym(a)ii)syms para flag par
10、a=sym(para,flag)syms a positive;a=sym(a,positive)iii)syms a b c syms a b c flagflag为参数属性:为参数属性:positive-参数取正实数参数取正实数real-参数为实数参数为实数unreal-参数为限定的复数参数为限定的复数4 符号变量符号变量表达式中的自变量表达式中的自变量无逗号无逗号2:2511推荐格式推荐格式:定义符号变量定义符号变量:syms 变量名变量名syms a b c定义符号常数定义符号常数:常数名常数名=sym(常数值常数值)K=sym(2/3);定义符号常数定义符号常数:表达式名表达式名=s
11、ym(表达式表达式);f=sym(a*sin(x)+b);2:2512例例2.1.1-1 符号对象的生成符号对象的生成a1=1/3,pi/7,sqrt(5),sqrt(9),5.1,pi+sqrt(5)a2=sym(1/3,pi/7,sqrt(5),sqrt(9),5.1,pi+sqrt(5)a3=sym(1/3,pi/7,sqrt(5),sqrt(9),5.1,pi+sqrt(5)a1=0.3333 0.4488 2.2361 3.0000 5.1000 5.3777a2=1/3,pi/7,sqrt(5),3,51/10,q*2(-50)a3=1/3,pi/7,sqrt(5),sqrt(9)
12、,5.1,pi+sqrt(5)q=6054707603575008a23=a2-a3a23=0,0,0,0,0,189209612611719/35184372088832-pi-5(1/2)2:2513例例5.1.1-2 把字符表达式转换为符号变量把字符表达式转换为符号变量y=sym(2*sin(x)*cos(x)y=simple(y)y=sin(2*x)说明说明:1)是数值常数,是数值常数,是最接近的有理表示,是最接近的有理表示,是绝对准确是绝对准确的符号数值表示的符号数值表示2)部分元素相同,是因为部分元素相同,是因为 中的那几个元素是有理中的那几个元素是有理表示的基本形式,所以也是绝对
13、准确的表示的基本形式,所以也是绝对准确的3)指令产生的符号数值总是绝对准确的,因此建议:在产指令产生的符号数值总是绝对准确的,因此建议:在产生符号常量时应优先使用这种输入方式,把数值放入单引号对生符号常量时应优先使用这种输入方式,把数值放入单引号对中,数组元素间一定要采用逗号分隔中,数组元素间一定要采用逗号分隔在符号运算中在符号运算中,如果事先没有对表达式中的独立变量进行定义如果事先没有对表达式中的独立变量进行定义,那那么系统将自动检查哪些字符是符号函数么系统将自动检查哪些字符是符号函数,哪些是符号变量哪些是符号变量,并且总并且总是把在英文字母表中离是把在英文字母表中离x最近的字母认做独立符号
14、变量最近的字母认做独立符号变量2:2514例例2.1.1-3 用符号计算验证三角等式用符号计算验证三角等式syms phi1 phi2;y=simple(sin(phi1)*cos(phi2)-cos(phi1)*sin(phi2);y=sin(phi1-phi2)例例2.1.1-4 求矩阵求矩阵11122122aaaa的行列式的行列式,逆和特征值逆和特征值syms a11 a12 a21 a22;A=a11,a12;a21,a22;DA=det(A),IA=inv(A),EA=eig(A)121212sincoscossinsin()A=a11,a12 a21,a22DA=a11*a22-a
15、12*a212:2515例例2.1.1-4 验证积分验证积分syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);yf=simple(yf)22sin(2)2i tAedtAyf=2*A*sin(1/2*tao*w)/w练习练习:展开展开sin(4x)(expand)2:25162.1.2 符号计算中的算符和基本函数符号计算中的算符和基本函数由于新版由于新版matlab采用了重载技术采用了重载技术,使得用来构成符号计算表达使得用来构成符号计算表达式的算符和基本函数式的算符和基本函数,无论在形状无论在形状,名称名称,还是使用方法上还是使用方法上,
16、都与数都与数值计算中的算符和基本函数几乎完全相同值计算中的算符和基本函数几乎完全相同,这给编程带来极大的这给编程带来极大的方便方便.(2)关系运算符关系运算符在符号对象的比较中在符号对象的比较中,没有大于没有大于,大于等于大于等于,小于小于,小于等于的概念小于等于的概念,而只有是否等于的概念而只有是否等于的概念.”=“=“分别用来对算符两边的对象分别用来对算符两边的对象进行相等和不等的比较进行相等和不等的比较,返回为逻辑量返回为逻辑量(1)基本运算符基本运算符算符算符”+”,”-”,”*”,”,“/”,“”分别构成矩阵的加分别构成矩阵的加,减减,乘乘,左左除除,右除右除,求幂运算求幂运算.算符
17、算符”.*”,“./”,“.”,“.”分别实现元素分别实现元素对元素的数组乘对元素的数组乘,除除,求幂运算求幂运算.算符算符”,“.”分别实现矩阵分别实现矩阵的共轭转置的共轭转置,非共轭转置非共轭转置2:2517(4)指数指数,对数函数对数函数函数函数sqrt,exp,expm在两者中用法相同符号计算中只有自然在两者中用法相同符号计算中只有自然对数,而没有数值计算中的对数,而没有数值计算中的log2,log10(5)复数函数复数函数conj,imag,real,abs在两者中用法相同在两者中用法相同.但在符号计算中没有求但在符号计算中没有求相角的指令相角的指令.(6)矩阵代数指令矩阵代数指令在
18、符号计算中在符号计算中,matlab提供的常用矩阵代数指令有:提供的常用矩阵代数指令有:diag,triu,tril,inv,det,rank,rref,null,colspace,expm,poly,eig,svd(3)三角函数三角函数,双曲线函数以及他们的反函数双曲线函数以及他们的反函数除除atan2只能用于数值计算外只能用于数值计算外,另外的在两种运算中使用方法相同另外的在两种运算中使用方法相同.2:2518数值计算对象数值计算对象,符号计算对象符号计算对象,字符串是字符串是MATALB中最常用的中最常用的数据对象数据对象.他们遵循各自不同的运算法则他们遵循各自不同的运算法则,但有时在外
19、形上却但有时在外形上却十分相似十分相似.MATLAB提供了一些识别不同数据对象的指令提供了一些识别不同数据对象的指令,常常用的有用的有class,isa,whos 例例2.1.3-1 数据对象及其识别指令的使用数据对象及其识别指令的使用(1)生成三种不同类型的矩阵,给出不同的显示形式生成三种不同类型的矩阵,给出不同的显示形式clear,a=1;b=2;c=3;d=4%产生四个数值变量产生四个数值变量Mn=a,b,c,d%利用已赋值变量构成数值矩阵利用已赋值变量构成数值矩阵Mc=a,b,c,d%字符串中的字符串中的a,b,c,d与前面输入的数值变量无关与前面输入的数值变量无关Ms=sym(Mc)
20、%符号变量,与前面的各变量无关符号变量,与前面的各变量无关Mn=1 2 3 4Mc=a,b;c,dMs=a,b c,d2.1.3 对象类别的识别对象类别的识别2:2519(2)三个矩阵的大小不同三个矩阵的大小不同SizeMn=size(Mn),SizeMc=size(Mc),SizeMs=size(Ms)SizeMn=2 2SizeMc=1 9SizeMs=2 2(3)用用class获得每种矩阵的类别获得每种矩阵的类别CMn=class(Mn),CMc=class(Mc),CMs=class(Ms)CMn=doubleCMc=charCMs=sym(4)用用isa判断每种矩阵的类别判断每种矩阵
21、的类别isa(Mn,double),isa(Mc,char),isa(Ms,sym)ans=1ans=1ans=12:2520(5)利用利用whos观察内存变量的类别和其他属性观察内存变量的类别和其他属性 Name Size Bytes Class Mc 1x9 18 char array Mn 2x2 32 double array Ms 2x2 312 sym objecta=0:1:6;theta=sym(30*pi/180*a)alfa=sym(30*pi/180)*atheta=30*pi/180*aalfa=0,1/6*pi,1/3*pi,1/2*pi,2/3*pi,5/6*pi,
22、pia与数组与数组a无关无关2:25212.1.4 符号表达式中自由变量的确定符号表达式中自由变量的确定findsym(expr)-确认表达式确认表达式expr中所有自由符号变量中所有自由符号变量findsym(expr,n)-从从expr中确认出靠中确认出靠x最近的最近的n个独立自变量个独立自变量例例2.1.4-1 对独立自由符号变量的自动辨认对独立自由符号变量的自动辨认(1)生成符号变量生成符号变量syms a b x X Y;k=sym(3);z=sym(c*sqrt(delta)+y*sin(theta);expr=a*z*X+(b*x2+k)*Y;(2)找出找出expr中的全部自由符
23、号变量中的全部自由符号变量findsym(expr)ans=X,Y,a,b,c,delta,theta,x,y2:2522(3)从从expr中确定中确定1,2,3个自由变量个自由变量findsym(expr,1),findsym(expr,2),findsym(expr,3)ans=xans=x,yans=x,y,thetafindsym 确认的是表达式中的确认的是表达式中的”自由自由”,”独立独立”的符号变量的符号变量,由由于于k不是自由的不是自由的,z不是独立的不是独立的,所以该指令不将其作为自由变量。所以该指令不将其作为自由变量。该指令把该指令把expr表达式中表达式中n个最靠近个最靠近
24、x的自由符号变量确认为的自由符号变量确认为“独独立自由变量立自由变量”,并且认为大写字母离并且认为大写字母离x的距离总大于所有小写字的距离总大于所有小写字母离母离x的距离的距离作用作用:在符号函数调用中在符号函数调用中,当没有明确指定所针对的变量当没有明确指定所针对的变量时时,系统自动确定所操作的自由变量系统自动确定所操作的自由变量2:25232.2 符号对象的操作与转换符号对象的操作与转换2.2.1 符号表达式的操作符号表达式的操作collect合并同类项合并同类项numden 提取公因式提取公因式expand 展开指定项展开指定项simplify 恒等式简化恒等式简化factor因式分解因
25、式分解pretty习惯方式显示习惯方式显示horner转换为嵌套形式转换为嵌套形式 simple简化简化例例2.2.1-1 简化简化sym x;f=(1/x3+6/x2+12/x+8)(1/3);g1=simple(f)g2=sinple(g1)g1=(2*x+1)/xg2=2+1/x验证验证:f2=g23;expand(f2)32611238xxxf 2:2524例例2.2.1-2 因式分解因式分解 9876542fx=sym(9876542);factor(fx)ans=(2)*(13)*(19)*(19993)例例2.2.1-3 因式分解因式分解x12-1syms x;f=x12-1;f
26、actor(f)例例2.2.1-4 pretty,horner的使用的使用syms x;f=exp(-x);f1=taylor(f);pretty(f1)fh=horner(f1)ans=(x-1)*(x2+x+1)*(x+1)*(1-x+x2)*(x2+1)*(x4-x2+1)2:2525f1=1-x+1/2*x2-1/6*x3+1/24*x4-1/120*x5 2 3 4 5 1-x+1/2 x -1/6 x +1/24 x -1/120 x fh=1+(-1+(1/2+(-1/6+(1/24-1/120*x)*x)*x)*x)*xexpand的使用的使用syms x y;f=sin(x+
27、y)u=expand(f)f=sin(x+y)u=sin(x)*cos(y)+cos(x)*sin(y)2:25262.2.2 置换操作置换操作作用作用:把复杂表达式中所含的多个相同子表达式用一个符号代替把复杂表达式中所含的多个相同子表达式用一个符号代替,使表达简洁使表达简洁RS,ssub=subexpr(S,ssub)-运用符号变量运用符号变量ssub置换子表达式置换子表达式,重写重写S为为RS例例2.2.2-1 表达式置换表达式置换syms a b c d W;V,D=eig(a,b;c,d);RVD,W=subexpr(V;D,W)说明说明:被置换的子表达式是机器自动寻找的被置换的子表达
28、式是机器自动寻找的,置换原则为置换原则为,只有比只有比较长的子表达式才被置换较长的子表达式才被置换,比较短的子表达式比较短的子表达式,即使出现多次即使出现多次,也也不被置换不被置换.1)子表达式置换操作子表达式置换操作指令格式:指令格式:2:25272)通用置换指令通用置换指令RES=subs(ES,old,new)-用用new置换置换ES中的中的old后产生后产生RESRES=subs(ES,new)-用用new置换置换ES中的自由变量后产生中的自由变量后产生RES例例2.2.2-2 subs置换规则示例置换规则示例(1)产生符号函数产生符号函数syms a x;f=a*sin(x)+5;(
29、2)符号变量置换符号变量置换f1=subs(f,sin(x),sym(y)(3)符号常数置换符号常数置换f2=subs(f,a,x,2,sym(pi/3)f1=a*y+5a=2x=pi/3,符号数字符号数字f2=3(1/2)+5double(f2)代值代值2:2528(4)双精度数值转换双精度数值转换(所有自由变量被双精度数值取代所有自由变量被双精度数值取代)自定义自定义函数的赋值函数的赋值f3=subs(f,a,x,2,pi/3)f3=6.7321(5)数值数组置换一数值数组置换一 (取取a=2,x=0:pi/6:pi)f4=subs(subs(f,a,2),x,0:pi/6:pi)f4=5
30、.00 6.00 6.73 7.00 6.73 6.00 5.00(6)数值数组置换二数值数组置换二 (取取a=0:6,x=0:pi/6:pi)f5=subs(f,a,x,0:6,0:pi/6:pi)f5=5.00 5.50 6.73 8.00 8.46 7.50 5.002:2529f6=subs(f,a,x,0:6,0:pi/6:pi)f6=5.00 5.50 6.73 8.00 8.46 7.50 5.00比较:比较:f7=subs(f,a,x,2,pi/6 )f8=subs(f,a,x,2,sym(pi/6)6.732050807568883(1/2)+5 subs指令的属性取决于指令
31、的属性取决于new的属性的属性,当当new中全部为数值数中全部为数值数字时字时,所得结果为双精度数据所得结果为双精度数据,当当new中有符号数字时中有符号数字时,所得结果所得结果也为字符数字。也为字符数字。new可以是数组可以是数组【说明【说明】2:2530求求n0.5(n=1,2,.10)之值之值syms x;f=sqrt(x);res=subs(f,x,1:1:10)?思考:如何求思考:如何求f=a*n0.5+b (其中其中(a=2,3,411,n=1,2,3,10,b=0.1,0.2,0.3,1)的值的值2:2531例例2.2.2-2 猴子吃桃问题:猴子第一天摘下若干个桃猴子吃桃问题:猴
32、子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到以后每天早上都吃了前一天剩下的一半零一个。到第第10天早上想再吃时,见只剩下一个桃子了。求第天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。一天共摘了多少。syms r;f=2*(r+1);u=f;for k=1:1:8 u=subs(f,r,u);endtotal=subs(u,r,1)u=512*r+1022total=1534a(1)=1534
33、;%验算验算for k=2:1:10 a(k)=a(k-1)/2-1;end2:25322.2.3 符号数值精度控制和任意精度的计算符号数值精度控制和任意精度的计算数值计算受计算机字长的限制数值计算受计算机字长的限制,每次数值操作都带有截断误差每次数值操作都带有截断误差,因因此任何数值计算不管采用什么算法都将产生积累误差此任何数值计算不管采用什么算法都将产生积累误差.在在matlab中中,每个算术操作结果的相对精度约为每个算术操作结果的相对精度约为16位数字位数字.但是符号计算的但是符号计算的结果是绝对准确的结果是绝对准确的,不包含任何计算误差不包含任何计算误差.符号计算中与数值精度符号计算中
34、与数值精度计算有关的指令有:计算有关的指令有:double(x)-把符号常数转化为把符号常数转化为16位相对精度的浮点数值对象位相对精度的浮点数值对象digits(n)-设置以后的数值计算以设置以后的数值计算以n位相对精度进行位相对精度进行xs=vpa(x)-在在digits指定精度下,给出指定精度下,给出x的数值型符号结果的数值型符号结果xsxs=vpa(x,n)-在在n位相对精度下,给出位相对精度下,给出x的数值型符号结果的数值型符号结果xs2:2533说明:说明:double指令运作所得结果一定是双精度数值对象指令运作所得结果一定是双精度数值对象 除了除了vpa(x,n)对特定符号对象指
35、定具体精度外对特定符号对象指定具体精度外,所有所有vpa(x)的精度都受到其前面的的精度都受到其前面的digits指令控制指令控制,digits指令缺省精指令缺省精 度为度为32位位 x可以是符号对象或数值对象可以是符号对象或数值对象,但运行后所得结果但运行后所得结果xs一定是符一定是符 号对象号对象2:25342.2.4 符号对象与其他数据对象间的转换符号对象与其他数据对象间的转换数值数值,符号符号,字符是字符是matlab中三种不同的数据类型中三种不同的数据类型,matlab为每种为每种数据类型提供了各自特定的生成指令和操作指令数据类型提供了各自特定的生成指令和操作指令.为实现不同数为实现
36、不同数据类型间的交互据类型间的交互,matlab 提供了一系列的转换指令提供了一系列的转换指令 数值型数值型符号结果符号结果符号常数符号常数数值数值符号量符号量(表达式表达式)字符串字符串(表达式表达式)ASCII码码 vpadoublevpasymdoublestr2num,str2double,sscanfint2str,num2str,mat2strcharsymchar abs double2:2535数值数字和符号数字之间的相互转换数值数字和符号数字之间的相互转换1)数值数字数值数字符号数字符号数字sk=sym(num,flag)flag:r-数值类数字的广义有理表达数值类数字的广义
37、有理表达d-十进制浮点近似表达十进制浮点近似表达e-带误差的理性近似表达带误差的理性近似表达f-十六进制浮点近似表达十六进制浮点近似表达PI=sym(pi,r);PI=pi注意:在符号运算中,数值类数字会自动转换为符号数字注意:在符号运算中,数值类数字会自动转换为符号数字syms t;y=1/3*sin(t)+2/4y=1/3*sin(t)+1/2sk=sym(num)sk=sym(num)2:2536PI=sym(pi,d);PI=3.14159265358979311599796346854422)符号数字符号数字数值数字数值数字double(num_sym)PI=sym(pi);doub
38、le(PI)ans=3.14162:25372.2.5 符号表达式的复合函数和反函数符号表达式的复合函数和反函数1)复合函数运算复合函数运算 compose(f,g)-返回复合函数返回复合函数f(g(y),这里这里f=f(x),g=g(y)compose(f,g,z)-返回自变量为返回自变量为z的复合函数的复合函数f(g(z),这里这里2)反函数反函数 g=finverse(f)-返回符号函数返回符号函数f的反函数的反函数g,满足满足g(f(x)=x g=finverse(f,v)-返回自变量为返回自变量为v的符号函数的符号函数f的反函数使得的反函数使得f=f(x),g=g(y)g(f(v)=
39、v,当当f包含不止一个符号变量时包含不止一个符号变量时,使用这种格式使用这种格式.2:2538例例2.2.5-1 复合函数和反函数示例复合函数和反函数示例syms x y;f=1/x3;g=tan(y);fg=compose(f,g)fin=finverse(fg)fg=1/tan(y)3fin=atan(1/y(1/3)2:25392.3 符号微积分符号微积分1)符号极限符号极限limit(F,x,a)-计算计算F在在xa时的极限时的极限limit(F,x,a,left/right)-计算左计算左/右极限右极限例例5.3-1 极限示例极限示例syms x;f=3/(x2+6);val1=li
40、mit(f,x,inf)val2=limit(f,x,0)val1=0val2=1/22:2540例例 已知已知f(x)=sin(|x|),求求fx(0),fx(x)f(x)=sin(|x|)曲线图2:254100()sin()sin()sin()()limsin(0)sin(0)(0)limxxf xxxxxfxxxfx 当x0时syms x;syms dx positive;x0=sym(0);f_p=sin(x);df_p=limit(subs(f_p,x,x+dx)-f_p)/dx,dx,0)df_p0=limit(sin(x0+dx)-sin(x0)/dx,dx,0)数学分析数学分析
41、:f(x)=sin(|x|)2:2542绘图绘图要绘制原函数在要绘制原函数在x0时的导函数曲线,应先将导函时的导函数曲线,应先将导函数离散化,采用通用置换指令进行离散化数离散化,采用通用置换指令进行离散化deltx=pi/200;xx=0:deltx:2*pi;y=subs(df_p,x,xx);plot(xx,y);2:25432)符号序列求和符号序列求和对于数学上的求和对于数学上的求和可用可用matlab的求和指令解决的求和指令解决.其指令为其指令为:()bv af vs=symsum(f,v,a,b)-求通式求通式f字指定变量字指定变量v取遍取遍a,b中所有整数中所有整数时的和时的和.说
42、明说明:f是矩阵时是矩阵时,对矩阵的元素逐个求和对矩阵的元素逐个求和,但自变量定义在整个矩阵上但自变量定义在整个矩阵上 v缺省时缺省时 f中的自变量由中的自变量由findsym自动辨认自动辨认;b可以取有限整数可以取有限整数,也可以取无穷大也可以取无穷大inf a,b可同时缺省可同时缺省,此时默认求和的自变量区间为此时默认求和的自变量区间为0,v-12:2544例例2.3-2 求求syms n;f=n2,1/n2;s1=symsum(f(1),1,100)s2=symsum(f(2),1,inf)s1=338350s2=1/6*pi210022111,nnnn2:2545例例2.3-3 求求s
43、yms k t;f1=t,k3;f2=1/(2*k-1)2,(-1)k/k;s1=simple(symsum(f1);s2=simple(symsum(f2,1,inf)3)符号微分和符号微分和Jacobian矩阵矩阵求导数,高阶导数,偏导数和多元向量函数的求导数,高阶导数,偏导数和多元向量函数的Jacobian矩阵是矩阵是数学分析的重要内容,有机器实现求导的指令有:数学分析的重要内容,有机器实现求导的指令有:dfdvn=diff(f,v,n)-求求fjac=jacobian(f,v)-求多元向量函数的求多元向量函数的Jacobian矩阵矩阵132011(1),(21)kttkt kkk()n
44、nd f vdv2:2546 f是矩阵时是矩阵时,求导对矩阵的元素逐个进行求导对矩阵的元素逐个进行,但自变量定义在整个但自变量定义在整个 矩阵上矩阵上.v缺省时缺省时,自变量会自动由自变量会自动由findsym确认确认,n缺省时缺省时,默认默认n=1 在数值计算中,指令在数值计算中,指令diff是用来求差分的是用来求差分的 如f的的Jacobian矩阵为矩阵为说明:说明:11()().,.,()mnf vf vvvvfv1111.mnnmffvvffvv2:2547例例2.3-4 求求syms a t x;f=a,t3;t*cos(x),log(x);df=diff(f),dfdt2=diff
45、(f,t,2),dfdxdt=diff(diff(f,x),t)333222,coslncoslncoslnatatatddddxdtdxdttxxtxxtxx2:25484)符号积分符号积分与数值积分相比与数值积分相比,符号积分指令简单符号积分指令简单,适应性强适应性强,但可能占用机器但可能占用机器时间很长时间很长.intf=int(f,v)-f对对v的不定积分的不定积分intf=int(f,v,a,b)-f对对v的定积分的定积分说明:说明:当当f是矩阵时,积分对矩阵的元素逐个进行是矩阵时,积分对矩阵的元素逐个进行 v缺省时,积分对缺省时,积分对findsym确认的变量进行确认的变量进行 a
46、,b分别是积分的上下限分别是积分的上下限例例2.3-5 求求syms a b x;f=a*x,b*x2;1/x,sin(x);int(f)21sinaxbxdxxx2:2549例2.3-6 求积分syms x y z;f=x2+y2+z2;s=int(int(int(f,z,sqrt(x*y),x2*y),y,sqrt(x),x2),x,1,2)第一重积分第一重积分第二重积分第二重积分2222221()xx yxxyxyz dzdydx 2:2550ft=ilaplace(Fs,s,t)-求频域函数求频域函数Fs的的Laplace反变换反变换ftFZ=ztrans(fn,n,z)-求时域系列求
47、时域系列fn的的Z变换变换FZfn=iztrans(FZ,z,n)-求频域系列求频域系列FZ的的Z变换变换fn5)符号积分变换符号积分变换傅立叶变换傅立叶变换,拉普拉斯变换拉普拉斯变换,Z变换在信号处理和系统动态特性研变换在信号处理和系统动态特性研究中起着重要作用究中起着重要作用Fw=fourier(ft,t,w)-求时域函数求时域函数ft的傅立叶变换的傅立叶变换Fwft=ifourier(Fw,w,t)-求频域函数求频域函数Fw的傅立叶反变换的傅立叶反变换ftFs=laplace(ft,t,s)-求时域函数求时域函数ft的的Laplace变换变换Fs2:2551-(-)-/2/22.3-7(
48、)0 0t xAtetxyf telsetx 例求函数和 的傅立叶变换syms A t tao x w;Fw1=int(A*exp(-i*w*t),t,-tao/2,tao/2);Fw1=simple(Fw1)ft=exp(x-t)*exp(-i*w*t);Fw2=int(ft,t,x,inf)%被积变量不能省略被积变量不能省略2:25522.4 符号代数方程求解符号代数方程求解1)线性方程组的符号解线性方程组的符号解矩阵计算是求解线性方程组最简单有效的方法矩阵计算是求解线性方程组最简单有效的方法,在在matlab中中,不不管数据对象是数值还是符号管数据对象是数值还是符号,实现矩阵运算的指令形
49、式几乎完实现矩阵运算的指令形式几乎完全相同全相同.例例2.4-1 求求:d+n/2+p/2=q,n+d+q-p=10,q+d-n/4=p,q+p-n-8d=1线性方程组的解线性方程组的解A=sym(1,1/2,1/2,-1;1,1,-1,1;1,-1/4,-1,1;-8,-1,1,1);b=sym(0;10;0;1)x=Ab2:25532)一般代数方程组的解一般代数方程组的解这里所讲的一般代数方程包括线性这里所讲的一般代数方程包括线性,非线性和超越方程等非线性和超越方程等,求解求解指令为指令为solve.S=solve(eq1,eq2,eqn,v1,v2,vn)-方程组指定变量的解方程组指定变
50、量的解 (推荐格式推荐格式)S=solve(exp1,exp2,expn,v1,v2,vn)-方程方程组指定变量的解组指定变量的解 (可用格式可用格式)2:2554说明:说明:eq1,eq2,eqn或是字符串表达的方程或是字符串表达的方程,或是字符串或是字符串 表达式表达式.v1,v2,vn是字符串表达的求解变量名是字符串表达的求解变量名 exp1,exp2,expn只能是符号表达式只能是符号表达式.v1,v2,vn是是 求解的符号变量求解的符号变量 如如eq1,eq2,eqn是不含等号的表达式是不含等号的表达式,则指令是对则指令是对eq1=0,eq2=0,eqn=0求解求解 S是一个结构数组