7 matlab
This presentation is the property of its rightful owner.
Sponsored Links
1 / 16

第 7 讲 MATLAB 符号计算二 PowerPoint PPT Presentation


  • 136 Views
  • Uploaded on
  • Presentation posted in: General

西南科技大学网络教育系列课程. 数学软件. 第 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

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


7 matlab

西南科技大学网络教育系列课程

数学软件

第7讲 MATLAB符号计算二

数学软件

主讲教师: 鲜大权 副教授

西南科技大学理学院数学系


7 matlab

7.1 级数

7.2 代数方程的符号求解

7.3 常微分方程的符号求解


7 matlab

  • 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。计算有限级数的和


7 matlab

  • 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)。


7 matlab

  • 例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的乘方运算直接计算


7 matlab

  • 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 matlab

  • 例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 matlab

7.2代数方程的符号求解

  • 7.2.1线性方程组的符号求解

  • MATLAB中提供了一个求解线性代数方程组的函数linsolve,其调用格式为:

  • linsolve(A,b)


7 matlab

  • 例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)的解


7 matlab

  • 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)。仅标出方程的左端


7 matlab

  • 例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)


7 matlab

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 matlab

  • 例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)


7 matlab

  • 例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)


7 matlab

  • 例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-');


7 matlab

  • 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)


  • Login