matlab符号运算基础.ppt
三、符号运算基础,1,MATLAB 不仅具有数值运算功能,还开发了实现符号计算的工具包Symbolic Math Toolbox,符号运算的操作对象是非数值的符号对象,2,符号数学工具箱中的工具是建立在功能强大的Maple的基础上。它最初是由加拿大的滑铁卢(Waterloo)大学开发出来的。如果要求Matlab进行符号运算,那么首先由Maple计算并将结果返回到Matlab命令窗口。,符号运算的功能,符号线性代数 因式分解、展开和简化 符号代数方程求解 符号微积分 符号微分方程支持可变精度运算支持符号运算并能以指定的精度返回结果,符号运算与数值运算的区别,符号运算使用字符串进行符号分析,而不是基于矩阵的数值分析数值运算中必须先对变量赋值,然后才能参与运算符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达符号运算可以求解科学计算中数学问题的解析表达式精确解符号运算速度较慢,4,基本概念,符号变量:预先不要求有确定值的量符号表达式:代表数字、函数、算子和变量的Matlab字符串或字符串数组符号方程:含有等号的符号表达式符号矩阵:数组,其元素是符号表达式符号算术:使用已知的规则和给定符号恒等式求解这些符号方程的实践,它与代数和微积分中的求解方法完全一样,5,1.创建符号变量和符号表达式,MATLAB的符号工具箱提供了两个建立符号对象的函数:sym和syms函数sym的调用格式 符号变量名=sym(表达式)注:函数sym可创建一个符号变量,表达式可以是字符、字符串、数学表达式或字符表达式等,6,函数syms的调用格式syms 符号变量名1 符号变量名2 注:函数syms可一次创建多个符号变量用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔,7,8,a=sym(MATLAB)a=MATLAB b=sym(3*x2+4*x+7)b=3*x2+4*x+7 syms c d e c=3xc=3x,9,数值矩阵A=1,2;3,4 A=a,b;c,d 不识别用matlab函数sym创建矩阵命令格式:A=sym()符号矩阵内容同数值矩阵需用sym指令定义需用单引号 标识注意与a,b;c,d的区别,2.符号矩阵的创建,10,A=sym(a,2*b;3*a,0)A=a,2*b 3*a,0,注:符号矩阵的每一行的两端都有方括号,这是与 Matlab数值矩阵的一个重要区别。,3.符号常量,当数值常量作为sym()的输入参量时,就建立了一个符号对象符号常量。虽然看上去是一个数值量,但已经是一个符号对象了。例:a=3/4;b=3/4;c=sym(3/4);d=sym(3/4);whos 查看变量类型a为实双精度浮点数值类型;b为实字符类型;c和d都是符号对象类型。,12,当符号表达式具有多个变量时,只有一个变量是独立变量,MATLAB将基于以下准则选择独立变量:小写字母i和j不能作为自由变量 小写字母x是首选符号变量其余小写字母被选中的次序是:在英文字母中,靠近x的优先,如果与x距离相同,则x之后的优先 大写字母比所有小写字母都靠后,4.符号变量的确定,13,findsym(s,n):按以下准则确定顺序给出符号表达式s中的靠近x的n个符号变量根据变量的首字母排序,排序规则为 x y w z v u.a X Y W Z V U.A随后的字母按字母顺序排列,且大写字母比小写字母优先:0 1.9 A B.Z a b.z,findsym(s):按字典顺序给出符号表达式s中的所有符号变量,14,syms a x y z t X1 x2 xa xb findsym(sin(pi*t)ans=t findsym(x+i*y-j*z)ans=x,y,z,findsym(a+y,1)ans=y findsym(X1+x2+xa+xb)ans=X1,x2,xa,xb findsym(X1+x2+xa+xb,4)ans=x2,xa,xb,X1,15,符号表达式的运算与普通数值运算不同,它的运算结果是符号表达式或符号矩阵Matlab6.5及以前的版本提供了很多函数用于符号计算,如symadd,symsub,symmul,symdiv,sympow等由于计算效率和计算精度不高,Matlab7.0及以后的版本已将其删除,相应的计算只需键入数学运算符+,-,*,/,或,4.符号表达式的基本运算,16,例 计算表达式 与 表达式 的和、差、积、商与乘方,syms x s1=x3-1;s2=x-1;s1+s2ans=x3+x-2 s1-s2ans=x3-x,s1*s2ans=(x3-1)*(x-1)s1/s2ans=(x3-1)/(x-1)s1s2ans=(x3-1)(x-1),17,复合函数compose(f,g):返回复合函数f(g(y),其中f=f(x),g=g(y).其中符号x为函数f中由命令findsym(f)确定的符号变量,符号y为函数g中由命令findsym(g)确定的符号变量compose(f,g,z):返回复合函数f(g(z)compose(f,g,x,z):返回复合函数f(g(z),将函数f中的自变量x用g(z)代替compose(f,g,x,y,z):返回复合函数f(g(z),将函数f中的自变量变量x用g(y)代替,然后用指定的变量z代替变量y,18,syms x y z t u;f=1/(1+x2);g=sin(y);h=xt;p=exp(-y/u);compose(f,g)ans=1/(sin(y)2+1)compose(f,g,t)ans=1/(sin(t)2+1),compose(h,g,x,z)ans=sin(z)t compose(h,g,t,z)ans=xsin(z)compose(h,p,x,y,z)ans=(1/exp(z/u)t compose(h,p,t,u,z)ans=x(1/exp(y/z),19,反函数finverse(f):返回函数f的反函数,其中f为单值的一元数学函数finverse(f,v):若符号函数f中有多个符号变量时,对指定的符号变量v计算其反函数,20,例 求y=x2的反函数,syms x;f=x2;g=finverse(f)Warning:finverse(x2)is not unique.In sym.finverse at 46g=x(1/2)compose(f,g)ans=x,21,例 求y=tex的反函数,f=sym(t*ex)f=t*ex g=finverse(f)g=log(x/t)/log(e)g=finverse(f,t)g=t/ex,22,合并同类项collect(S,v):合并多项式S中自变量v的同类项collect(S):以findsym确定的变量合并多项式S的同类项,23,syms x f=(x3+x+1)*(x2+1)f=(x2+1)*(x3+x+1)collect(f)ans=x5+2*x3+x2+x+1,例 合并多项式 的同类项,24,例 合并多项式 的同类项,s=sym(x2+x*exp(-t)+1)*(x+exp(-t);e1=collect(s)%合并关于x的同类项系数e1=x3+(2*x2)/exp(t)+(1/exp(2*t)+1)*x+1/exp(t)e2=collect(s,exp(-t)%合并关于exp(-t)的同类项系数e2=x*(x2+1)+x/exp(2*t)+(2*x2+1)/exp(t)e3=collect(s,t)%合并关于t的同类项系数e3=(x+1/exp(t)*(x2+x/exp(t)+1),25,因式分解factor(s):符号表达式s的因式分解horner(s):符号表达式s的嵌套形式,即用多层括号的形式表示,26,例 分解因式,syms x a;f=x3-a3f=x3-a3 factor(f)ans=-(a-x)*(a2+a*x+x2),27,例 将符号矩阵表达式的各个元素分解为多个因式,syms x b;f=x3+b3 x4-1;x5-1 x6-1f=b3+x3,x4-1 x5-1,x6-1 factor(f),28,例 将多项式表示为嵌套形式,syms x;f=x6-x4-5*x3+5*x2+5*x-6f=x6-x4-5*x3+5*x2+5*x-6 horner(f)ans=x*(x*(x*(x*(x2-1)-5)+5)+5)-6,29,例 将数字1025分解为正整数之积,factor(1025)ans=5 5 41 factor(1025)?Error using=factor at 21N must be a scalar.factor(sym(1025)ans=52*41,30,其它一些函数expand(s):符号表达式s的展开numden(s):返回符号表达式s经过分式通分后的分子和分母simplify(s):利用各种形式的代数恒等式对符号表达式s进行化简simple(s):通过对符号表达式s尝试多种不同的方法(包括simplify)进行化简,以寻求符号表达式S的最简形式double(s):将符号表达式s转换为双精度浮点数,31,subs(s):用工作空间中的变量替换符号表达式s中的所有变量subs(s,new):用变量new替换符号表达式s中的自由变量subs(s,old,new):用变量new替换符号表达式S中的变量old当变量new是数值形式时,显示的结果虽然是数值,但实际上是符号变量.要强制求值,需要用vpa或eval函数vpa(s,n):将s表示为n位有效位数的符号对象digits(d):设置当前的可变算术(vpa)精度的位数为整数d位.d=digits 返回当前的可变算术精度的位数给d,32,例 将以下矩阵各元素展开,syms x y;f=exp(x+y)log(x2*y2);2(x+2)+1 sin(x+y)f=exp(x+y),log(x2*y2)2(x+2)+1,sin(x+y)expand(f)ans=exp(x)*exp(y),log(x2*y2)4*2x+1,cos(x)*sin(y)+cos(y)*sin(x),33,例 求出下列表达式的分子和分母,syms x;f=6/x2f=6/x2 n d=numden(f)n=6d=x2,f=1/x3+6/x2+12/x+8f=12/x+6/x2+1/x3+8 n d=numden(f)n=8*x3+12*x2+6*x+1d=x3,34,例 化简,syms x;f=sin(x)2+cos(x)2f=cos(x)2+sin(x)2 syms x;f=sin(x)2+cos(x)2;simplify(f)ans=1 simple(f),35,例 求表达式 在 处的值,syms x;f=(3*x3+x2-1)/(x2+1)f=(3*x3+x2-1)/(x2+1)a=subs(f,x,1)a=3/2 class(a)ans=Sym vpa(a)ans=1.5,b=subs(f)b=(3*x3+x2-1)/(x2+1)x=1x=1 b=subs(f)b=1.5000 class(b)ans=double,