《二讲Matlab符号计算12.ppt》由会员分享,可在线阅读,更多相关《二讲Matlab符号计算12.ppt(127页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、二讲Matlab符号计算12 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望参考文献:MATLAB程序设计教程程序设计教程 李海涛,邓樱 编著高等教育出版社,2002 所谓符号计算是指在运算时,无须事先对变量赋值,而将所得到结果以标准的符号形式来表示。Matlab本身并没有符号计算功能,MathWorks公司于1993年购买了著名的符号数学软件Maple的使用权,并利用Maple已有的函数库,开发了符号数学工具箱。符号运算与数值运算的区别:符号运算与数值运算的区别
2、:数值运算中必须先对变量赋值,然后才能参与运算。符号运算无须事先对独立变量赋值,运算结果以标准的 符号形式表达。符号计算是精确计算,符号计算是精确计算,可以获得任意精度的解可以获得任意精度的解;Symbolic Math Toolbox符号运算工具包通过调用Maple软件实现符号计算的。Maple软件主要功能是符号运算,它占据符号软件的主导地位。符号运算的特点:符号运算的特点:运算对象可以是没赋值的符号变量运算对象可以是没赋值的符号变量。符号计算定义在符号变量的基础上,符号表达式计算前必须定义符号变量符号表达式计算前必须定义符号变量;Matlab的符号数学工具箱的主要功能包括:符号表达式的创建
3、、符号矩阵的运算、符号表达式的化简、符号微积分、符号方程(主要指代数方程与常微分方程)的求解、符号函数绘图等。符号计算的计算速度较慢符号计算的计算速度较慢;符号计算的运算符和基本数学函数与数值计算中的运算符号计算的运算符和基本数学函数与数值计算中的运算符和基本数学函数几乎完全相同符和基本数学函数几乎完全相同。一、符号对象的创建一、符号对象的创建(一)(一)创建符号变量和表达式创建符号变量和表达式参与符号运算的对象可以是符号变量、符号表达式或符号矩阵。符号变量要先定义,后引用。符号变量要先定义,后引用。Matlab提供了两个建立符号变量的函数:sym和syms,两个函数的用法不同。sym函数函数
4、 sym函数的主要功能是创建创建单个单个符号变量符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:符号量名符号量名=sym(符号字符串符号字符串)符号字符串符号字符串可以是常量、变量、函数、表达式常量、变量、函数、表达式或方程方程。如如:f1=ax2+bx+c 二次三项式 f2=ax2+bx+c=0 方程 f3=Dy+y2=1 微分方程u 符号表达式或符号方程可以赋给符号变量,以后调用方便;也可以不赋给符号变量直接参与运算a=sym(a);b=sym(b);c=sym(c);d=sym(d);%定义4个符号变量w=10;x=5;y=-8;z=
5、11;%定义4个数值变量A=a,b;c,d%建立符号矩阵AB=w,x;y,z%建立数值矩阵Bdet(A)%计算符号矩阵A的行列式det(B)%计算数值矩阵B的行列式 使用符号变(常)量进行代数运算和数值变(常)量进行的运算是不同的。例例1 考察符号变量和数值变量的差别。例例2 定义一个符号函数 fxy=(a*x2+b*y2)/c2,分别求该函数对x、y的导数和对x的积分。a=sym(a);b=sym(b);c=sym(c);%定义符号变量x=sym(x);y=sym(y);fxy=(a*x2+b*y2)/c2;%生成符号函数 diff(fxy,x)%符号函数fxy对x求导数diff(fxy,y
6、)%符号函数fxy对y求导数 int(fxy,x)%符号函数fxy对x求积分ans=2*a*x/c2 ans=2*b*y/c2 ans=1/c2*(1/3*a*x3+b*y2*x)例例3 比较符号常数与数值在代数运算时的差别。pi1=sym(pi);k1=sym(8);%定义符号变量k2=sym(2);k3=sym(3);pi2=pi;r1=8;r2=2;r3=3;%定义数值变量sin(pi1/3)%计算符号表达式值 sin(pi2/3)%计算数值表达式值sqrt(k1)%计算符号表达式值sqrt(r1)%计算数值表达式值sqrt(k3+sqrt(k2)%计算符号表达式值sqrt(r3+sqr
7、t(r2)%计算数值表达式值ans=1/2*3(1/2)ans=0.8660 ans=2*2(1/2)ans=2.8284ans=(3+2(1/2)(1/2)ans=2.1010 符号表达式由符号变量、函数、算术运算符等组成。符号表达式的书写格式与数值表达式相同。利用单引号来生成;用sym函数建立;使用已定义的符号变量组成。建立符号表达式的方法:建立符号表达式的方法:例例4 已知一复数表达式 z=x+i*y,试求其共轭复数,并求该表达式与其共轭复数乘积的多项式。为了使乘积表达式 x2+y2非负,这里,把变量x和y定义为实数。x=sym(x,real);y=sym(x,real);若要去掉x的属
8、性,可以使用下面语句x=sym(x,unreal)将x创建为纯格式的符号变量。z=x+i*y;%定义复数表达式conj(z);%求共轭复数expand(z*conj(z)%求表达式与其共轭复数乘积的多项式ans=x2+y2 syms函数函数 函数sym一次只能定义一个符号变量,使用不方便。Matlab 提供了另一个函数syms,一次可以定义多个符号变量。syms函数的一般调用格式为:syms 符号变量名符号变量名1 符号变量名符号变量名2 符号变量名符号变量名n用这种格式定义符号变量时不要在变量名上加字符串分界符(),变量间用空格而不要用逗号分隔变量间用空格而不要用逗号分隔。U=sym(3*x
9、2+5*y+2*x*y+6)%定义符号表达式Usyms x y;%建立符号变量x、yV=3*x2+5*y+2*x*y+6%定义符号表达式V2*U-V+6%求符号表达式的值例例5 用两种方法建立符号表达式。U=3*x2+5*y+2*x*y+6V=3*x2+5*y+2*x*y+6ans=3*x2+5*y+2*x*y+12(二)(二)符号函数的生成符号函数的生成 将表达式中的自变量定义为符号变量后,赋值给符号函数名,即可生成符号函数。例如有一数学表达式:syms a b c x y%定义符号fxy=(a*x2+b*y2)/c2%生成符号函数其用符号表达式生成符号函数fxy的过程为:生成符号函数fxy
10、后,即可用于微积分等符号计算。符号表达式中变量的确定 Matlab 中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为:findsym(S,n)函数返回符号表达式S中的n个符号变量,若没有指定n,则返回 S 中的全部符号变量。在求函数的极限、导数和积分时,如果用户没有明确指定自变量,Matlab将按缺省原则确定自变量并对其进行相应微积分运算。可用可用findsym(S,1)查找系统的缺省变查找系统的缺省变量。事实上,量。事实上,Matlab 按离字符按离字符x最近原则确定缺省变量最近原则确定缺省变量例例6 查询符号函数 f=xn g
11、=sin(at+b)中的系统缺省变量。表示函数 f 中查询的 1 个系统缺省变量为 x。syms a b n t x%定义符号变量f=xn;%给定符号函数g=sin(a*t+b);findsym(f,1)%在f函数中查询1个系统缺省变量ans=x(三)(三)符号矩阵的创建符号矩阵的创建 符号矩阵也是一种符号表达式,所以前面介绍的符号表达式运算都可以在矩阵意义下进行。但应注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。用字符串直接创建符号矩阵用字符串直接创建符号矩阵例例7 A=a,2*b;3*a,0 A=a,2*b3*a,0u 模仿matlab数值矩阵的创建方法;u 每一行都要用方括
12、号括起来;每一行都要用方括号括起来;u 需保证同一列中各行元素字符串有相同的长度需保证同一列中各行元素字符串有相同的长度(较短的字符串要用空格补齐长度)。用用sym函数创建符号矩阵函数创建符号矩阵命令格式:A=sym()u 符号矩阵内容同数值矩阵:矩阵元素可以是任何不带等号的符号表达式,各矩阵元素之间用逗号或空格分隔,各行之间用分号分隔,各元素字符串的长度可以不相等各元素字符串的长度可以不相等;u 需用sym函数定义;u 需用 标识。例例8 A=sym(a,2*b;3*a,0)A=a,2*b3*a,0 注意:符号矩阵的每一行的两端都有方括号符号矩阵的每一行的两端都有方括号,这是与 Matlab
13、数值矩阵的一个重要区别。将数值矩阵转化为符号矩阵将数值矩阵转化为符号矩阵A=1/3,2.5;1/0.7,2/5A=0.3333 2.5000 1.4286 0.4000 sym(A)ans=1/3,5/210/7,2/5 函数调用格式:sym(A)例例9A=sym(1/3,5/2;10/7,2/5)eval(A)将符号矩阵转化为数值矩阵函数调用格式:eval(A)A=1/3,5/210/7,2/5ans=0.3333 2.5000 1.4286 0.4000例例10 numeric(A)或 符号矩阵的修改u 指令修改指令修改用A(,)=new 来修改:用new替换 A 中的某个元素;用A1su
14、bs(A,new)来修改:用new替换 A中的自由变量;用A1=subs(A,new,old)来修改:用new替换 A中的变量oldu 直接修改直接修改 可用、键找到所要修改的矩阵,直接修改;例例11A2=subs(A,sym(c),b)A2=a,2*c 3*a,4*c A=sym(a,2*b;3*a,0)A=a,2*b 3*a,0A(2,2)=4*bA=a,2*b 3*a,4*bsyms a x;f=a*sin(x)+5 f=a*sin(x)+5 f1=subs(f,sin(x),sym(y)f1=a*y+5f2=subs(f,a,x,2,pi/3)f2=3(1/2)+5f3=subs(f,
15、a,x,2,pi/3)f3=6.7321f4=subs(subs(f,a,2),x,0:pi/6:pi)f4=5.0000 6.0000 6.7321 7.0000 6.7321 6.0000 5.0000f5=subs(f,a,x,0:6,0:pi/6:pi)f5=5.0000 5.5000 6.7321 8.0000 8.4641 7.5000 5.0000 实际上,Matlab的符号数学工具箱提供了两个符号表达式的替换函数subexpr和subs,可以通过符号替换使表达式的输出形式简化,以得到一个简单的表达式。l 符号表达式的替换符号表达式的替换 将表达式中重复出现的字符串用变量代替将表
16、达式中重复出现的字符串用变量代替的函数为subexpr,其调用形式为:此函数用变量Sigma(字符或字符串)的值代替符号表达式S中重复出现的字符串,Y返回替换后的结果。Y,Sigma=subexpr(S,Sigma)例例12 求解并化简 3 次方程 x3+ax+1=0 的符号解。t=solve(x3+a*x+1=0)t=1/6*(-108+12*(12*a3+81)(1/2)(1/3)-2*a/(-108+12*(12*a3+81)(1/2)(1/3)-1/12*(-108+12*(12*a3+81)(1/2)(1/3)+a/(-108+12*(12*a3+81)(1/2)(1/3)+1/2*
17、i*3(1/2)*(1/6*(-108+12*(12*a3+81)(1/2)(1/3)+2*a/(-108+12*(12*a3+81)(1/2)(1/3)-1/12*(-108+12*(12*a3+81)(1/2)(1/3)+a/(-108+12*(12*a3+81)(1/2)(1/3)-1/2*i*3(1/2)*(1/6*(-108+12*(12*a3+81)(1/2)(1/3)+2*a/(-108+12*(12*a3+81)(1/2)(1/3)r,s=subexpr(t,s)r=1/6*s(1/3)-2*a/s(1/3)-1/12*s(1/3)+a/s(1/3)+1/2*i*3(1/2)*
18、(1/6*s(1/3)+2*a/s(1/3)-1/12*s(1/3)+a/s(1/3)-1/2*i*3(1/2)*(1/6*s(1/3)+2*a/s(1/3)s=-108+12*(12*a3+81)(1/2)而函数 subs 用指定符号替换符号表达式中的某一特定符号。数值运算中,所有矩阵运算操作指令都比较直观、简单。而符号运算就不同了,所有涉及符号矩阵运算的操作都有专用符号矩阵函数来进行,这些函数作用于单个的数据无意义这些函数作用于单个的数据无意义。符号矩阵的运算 symsize 求符号矩阵维数;charploy 特征多项式;inverse 逆矩阵;jordan 约当标准型;simple 符号
19、矩阵简化。u 符号矩阵运算函数:transpose(S)返回S矩阵的转置矩阵;determ(S)返回S矩阵的行列式值;colspace(S)返回S矩阵列空间的基;Q,D=eigensys(S)Q返回S矩阵的特征向量,D返回S矩阵的特征值。例例13 计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。其实,曾介绍过的许多应用于数值矩阵的函数,如diag、triu、tril、inv、det、rank、eig等,也可直接应用于符号矩阵。syms a b c;U=a,b,c;A=1,1,1;U;U.2%建立范得蒙符号矩阵det(A)%计算A的行列式值A=1,1,1 a,b,c
20、 a2,b2,c2 ans=b*c2-c*b2-a*c2+a*b2+a2*c-a2*b二、二、符号表达式运算符号表达式运算(一)(一)符号表达式的四则运算符号表达式的四则运算symadd(a,d)符号符号表达式表达式的加;的加;symsub(a,b)符号符号表达式表达式的减;的减;symmul(a,b)符号符号表达式表达式的乘;的乘;symdiv(a,b)符号符号表达式表达式的除;的除;sympow(a,b)符号符号表达式表达式的幂运算;的幂运算;symop(a,b)符号符号表达式表达式的综合运算。的综合运算。符号表达式运算的函数:例例14 符号表达式的四则运算示例。syms x y;f1=2
21、*x+x2*x-5*x+x3%符号表达式的结果为最简形式f2=2*x/(5*x)%符号表达式的结果为最简形式f3=(x+y)*(x-y)%符号表达式的结果不是x2-y2,%而是(x+y)*(x-y)f1=-3*x+2*x3 f2=2/5 f3=(x+y)*(x-y)(1)f=cos(x);g=sin(2*x);symop(f,/,g,+,f,*,g)ans=cos(x)/sin(2*x)+cos(x)*sin(2*x)(2)f=2*x2+3*x-5;g=x2+x-7;h=symadd(f,g)h=3*x2+4*x-12syms xf=2*x2+3*x-5;g=x2+x-7;h=f+gsyms
22、xf=cos(x);g=sin(2*x);f/g+f*g(1)f=2*x2+3*x-5;g=x2+x-7;例例15(2)f=cos(x);g=sin(2*x);h=3*x2+4*x-12ans=cos(x)/sin(x)+cos(x)*sin(x)该函数将符号表达式s转换为分子和分母都是整系数分子和分母都是整系数的最佳多项式,并分别存放在n与d中。(二)(二)符号表达式的分式通分符号表达式的分式通分 如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:n,d=numden(s)例例16 对表达式 进行通分。syms x yf
23、=x/y+y/x;n,d=numden(f)n=x2+y2d=y*xfactor(S)对S分解因式,S是符号表达式或符号矩阵;pretty(S)将符号表达式S按照类似书写习惯的方式显示;expand(S)对S进行展开,S是符号表达式或符号矩阵;collect(S)对S合并同类项,S是符号表达式或符号矩阵;collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。(三)(三)符号表达式的符号表达式的因式分解、展开与合并因式分解、展开与合并 Matlab 提供了符号表达式的因式分解与展开的函数,函数的调用格式为:例例17 将表达式(x9-1)分解为多个因式。syms xfactor
24、(x9-1)ans=(x-1)*(x2+x+1)*(x6+x3+1)syms xf=(x+1)5;expand(f)syms a b x y;A=2*a2*b3*x2-a*b4*x3+10*a*b6*x4,3*x*y-5*x2;4,a3-b3;factor(A)%对A的每个元素分解因式pretty(A)例例18 对符号矩阵A的每个元素分解因式。例例19 展开表达式f=(x+1)5ans=a*b3*x2*(10*b3*x2-b*x+2*a),-x*(-3*y+5*x)4,(a-b)*(a2+a*b+b2)2 3 2 4 3 6 4 2 2 a b x -a b x +10 a b x 3 y x
25、-5 x 3 3 4 a -b ans=x5+5*x4+10*x3+10*x2+5*x+1syms x t;f=x*(x*(x-6)+12)*t;collect(f)collect(f,t)例例20 对于表达式 f=x(x(x-6)+12)t,分别将自变量x和t的同类项合并。ans=t*x3-6*t*x2+12*t*xans=x*(x*(x-6)+12)*t(四)(四)符号表达式的化简符号表达式的化简Matlab提供的对符号表达式化简的函数有:syms x y;s=(x2+y2)2+(x2-y2)2;r,how=simple(s)%Matlab自动调用多种函数对s进行化简,并显示每步结果。si
26、mple(s):调用Matlab 的其他函数对表达式进行综合化简,以寻求s的最简形式,并显示化简过程。调用格式为:simplify(s):应用函数规则对s进行化简;r,how=simple(s)返回s的最简化形式,r为返回的简化形式,how为化简过程中使用的主要方法,包括simplify,radsimp,combine,collect,factor,convert,expand等。例例21 化简r=2*x4+2*y4 how=simplify(五)(五)符号表达式符号表达式嵌套形式重写嵌套形式重写将符号多项式s用嵌套形式表示,即用多层括号的形式表示。Horner函数可以实现此功能。该函数的调用
27、格式为:syms xhorner(x3-6*x2+11*x-6)horner(s)例例22 将表达式x3-6*x2+11*x-6用嵌套形式表示。ans=-6+(11+(-6+x)*x)*x(六)任意精度的数学运算(六)任意精度的数学运算 在symbolic中有三种不同的算术运算:u数值类型matlab的浮点算术运算;u有理数类型maple的精确符号运算;uvpa类型maple的任意精度算术运算。l浮点算术运算1/2+1/3 (定义输出格式format long)ans=0.83333333333333l符号运算sym(1/2)+(1/3)ans=5/6 精确解l任意精度算术运算digits(n
28、)设置可变精度,缺省16位vpa(x,n)显示可变精度计算digits(25)vpa(1/2+1/3)vpa(5/6,40)ans=.8333333333333333333333333333333333333333 a=sym(1/4,exp(1);log(3),3/7)a=1/4,exp(1)log(3),3/7vpa(a,10)ans=.2500000000,2.718281828 1.098612289,.4285714286例例23ans=.8333333333333333333333333 时域中的f(t)与它在频域中的Fourier变换F()之间存在如下关系:例例24 求函数的傅立
29、叶变换及其逆变换。(七)积分变换(七)积分变换傅立叶傅立叶(Fourier)变换变换u fourier(ft,t,x):求“时域”函数f(t)的Fourier变换F(x)u ifourier(Fx,x,t):求“频域”函数F(x)的Fourier反变换f(t)syms x t;y=abs(t);Fx=fourier(y,t,x)%求y的傅立叶变换ft=ifourier(Fx,x,t)%求Fx的傅立叶逆变换Fx=-2/x2 ft=t*(2*heaviside(t)-1)例例25 根据Fourier变换定义,用积分指令求方波脉冲 的Fourier变换。syms A t wsyms tao posi
30、tiveyt=heaviside(t+tao/2)-heaviside(t-tao/2);Yw=fourier(A*yt,t,w)Yt=ifourier(Yw,w,t)(1)求Fourier变换Yw=2*A/w*sin(1/2*tao*w)(2)用反变换验算Yt=A*(heaviside(t+1/2*tao)-heaviside(t-1/2*tao)yt3=subs(yt,tao,3)yt3=heaviside(t+3/2)-heaviside(t-3/2)Yw3=subs(Yw,A,tao,1,3)Yw3=2/w*sin(3/2*w)subplot(2,1,1)Ht=ezplot(yt3,-
31、3,3);set(Ht,Color,r,LineWidth,3)subplot(2,1,2),ezplot(Yw3)(3)曲线绘制(设tao=3,A=1)时域方波及其Fourier变换 u ilaplace(Fs,s,t):求“频域”函数F(s)的Laplace反变换f(t)例例26 计算y=x2的拉普拉斯变换及其逆变换。拉普拉斯拉普拉斯(Laplace)变换变换Laplace变换和反变换的定义为:u laplace(ft,t,s):求“时域”函数f(t)的Laplace变换F(s)syms t y s;y=t2;Fs=laplace(y,t,s)%对函数y进行拉普拉斯变换ft=ilaplac
32、e(Fs,s,t)%对函数Ft进行拉普拉斯逆变换Fs=2/s3 ft=t2 u ztrans(fn,n,z):求“时域”序列fn的Z变换Fzsyms n zfn=exp(-n);Fz=ztrans(fn,n,z)%求fn的Z变换f=iztrans(Fz,z,n)%求Fz的逆Z变换Z变换变换 当函数f(x)呈现为一个离散的数列f(n)时,数列f(n)的Z变换及其反变换的定义为:u iztrans(Fz,z,n):求“频域”序列Fz的Z反变换fn例例27 求数列 fn=e-n的Z变换及其逆变换。Fz=z/exp(-1)/(z/exp(-1)-1)f=exp(-1)n三、三、符号符号微积分微积分(一
33、)(一)符号极限符号极限limit(f,x,a,left):求符号函数f在x=a处的左极限。limit(f,x,a):求符号函数f(x)的极限值。即计算当变量x趋近于常数a时,函数f(x)的极限值;limit(f,a):求符号函数f(x)的极限值。由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,既变量x趋近于a;limit(f):求符号函数f(x)的极限值。符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况;limit(f,x,a,right):求符
34、号函数f在x=a处的右极限;函数 limit 用于求符号函数 f 的极限。系统可以根据用户要求,计算变量从不同方向趋近于指定值的极限值。例例28 求极限syms xf=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/sin(x)3;w=limit(f)w=-1/2例例29 求极限。lsyms a m x;f=(x*(exp(sin(x)+1)-2*(exp(tan(x)-1)/(x+a);limit(f,x,a)ans=(1/2*a*exp(sin(a)+1/2*a-exp(tan(a)+1)/alsyms x t;limit(1+2*t/x)(3*x),x,inf)an
35、s=exp(6*t)lsyms x;f=x*(sqrt(x2+1)-x);limit(f,x,inf,left)ans=1/2lsyms x;f=(sqrt(x)-sqrt(2)-sqrt(x-2)/sqrt(x*x-4);limit(f,x,2,right)ans=-1/2(二)(二)符号导数符号导数diff函数用于对符号表达式求导数。其一般调用格式为:diff(s):没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数。diff(s,v):以v为自变量,对符号表达式s求一阶导数。diff(s,n):按findsym函数指示的默认变量对符号表达式s求n阶导
36、数,n为正整数。diff(s,v,n):以v为自变量,对符号表达式s求n阶导数。例例30 求导数:x=sym(x);diff(sin(x2)ans=2*cos(x2)*x例例31 求函数的导数。syms a b t x y z;f=sqrt(1+exp(x);diff(f)%未指定求导变量和阶数,按缺省规则处理f=x*cos(x);diff(f,x,2)%求f对x的二阶导数diff(f,x,3)%求f对x的三阶导数ans=1/2/(1+exp(x)(1/2)*exp(x)ans=-2*sin(x)-x*cos(x)ans=-3*cos(x)+x*sin(x)f1=a*cos(t);f2=b*s
37、in(t);diff(f2)/diff(f1)%按参数方程求导公式求y对x的导数(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3%求y对x的二阶导数f=x*exp(y)/y2;diff(f,x)%z求f对x的偏导数diff(f,y)%z求f对y的偏导数f=x2+y2+z2-a2;zx=-diff(f,x)/diff(f,z)%按隐函数求导公式求z对x的偏导数zy=-diff(f,y)/diff(f,z)%按隐函数求导公式求z对y的偏导数ans=-b*cos(t)/a/sin(t)ans=-(a*sin(t)2*b+a*cos(t)2*b)/
38、a3/sin(t)3ans=exp(y)/y2 ans=x*exp(y)/y2-2*x*exp(y)/y3zx=-x/z zy=-y/z(三)(三)符号符号积分积分int(s,v,a,b):求定积分运算。a,b分别表示定积分的下限和上限。该函数求被积函数在区间a,b上的定积分。a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。当函数f关于变量x在闭区间a,b上可积时,函数返回一个定积分结果。当a,b中有一个是inf时,函数返回一个广义积分。当a,b中有一个符号表达式时,函数返回一个符号函数。符号积分由函数 int 来实现。该函数的一般调用格式为:int(s):没有指定积
39、分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分int(s,v):以v为自变量,对被积函数或符号表达式s求不定积分。例例32 求不定积分。x=sym(x);f=(3-x2)3;int(f)%求不定积分f=sqrt(x3+x4);int(f)%求不定积分g=simple(ans)%调用simple函数对结果化简ans=27*x-1/7*x7+9/5*x5-9*x3 ans=-1/48*(x3+x4)(1/2)*(-16*(x2+x)(3/2)+12*(x2+x)(1/2)*x+6*(x2+x)(1/2)-3*log(1/2+x+(x2+x)(1/2)/
40、x/(x+1)*x)(1/2)g=1/3*(x+1)*x)(1/2)*x2+1/12*(x+1)*x)(1/2)*x-1/8*(x+1)*x)(1/2)+1/16*log(1/2+x+(x+1)*x)(1/2)x=sym(x);t=sym(t);int(abs(1-x),1,2)%求定积分f=1/(1+x2);int(f,-inf,inf)%求定积分int(4*t*x,x,2,sin(t)%求定积分f=x3/(x-1)100;I=int(f,2,3)%用符号积分的方法求定积分double(I)%将上述符号结果转换为数值例例33 求定积分。ans=1/2 ans=pi ans=2*t*(sin(
41、t)2-4)I=97893129180187301565519001875382615/1192978373971185320372138406360121344 ans=0.0821例例34 计算二重不定积分syms x yF=int(int(x*exp(-x*y),x),y)F=1/y*exp(-x*y)例例35 轴的长度为10米,若该轴的线性密度计算公式是f(x)=6+0.3x千克/米(其中x为距轴的端点距离),求轴的质量syms x;f=6+0.3*x;m=int(f,0,10)m=quad(fx,0,10,1e-6)(1)符号函数积分。(2)数值积分。先建立一个函数文件 fx.m:f
42、unction fx=fx(x)fx=6+0.3*x;m=75再在MATLAB命令窗口,输入命令:m=75syms a b c z;f=pi*a*b*(c2-z2)/c2;V=int(f,z,-c,c)例例36 求椭球的体积。V=4/3*pi*a*b*csyms t;x=3*t;y=3*t2;z=2*t3;f=diff(x,y,z,t)%求x,y,z对参数t的导数g=sqrt(f*f)%计算一型积分公式中的根式部分l=int(g,t,0,1)%计算曲线c的长度例例37 求空间曲线c从点(0,0,0)到点(3,3,2)的长度。求曲线c的长度是曲线一型,命令如下:f=3,6*t,6*t2 g=3*
43、(1+4*t*conj(t)+4*t2*conj(t)2)(1/2)l=5(四)(四)级数的符号级数的符号求和求和求无穷级数的和需要符号表达式求和函数symsum,其调用格式为:symsum(s,v,n,m)其中s表示一个级数的通项,是一个符号表达式。v是求和变量,v省略时使用系统的默认变量。n和m是求和的开始项和末项。n=sym(n);s1=symsum(1/n2,n,1,inf)s2=symsum(-1)(n+1)/n,1,inf)%未指定求和变量,缺省为ns3=symsum(n*xn,n,1,inf)%此处的求和变量n不能省s4=symsum(n2,1,100)%计算有限级数的和 例例3
44、8 求级数之和。s1=1/6*pi2 s2=log(2)s3=3*t/(3*t-1)2 s4=338350(五)函数的泰勒展开(五)函数的泰勒展开 Matlab中提供了将函数展开为幂级数的函数taylor,其调用格式为:该函数将函数f按变量v展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止,n的缺省值为6。v的缺省值与diff函数相同。参数a指定将函数f在自变量v=a处展开,a的缺省值是0。taylor(f,v,n,a)例例39 求函数在指定点的泰勒展开式。ans=1+2*x+2*x2-2*x4 ans=1/6*x2+x3+119/72*x4+239/72*x5x=sym(x);f1=
45、(1+x+x2)/(1-x+x2);f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3);taylor(f1,x,5)%展开到x的4次幂时应选择n=5taylor(f2,6)x=sym(x);p=1+3*x+5*x2-2*x3;f=taylor(p,x,-1,4)例例40 将多项式表示成x+1的幂的多项式。f=-8-13*x+11*(1+x)2-2*(1+x)3x=sym(x);f=(1-x)(1/12);%定义函数,4000(1/12)=2f(96/212)g=taylor(f,4)%求f的泰勒展开式g,有4000(1/12)2g(96/212)b=96/212;a=1-b/1
46、2-11/288*b2-253/10368*b3%计算g(b)2*a%求4000(1/12)的结果4000(1/12)%用MATLAB的乘方运算直接计算例例41 应用泰勒公式近似计算4000(1/12)。g=1-1/12*x-11/288*x2-253/10368*x3 a=0.9980ans=1.9961ans=1.9961(六)函数的傅立叶级数(六)函数的傅立叶级数function mfourier=mfourier(f,n)syms x a b c;mfourier=int(f,-pi,pi)/2;%计算a0for i=1:n a(i)=int(f*cos(i*x),-pi,pi);b(
47、i)=int(f*sin(i*x),-pi,pi);mfourier=mfourier+a(i)*cos(i*x)+b(i)*sin(i*x);endreturn下述文件可以求任意函数的傅立叶级数。调用该函数时,需给出被展开的符号函数f和展开项数n,不可缺省。x=sym(x);a=sym(a);f=x;mfourier(f,5)%求f(x)=x的傅立叶级数的前5项例例42 在-,区间展开函数为傅立叶级数。f=abs(x);mfourier(f,5)%求f(x)=|x|的傅立叶级数的前5项ans=2*pi*sin(x)-pi*sin(2*x)+2/3*pi*sin(3*x)-1/2*pi*sin
48、(4*x)+2/5*pi*sin(5*x)ans=1/2*pi2-4*cos(x)-4/9*cos(3*x)-4/25*cos(5*x)f=cos(a*x);mfourier(f,6)%求f(x)=cos(ax)的傅立叶级数的前6项ans=-2*sin(pi*a)/(a2-1)*sin(x)+4*sin(pi*a)/(a2-4)*sin(2*x)-6*sin(pi*a)/(a2-9)*sin(3*x)+8*sin(pi*a)/(a2-16)*sin(4*x)ans=sin(pi*a)/a-2*a*sin(pi*a)/(a2-1)*cos(x)+2*a*sin(pi*a)/(a2-4)*cos(
49、2*x)-2*a*sin(pi*a)/(a2-9)*cos(3*x)+2*a*sin(pi*a)/(a2-16)*cos(4*x)-2*a*sin(pi*a)/(a2-25)*cos(5*x)+2*a*sin(pi*a)/(a2-36)*cos(6*x)f=sin(a*x);mfourier(f,4)%求f(x)=sin(ax)的傅立叶级数的前4项四、四、符号方程的求解符号方程的求解(一)(一)符号符号代数方程(组)的求解代数方程(组)的求解 在Matlab中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:solve(s1,s2,sn,v1,v2,vn):求解符号表达式s
50、1,s2,sn组成的代数方程组,求解变量分别为v1,v2,vn。solve(s,v):求解符号表达式s的代数方程,求解变量为vsolve(s):求解符号表达式s的代数方程,求解变量为默认变量。u 当方程组不存在符号解时,又无其他自由参数,则给出数值解。例例43 求线性方程组AX=b的解。此外,Matlab中提供了一个求解线性代数方程组求解线性代数方程组的函数linsolve,其调用格式为:linsolve(A,b)方程组符号求解符号求解的命令如下:syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3;A=a11,a12,a13;a21,a22,a2