1 / 16

第 7 讲 MATLAB 符号计算二

西南科技大学网络教育系列课程. 数学软件. 第 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/n^2,n,1,inf) % 求 s1

dwight
Download Presentation

第 7 讲 MATLAB 符号计算二

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 西南科技大学网络教育系列课程 数学软件 第7讲 MATLAB符号计算二 数学软件 主讲教师: 鲜大权 副教授 西南科技大学理学院数学系

  2. 7.1 级数 7.2 代数方程的符号求解 7.3 常微分方程的符号求解

  3. 7.1.1 级数的符号求和 • 级数符号求和函数symsum,调用格式为: • symsum(a,n,n0,nn) • 例7.1求级数之和。 • 命令如下: • n=sym('n'); • s1=symsum(1/n^2,n,1,inf) %求s1 • s2=symsum((-1)^(n+1)/n,1,inf) %求s2。未指定求和变量,缺省为n • s3=symsum(n*x^n,n,1,inf) %求s3。此处的求和变量n不能省略。 • s4=symsum(n^2,1,100) %求s4。计算有限级数的和

  4. 7.1.2 函数的泰勒级数 • MATLAB中提供了将函数展开为幂级数的函数taylor,其调用格式为: • taylor(f,v,n,a) • 例7.2求函数在指定点的泰勒展开式。 • 命令如下: • x=sym('x'); • f1=(1+x+x^2)/(1-x+x^2); • f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3); • taylor(f1,x,5) %求(1)。展开到x的4次幂时应选择n=5 • taylor(f2,6) %求(2)。

  5. 例7.3将多项式表示成x+1的幂的多项式。 • 命令如下: • x=sym('x'); • p=1+3*x+5*x^2-2*x^3; • f=taylor(p,x,-1,4) • 例7.4应用泰勒公式近似计算 。 • 命令如下: • x=sym('x'); • f=(1-x)^(1/12); %定义函数,4000^(1/12)=2f(96/2^12) • g=taylor(f,4) %求f的泰勒展开式g,有4000^(1/12)≈2g(96/2^12) • b=96/2^12; • a=1-b/12-11/288*b^2-253/10368*b^3 %计算g(b) • 2*a %求4000^(1/12)的结果 • 4000^(1/12) %用MATLAB的乘方运算直接计算

  6. 7.1.3 函数的傅立叶级数 • MATLAB 5.x版中,尚未提供求函数傅立叶级数的内部函数。下面我们自己设计一个简化的求任意函数的傅立叶级数的函数文件。 • function mfourier=mfourier(f,n) • syms x a b c; • mfourier=int(f,-pi,pi)/2; %计算a0 • for 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); • end • return • 调用该函数时,需给出被展开的符号函数f和展开项数n,不可缺省。

  7. 例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项

  8. 7.2代数方程的符号求解 • 7.2.1线性方程组的符号求解 • MATLAB中提供了一个求解线性代数方程组的函数linsolve,其调用格式为: • linsolve(A,b)

  9. 例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)的解 • A\b %用另一种方法求(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=A\b %用左除运算求(2)的解

  10. 7.2.2 非线性方程组的符号求解 • 求解非线性方程组的函数是solve,调用格式为: • solve('eqn1','eqn2',…,'eqnN','var1,var2,…,varN') • 例7.6 解方程。 • 命令如下: • x=solve('1/(x+2)+4*x/(x^2-4)=1+2/(x-2)','x') %解方程(1) • f=sym('x-(x^3-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)。仅标出方程的左端

  11. 例7.7 求方程组的解。 • 命令如下: • [x y]=solve('1/x^3+1/y^3=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:\MATLABR11\toolbox\symbolic\solve.m at line 136 • x = • [ empty sym ] • y = • [] • 对方程组(2)MATLAB给出了无解的结论,显然错误,请看完全与其同构的方程组(3)。输入命令如下: • [u,v]=solve('u^3+v^3-98','u+v-2','u,v') %解方程组(3) • [x v]=solve('x^2+y^2-5','2*x^2-3*x*y-2*y^2') %解方程组(4)

  12. 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给出求解变量。

  13. 例7.8 求微分方程的通解。 • 命令如下: • y=dsolve('Dy-(x^2+y^2)/x^2/2','x') %解(1)。方程的右端为0时可以不写 • y=dsolve('Dy*x^2+2*x*y-exp(x)','x') %解(2) • y=dsolve('Dy-x/y/sqrt(1-x^2)','x') %解(3)

  14. 例7.9 求微分方程的特解。 • 命令如下: • y=dsolve('Dy=2*x*y^2','y(0)=1','x') %解(1) • y=dsolve('Dy-x^2/(1+y^2)','y(2)=1','x') %解(2)

  15. 例7.10 用微分方程的数值解法和符号解法解方程,并对结果进行比较。 • 在MATLAB命令窗口,输入命令: • y=dsolve('Dy+2*y/x-4*x','y(1)=2','x') %用符号方法得到方程的解析解 • 为了求方程的数值解,需要按要求建立一个函数文件fxyy.m: • function f=fxyy(x,y) • f=(4*x^2-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-');

  16. 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)

More Related