资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,3,章,MATLAB,符号计算,2010-9-1,本章内容,3.1,符号计算基础,3.2,微分运算,3.3,积分运算,3.4,泰勒级数,3.5,求解方程,3.6,积分变换,3.1,符号计算基础,3.1.1,符号对象,符号表达式是代表数字、函数、算子和变量的,MATLAB,字符串,或者字符串组;,符号运算是使用已知的规则和给定符号恒等式求解符号方程的实践;,符号变量和非符号变量区别:非符号变量参与计算之间必须赋值;而符号变量无须赋值。,1,建立符号变量和符号常数,(1)sym,函数,S=,sym(A,),sym,函数用来建立单个符号变量,,例如,,a=sym(a),建立符号变量,a,,,此后,用户可以在表达式中使用变量,a,进行各种运算。,定义符号常量,如,pi=,sym(pi,),;,a=sym(3/4),例,3.1,考察,符号变量,和,数值变量,的差别。,在,MATLAB,命令窗口,输入命令:,a=sym(a);b=sym(b);c=sym(c);d=sym(d);%,定义,4,个符号变量,w=10;x=5;y=-8;z=11;%,定义,4,个数值变量,A=a,b;c,d%,建立符号矩阵,A,B=w,x;y,z%,建立数值矩阵,B,det(A,)%,计算符号矩阵,A,的行列式,det(B,)%,计算数值矩阵,B,的行列式,例,3.2,比较,符号常数,与,数值变量,在代数运算时的差别。,在,MATLAB,命令窗口,输入命令:,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+sqrt(r2)%,计算数值表达式值,(2)syms,函数,syms,用于定义多个符号变量。,syms,函数的一般调用格式为:,syms,var1 var2,varn,函数定义符号变量,var1,var2,varn,等。用这种格式定义符号变量时不要在变量名上加字符分界符,(),,,变量间用空格而不要用逗号分隔。,(3),符号常量,数值常量如果作为函数命令,sym(),的输入参量,即建立了一个符号对象,-,符号常量,可以用,class(),函数来检测数据的类似。,例如:,a=1/8;,classa,=,class(a,),classa,=double,b=1/8;,classb,=,class(a,),classb,=char,c=sym(1/8);,classc,=,class(a,),classc,=sym,d=sym(1/8);,classd,=,class(a,),classd,=sym,2.,建立符号表达式,例,3.3,用,2,种方法建立符号表达式,。,在,MATLAB,窗口,输入命令:,U=sym(3*x2+5*y+2*x*y+6),%,定义符号表达式,U,syms,x y;%,建立符号变量,x,、,y,V=3*x2+5*y+2*x*y+6,%,定义符号表达式,V,2*U-V+6%,求符号表达式的值,例,3.4,计算,3,阶范得蒙矩阵行列式的值。,设,A,是一个由符号变量,a,b,c,确定的范得蒙矩阵。,命令如下:,syms,a b c;,U=a,b,c;,A=1,1,1;U;U.2%,建立范得蒙符号矩阵,det(A,)%,计算,A,的行列式值,例,3.5,建立,x,y,的一般二元函数。,在,MATLAB,命令窗口,输入命令:,syms,x y;,f=,sym(f(x,y,);,(1),符号表达式的代数运算 与矩阵运算基本一致,(2),符号与数值的转换:,sym,,,numeric,,,eval,,,sym2poly,,,poly2sym,Numeric,,,eval,:将符号常数转换为数字或计算表达式的函数;,Sym2poly,:将符号多项式变换为等价系数向量。,Poly2sym,:要求用户指定用于表达式的变量(,x,,,y,等),例,3.6,f=sym(2*x2+7*x+9),n=sym2poly(f),f1=poly2sym(1 2 3,t),3.1.2,基本的符号运算,(3),因式分解与展开,factor(S,):,对,S,分解因式,,S,是符号表达式或符号矩阵。,expand(S,):,对,S,进行展开,,S,是符号表达式或符号矩阵。,collect(S,):,对,S,合并同类项,,S,是符号表达式或符号矩阵。,collect(S,v,):,对,S,按变量,v,合并同类项,,S,是符号表达式或符,号矩阵。,例,3.7,对符号矩阵,A,的每个元素分解因式。,命令如下:,syms,a b x y;,A=2*a2*b3*x2-4*a*b4*x3+10*a*b6*x4,3*x*y-5*x2;4,a3-b3;,factor(A),%,对,A,的每个元素分解因式,例,3.8,计算表达式,S,的值。,命令如下:,syms,x y;,s=sym(-7*x2-8*y2)*(-x2+3*y2);,s1=,expand(s,)%,对,s,展开,s2=,collect(s,x,)%,对,s,按变量,x,合并同类项,(,无同类项,),factor(s2)%,对,s2,分解因式,(4),表达式化简,MATLAB,提供的对符号表达式化简的函数有:,simplify(S),应用函数规则对,S,进行化简。,simple(S),调用,MATLAB,的其他函数对表达式进,行综合化简,并显示化简过程。,例,3.9,化简,命令如下:,syms,x y;,s=(x2+y2)2+(x2-y2)2;,simple(s,)%MATLAB,自动调用多种函数对,s,进行化简,并显示每步结果,(5),符号变量的确定,MATLAB,中的符号可以表示符号变量和符号常数。,findsym,可以帮助用户查找一个符号表达式中的的,符号变量,。该函数的调用格式为:,findsym(S,n,),函数返回符号表达式,S,中的,n,个符号变量,若没有指定,n,,,则返回,S,中的全部符号变量。,在求函数的极限、导数和积分时,如果用户没有明确指定自变量,,MATLAB,将按缺省原则确定主变量并对其进行相应微积分运算。,可用,findsym(S,1),查找系统的缺省变量,,事实上,,MATLAB,按离字符,x,最近原则确定缺省变量,。,3.2,微分运算,3.2.1,符号表达式的极限运算,limit,函数的调用格式为:,limit(f,x,a,),Limit(f,a,)%,利用,findsym,确定极限点,Limit(f,)%,利用,a=0,作为极限点,limit,函数的另一种功能是,求单边极限,,其调用格式为:,limit(f,x,a,right),limit(f,x,a,left,),例,3.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)%,求极限,(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,符号函数求导及其应用,MATLAB,中的求导的函数为:,diff(f,x,n,),diff,求函数,f,对变量,x,的,n,阶导数,。参数,x,的用法同求极限函数,limit,,可以缺省,缺省值与,limit,相同,,n,的缺省值是,1,。,例,3.11,求函数的导数。,命令如下:,syms,a b t x y z;,f=sqrt(1+exp(x);,diff(f)%,求,(1),。未指定求导变量和阶数,按缺省规则处理,f=x*,cos(x,);,diff(f,x,2)%,求,(2),。求,f,对,x,的二阶导数,diff(f,x,3)%,求,(2),。求,f,对,x,的三阶导数,y=a*,cos(t);x,=b*,sin(t,);,diff(y)/diff(x,)%,求,(3),。按参数方程求导公式求,y,对,x,的导数,f=x*exp(y)/y2;,diff(f,x)%,求,(4),。,z,对,x,的偏导数,diff(f,y)%,求,(4),。,z,对,y,的偏导数,f=x2+y2+z2-a2;,zx,=-diff(f,x)/diff(f,z)%,求,(5),。按隐函数求导公式求,z,对,x,的偏导数,zy,=-diff(f,y)/diff(f,z)%,求,(5),。按隐函数求导公式求,z,对,y,的偏导数,例,3.12,在曲线,y=x,3,+3x-2,上哪一点的切线与直线,y=4x-1,平行。,命令如下:,x=sym(x);,y=x3+3*x-2;%,定义曲线函数,f=diff(y);%,对曲线求导数,g=f-4;,solve(g),%,求方程,f-4=0,的根,即求曲线何处的导数为,4,3.3,积分运算,3.3.1,不定积分,在,MATLAB,中,求不定积分的函数是,int,,,其调用格式为:,int(f,x,),int,函数求函数,f,对变量,x,的不定积分。参数,x,可以缺省,缺省原则与,diff,函数相同。,例,3.13,求不定积分。,命令如下:,x=sym(x);,f=(3-x2)3;,int(f,)%,求不定积分,(1),f=sqrt(x3+x4);,f1=,int(f,)%,求不定积分,(2),g=simple(f1)%,调用,simple,函数对结果化简,3.3.2,定积分,定积分在实际工作中有广泛的应用。在,MATLAB,中,定积分的计算使用函数:,int(f,x,a,b,),例,3.14,求定积分。,命令如下:,x=,sym(x);t,=,sym(t,);,int(abs(1-x),1,2),%,求定积分,(1),f=1/(1+x2);,int(f,-inf,inf,),%,求定积分,(2),int(4*t*x,x,2,sin(t),%,求定积分,(3),f=x3/(x-1)100;,I=int(f,2,3)%,用符号积分的方法求,定积分,(4),double(I,),%,将上述符号结果转换,为数值,例,3.15,求椭球的体积。,命令如下:,syms,a b c z;,f=pi*a*b*(c2-z2)/c2;,V=,int(f,z,-c,c,),V=4/3*pi*a*b*c,例,3.16,轴的长度为,10,米,若该轴的线性密度计算公式是,f(x)=6+0.3x,千克,/,米,(,其中,x,为距轴的端点距离,),,求轴的质量。,(1),符号函数积分,在,MATLAB,命令窗口,输入命令:,syms,x;,f=6+0.3*x;,m=int(f,0,10),(2),数值积分,先建立一个函数文件,fx.m,:,function,fx,=,fx(x,),fx,=6+0.3*x;,再在,MATLAB,命令窗口,输入命令:,m=quad(fx,0,10,1e-6),积分精度,3.4,泰勒级数,3.4.1,函数的泰勒级数,MATLAB,中提供了将函数展开为幂级数的函数,taylor,,,其调用格式为:,taylor(f,v,n,a,),变量,v,在,a,点的,n-1,阶泰勒级数,例,3.18,求函数在指定点的泰勒展开式。,命令如下:,x=sym(x);,f1=(1+x+x2)/(1-x+x2);,f2=sqrt(1-2*x+x3)-(1-3*x+x2)(1/3);,taylor(f1,x,5)%,求,(1),。展开到,x,的,4,次幂,taylor(f2,6)%,求,(2),。,例,3.19,将多项式表示,成,x+1,的幂的多项式。,命令如下:,x=sym(x);,p=1+3*x+5*x2-2*x3;,f=taylor(p,x,-1,4),3.5,求解方程,3.5.1,求解代数方程,函数,solve,其调用格式为:,solve(eqn1,eqn2,eqnN,var1,var2,varN,),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 solve,3.5.2,常微分方程的求解,函数,dsolve,该函数的调用格式为:,dsolve(eqn1,condition,var),该函数求解微分方程,eqn1,在初值条件,condition,下的,特解,。参数,var,描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件,condition,,,则求方程的,通解,。,dsolve,在,求微分方程组,时的调用格式为:,solve(eqn1,eqn2,eqnN,condition1,conditionN,var1,varN,),函数求解微分方程组,eqn1,、,、,eqnN,在初值条件,conditoion1,、,、,conditionN,下的解,若不给出初值条件,则求方程组的通解,,,var1,、,、,varN,给出求解变量。,Dsolve,参数说明,(1)Eqn,微分方程输入方法:,例:,命令:,Y=dsolve(D2y-2*Dy-3*y=0,x),(2)condition,初始条件,y(a,)=,b;Dy(a,)=c;D2y(a)=d;,最多可接受,12,个输入参量,例,3.25,求微分方程的,通解,。,命令如下:,y=dsolve(Dy-(x2+y2)/x2/2,x)%,解,(1),。,方程的右端为,0,时可以不写,y=,dsolve(Dy,*x2+2*x*y-exp(x),x)%,解,(2),y=dsolve(Dy-x/y/sqrt(1-x2),x)%,解,(3),例,3.26,求微分方程的,特解,。,命令如下:,y=,dsolve(Dy,=2*x*y2,y(0)=1,x)%,解,(1),y=dsolve(Dy-x2/(1+y2),y(2)=1,x)%,解,(2),3.6,积分变换,1.,傅立叶,(Fourier),变换,在,MATLAB,中,进行傅立叶变换的函数是:,fourier(fx,x,t,),求函数,f(x),的傅立叶像函数,F(t),。,ifourier(Fw,t,x,),求傅立叶像函数,F(t),的原函数,f(x),。,2.,拉普拉斯,(Laplace),变换,在,MATLAB,中,进行拉普拉斯变换的函数是:,laplace(fx,x,t,),求函数,f(x,),的拉普拉斯像函数,F(t,),。,ilaplace(Fw,t,x,),求拉普拉斯像函数,F(t,),的原函数,f(x,),。,3.Z,变换,对数列,f(n,),进行,z,变换的,MATLAB,函数是:,ztrans(fn,n,z,),求,fn,的,Z,变换像函数,F(z,),iztrans(Fz,z,n,),求,Fz,的,z,变换原函数,f(n,),例,3.29,求函数的傅立叶变换及其逆变换。,命令如下:,syms,x t;,y=abs(x);,Fw,=,fourier(y,x,w,)%,求,y,的傅立叶变换,fx,=,ifourier(Fw,w,x,)%,求,Ft,的傅立叶逆变换,命令如下:,f=exp(-x2),Ft=,fourier(f,),fx,=,i,fourier(Ft,),例,3.30,计算,y=x2,的拉普拉斯变换及其逆变换,.,命令如下:,x=sym(x);y=x2;,Ft=,laplace(y,x,s,)%,对函数,y,进行拉普拉斯变换,fx,=,ilaplace(Ft,s,x,)%,对函数,Ft,进行拉普拉斯逆变换,例 求数列,fn=,e-n,的,Z,变换及其逆变换。,命令如下:,syms,n z,fn=exp(-n);,Fz,=,ztrans(fn,n,z,)%,求,fn,的,Z,变换,f=,iztrans(Fz,z,n,)%,求,Fz,的逆,Z,变换,
展开阅读全文