【教学课件】第7讲MATLAB符号计算二.ppt
第7讲 MATLAB符号计算二,数学软件,西南科技大学网络教育系列课程,数学软件,主讲教师:鲜大权 副教授,西南科技大学理学院数学系,7.1 级数7.2 代数方程的符号求解7.3 常微分方程的符号求解,7.1.1 级数的符号求和级数符号求和函数symsum,调用格式为:symsum(a,n,n0,nn)例7.1求级数之和。命令如下:n=sym(n);s1=symsum(1/n2,n,1,inf)%求s1s2=symsum(-1)(n+1)/n,1,inf)%求s2。未指定求和变量,缺省为ns3=symsum(n*xn,n,1,inf)%求s3。此处的求和变量n不能省略。s4=symsum(n2,1,100)%求s4。计算有限级数的和,7.1.2 函数的泰勒级数MATLAB中提供了将函数展开为幂级数的函数taylor,其调用格式为:taylor(f,v,n,a)例7.2求函数在指定点的泰勒展开式。命令如下: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次幂时应选择n=5taylor(f2,6)%求(2)。,例7.3将多项式表示成x+1的幂的多项式。命令如下:x=sym(x);p=1+3*x+5*x2-2*x3;f=taylor(p,x,-1,4)例7.4应用泰勒公式近似计算。命令如下: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的乘方运算直接计算,7.1.3 函数的傅立叶级数MATLAB 5.x版中,尚未提供求函数傅立叶级数的内部函数。下面我们自己设计一个简化的求任意函数的傅立叶级数的函数文件。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(i)=int(f*sin(i*x),-pi,pi);mfourier=mfourier+a(i)*cos(i*x)+b(i)*sin(i*x);endreturn调用该函数时,需给出被展开的符号函数f和展开项数n,不可缺省。,例7.4在-,区间展开函数为傅立叶级数。命令如下:x=sym(x);a=sym(a);f=x;mfourier(f,5)%求f(x)=x的傅立叶级数的前5项f=abs(x);mfourier(f,5)%求f(x)=|x|的傅立叶级数的前5项syms a;f=cos(a*x);mfourier(f,6)%求f(x)=cos(ax)的傅立叶级数的前6项f=sin(a*x);mfourier(f,4)%求f(x)=sin(ax)的傅立叶级数的前4项,7.2代数方程的符号求解,7.2.1线性方程组的符号求解MATLAB中提供了一个求解线性代数方程组的函数linsolve,其调用格式为:linsolve(A,b),例7.5求线性方程组AX=b的解。解方程组(1)的命令如下:A=34,8,4;3,34,3;3,6,8;b=4;6;2;X=linsolve(A,b)%调用linsolve函数求(1)的解Ab%用另一种方法求(1)的解解方程组(2)的命令如下:syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3;A=a11,a12,a13;a21,a22,a23;a31,a32,a33;b=b1;b2;b3;X=linsolve(A,b)%调用linsolve函数求(2)的解XX=Ab%用左除运算求(2)的解,7.2.2 非线性方程组的符号求解求解非线性方程组的函数是solve,调用格式为:solve(eqn1,eqn2,eqnN,var1,var2,varN)例7.6 解方程。命令如下:x=solve(1/(x+2)+4*x/(x2-4)=1+2/(x-2),x)%解方程(1)f=sym(x-(x3-4*x-7)(1/3)=1);x=solve(f)%解方程(2)x=solve(2*sin(3*x-pi/4)=1)%解方程(3)x=solve(x+x*exp(x)-10,x)%解方程(4)。仅标出方程的左端,例7.7 求方程组的解。命令如下:x y=solve(1/x3+1/y3=28,1/x+1/y=4,x,y)%解方程组(1)x y=solve(x+y-98,x(1/3)+y(1/3)-2,x,y)%解方程组(2)Warning:Explicit solution could not be found.In C:MATLABR11toolboxsymbolicsolve.m at line 136x=empty sym y=对方程组(2)MATLAB给出了无解的结论,显然错误,请看完全与其同构的方程组(3)。输入命令如下:u,v=solve(u3+v3-98,u+v-2,u,v)%解方程组(3)x v=solve(x2+y2-5,2*x2-3*x*y-2*y2)%解方程组(4),7.3常微分方程的符号求解,MATLAB的符号运算工具箱中提供了功能强大的求解常微分方程的函数dsolve。该函数的调用格式为:dsolve(eqn1,condition,var)该函数求解微分方程eqn1在初值条件condition下的特解。参数var描述方程中的自变量符号,省略时按缺省原则处理,若没有给出初值条件condition,则求方程的通解。dsolve在求微分方程组时的调用格式为:dsolve(eqn1,eqn2,eqnN,condition1,conditionN,var1,varN)函数求解微分方程组eqn1、eqnN在初值条件conditoion1、conditionN下的解,若不给出初值条件,则求方程组的通解,var1、varN给出求解变量。,例7.8 求微分方程的通解。命令如下: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),例7.9 求微分方程的特解。命令如下:y=dsolve(Dy=2*x*y2,y(0)=1,x)%解(1)y=dsolve(Dy-x2/(1+y2),y(2)=1,x)%解(2),例7.10 用微分方程的数值解法和符号解法解方程,并对结果进行比较。在MATLAB命令窗口,输入命令:y=dsolve(Dy+2*y/x-4*x,y(1)=2,x)%用符号方法得到方程的解析解为了求方程的数值解,需要按要求建立一个函数文件fxyy.m:function f=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-);,7.4 常微分方程组求解例7.11 求微分方程组的解。命令如下:x,y=dsolve(Dx=4*x-2*y,Dy=2*x-y,t)%解方程组(1)x,y=dsolve(D2x-y,D2y+x,t)%解方程组(2),