MATLAB 之 级数计算和方程符号求解

一、级数

  • 级数是表示函数,研究函数性质以及进行数值计算的一种工具,特别是可以利用收敛的无穷级数来逼近一些无理数,使它们的求值变得更方便。

1. 级数符号求和

  • 前面曾讨论过有限级数求和的函数 sum,sum 处理的级数是以一个向量形式表示的,并且只能是有穷级数,对于无穷级数求和,sum 是无能为力的。
  • 求无穷级数的和需要符号表达式求和函数 symsum,其调用格式如下:
	symsum(s,v,n,m)
  • 其中, s s s 表示一个级数的通项,是一个符号表达式。 v v v 是求和变量, v v v 省略时使用系统的默认变量。 n n n m m m 是求和的开始项和末项。
  • 例如,我们求下列定积分。
  • (1) s 1 = 1 + 1 4 + 1 9 + 1 16 + ⋯ + 1 n 2 + ⋯ s_{1}=1+\frac{1}{4}+\frac{1}{9}+\frac{1}{16}+\cdots +\frac{1}{n^{2}}+\cdots s1=1+41+91+161++n21+
  • (2) s 2 = 1 − 1 2 + 1 3 − 1 4 + ⋯ + ( − 1 ) n + 1 1 n + ⋯ s_{2}=1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\cdots +(-1)^{n+1}\frac{1}{n}+\cdots s2=121+3141++(1)n+1n1+
  • (3) s 3 = x + 2 x 2 + 3 x 3 + ⋯ + n x n + ⋯ s_{3}=x+2x^{2}+3x^{3}+\cdots +nx^{n}+\cdots s3=x+2x2+3x3++nxn+
  • (4) s 4 = 1 + 4 + 9 + 16 + ⋯ + 10000 s_{4}=1+4+9+16+\cdots +10000 s4=1+4+9+16++10000
  • 程序如下:
>> n=sym('n');
>> x=sym('x');
>> s1=symsum(1/n^2,n,1,inf)            	%求s1
 
s1 =
 
pi^2/6
 
>> s2=symsum((-1)^(n+1)/n,1,inf)    	%求s2。未指定求和变量,默认为n
 
s2 =
 
log(2)
 
>> s3=symsum (n*x^n,n,1,inf)           	%求s3。此处的求和变量n不能省略   
 
s3 =
 
piecewise(abs(x) < 1, x/(x - 1)^2)
 
>> s4=symsum(n^2,1,100)              	%求s4。计算有限级数的和
 
s4 =
 
338350
 
  • 其中,s3 的结果表示 ∣ x ∣ < 1 \left | x \right | < 1 x<1 时,级数和 s3 = x ( x − 1 ) 2 =\frac{x}{(x-1)^2} =(x1)2x

2. 函数的泰勒级数

  • 泰勒(Taylor)级数将一个任意函数表示为一个幂级数,并且,在许多情况下,只需要取幂级数的前有限项来表示该函数,这对于大多数工程应用问题来说,精度已经足够。
  • MATLAB 提供了 taylor 函数将函数展开为幂级数,其调用格式如下:
	taylor (f,v,a)
	taylor (f, v,a, Name, Value)
  • 该函数将函数 f f f 按变量 v v v 展开为泰勒级数 v v v 的默认值与 symvar 函数指示的默认变量相同。参数 a a a 指定将函数 f f f 在自变量 v = a v=a v=a 处展开, a a a 的默认值是 0。
  • 第二种格式用于运算时设置相关选项,Name 和 Value 成对使用,Name 为选项,Value 为 Name 的值。Name 有以下 3 个可取字符串。
  • (1) 'ExpansionPoint':指定展开点,对应值为标量或向量。未设置时,展开点为 0。
  • (2) 'Order':指定截断阶,对应值为一个 正整数。未设置时,截断阶为 6,即展开式的最高阶为 5。
  • (3) 'OrderMode':指定展开式采用绝对阶或相对阶,对应值为 ‘Absolute’(绝对阶)或 ‘Relative’(相对阶)。未设置时取 ‘Absolute’。
  • 例如,我们求函数在指定点的泰勒级数展开式。
  • (1) 求 1 − 2 x + x 3 − 1 − 3 x + x 2 3 \sqrt{1-2x+x^{3}}-\sqrt[3]{1-3x+x^{2}} 12x+x3 313x+x2 的 5 阶泰勒级数展开式。
  • (2) 将 1 − 2 x + x 3 − 1 − 3 x + x 2 3 \sqrt{1-2x+x^{3}}-\sqrt[3]{1-3x+x^{2}} 12x+x3 313x+x2 x = 1 x=1 x=1 处按 5 次多项式展开。
  • 程序如下:
>> x=sym('x');
>> f1=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3);
>> f2=(1+x+x^2)/(1-x+x^2);
>> taylor(f1)					%求(1)
 
ans =
 
(239*x^5)/72 + (119*x^4)/72 + x^3 + x^2/6
 
