资源描述
第3章MATLAB符号计算,2020/5/11,本章内容,3.1符号计算基础3.2微分运算3.3积分运算3.4泰勒级数3.5求解方程3.6积分变换,3.1符号计算基础,3.1.1符号对象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%建立符号矩阵AB=w,x;y,z%建立数值矩阵Bdet(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函数1.用于定义多个符号变量。syms函数的一般调用格式为:symsvar1var2varn函数定义符号变量var1,var2,varn等。用这种格式定义符号变量时不要在变量名上加字符分界符(),变量间用空格而不要用逗号分隔。,2.建立符号表达式例3.3用2种方法建立符号表达式。在MATLAB窗口,输入命令:U=sym(3*x2+5*y+2*x*y+6)%定义符号表达式Usymsxy;%建立符号变量x、yV=3*x2+5*y+2*x*y+6%定义符号表达式V2*U-V+6%求符号表达式的值,例3.4计算3阶范得蒙矩阵行列式的值。设A是一个由符号变量a,b,c确定的范得蒙矩阵。命令如下:symsabc;U=a,b,c;A=1,1,1;U;U.2%建立范得蒙符号矩阵det(A)%计算A的行列式值,例3.5建立x,y的一般二元函数。在MATLAB命令窗口,输入命令:symsxy;f=sym(f(x,y);,3.1.2基本的符号运算(1)符号表达式的代数运算与矩阵运算基本一致,详见P9596。(2)符号与数值的转换:sym,numeric,eval,sym2poly,poly2symNumeric,eval:将符号常数转换为数字或计算表达式的函数;Sym2poly:将符号多项式变换为等价系数向量。Poly2sym:要求用户指定用于表达式的变量(x,y等)例3.6f=sym(2*x2+7*x+9)n=sym2poly(f)f1=poly2sym(n,y),(3)因式分解与展开factor(S)对S分解因式,S是符号表达式或符号矩阵。expand(S)对S进行展开,S是符号表达式或符号矩阵。collect(S)对S合并同类项,S是符号表达式或符号矩阵。collect(S,v)对S按变量v合并同类项,S是符号表达式或符号矩阵。,例3.7对符号矩阵A的每个元素分解因式。命令如下:symsabxy;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的值。命令如下:symsxy;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化简命令如下:symsxy;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)Limit(f)limit函数的另一种功能是求单边极限,其调用格式为:limit(f,x,a,right)limit(f,x,a,left),例3.10求极限。在MATLAB命令窗口,输入命令:symsamx;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求函数的导数。命令如下:symsabtxyz;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的三阶导数f1=a*cos(t);f2=b*sin(t);diff(f2)/diff(f1)%求(3)。按参数方程求导公式求y对x的导数(diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2)/(diff(f1)3%求(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=x3+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求椭球的体积。命令如下:symsabcz;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命令窗口,输入命令:symsx;f=6+0.3*x;m=int(f,0,10)(2)数值积分先建立一个函数文件fx.m:functionfx=fx(x)fx=6+0.3*x;再在MATLAB命令窗口,输入命令:m=quad(fx,0,10,1e-6),例3.17求空间曲线c从点(0,0,0)到点(3,3,2)的长度。求曲线c的长度是曲线一型命令如下:symst;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的长度,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.20应用泰勒公式近似计算。命令如下:x=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/12-11/288*b2-253/10368*b3%计算g(b)2*a%求4000(1/12)的结果4000(1/12)%用MATLAB的乘方运算直接计算,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)P107108例子请查阅helpsolve,3.5.2常微分方程的求解,函数dsolve该函数的调用格式为:dsolve(eqn1,condition,var)该函数求解微分方程eqn1在初值条件condition下的特解。参数var描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件condition,则求方程的通解。dsolve在求微分方程组时的调用格式为:dsolve(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.27用微分方程的数值解法和符号解法解方程,并对结果进行比较。在MATLAB命令窗口,输入命令:y=dsolve(Dy+2*y/x-4*x,y(1)=2,x)%用符号方法得到方程的解析解为了求方程的数值解,需要按要求建立一个函数文件fxyy.m:functionf=fxyy(x,y)f=(4*x2-2*y)/x;%只能是y=f(x,y)的形式,当不是这种形式时,要变形。return输入命令:t,w=ode45(fxyy,1,2,2);%得到区间1,2中的数值解,以向量t、w存储。为了对两种结果进行比较,在同一个坐标系中作出两种结果的图形。输入命令:x=linspace(1,2,100);y=x.2+1./x.2;%为作图把符号解的结果离散化plot(x,y,b.,t,w,r-);,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求函数的傅立叶变换及其逆变换。命令如下:symsxt;y=abs(x);Fw=fourier(y,x,w)%求y的傅立叶变换fx=ifourier(Fw,w,x)%求Ft的傅立叶逆变换命令如下:f=exp(-x2)Ft=fourier(f)fx=ifourier(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变换及其逆变换。命令如下:symsnzfn=exp(-n);Fz=ztrans(fn,n,z)%求fn的Z变换f=iztrans(Fz,z,n)%求Fz的逆Z变换,
展开阅读全文