《第3章MATLAB符号计算3.ppt》由会员分享,可在线阅读,更多相关《第3章MATLAB符号计算3.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3 3章章 MATLABMATLAB符号计算符号计算2010-9-1本章内容本章内容3.1 3.1 符号计算基础符号计算基础3.2 3.2 微分运算微分运算3.3 3.3 积分运算积分运算3.4 3.4 泰勒级数泰勒级数3.5 3.5 求解方程求解方程3.6 3.6 积分变换积分变换3.1 3.1 符号计算基础符号计算基础3.1.1 3.1.1 符号对象符号对象p符号表达式是代表数字、函数、算子和变量的符号表达式是代表数字、函数、算子和变量的MATLABMATLAB字字符串,或者字符串组;符串,或者字符串组;p符号运算是使用已知的规则和给定符号恒等式求解符号符号运算是使用已知的规则和给定符
2、号恒等式求解符号方程的实践;方程的实践;p符号变量和非符号变量区别:非符号变量参与计算之间符号变量和非符号变量区别:非符号变量参与计算之间必须赋值;而符号变量无须赋值。必须赋值;而符号变量无须赋值。1 1 建立符号变量和符号常数建立符号变量和符号常数(1)sym(1)sym函数函数 S=S=sym(Asym(A)nsymsym函数用来建立单个符号变量函数用来建立单个符号变量,例如,例如,a=sym(a)a=sym(a)建立符号变量建立符号变量a a,此后,用户可以在此后,用户可以在表达式中使用变量表达式中使用变量a a进行各种运算。进行各种运算。n定义符号常量定义符号常量 如如 pi=pi=s
3、ym(pisym(pi);a=sym(3/4)a=sym(3/4)例例3.13.1考察考察符号变量符号变量和和数值变量数值变量的差别。的差别。在在 MATLABMATLAB命令窗口,输入命令:命令窗口,输入命令:a=sym(a);b=sym(b);c=sym(c);d=sym(d);a=sym(a);b=sym(b);c=sym(c);d=sym(d);%定义定义4 4个符号变量个符号变量w=10;x=5;y=-8;z=11;%w=10;x=5;y=-8;z=11;%定义定义4 4个数值变量个数值变量A=a,b;c,d%A=a,b;c,d%建立符号矩阵建立符号矩阵A AB=w,x;y,z%B=
4、w,x;y,z%建立数值矩阵建立数值矩阵B Bdet(Adet(A)%)%计算符号矩阵计算符号矩阵A A的行列式的行列式det(Bdet(B)%)%计算数值矩阵计算数值矩阵B B的行列式的行列式例例3.2 3.2 比较比较符号常数符号常数与与数值变量数值变量在代数运算时在代数运算时的差别。的差别。在 MATLAB命令窗口,输入命令:pi1=sym(pi);k1=sym(8);k2=sym(2);kpi1=sym(pi);k1=sym(8);k2=sym(2);k3=sym(3);3=sym(3);%定义符号常数定义符号常数pi2=pi;r1=8;r2=2;r3=3;%pi2=pi;r1=8;r
5、2=2;r3=3;%定义数值变量定义数值变量sin(pi1/3)%sin(pi1/3)%计算符号表达式值计算符号表达式值 sin(pi2/3)%sin(pi2/3)%计算数值表达式值计算数值表达式值sqrt(k1)%sqrt(k1)%计算符号表达式值计算符号表达式值sqrt(r1)%sqrt(r1)%计算数值表达式值计算数值表达式值sqrt(k3+sqrt(k2)%sqrt(k3+sqrt(k2)%计算符号表达式值计算符号表达式值sqrt(r3+sqrt(r2)%sqrt(r3+sqrt(r2)%计算数值表达式值计算数值表达式值(2)syms(2)syms函数函数 symssyms用于定义多个
6、符号变量。用于定义多个符号变量。syms函数的一般调用格式为:syms var1 var2 varn 函数定义符号变量var1,var2,varn等。用这种格式定义符号变量时不要在变量名上加字符分界符(),变量间用空格而不要用逗号分隔。(3)(3)符号常量符号常量 数值常量如果作为函数命令数值常量如果作为函数命令sym()sym()的输入参量,的输入参量,即建立了一个符号对象即建立了一个符号对象-符号常量符号常量 可以用可以用class()class()函数来检测数据的类似。函数来检测数据的类似。例如:a=1/8;classa=class(a)classa=double b=1/8;class
7、b=class(a)classb=char c=sym(1/8);classc=class(a)classc=sym d=sym(1/8);classd=class(a)classd=sym2.2.建立符号表达式建立符号表达式例例3.3 3.3 用用2 2种方法建立符号表达式种方法建立符号表达式。在在MATLABMATLAB窗口,输入命令:窗口,输入命令:U=sym(3*x2+5*y+2*x*y+6)U=sym(3*x2+5*y+2*x*y+6)%定义符号表达式定义符号表达式U Usymssyms x y;%x y;%建立符号变量建立符号变量x x、y yV=3*x2+5*y+2*x*y+6V
8、=3*x2+5*y+2*x*y+6%定义符号表达式定义符号表达式V V2*U-V+6%2*U-V+6%求符号表达式的值求符号表达式的值例例3.43.4 计算计算3 3阶范得蒙矩阵行列式的值。阶范得蒙矩阵行列式的值。设设A A是一个是一个由符号变量由符号变量a,b,ca,b,c确定的范得蒙矩阵。确定的范得蒙矩阵。命令如下:命令如下:symssyms a b c;a b c;U=a,b,c;U=a,b,c;A=1,1,1;U;U.2%A=1,1,1;U;U.2%建立范得蒙符号矩阵建立范得蒙符号矩阵det(Adet(A)%)%计算计算A A的行列式值的行列式值例例3.53.5 建立建立x,yx,y的
9、一般二元函数。的一般二元函数。在MATLAB命令窗口,输入命令:syms x y;f=sym(f(x,y);(1)(1)符号表达式的代数运算符号表达式的代数运算 与矩阵运算基本一致与矩阵运算基本一致 (2)(2)符号与数值的转换:符号与数值的转换:symsym,numericnumeric,evaleval,sym2polysym2poly,poly2sympoly2symNumericNumeric,evaleval:将符号常数转换为数字或计算表达:将符号常数转换为数字或计算表达式的函数;式的函数;Sym2polySym2poly:将符号多项式变换为等价系数向量。:将符号多项式变换为等价系数
10、向量。Poly2symPoly2sym:要求用户指定用于表达式的变量(:要求用户指定用于表达式的变量(x x,y y等)等)例例3.63.6 f=sym(2*x2+7*x+9)f=sym(2*x2+7*x+9)n=sym2poly(f)n=sym2poly(f)f1=poly2sym(1 2 3,t)f1=poly2sym(1 2 3,t)3.1.2 基本的符号运算基本的符号运算(3)(3)因式分解与展开因式分解与展开factor(S):对对S分解因式,分解因式,S是符号表达式或符号矩阵。是符号表达式或符号矩阵。expand(S):对对S进行展开,进行展开,S是符号表达式或符号矩阵。是符号表达
11、式或符号矩阵。collect(S):对对S合并同类项,合并同类项,S是符号表达式或符号矩阵。是符号表达式或符号矩阵。collect(S,v):对对S按变量按变量v合并同类项,合并同类项,S是符号表达式或符是符号表达式或符 号矩阵。号矩阵。例例3.7 3.7 对符号矩阵对符号矩阵A A的每个元素分解因式。的每个元素分解因式。命令如下:命令如下:symssyms a b x y;a b x y;A=2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4,3*x*y-A=2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4,3*x*y-5*x2;4,a3-b3;5*x2;4,a3-
12、b3;factor(A)factor(A)%对对A A的每个元素分解因式的每个元素分解因式例例3.8 3.8 计算表达式计算表达式S S的值。的值。命令如下:命令如下:symssyms x y;x y;s=sym(-7*x2-8*y2)*(-x2+3*y2);s=sym(-7*x2-8*y2)*(-x2+3*y2);s1=s1=expand(sexpand(s)%)%对对s s展开展开s2=s2=collect(s,xcollect(s,x)%)%对对s s按变量按变量x x合并同类项合并同类项(无同类项无同类项)factor(s2)%factor(s2)%对对s2s2分解因式分解因式(4)(
13、4)表达式化简表达式化简MATLABMATLAB提供的对符号表达式化简的函数有:提供的对符号表达式化简的函数有:simplify(S)simplify(S)应用函数规则对应用函数规则对S S进行化简。进行化简。simple(S)simple(S)调用调用MATLABMATLAB的其他函数对表达式进的其他函数对表达式进 行综合化简,并显示化简过程。行综合化简,并显示化简过程。例例3.9化简化简命令如下:命令如下:syms x y;s=(x2+y2)2+(x2-y2)2;simple(s)%MATLAB自动调用多种函数对自动调用多种函数对s进行化简,并显示每步结果进行化简,并显示每步结果(5)(5
14、)符号变量的确定符号变量的确定nMATLABMATLAB中的符号可以表示符号变量和符号常数。中的符号可以表示符号变量和符号常数。findsymfindsym可以帮助用户查找一个符号表达式中的的可以帮助用户查找一个符号表达式中的的符号变量符号变量。该函数的调用格式为:。该函数的调用格式为:findsym(S,nfindsym(S,n)n函数返回符号表达式函数返回符号表达式S S中的中的n n个符号变量,若没有个符号变量,若没有指定指定n n,则返回则返回S S中的全部符号变量。中的全部符号变量。n在求函数的极限、导数和积分时,如果用户没有在求函数的极限、导数和积分时,如果用户没有明确指定自变量,
15、明确指定自变量,MATLABMATLAB将按缺省原则确定主变将按缺省原则确定主变量并对其进行相应微积分运算。量并对其进行相应微积分运算。n可用可用findsym(S,1)findsym(S,1)查找系统的缺省变量,查找系统的缺省变量,事实上,事实上,MATLABMATLAB按离字符按离字符xx最近原则确定缺省变量最近原则确定缺省变量。3.2 3.2 微分运算微分运算3.2.13.2.1符号表达式的极限运算符号表达式的极限运算 limitlimit函数的调用格式为:函数的调用格式为:limit(f,x,alimit(f,x,a)Limit(f,aLimit(f,a)%)%利用利用findsymf
16、indsym确定极限点确定极限点Limit(fLimit(f)%)%利用利用a=0a=0作为极限点作为极限点limitlimit函数的另一种功能是函数的另一种功能是求单边极限求单边极限,其调用格,其调用格式为:式为:limit(f,x,a,right)limit(f,x,a,right)limit(f,x,a,leftlimit(f,x,a,left)例例3.103.10求极限。求极限。在MATLAB命令窗口,输入命令:syms a m x;f=(x(1/m)-a(1/m)/(x-a);limit(f,x,a)%求极限(1)f=(sin(a+x)-sin(a-x)/x;limit(f)%求极限
17、(2)limit(f,inf)%求f函数在x(包括+和-)处的极限limit(f,x,inf,left)%求极限(3)f=(sqrt(x)-sqrt(a)-sqrt(x-a)/sqrt(x*x-a*a);limit(f,x,a,right)%求极限(4)3.2.2 3.2.2 符号函数求导及其应用符号函数求导及其应用MATLABMATLAB中的求导的函数为:中的求导的函数为:diff(f,x,ndiff(f,x,n)diff求函数求函数f对变量对变量x的的n阶导数阶导数。参数。参数x的用法的用法同求极限函数同求极限函数limit,可以缺省,缺省值与,可以缺省,缺省值与limit相同,相同,n的
18、缺省值是的缺省值是1。例例3.113.11 求函数的导数。求函数的导数。命令如下:命令如下:symssyms a b t x y z;a b t x y z;f=sqrt(1+exp(x);f=sqrt(1+exp(x);diff(f)%diff(f)%求求(1)(1)。未指定求导变量和阶数,按缺省规则处理。未指定求导变量和阶数,按缺省规则处理f=x*f=x*cos(xcos(x););diff(f,x,2)%diff(f,x,2)%求求(2)(2)。求。求f f对对x x的二阶导数的二阶导数diff(f,x,3)%diff(f,x,3)%求求(2)(2)。求。求f f对对x x的三阶导数的三
19、阶导数y=a*y=a*cos(t);xcos(t);x=b*=b*sin(tsin(t););diff(y)/diff(xdiff(y)/diff(x)%)%求求(3)(3)。按参数方程求导公式求。按参数方程求导公式求y y对对x x的导数的导数f=x*exp(y)/y2;f=x*exp(y)/y2;diff(f,x)%diff(f,x)%求求(4)(4)。z z对对x x的偏导数的偏导数diff(f,y)%diff(f,y)%求求(4)(4)。z z对对y y的偏导数的偏导数f=x2+y2+z2-a2;f=x2+y2+z2-a2;zxzx=-diff(f,x)/diff(f,z)%=-dif
20、f(f,x)/diff(f,z)%求求(5)(5)。按隐函数求导公式求。按隐函数求导公式求z z对对x x的偏导数的偏导数zyzy=-diff(f,y)/diff(f,z)%=-diff(f,y)/diff(f,z)%求求(5)(5)。按隐函数求导公式求。按隐函数求导公式求z z对对y y的偏导数的偏导数例例3.12 3.12 在曲线在曲线y=xy=x3 3+3x-2+3x-2上哪一点的切线与直线上哪一点的切线与直线y=4x-1 y=4x-1 平行。平行。命令如下:x=sym(x);y=x3+3*x-2;%定义曲线函数f=diff(y);%对曲线求导数g=f-4;solve(g)solve(g
21、)%求方程f-4=0的根,即求曲线何处的导数为43.3 3.3 积分运算积分运算3.3.1 3.3.1 不定积分不定积分 在在MATLABMATLAB中,求不定积分的函数是中,求不定积分的函数是intint,其调用格其调用格式为:式为:int(f,xint(f,x)intint函数求函数函数求函数f f对变量对变量x x的不定积分。参数的不定积分。参数x x可以可以缺省,缺省原则与缺省,缺省原则与diffdiff函数相同。函数相同。例例3.133.13求不定积分。求不定积分。命令如下:命令如下:x=sym(x);x=sym(x);f=(3-x2)3;f=(3-x2)3;int(fint(f)%
22、)%求不定积分求不定积分(1)(1)f=sqrt(x3+x4);f=sqrt(x3+x4);f1=f1=int(fint(f)%)%求不定积分求不定积分(2)(2)g=simple(f1)%g=simple(f1)%调用调用simplesimple函数对结果化简函数对结果化简3.3.2 3.3.2 定积分定积分定积分在实际工作中有广泛的应用。在定积分在实际工作中有广泛的应用。在MATLABMATLAB中,中,定积分的计算使用函数:定积分的计算使用函数:int(f,x,a,bint(f,x,a,b)例例3.14 3.14 求定积分。求定积分。命令如下:命令如下:x=x=sym(x);tsym(x
23、);t=sym(tsym(t););int(abs(1-x),1,2)int(abs(1-x),1,2)%求定积分求定积分(1)(1)f=1/(1+x2);f=1/(1+x2);int(f,-inf,infint(f,-inf,inf)%求定积分求定积分(2)(2)int(4*t*x,x,2,sin(t)int(4*t*x,x,2,sin(t)%求定积分求定积分(3)(3)f=x3/(x-1)100;f=x3/(x-1)100;I=int(f,2,3)%I=int(f,2,3)%用符号积分的方法求用符号积分的方法求 定积分定积分(4)(4)double(Idouble(I)%将上述符号结果转换
24、将上述符号结果转换 为数值为数值例例3.153.15求椭球的体积。求椭球的体积。命令如下:命令如下:symssyms a b c z;a b c z;f=pi*a*b*(c2-z2)/c2;f=pi*a*b*(c2-z2)/c2;V=V=int(f,z,-c,cint(f,z,-c,c)V=4/3*pi*a*b*cV=4/3*pi*a*b*c例例3.163.16轴的长度为轴的长度为1010米,若该轴的线性密度计算公式是米,若该轴的线性密度计算公式是f(x)=6+0.3xf(x)=6+0.3x千克千克/米米(其中其中x x为距轴的端点距离为距轴的端点距离),求轴的,求轴的质量。质量。(1)(1)
25、符号函数积分符号函数积分 在在MATLABMATLAB命令窗口,输入命令:命令窗口,输入命令:symssyms x;x;f=6+0.3*x;f=6+0.3*x;m=int(f,0,10)m=int(f,0,10)(2)(2)数值积分数值积分先建立一个函数文件先建立一个函数文件fx.mfx.m:function function fxfx=fx(xfx(x)fxfx=6+0.3*x;=6+0.3*x;再在再在MATLABMATLAB命令窗口,输入命令:命令窗口,输入命令:m=quad(fx,0,10,1e-6)m=quad(fx,0,10,1e-6)积分精度积分精度 3.4 3.4 泰勒级数泰勒
26、级数3.4.1 3.4.1 函数的泰勒级数函数的泰勒级数 MATLABMATLAB中提供了将函数展开为幂级数的函数中提供了将函数展开为幂级数的函数taylortaylor,其调用格式为:其调用格式为:taylor(f,v,n,ataylor(f,v,n,a)变量变量v v在在a a点的点的n-1n-1阶泰勒级数阶泰勒级数例例3.183.18求函数在指定点的泰勒展开式。求函数在指定点的泰勒展开式。命令如下:命令如下:x=sym(x);x=sym(x);f1=(1+x+x2)/(1-x+x2);f1=(1+x+x2)/(1-x+x2);f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/
27、3);f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3);taylor(f1,x,5)%taylor(f1,x,5)%求求(1)(1)。展开到。展开到x x的的4 4次幂次幂taylor(f2,6)%taylor(f2,6)%求求(2)(2)。例例3.193.19将多项式表示将多项式表示成成x+1x+1的幂的多项式。的幂的多项式。命令如下:命令如下:x=sym(x);x=sym(x);p=1+3*x+5*x2-2*x3;p=1+3*x+5*x2-2*x3;f=taylor(p,x,-1,4)f=taylor(p,x,-1,4)3.5 3.5 求解方程求解方程3.5.1 3.5.
28、1 求解代数方程求解代数方程函数函数solvesolve其调用格式为:其调用格式为:solve(eqn1,eqn2,eqnN,var1,var2,solve(eqn1,eqn2,eqnN,var1,var2,varNvarN)solve(p*sin(x)=r)x,y=solve(x2+x*y+y=3,x2-4*x+3=0)S=solve(a*u2+v2,u-v=1,a,u)请查阅请查阅help solve3.5.2 3.5.2 常微分方程的求解常微分方程的求解函数函数dsolvedsolvel该函数的调用格式为:该函数的调用格式为:dsolve(eqn1,condition,var)dsolv
29、e(eqn1,condition,var)该函数求解微分方程该函数求解微分方程eqn1eqn1在初值条件在初值条件conditioncondition下的下的特解特解。参。参数数varvar描述方程中的自变量符号,省略时按缺省原则处理,描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件若没有给出初值条件conditioncondition,则求方程的则求方程的通解通解。ldsolvedsolve在在求微分方程组求微分方程组时的调用格式为:时的调用格式为:solve(eqn1,eqn2,eqnN,condition1,conditisolve(eqn1,eqn2,eqnN,cond
30、ition1,conditionN,var1,onN,var1,varNvarN)函数求解微分方程组函数求解微分方程组eqn1eqn1、eqnNeqnN在初值条件在初值条件conditoion1conditoion1、conditionNconditionN下的解,若不给出初值条件,下的解,若不给出初值条件,则求方程组的通解则求方程组的通解,var1var1、varNvarN给出求解变量。给出求解变量。DsolveDsolve 参数说明参数说明参数说明参数说明n(1)Eqn 微分方程输入方法:微分方程输入方法:例:例:命令:命令:Y=dsolve(D2y-2*Dy-3*y=0,x)n(2)co
31、ndition 初始条件初始条件 y(a)=b;Dy(a)=c;D2y(a)=d;n最多可接受最多可接受12个输入参量个输入参量例例3.253.25 求微分方程的求微分方程的通解通解。命令如下:命令如下:y=dsolve(Dy-(x2+y2)/x2/2,x)%y=dsolve(Dy-(x2+y2)/x2/2,x)%解解(1)(1)。方程的右方程的右端为端为0 0时可以不写时可以不写y=y=dsolve(Dydsolve(Dy*x2+2*x*y-exp(x),x)%*x2+2*x*y-exp(x),x)%解解(2)(2)y=dsolve(Dy-x/y/sqrt(1-x2),x)%y=dsolve
32、(Dy-x/y/sqrt(1-x2),x)%解解(3)(3)例例3.263.26 求微分方程的求微分方程的特解特解。命令如下:命令如下:y=y=dsolve(Dydsolve(Dy=2*x*y2,y(0)=1,x)%=2*x*y2,y(0)=1,x)%解解(1)(1)y=dsolve(Dy-x2/(1+y2),y(2)=1,x)%y=dsolve(Dy-x2/(1+y2),y(2)=1,x)%解解(2)(2)3.6 3.6 积分变换积分变换1.1.傅立叶傅立叶(Fourier)(Fourier)变换变换 在在MATLABMATLAB中,进行傅立叶变换的函数是:中,进行傅立叶变换的函数是:fou
33、rier(fx,x,tfourier(fx,x,t)求函数求函数f(x)f(x)的傅立叶像函数的傅立叶像函数F(t)F(t)。ifourier(Fw,t,xifourier(Fw,t,x)求傅立叶像函数求傅立叶像函数F(t)F(t)的原函数的原函数f(x)f(x)。2.2.拉普拉斯拉普拉斯(Laplace)(Laplace)变换变换 在在MATLABMATLAB中,进行拉普拉斯变换的函数是:中,进行拉普拉斯变换的函数是:laplace(fx,x,tlaplace(fx,x,t)求函数求函数f(xf(x)的拉普拉斯像函数的拉普拉斯像函数F(tF(t)。ilaplace(Fw,t,xilaplac
34、e(Fw,t,x)求拉普拉斯像函数求拉普拉斯像函数F(tF(t)的原函数的原函数f(xf(x)。3.Z3.Z变换变换 对数列对数列f(nf(n)进行进行z z变换的变换的MATLABMATLAB函数是:函数是:ztrans(fn,n,zztrans(fn,n,z)求求fnfn的的Z Z变换像函数变换像函数F(zF(z)iztrans(Fz,z,niztrans(Fz,z,n)求求FzFz的的z z变换原函数变换原函数f(nf(n)例例3.293.29求函数的傅立叶变换及其逆变换。求函数的傅立叶变换及其逆变换。命令如下:命令如下:syms x t;y=abs(x);Fw=fourier(y,x,
35、w)%求y的傅立叶变换fx=ifourier(Fw,w,x)%求Ft的傅立叶逆变换命令如下:命令如下:f=exp(-x2)Ft=fourier(f)fx=ifourier(Ft)例例3.303.30计算计算y=x2y=x2的拉普拉斯变换及其逆变换的拉普拉斯变换及其逆变换.命令如下:命令如下:x=sym(x);y=x2;x=sym(x);y=x2;Ft=Ft=laplace(y,x,slaplace(y,x,s)%)%对函数对函数y y进行拉普拉斯变换进行拉普拉斯变换fxfx=ilaplace(Ft,s,xilaplace(Ft,s,x)%)%对函数对函数FtFt进行拉普拉斯逆变换进行拉普拉斯逆变换例例 求数列求数列 fn=fn=e-ne-n的的Z Z变换及其逆变换。变换及其逆变换。命令如下:命令如下:symssyms n z n zfn=exp(-n);fn=exp(-n);FzFz=ztrans(fn,n,zztrans(fn,n,z)%)%求求fnfn的的Z Z变换变换f=f=iztrans(Fz,z,niztrans(Fz,z,n)%)%求求FzFz的逆的逆Z Z变换变换
限制150内