>> taylor(f2,x,1,'Order',6)		%求(2)。展开到x-15次幂时应选择x=6
 
ans =
 
2*(x - 1)^3 - 2*(x - 1)^2 - 2*(x - 1)^5 + 3
 

二、方程符号求解

  • 除了常规的代数方程以及常微分方程数值求解的方法,MATLAB 还提供了 solvedsolve 函数,可以用符号运算求解代数方程和常微分方程。

1. 代数方程符号求解

  • 代数方程是指未涉及微积分运算的方程,相对比较简单。在 MATLAB 中,求解符号表达式表示的代数方程可由函数 solve 实现,其调用格式如下:
  • solve(s):求解符号表达式 s s s 的代数方程,求解变量为默认变量。
  • solve(s,v):求解符号表达式 s s s 的代数方程,求解变量为 v v v
  • solve(s1,s2,...,sn],[v1,v2,...,vn]):求解符号表达式 s 1 , s 2 , … , s n s_{1},s_{2},\dots ,s_{n} s1,s2,,sn 组成的代数方程组,求解变量分别为 v 1 , v 2 , … , v n v_{1},v_{2},\dots ,v_{n} v1,v2,,vn
  • 例如,我们求解下列方程。
  • (1) 1 x + 2 + 4 x x 2 − 4 = 1 + 2 x − 2 \frac{1}{x+2}+\frac{4x}{x^{2}-4}=1+\frac{2}{x-2} x+21+x244x=1+x22
  • (2) x − x 3 − 4 x − 7 3 = 1 x-\sqrt[3]{x^{3}-4x-7}=1 x3x34x7 =1
  • (3) 2 sin ⁡ ( 3 x − π 4 ) = 1 2\sin (3x-\frac{\pi}{4})=1 2sin(3x4π)=1
  • (4) x + x e x − 10 = 0 x+xe^{x}-10=0 x+xex10=0
  • 程序如下:
>> syms x
>> f=1/(x+2)+4*x/(x^2-4)==1+2/(x-2)				%定义(1)中函数
 
f =
 
1/(x + 2) + (4*x)/(x^2 - 4) == 2/(x - 2) + 1
 
>> x=solve(f)									%解方程(1)
 
x =
 
1
 
>> syms x
>> f=x-(x^3-4*x-7)^(1/3)==1						%定义(2)中方程
 
f =
 
x - (x^3 - 4*x - 7)^(1/3) == 1

>> x=solve(f)									%解方程(2)
 
x =
 
3
 
>> syms x
>> f=2*sin(3*x-pi/4)==1							%定义(3)中方程

f =
 
2*sin(3*x - pi/4) == 1
 
>> x=solve(f)									%解方程(3)
 
x =
 
 (5*pi)/36
(13*pi)/36
 
>> syms x
>> f=x+x*exp(x)-10								%定义(4)中方程
 
f =
 
x + x*exp(x) - 10
 
>> x=solve(f,x)									%解方程(4)。仅标出方程的左端
 
x =
 
