[理学]第二讲 年数学建模竞赛培训matlab符号计算课件.ppt
第二讲 符号推演与计算,2022/12/6,Matlab与科学计算,2,引言,我们已经知道数值计算是MATLAB最强大的功能之一,但自从Mathworks公司买下了Maple的使用权以后,MATLAB将数值计算与符号计算熔为一体,成了全功能的计算软件。有关符号计算的所有功能都在符号工具箱(Symbolic Math Toolbox)中。我们可以在帮助窗口中打开该工具箱获得更详细的资料。本章将介绍如何定义一个符号数学公式,以及如何推演一个数学公式,如对一个多项式提取公因子,对一个复杂的数学表达式进行化简,以及诸如符号矩阵代数运算、符号积分运算等一系列符号的推演过程。符号运算的一个最关键的命令是syms符号定义,利用该命令我们可以定义任何一个符号公式,符号积分公式、符号矩阵公式、符号线性方程和符号微分方程等数学公式等。我们可以利用MATLAB 命令对它进行通常意义下的解析推导。,2022/12/6,Matlab与科学计算,3,有关符号推演的知识点见下图,2022/12/6,Matlab与科学计算,4,符号表达式的定义和数据转换,在MATLAB中为进行符号推演就必须区别数值表达式和符号表达式的区别。MATLAB提供了一系列按照符号推演规则下的符号命令,如定义符号、定义一个多元函数所有参数中那些是自变量那些是参数等等。当我们在符号推演的过程或结束后,希望计算函数在某些点处的值,我们有一些有关的辅助命令如vpa和subst,2022/12/6,Matlab与科学计算,5,定义符号对象的指令,一个符号表达式中,所有的参数都是符号变量或符号常量,因此必须和在计算机语言中的那些表达式有所区别。我们可以用命令sym和syms来定义符号变量和符号表达式。sym 和 syms 常用的格式如下:f = sym(expr) 把表达式expr 转换为符号对象。syms(arg1, arg2, arg3) 将他们定义为符号变量。syms arg1 arg2 arg3 为上面命令的简写形式,2022/12/6,Matlab与科学计算,6,【例1】用符号计算验证三角等式。,syms a1 a2; % 定义符号变量y=sin(a1)*cos(a2)+cos(a1)*sin(a2) % 定义符号表达式ysimple(y) % 化简,ans =sin(a1+a2),【例2】把字符表达式转换为符号变量,y=sym(2*sin(x)*cos(x) %符号变量y=simple(y) %按规则把已有的y符号表达式化成最简形式,y =2*sin(x)*cos(x)y =sin(2*x),2022/12/6,Matlab与科学计算,7,【例 3】求矩阵的行列式值、逆和特征根,syms a11 a12 a21 a22;A=a11,a12;a21,a22DA=det(A) % 计算矩阵A的行列式的值IA=inv(A) % 计算矩阵A的逆矩阵EA=eig(A) % 求矩阵的特征根系统,2022/12/6,Matlab与科学计算,8,A = a11, a12 a21, a22DA = a11*a22-a12*a21IA = a22/(a11*a22-a12*a21), -a12/(a11*a22-a12*a21) -a21/(a11*a22-a12*a21), a11/(a11*a22-a12*a21)EA = 1/2*a11+1/2*a22+1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2) 1/2*a11+1/2*a22-1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2),【例 5】验证积分,syms A t tao w;yf=int(A*exp(-i*w*t),t,-tao/2,tao/2);Yf=simple(yf),Yf = 2*A*sin(1/2*tao*w)/w,2022/12/6,Matlab与科学计算,9,符号表达式中自由变量的确定,在一个符号表达式中可能有多个符号变量,那么哪一个是自变量,哪些是符号常量则对某种运算是非常重要的. MATLAB 提供了一个 findsym 命令,可以对所有符号变量指定一定数量的自变量进行自动认定。基本语法:findsym(expr) 确定表达式 expr 中所有自由符号变量findsym(expr,n)确定expr 靠 x 最近的n个独立变量,2022/12/6,Matlab与科学计算,10,【例6】一个简单的例子,syms a x y z t % 定义符号变量 a,x,y,z,t findsym(sin(pi*t) % 确定表达式中所有符号为自由变量findsym(x+i*y-j*z,1) % 确定达式中最靠近x的变量findsym(x+i*y-j*z,2) % 式中最靠近x的两个变量findsym(x+i*y-j*z,3) % 式中最靠近x的三个变量(包括x),结果为:ans = t ans = xans = x,y ans = x,y,z,syms a b t u v x y;A=a+b*x,sin(t)+u;x*exp(-t),log(y)+v findsym(A,1) % 在矩阵A中确定x为自变量,A = a+b*x, sin(t)+u x*exp(-t), log(y)+vans = x,【例7】findsym确定自由变量是对整个矩阵进行的。,2022/12/6,Matlab与科学计算,11,符号的数值化和替代,在进行公式推导的过程中,有时我们需要将公式按某些实际参数来进行数值化表示,或在自变量取某些值时求符号公式的值,这时我们可以使用符号数值化和替换等命令。对符号求值的命令为vpa,即(Variable precision arithmetic)。语法为:R = vpa(A)R = vpa(A,d)这里A:对符号表达式A求给定精度的值。d:输出数值的有效位数,2022/12/6,Matlab与科学计算,12,【例8】求以下符号的有效位数值digits(25) % 设置vpa输出的有效数q = vpa(sin(sym(pi)/6) % 输出sin在给定点的值,这里有效位为25p = vpa(pi)w = vpa(1+sqrt(5)/2,4) % 输出函数的值,这里有效位为4q = 0.5000000000000000000000000p = 3.141592653589793238462643w = 1.618,二、符号表达式值的替换函数 对于符号表达式中的某些变量,我们可以通过使用替换命令将这些变量变成单个数据或数组,从而让整个符号表达式变成具体的数字,这样我们就可以先推导再计算了。符号替换命令为:,2022/12/6,Matlab与科学计算,13,R = subs(S) R = subs(S,old,new) 其中subs(S):式中所有的变量均用内存中工作数组相应的变量替换。subs(S,old,new): 将符号表达式S中的某些“老的符号变量”替换成“新变量或数值数组。,【例9】求解常微分方程 的通解, 并用C1=3,a=50替换解的变量,y = dsolve(Dy = -a*y) % 求微分方程的通解a =50;C1=3;y = C1*exp(-a*t),subs(y) % 进行参数的替换ans = 3*exp(-50*t),2022/12/6,Matlab与科学计算,14,【例10】以“新”替换“老”, 将表达式中的a替换为4subs(a+b,a,4)ans = 4+b,(4)将符号乘用矩阵乘替换subs(x*y,x,y,0 1;-1 0,1 -1;-2 1) ans = 0 -1 2 0,(2) 将表达式中的老符号用新符号替换。subs(cos(a)+sin(b),a,b,sym(alpha),2)ans = cos(alpha)+sin(2),(3)将符号表达式中的参数进行大量的数据替换subs(exp(a*t),a,-magic(2) % 将参数用22的魔方数组替换ans = exp(-t), exp(-3*t) exp(-4*t), exp(-2*t),2022/12/6,Matlab与科学计算,15,微积分中的符号运算,微积分中可以进行极限、导数、微分、积分、级数展开等解析运算,也可以进行多元函数的微积分运算,结合图形的显示可以更好地帮助我们理解空间微积分的概念和计算。,2022/12/6,Matlab与科学计算,16,求极限,求极限即对表达式进行求极限,首先是定义符号表达式,然后对表达式进行极限运算。极限运算的命令语法为:,2022/12/6,Matlab与科学计算,17,【例11】求极限的简单例子,syms x a t h; limit(sin(x)/x) % 当x趋于0(系统内定极限点为0)limit(1/x,x,0,right) % 1/x趋于0的右极限limit(1/x,x,0,left) % 1/x趋于0的左极限limit(sin(x+h)-sin(x)/h,h,0) v = (1 + a/x)x, exp(-x);limit(v,x,inf,left) % 函数v自变量x趋于无穷大时的左极限,ans =1 ans =infans =-infans =cos(x)ans = exp(a), 0,2022/12/6,Matlab与科学计算,18,syms x yf=(exp(x)+exp(y)/(cos(x)-sin(y);limit(limit(f,x,0),y,0)limit(limit(f,y,0),x,0),ans=2,2022/12/6,Matlab与科学计算,19,导数,diff(S) 求函数 S的导数diff(S,v) 对函数 S中的符号v进行求导运算diff(S,n) 求函数 S的n阶导数diff(S,v,n) 对函数 S中的符号v求n阶导数,2022/12/6,Matlab与科学计算,20,syms x tdiff(sin(x2)+x*t,x)diff(sin(x2)+x*t,t)ans = 2*cos(x2)*x+tans = x,2022/12/6,Matlab与科学计算,21,clearsyms x yf=log(exp(2*(x+y2)+(x2+y)+sin(1+x2);fx=diff(f,x)fy=diff(f,y)fxy=diff(fx,y)fyx=diff(fy,x)fxx=diff(fx,x)fyy=diff(fy,y)fxx=diff(f,x,2) fyy=diff(f,y,2),2022/12/6,Matlab与科学计算,22,fx =(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)fy =(4*y*exp(2*x+2*y2)+1)/(exp(2*x+2*y2)+x2+y+sin(1+x2)fxy =8*y*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)2*(4*y*exp(2*x+2*y2)+1)fyx =8*y*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)/(exp(2*x+2*y2)+x2+y+sin(1+x2)2*(4*y*exp(2*x+2*y2)+1),2022/12/6,Matlab与科学计算,23,fxx=(4*exp(2*x+2*y2)+2-4*sin(1+x2)*x2+2*cos(1+x2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2fyy=(4*exp(2*x+2*y2)+16*y2*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(4*y*exp(2*x+2*y2)+1)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2fxx=(4*exp(2*x+2*y2)+2-4*sin(1+x2)*x2+2*cos(1+x2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(2*exp(2*x+2*y2)+2*x+2*cos(1+x2)*x)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2fyy=(4*exp(2*x+2*y2)+16*y2*exp(2*x+2*y2)/(exp(2*x+2*y2)+x2+y+sin(1+x2)-(4*y*exp(2*x+2*y2)+1)2/(exp(2*x+2*y2)+x2+y+sin(1+x2)2,2022/12/6,Matlab与科学计算,24,【例15】求,syms a t x;f=a,t3;t*cos(x), log(x);df=diff(f) %求矩阵f对x的导数dfdt2=diff(f,t,2) %求矩阵f对t的二阶导数dfdxdt=diff(diff(f,x),t) %求二阶混合导数,2022/12/6,Matlab与科学计算,25,df = 0, 0 -t*sin(x), 1/x,dfdt2 = 0, 6*t 0, 0,dfdxdt = 0, 0 -sin(x), 0,二、求偏导数的jacobian命令 设列向量每一个分量w,v为自变量x,y的函数,即则jacobian命令计算矩阵Jacobian命令的一般形式为: J = jacobian(w;v,x,y),2022/12/6,Matlab与科学计算,26,【例16】直角坐标系转化为球形坐标,即, 这里,为编程方便两个角度分别用l和f来表示syms r l f % 定义符号变量x = r*cos(l)*cos(f); y = r*cos(l)*sin(f); z = r*sin(l);J = jacobian(x; y; z, r l f) % 注意列向量和行向量,2022/12/6,Matlab与科学计算,27,J = cos(l)*cos(f), -r*sin(l)*cos(f), -r*cos(l)*sin(f) cos(l)*sin(f), -r*sin(l)*sin(f), r*cos(l)*cos(f) sin(l), r*cos(l), 0,对矩阵进行简化: Det_J = simple(det(J) % 利用simple变命令进行简化 Det_J = -cos(l)*r2,2022/12/6,Matlab与科学计算,28,符号积分,符号积分包括不定积分和定积分,其语法分别为:R = int(S)R = int(S,v)R = int(S,a,b)R = int(S,v,a,b),其中:S: 为符号表达式,可有多个参数v: 以S中对v进行求积分运算a: 为定积分下限b: 为定积分上限,2022/12/6,Matlab与科学计算,29,【例18】几个简单的例子syms x t alpha zint(-2*x/(1+x2)2) % 计算不定积分int(x/(1+z2), z) % 以z为自变量计算不定积分int(x*log(1+x), 0, 1) % 计算积分限为0,1的定积分int(2*x, sin(t), 1) % 计算积分限为sin(t),1 的定积分int(exp(t), exp(alpha*t),ans = 1/(1+x2)ans = x*atan(z)ans = 1/4ans = 1-sin(t)2ans = exp(t), 1/alpha*exp(alpha*t),2022/12/6,Matlab与科学计算,30,int函数可以求广义积分,方法是将相应的积分限改为正(负)无穷。,sym x;int(1/x,1,inf) sym x;v= int(1/(1+x2),1,inf) vpa(v),ans =Infv =1/4*pians =.78539816339744830961566084581988,2022/12/6,Matlab与科学计算,31,【例19】 对符号矩阵进行积分,即对矩阵的每一个元素进行积分。syms xn=4A = x.(0:n)*(0:n) % 产生符号矩阵AD = diff(log(A) % 对符号矩阵A进行函数log运算并求导Int_A=int(A) % 对矩阵进行积分,A = 1, 1, 1, 1, 1 1, x, x2, x3, x4 1, x2, x4, x6, x8 1, x3, x6, x9, x12 1, x4, x8, x12, x16,D = 0, 0, 0, 0, 0 0, 1/x, 2/x, 3/x, 4/x 0, 2/x, 4/x, 6/x, 8/x 0, 3/x, 6/x, 9/x, 12/x 0, 4/x, 8/x, 12/x, 16/x,2022/12/6,Matlab与科学计算,32,Int_A = x, x, x, x, x x, 1/2*x2, 1/3*x3, 1/4*x4, 1/5*x5 x, 1/3*x3, 1/5*x5, 1/7*x7, 1/9*x9 x, 1/4*x4, 1/7*x7, 1/10*x10, 1/13*x13 x, 1/5*x5, 1/9*x9, 1/13*x13, 1/17*x17,【例20】求积分,syms x y zF2=int(int(int(x2+y2+z2,z,sqrt(x*y),x2*y),y,sqrt(x),x2),x,1,2)VF2=vpa(F2) % 积分结果用32位数字表示,F2 =1610027357/6563700-6072064/348075*2(1/2)+14912/4641*2(1/4)+64/225*2(3/4)VF2 = 224.92153573331143159790710032805,2022/12/6,Matlab与科学计算,33,Taylor展式,泰勒展式命令语法为:r = taylor(f)r = taylor(f,n,v)r = taylor(f,n,v,a)其中f:被展开函数,如没有其他参数表示系统内定在0点展开v:对变量v进行泰勒展开n:取展式的前n项,系统默认阶数为5a:在a点展开,若不给出,系统内定为在0展开,2022/12/6,Matlab与科学计算,34,【例21】对函数进行各种泰勒展开syms xtaylor(exp(x) % 对函数在0点展开,并取阶数为5(系统内定)taylor(exp(x), 7) % 对函数在0点展开,取前7项taylor(exp(x), 3, 2) % 对函数在2点展开,并取前3项ans = 1+x+1/2*x2+1/6*x3+1/24*x4+1/120*x5ans = 1+x+1/2*x2+1/6*x3+1/24*x4+1/120*x5+1/720*x6ans = exp(2)+exp(2)*(x-2)+1/2*exp(2)*(x-2)2,2022/12/6,Matlab与科学计算,35,【例22】对多元函数进行各种泰勒展开syms x ytaylor(exp(x+y) % 对x在x=0 处展开,x的阶数为5taylor(exp(x+y),y,3) % 对y在 y=0处展开,y的项数为3ans = exp(y)+exp(y)*x+1/2*exp(y)*x2+1/6*exp(y)*x3+1/24*exp(y)*x4+1/120*exp(y)*x5ans = exp(x)+exp(x)*y+1/2*exp(x)*y2,2022/12/6,Matlab与科学计算,36,符号求和,符号级数求和的命令语法为:r = symsum(s)r = symsum(s,v)r = symsum(s,a,b)r = symsum(s,v,a,b)其中:s:为含变量k的表达式v:对表达式s中的变量v求和b:对表达式中变量k从a到b求和,2022/12/6,Matlab与科学计算,37,【例23】几个简单的求和的例子syms k n xsymsum(k2) % 对序列到k项求和ans = 1/3*k3-1/2*k2+1/6*ksymsum(k2, 0, 10) % 从0项到10项求和ans = 385symsum(xk/sym(k!), k, 0, inf) ans = exp(x),当Matlab求不出级数的和时会给出求和形式,如求,时,运行symsum命令时会显示,Sum(-1)n*sin(n)/(1+n2),n=1,inf),如何某个级数是否绝对收敛?,2022/12/6,Matlab与科学计算,38,quiver3函数,向量作图函数,语法为:quiver3(X,Y,Z,U,V,W)quiver3(Z,U,V,W)quiver3(.,scale)quiver3(.,LineSpec)quiver3(.,LineSpec,filled)这里X,Y,Z为空间的点的坐标,它们为同维数组。U,V,W为相应点的方向向量,Scale:为方向向量的长度。,2022/12/6,Matlab与科学计算,39,【例24】我们来考虑一个综合题,对给定空间曲线的某一点,求该点的切线和法平面并作图,首先用解析推导得曲线上点的切线方向、和以该点为法线的法平面。然后用替换命令求某一点的法线和法向量,再作图。syms t x y z % 说明符号变量x=2*sin(t); y=2*cos(t); z=4*t; % 定义一条空间曲线w=x;y;z; % 建立参数坐标v=jacobian(w,t); % 求曲线在各点的切线方向t=pi/4; % 确定固定点v0=subs(v); % 求该点的切线方向w0=subs(w); % 求该点的坐标t0=pi/4; syms t x1 y1 % 准备建立点的法线和平面F=w0+v0.*(t-t0) % 建立该点的切线方程Z=-(v0(1)*(x1-w0(1)+v0(2)*(y1-w0(2)/v0(3)+w0(3) % 建立该点的法平面ezplot3(w(1),w(2),w(3),0,2*pi),hold on % 作空间曲线ezmesh(Z),hold on % 作法平面quiver3(w0(1),w0(2),w0(3),v0(1),v0(2),v0(3),1,r),hold on %作法线plot3(w0(1),w0(2),w0(3),r.,markersize,30) % 作该固定点为红色大点axis equalaxis(-2,2,-2,2,0,5)hidden offaxis off,2022/12/6,Matlab与科学计算,40,2022/12/6,Matlab与科学计算,41,【例25】对给定曲面 ,求曲面上给定点的切面以及平面的法线。并作图形。解:空间平面的方程为:,这里 为曲面上的一点。,为该点的方向导数,解题思路为:1)在曲面的某点上用jacobian函数求该点上的方向导数,利用空间平面公式作图。2)利用quiver3函数作法向量本题的程序为:,2022/12/6,Matlab与科学计算,42,syms z x y z=x2+y2ezmesh(z,-1.2,1.2);hold onaxis equalj=jacobian(z)x=0.5;y=0.3;x0=x;y0=y;z0=subs(z)z_xy=subs(j)quiver3(x0,y0,z0,z_xy(1),z_xy(2),-1,30,b)hold onplot3(x0,y0,z0,r.,markersize,30) hold onsyms x yZ=z_xy(1)*(x-x0)+z_xy(2)*(y-y0)+z0 ezmesh(Z,-1.2,1.2),2022/12/6,Matlab与科学计算,43,2022/12/6,Matlab与科学计算,44,矩阵代数中的符号计算,矩阵代数中的符号计算包括对矩阵进行各种四则运算、求矩阵的行列式、矩阵的逆、矩阵的谱分解以及求线性方程组的解等。部分命令和含义如下,2022/12/6,Matlab与科学计算,45,注意:有些命令如求矩阵模norm,求矩阵的条件数cond不能用在符号矩阵中,trace | 求矩阵A的迹,2022/12/6,Matlab与科学计算,46,【例29】 计算矩阵的秩syms a11 a12 a13 a21 a22 a23 x yA=a11, a12; a21, a22;% 这是一个满秩矩阵rank(A),ans = 2,B=a11, a11; a22, a22;% 第一行的元素相同,第二行的元素也相同rank(B),ans = 1,2022/12/6,Matlab与科学计算,47,C=magic(6) % 产生6阶魔方矩阵rank(sym(C),C = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11ans = 5从而我们知道n阶的魔方矩阵的秩为n-1,2022/12/6,Matlab与科学计算,48,【例30】 求矩阵 的上三角阵和下三角 阵。,syms a11 a12 a13 a21 a22 a23 a31 a32 a33 x y % 定义符号A=a11 a12 a13; a21 a22 a23;a31 a32 a33 % 定义符号矩阵rank(A)tril(A) % 求矩阵A的下三角阵triu(A) % 求矩阵A的上三角阵triu(A,1) % 求矩阵A的上次对角线上三角阵triu(A,-1) % 求矩阵A的下次对角线上三角阵,2022/12/6,Matlab与科学计算,49,ans = a11, 0, 0 a21, a22, 0 a31, a32, a33,ans = a11, a12, a13 0, a22, a23 0, 0, a33,ans = 0, a12, a13 0, 0, a23 0, 0, 0,ans = a11, a12, a13 a21, a22, a23 0, a32, a33,2022/12/6,Matlab与科学计算,50,求解线性方程组求解线性方程或方程组解的命令为solve,其语法为:g = solve(eq)g = solve(eq,var)g = solve(eq1,eq2,.,eqn)g = solve(eq1,eq2,.,eqn,var12,var2,.,varn)其中eq:为字符串方程,如果仅有表达式,则表示该表达式等于0。var:表示方程中的变量。,(例26) 求 的解,syms x a b ceq=a*x2+b*x+csolve(eq, x),2022/12/6,Matlab与科学计算,51,(2)求线性方程组,S = solve(x + y = 1,x - 4*y = 2) % 结果为构架数组disp(S.x = ), disp(S.x) % 显示x解disp(S.y = ), disp(S.y) % 显示y解,S.x = 6/5S.y = -1/5,2022/12/6,Matlab与科学计算,52,(3) 求关于 变量x,y的解,S=solve(a*x2+b*y+w=0,x+y+w=0,x,y) disp(S.x = ), disp(S.x) disp(S.y = ), disp(S.y),S.x = -1/2/a*(-2*a*w-b+(4*a*w*b+b2-4*a*w)(1/2)-w -1/2/a*(-2*a*w-b-(4*a*w*b+b2-4*a*w)(1/2)-w S.y = 1/2/a*(-2*a*w-b+(4*a*w*b+b2-4*a*w)(1/2),2022/12/6,Matlab与科学计算,53,符号表达式的操作命令,对符号表达式的操作,就象我们平时在数学课上对多项式的推演一样。这里包括多项式的加、减、乘、除,对多项式的化简等等。,2022/12/6,Matlab与科学计算,54,基本的操作命令如下:collect(expr,v) 对以 v 为表达式的同幂项进行合并expand(expr) 对expr如多项式、三角函数等函数进行展开factor(expr) 对表达式、整数进行因式分解horner(expr ) 把多项式分解为嵌套形式simlify(expr) 将 expr 进行简化simple(expr) 将 expr 化成最简单的形式pretty(expr) 以习惯的书写方式显示表达式,多项式的基本操作,2022/12/6,Matlab与科学计算,55,【例27】按不同的方式合并同幂项。EXPR=sym(x2+x*exp(-t)+1)*(x+exp(-t);expr1=collect(EXPR) % 默认合并x同幂项系数expr2=collect(EXPR,exp(-t) % 合并exp(-t)同幂项expr1 =x3+2*exp(-t)*x2+(1+exp(-t)2)*x+exp(-t)expr2 =x*exp(-t)2+(2*x2+1)*exp(-t)+(x2+1)*x,2022/12/6,Matlab与科学计算,56,【例28】利用factor命令将以下多项式变为因子相乘的形式syms x y a bfactor(x3-y3) factor(a2-b2, a3+b3)factor(sym(123450),ans = (x-y)*(x2+x*y+y2)ans = (a-b)*(a+b), (a+b)*(a2-a*b+b2)ans = (2)*(3)*(5)2*(823),【例30】利用horner命令对表达式进行嵌套型分解clear;syms x yhorner(x3-6*x2+11*x-6) horner(x2+x;y3-2*y),ans = -6+(11+(-6+x)*x)*xans = (x+1)*x (-2+y2)*y,2022/12/6,Matlab与科学计算,57,【例31】利用numden命令将表达式的分子和分母化简为不可约的形式并通n,d = numden(sym(6/30) % 化简n1,d1 = numden(x/y + y/x) % 通分运算n2,d2 = numden(1/(x-y)+1/(x+y) % 通分运算,n = 1d = 5n1 = x2+y2d1 = x*yn2 = 2*xd2 = (x-y)*(x+y),2022/12/6,Matlab与科学计算,58,【例32】简化,(1)运用simplify简化(即使多次运用simplify也不能得到最简形式。)syms x;f=(1/x3+6/x2+12/x+8)(1/3);sfy1=simplify(f)sfy2=simplify(sfy1) sfy1 = (2*x+1)3/x3)(1/3)sfy2 = (2*x+1)3/x3)(1/3),(2)运用simple简化g1=simple(f),g2=simple(g1),g1 =(2*x+1)/xg2 = 2+1/x,2022/12/6,Matlab与科学计算,59,【例33】简化syms x;ff=cos(x)+sqrt(-sin(x)2);ssfy1=simplify(ff)ssfy2=simplify(ssfy1),ssfy1 = cos(x)+(-sin(x)2)(1/2)ssfy2 = cos(x)+(-sin(x)2)(1/2),gg1=simple(ff);gg2=simple(gg1) ;,gg1 = cos(x)+i*sin(x)gg2 = exp(i*x),2022/12/6,Matlab与科学计算,60,求函数的反函数,求函数的反函数命令为finverse,其语法为:g = finverse(f),求以x为自变量的函数f的反函数g = finverse(f,v),求以v为自变量的函数f的反函数例:finverse(1/tan(x)Ans=atan(1/x)finverse(exp(u-2*v),u)Ans=2*v+log(u),2022/12/6,Matlab与科学计算,61,【例34】求 的反函数syms x f=sin(x)ezplot(f,0,3),hold onezplot(finverse(f),0,3),求复合函数命令compose符合函数命令语法为:compose(f,g)compose(f,g,z)compose(f,g,x,z)compose(f,g,x,y,z)设函数,则compose(f,g)的结果为,f(g(y),2022/12/6,Matlab与科学计算,62,求函数的复合函数,求复合函数命令compose compose,命令语法为:compose(f,g)f = f(x), g = g(y), compose(f,g) 返回 f(g(y)compose(f,g,z)f = f(x), g = g(y), compose(f,g,z) 返回 f(g(z)compose(f,g,x,z)返回f(g(z),x是函数f的自由变量,如 f = cos(x/t), compose(f,g,x,z) 返回 cos(g(z)/t) ,而 compose(f,g,t,z) 返回cos(x/g(z).compose(f,g,x,y,z)返回 f(g(z), x,y分别是函数f和g的自由变量, 如 f = cos(x/t) , g = sin(y/u), compose(f,g,x,y,z) 返回 cos(sin(z/u)/t) 而 compose(f,g,x,u,z) 返回 cos(sin(y/z)/t).,2022/12/6,Matlab与科学计算,63,syms x y z t u;f = 1/(1 + x2); g = sin(y); h = xt;p = exp(-y/u);compose(f,g) compose(f,g,t) compose(h,g,x,z)compose(h,g,t,z)compose(h,p,x,y,z) compose(h,p,t,u,z),ans = 1/(1+sin(y)2)ans = 1/(1+sin(t)2)ans = sin(z)tans = xsin(z)ans = exp(-z/u)tans = xexp(-y/z),2022/12/6,Matlab与科学计算,64,单变量符号函数计算器,使用funtool函数来调用图示化单变量符号函数计算器,2022/12/6,Matlab与科学计算,65,泰勒级数逼近计算器,使用taylortool函数来调用图示化泰勒级数逼近计算器,2022/12/6,Matlab与科学计算,66,符号微分方程的解,符号求解命令dsolve求常微分方程的通解、具有初始条件或边界条件的解以及常微分方程组的解。其基本语法为:r = dsolve(eq1,eq2,., cond1,cond2,., v)r = dsolve(eq1,eq2,.,cond1,cond2,.,v)eqi表示某个微分方程,若有多个即是求解微分方程组的解。condi: 表示某个条件如初始条件或边界条件。v:表示按该自变量求解,其他变量为参数。在符号求解微分方程的解时函数的导数用D来表示,如y用Dy,而y用D2y。并不是所有的情况都可以求出解析解的,如果不能求解析解可以用前面介绍的微分方程的数值解方法来求解。,2022/12/6,Matlab与科学计算,67,【例36】求 , 的通解, 的全解。,dsolve(Dy = a*y)% 注意D的表达意义dsolve(Df = f + sin(t)dsolve(Dy)2 + y2 = 1,s)% 注意有四个解,ans = C1*exp(a*t)ans = -1/2*cos(t)-1/2*sin(t)+exp(t)*C