1.6335061701558463841931651789789
 
  • 例如,我们求解下列方程。
  • (1) { 1 x 3 + 1 y 3 = 28 1 x + 1 x = 4 \left\{\begin{matrix}\frac{1}{x^{3}}+\frac{1}{y^{3}}=28 \\\frac{1}{x}+\frac{1}{x}=4 \end{matrix}\right. { x31+y31=28x1+x1=4
  • (2) { x + y = 98 x 3 + y 3 = 2 \left\{\begin{matrix}x+y=98 \\\sqrt[3]{x}+\sqrt[3]{y}=2 \end{matrix}\right. { x+y=983x +3y =2
  • (3) { u 3 + v 3 = 98 u + v = 2 \left\{\begin{matrix}u^{3}+v^{3}=98 \\u+v=2 \end{matrix}\right. { u3+v3=98u+v=2
  • (4) { x 2 + y 2 = 5 2 x 2 − 3 x y − 2 y 2 = 0 \left\{\begin{matrix}x^{2}+y^{2}=5 \\2x^{2}-3xy-2y^{2}=0 \end{matrix}\right. { x2+y2=52x23xy2y2=0
  • 程序如下:
>> syms x y
>> f1=1/x^3+1/y^3==28	%定义(1)中方程
 
f1 =
 
1/x^3 + 1/y^3 == 28
 
>> f2=1/x+1/y==4	%定义(1)中方程
 
f2 =
 
1/x + 1/y == 4
 
>> [x,y]=solve([f1,f2],[x,y])	%解方程组(1)
 
x =
 
  1
1/3
 
 
y =
 
1/3
  1
 
>> syms x y
>> f1=x+y==98	%定义(2)中方程
 
f1 =
 
x + y == 98
 
>> f2=x^(1/3)+y^(1/3)==2	%定义(2)中方程
 
f2 =
 
x^(1/3) + y^(1/3) == 2
 
>> [x,y]=solve([f1,f2],[x,y])	%解方程组(2)
 
x =
 
Empty sym: 0-by-1
 
 
y =
 
Empty sym: 0-by-1

  • 对方程组 (2),MATLAB 给出了无解的结论,显然错误,请看完全与其同构的方程组(3)。输入程序如下:
>> syms u v
>> f1=u^3+v^3==98	%定义(3)中方程
 
f1 =
 
u^3 + v^3 == 98
 
>> f2=u+v==2	%定义(3)中方程
 
f2 =
 
u + v == 2
 
>> [u,v]=solve([f1,f2],[u,v])	%解方程组(3)
 
u =
 
 5
-3
 
 
v =
 
-3
 5
 
>> syms x y
>> f1=x^2+y^2==5	%定义(4)中方程
 
f1 =
 
x^2 + y^2 == 5
 
>> f2=2*x^2-3*x*y-2*y^2==0	%定义(4)中方程
 
f2 =
 
2*x^2 - 3*x*y - 2*y^2 == 0
 
>> [x,y]=solve([f1,f2],[x,y])	%解方程组(4)
 
x =
 
 1
-2
 2
-1
 
 
y =
 
-2
-1
 1
 2
 
  • 在应用 MATLAB 求解方程组时,应充分发挥其功能。当 MATLAB 给出无解或未找到所期望的解时,不要认为原方程组就真正无解了,还需要用其他方法试探着求解。
  • 如果知道方程组在某点附近有解,不妨用方程组的数值求解函数 fsolve 试探求解,一般能找到所期望的解。

2. 常微分方程符号求解

  • 在 MATLAB 中,用大写字母 D 表示导数。例如,Dy 表示 y ′ y' y,D2y 表示 y " y" y",Dy(0)=5 表示 y ′ ( 0 ) = 5 y'(0)=5 y(0)=5。D3y+D2y+Dy -x+5=0 表示微分方程 y " + y " + y ′ x + 5 = 0 y"+y"+y' x+5=0 y"+y"+yx+5=0
  • 符号常微分方程求解可以通过函数 dsolve 来实现,其调用格式如下:
	dsolve(e,c,v)
  • 该函数求解常微分方程 e e e 在初值条件 c c c 下的特解。参数 v v v 描述方程中的自变量,省略时按默认原则处理,若没有给出初值条件 c c c,则求方程的通解。
  • dsolve 函数在求常微分方程组时的调用格式如下:
	dsolve(e1,e2,,en,c1,,cn,v)
  • 该函数求解常微分方程组 e1,…,en 在初值条件 c1,…,cn 下的特解,若不给出初值条件,则求方程组的通解。 v v v 给出求解变量,如果没有指定自变量,则采用默认自变量 t t t
  • 例如,我们求下列定积分。
  • (1) 求 d y d x = x 2 + y 2 2 x 2 \frac{\mathrm{d} y}{\mathrm{d} x} =\frac{x^{2}+y^{2}}{2x^{2}} dxdy=2x2x2+y2 的通解。
  • (2) 求 x 2 d y d x + 2 x y = e x x^{2}\frac{\mathrm{d} y}{\mathrm{d} x} +2xy=e^{x} x2dxdy+2xy=ex 的通解。
  • (3) 求 d y d x = x 2 1 + y 2 \frac{\mathrm{d} y}{\mathrm{d} x} =\frac{x^{2}}{1+y^{2}} dxdy=1+y2x2 的特解, y ( 2 ) = 1 y(2)=1 y(2)=1
  • (4) 求 { d y d x = 4 x − 2 y d y d x = 2 x − y \left\{\begin{matrix}\frac{\mathrm{d} y}{\mathrm{d} x} =4x-2y \\\frac{\mathrm{d} y}{\mathrm{d} x} =2x-y \end{matrix}\right. { dxdy=4x2ydxdy=2xy 的通解。
  • 程序如下:
>> y=dsolve('Dy-(x^2+y^2)/x^2/2','x')		%解(1)。方程的右端为0时可以不写
 
y =
 
-x*(1/(C1 + log(x)/2) - 1)
                         x
 
>> y=dsolve('Dy*x^2+2*x*y-exp(x)','x')		%解(2)

y =
 
-(C1 - exp(x))/x^2
 
>> y=dsolve('Dy-x^2/(1+y^2)','y(2)=1','x')	%解(3)
 
y =
 
(((x^3/2 - 2)^2 + 1)^(1/2) + x^3/2 - 2)^(1/3) - 1/(((x^3/2 - 2)^2 + 1)^(1/2) + x^3/2 - 2)^(1/3)
 
>> [x,y]=dsolve('Dx=4*x-2*y','Dy=2*x-y','t')	%解方程组(4)
  
x =
 
C1/2 + 2*C2*exp(3*t)
  
y =
 
C1 + C2*exp(3*t)
 
  • 在 MATLAB 中,dsolve 函数一律使用显式方式表示结果,有时解的表达式很冗长。必要时可作化简处理。

猜你喜欢

转载自blog.csdn.net/weixin_45891612/article/details/131275296