算法大全第15章_常微分方程的解法

-1-

第十五章 常微分方程的解法

建立微分方程只是解决问题的第一步,通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以肯定得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来”的,即使看起来非常简单的方程如

22dy

y x dx

=+,于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。 §1 常微分方程的离散化

下面主要讨论一阶常微分方程的初值问题,其一般形式是

(,)()dy

f x y a x b

dx

y a y ⎧=≤≤⎪⎨⎪=⎩ (1) 在下面的讨论中,我们总假定函数(,)f x y 连续,且关于y 满足李普希兹(Lipschitz)条件,

即存在常数L ,使得

|(,)(,)|||f x y f x y L y y -≤-

这样,由常微分方程理论知,初值问题(1)的解必定存在唯一。

所谓数值解法,就是求问题(1)的解 y (x )在若干点

012N a x x x x b =<<<

<=

处的近似值(1,2,

,)n y n N =的方法,(1,2,

,)n y n N = 称为问题(1)的数值解,

1n n n h x x +-=称为由n x 到1n x +的步长。今后如无特别说明,我们总取步长为常量h 。

建立数值解法,首先要将微分方程离散化,一般采用以下几种方法: (i )用差商近似导数 若用向前差商

()()

1n n y x y x h

+-代替()n y x '代入(1)中的微分方程,则得

()()

()()1,(0,1,)n n n n y x y x f x y x n h

+-≈=

化简得

()()()()1,n n n n y x y x hf x y x +≈+

如果用()n y x 的近似值n y 代入上式右端,所得结果作为()1n y x +的近似值,记为1n y +, 则有

()1,(0,1,)n n n n y y hf x y n +=+=

(2)

这样,问题(1)的近似解可通过求解下述问题

()10

,(0,1,)

()n n n n y y hf x y n y y a +⎧=+=⎨

=⎩ (3) 得到,按式(3)由初值0y 可逐次算出1y ,2y ,…。式(3)是个离散化的问题,称为差

分方程初值问题。

需要说明的是,用不同的差商近似导数,将得到不同的计算公式。

-2-

(ii )用数值积分方法

将问题(1)的解表成积分形式,用数值积分方法离散化。例如,对微分方程两端积分,得

()()1

1(,())(0,1,)n n

x n n x y x y x f x y x dx n ++-=⎰= (4)

右边的积分用矩形公式或梯形公式计算。

(iii )Taylor 多项式近似

将函数y (x )在n x 处展开,取一次Taylor 多项式近似,则得

()()()()()()1,n n n n n n y x y x hy x y x hf x y x +≈=+'+

再将()n y x 的近似值n y 代入上式右端,所得结果作为()1n y x +的近似值1n y +,得到离散化的计算公式

()1,n n n n y y hf x y +=+

以上三种方法都是将微分方程离散化的常用方法,每一类方法又可导出不同形式的计算公式。其中的Taylor 展开法,不仅可以得到求数值解的公式,而且容易估计截断误差。 §2 欧拉(Euler )方法

2.1 Euler 方法

Euler 方法就是用差分方程初值问题(3)的解来近似微分方程初值问题(1)的解,即由公式(3)依次算出()n y x 的近似值(1,2,)n y n =。这组公式求问题(1)的数值解称为向前

Euler 公式。

如果在微分方程离散化时,用向后差商代替导数,即()()()

11n n n y x y x y x h

++-≈',则得

计算公式

()1110,(0,1,)

()

n n n n y y hf x y n y y a +++⎧=+=⎨

=⎩ (5)

用这组公式求问题(1)的数值解称为向后 Euler 公式。

向后 Euler 法与Euler 法形式上相似,但实际计算时时却复杂得多。向前 Euler 公式是显式的,可直接求解。向后 Euler 公式的右端含有 1n y + ,因此是隐式公式,一般要用迭代法求解,迭代公式通常为

()()

(0)1(1)()111,(0,1,2,),n n n n k k n n n n y y hf x y k y y hf x y +++++⎧=+⎪=⎨=+⎪⎩

(6)

2.2 Euler 方法的误差估计

对于向前 Euler 公式(3)我们看到,当 n =1,2,… 时公式右端的 n y 都是近似的,所以用它计算的 1n y + 会有累积误差,分析累积误差比较复杂,这里先讨论比较简单的所谓局部截断误差。

假定用(3)式时右端的 n y 没有误差,即 ()n n y y x =,那么由此算出

()()()()1,n n n n y x y x hf x y x +=+

(7)

局部截断误差指的是,按(7)式计算由 n x 到 1n x +这一步的计算值 1n y +与精确值 ()1n y x +

-3-

之差 ()11n n y x y ++-。为了估计它,由 Taylor 展开得到的精确值 ()1n y x +是

()()()()2

31()2

n n n n h y x y x hy x y x O h +'=+++'' (8)

(7)、(8)两式相减(注意到(,)y f x y =')得

()()()()2

32112

n n n h y x y y x O h O h ++''-=+≈

(9)

即局部截断误差是 2h 阶的,而数值算法的精度定义为:

若一种算法的局部截断误差为 1

()p O h +,则称该算法具有 p 阶精度。

显然 p 越大,方法的精度越高。式(9)说明,向前 Euler 方法是一阶方法,因此它的精度不高。 §3 改进的 Euler 方法

3.1 梯形公式

利用数值积分方法将微分方程离散化时,若用梯形公式计算式(4)中之右端积分,即

()()()()1

11(,()),,2

n n

x n n n n x h f x y x dx f x y x f x y x +++⎡⎤≈

+⎣⎦⎰

并用n y ,1n y +代替()n y x ,()1n y x +,则得计算公式

()()111,,2n n n n n n h

y y f x y f x y +++=++⎡⎤⎣

⎦ 这就是求解初值问题(1)的梯形公式。

直观上容易看出,用梯形公式计算数值积分要比矩形公式好。梯形公式为二阶方法。 梯形公式也是隐式格式,一般需用迭代法求解,迭代公式为

()()()(0)1(1)()

111,,,2(0,1,2,)

n

n n n k k n n n n n n y y hf x y h y y f x y f x y k +++++⎧=+⎪

⎪⎡⎤=++⎨⎣⎦⎪

=⎪⎩ (10)

由于函数 f (x , y ) 关于 y 满足 Lipschitz 条件,容易看出

(1)()

()(1)

1111

2

k k k k n n n n hL y y y y +-++++-≤

- 其中 L 为 Lipschitz 常数。因此,当012

hL

<

<时,迭代收敛。但这样做计算量较大。 如果实际计算时精度要求不太高,用公式(10)求解时,每步可以只迭代一次,由此导 出一种新的方法——改进 Euler 法。

3.2 改进Euler 法

按式(5)计算问题(1)的数值解时,如果每步只迭代一次,相当于将Euler 公式 与梯形公式结合使用:先用 Euler 公式求 1n y + 的一个初步近似值 1n y + ,称为预测值,然 后用梯形公式校正求得近似值 1n y + ,即

-4-

()()()1111,,,2n n n n n n n n n n y y hf x y h y y f x y f x y ++++⎧=+⎪⎨=++⎡⎤⎪⎣

⎦⎩预测校正 (11)

式(11)称为由 Euler 公式和梯形公式得到的预测—校正系统,也叫改进 Euler 法。

为便于编制程序上机,式(11)常改写成

()()()1,,12

p n n n q n n p n p q y y hf x y y y hf x h y y y y +⎧

⎪=+⎪⎪

=++⎨⎪

⎪=+⎪⎩ (12)

改进 Euler 法是二阶方法。

§4 龙格—库塔(Runge —Kutta )方法

回到 Euler 方法的基本思想—用差商代替导数—上来。实际上,按照微分中值定理应有

()()

()1,01n n n y x y x y x h h

θθ+-'=+<<

注意到方程 y '= f (x , y ) 就有

()()()()1,n n n n y x y x hf x h y x h θθ+=+++

(13)

不妨记()()

,n n K f x h y x h θθ=++ ,称为区间 1][,n n x x + 上的平均斜率。可见给出一种斜率 K ,(13)式就对应地导出一种算法。

向前 Euler 公式简单地取 (),n n f x y 为 K ,精度自然很低。改进的 Euler 公式可理解为K 取 (),n n f x y , ()11,n n f x y ++ 的平均值,其中 ()1,n n n n y y hf x y +=+,这种处理提高了精度。

如上分析启示我们,在区间 1][,n n x x + 内多取几个点,将它们的斜率加权平均作为 K ,就有可能构造出精度更高的计算公式。这就是龙格—库塔方法的基本思想。

4.1 首先不妨在区间 1][,n n x x + 内仍取 2 个点,仿照(13)式用以下形式试一下

()()

()1112212

1,,,0,1

n n n n n n y y h k k k f x y k f x h y hk λλαβαβ+=++⎧⎪

=⎨⎪=++<<⎩ (14)

其中12λλαβ,,,为待定系数,看看如何确定它们使(14)式的精度尽量高。为此我们分析局部截断误差 ()11n n y x y ++- ,因为()n n y y x =,所以(14)可以化为

-5-

()()()()()()()()()()()()()()1112212

121,,,,,n n n n n n n n n x n n y n n y y x h k k k f x y x y x k f x h y x hk f x y x hf x y x hk f x y x O h λλαβαβ+⎧=++⎪

'==⎪⎪=++⎨⎪=+⎪

⎪++⎩

(15)

其中 2k 在点 ()()

n n x y x , 作了 Taylor 展开。(15)式又可表为

()()()()231122n n n x y y y x hy x h f ff O h βλλλαα+⎛⎫

'=+++++ ⎪⎝⎭

注意到

()()()()()2

312

n n n n h y x y x hy x y x O h +'''=+++

中,

x y y f y f ff '''==+,可见为使误差 ()131()n n y x y O h ++=-,只须令

1221121,β

λλλαα

=+==,

(16)

待定系数满足(16)的(15)式称为 2 阶龙格—库塔公式。由于(16)式有 4 个未知数而只有 3 个方程,所以解不唯一。不难发现,若令1212

1λλαβ==,==,即为改进的 Euler 公式。可以证明,在1][,n n x x + 内只取 2 点的龙格—库塔公式精度最高为 2 阶。

4.2 4 阶龙格—库塔公式

要进一步提高精度,必须取更多的点,如取 4 点构造如下形式的公式:

()()()

()()

1112233441211132213243415263,,,,n n n n n n n n n n y y h k k k k k f x y k f x h y hk k f x h y hk hk k f x h y hk hk hk λλλλαβαββαβββ+=++++⎧⎪

=⎪⎪

=++⎨⎪=+++⎪=++++⎪⎩ (17)

其中待定系数 ,,i i i λαβ 共 13 个,经过与推导 2 阶龙格—库塔公式类似、但更复杂计算,得到使局部误差 ()15

1()n n y x y O h ++=- 的 11 个方程。取既满足这些方程、又较简单的一组 ,,i i i λαβ ,可得

-6-

()()()

11234112

23

43226,,22,22,n n n n n n n n n h y k k k k k f x y hk h k f x y hk h k f x y k f x h y hk +⎧=+++⎪⎪

=⎪⎪

⎛⎫

⎪=++ ⎪⎨⎝⎭⎪

⎪⎛⎫=++ ⎪⎪⎝⎭⎪

⎪=++⎩ (18)

这就是常用的 4 阶龙格—库塔方法(简称 RK 方法)。

§5 线性多步法

以上所介绍的各种数值解法都是单步法,这是因为它们在计算 1n y + 时,都只用到前一步的值n y ,单步法的一般形式是

1(,,)(0,1,

,1)n n n n y y x n y h h N ϕ+=+=-

(19)

其中 (,,)n n x y h ϕ 称为增量函数,例如 Euler 方法的增量函数为 f (x , y ),改进 Euler 法的增

量函数为

1(,,)[(,)(,(,))]2

x y h f x y f x h y hf x y ϕ=+++

如何通过较多地利用前面的已知信息,如 1,,

,n n n r y y y -- ,来构造高精度的算法计算

1n y + ,这就是多步法的基本思想。经常使用的是线性多步法。

让我们试验一下 r = 1,即利用 1,n n y y - 计算 1n y + 的情况。 从用数值积分方法离散化方程的(4)式

1

1()()(,())n n

x n n x y x y x f x y x dx ++-=⎰

出发,记 (),n n n f x y f = ,()111,n n n f x y f ---=,式中被积函数 f (x , y (x )) 用二节点

11,()n n x f -- ,(),n n x f 的插值公式得到(因n x x ≥ ),所以是外插。

()()11

1111(,())1

n n

n n n n n n

n n n n x x x x f x y x f f x x x x x x f x x f h --------=+--=

---⎡⎤⎣

⎦ (20)

此式在区间 1][,n n x x + 上积分可得

1

13(,())22

n n

x n n x h h

f x y x dx f f +-=

-⎰

于是得到

11(3)2

n n n n h

y y f f +-=+-

(21) 注意到插值公式(20)的误差项含因子1)(()n n x x x x ---,在区间 1][,n n x x + 上积分后得出

-7-

3h ,故公式(21)的局部截断误差为3()O h ,精度比向前 Euler 公式提高 1 阶。

若取 r = 2,3,…可以用类似的方法推导公式,如对于r = 3有

1123(5559379)24

n n n n n n h

y y f f f f +---=+-+-

(22) 其局部截断误差为5

()O h 。

如果将上面代替被积函数 f (x , y (x )) 用的插值公式由外插改为内插,可进一步减小误差。内插法用的是 11,,,n n n r y y y +-+ ,取 r = 1时得到的是梯形公式,取 r = 3 时可得

1112(9195)24

n n n n n n h

y y f f f f ++--=++-+

(23) 与(22)式相比,虽然其局部截断误差仍为 5

()O h ,但因它的各项系数(绝对值)大为减小,误差还是小了。当然,(23)式右端的 1n f + 未知,需要如同向后 Euler 公式一样,用迭代或

校正的办法处理。 §6 一阶微分方程组与高阶微分方程的数值解法

6.1 一阶微分方程组的数值解法 设有一阶微分方程组的初值问题

()

120,,,,(1,2,,)()i i m i

i y f x y y y i m y a y '⎧==⎨

=⎩ (24) 若记1201020012(,,

,),(,,,),(,,,)T T T m m m y y y y y y y y f f f f === ,则初值问题(24)

可写成如下向量形式

(,)

()f x y y a y y '⎧=⎨

=⎩ (25)

如果向量函数 f (x , y )在区域 D :

,

m a x b y R ≤≤∈

连续,且关于 y 满足 Lipschitz 条件,即存在L > 0,使得对∀x ∈[a ,b ],12,m

y y R ∈ ,都有

()(

)1212,,f x y f x y L y y -≤-

那么问题(25)在 [a ,b ] 上存在唯一解 y = y (x )。

问题(25)与(1)形式上完全相同,故对初值问题(1)所建立的各种数值解法可全部用于求解问题(25)。

6.2 高阶微分方程的数值解法

高阶微分方程的初值问题可以通过变量代换化为一阶微分方程组初值问题。 设有m 阶常微分方程初值问题

()()(1)(1)(1)(1)

000,,,,(),(),,()m m m m y f x y y y

a x

b y a y y a y y

a y '-'--⎧=≤≤⎪⎨===⎪⎩ (26)

引入新变量(1)

12,,,m m y y y y y y -'===,问题(26)就化为一阶微分方程初值问题

-8-

()

12

10

(1)

23

20

(2)

110

(1)

10

()()(),,,()m m m

m m m m m y y y a y y y y a y y y y a y y f x y y y a y '''---'-⎧==⎪==⎪⎪⎨⎪==⎪=

=⎪⎩

(27)

然后用 6.1 中的数值方法求解问题(27),就可以得到问题(26)的数值解。

最后需要指出的是,在化学工程及自动控制等领域中,所涉及的常微分方程组初值问题常常是所谓的“刚性”问题。具体地说,对一阶线性微分方程组

()dy

Ay x dx

=+Φ (28)

其中,m

y R Φ∈,A 为 m 阶方阵。若矩阵A 的特征值 (1,2,

,)i i m λ=满足关系

11Re 0(1,2,,)

max Re min Re i i

i

i m

i m

i m λλλ≤≤≤≤<=

则称方程组(28)为刚性方程组或 Stiff 方程组,称数

11max Re min Re i i i m

i m

s λλ≤≤≤≤=

为刚性比。对刚性方程组,用前面所介绍的方法求解,都会遇到本质上的困难,这是由数值方法本身的稳定性限制所决定的。理论上的分析表明,求解刚性问题所选用的数值方法最好是对步长 h 不作任何限制。 §7 Matlab 解法

7.1 Matlab 数值解

7.1.1 非刚性常微分方程的解法

Matlab 的工具箱提供了几个解非刚性常微分方程的功能函数,如 ode45,ode23,ode113,其中 ode45 采用四五阶 RK 方法,是解非刚性常微分方程的首选方法,ode23采用二三阶 RK 方法,ode113 采用的是多步法,效率一般比 ode45 高。

Matlab 的工具箱中没有 Euler 方法的功能函数。 (I )对简单的一阶方程的初值问题

00

(,)

()f x y y y x y '⎧=⎨

=⎩ 改进的 Euler 公式为

()()()1,,12

p n n n q n n p n p q y y hf x y y y hf x h y y y y +⎧

⎪=+⎪⎪

=++⎨⎪

⎪=+⎪⎩ 我们自己编写改进的 Euler 方法函数 eulerpro.m 如下:

function [x,y]=eulerpro(fun,x0,xfinal,y0,n); if nargin<5,n=50;end h=(xfinal-x0)/n;

-9-

x(1)=x0;y(1)=y0; for i=1:n

x(i+1)=x(i)+h;

y1=y(i)+h*feval(fun,x(i),y(i)); y2=y(i)+h*feval(fun,x(i+1),y1); y(i+1)=(y1+y2)/2; end

例1 用改进的 Euler 方法求解

2222,(00.5),(0)1y x x x y y '=-++≤≤=

解 编写函数文件 doty.m 如下: function f=doty(x,y); f=-2*y+2*x^2+2*x;

在 Matlab 命令窗口输入: [x, y] =eulerpro('doty',0,0.5,1,10) 即可求得数值解。

(II )ode23,ode45,ode113的使用 Matlab 的函数形式是

[t, y] =solver ('F', tspan ,y0)

这里 solver 为 ode45,ode23,ode113,输入参数 F 是用M 文件定义的微分方程 y '= f (x , y ) 右端的函数。tspan= [t0, tfinal] 是求解区间,y0是初值。

例2 用 RK 方法求解

2222,(00.5),(0)1y x x x y y '=-++≤≤=

解 同样地编写函数文件doty.m 如下: function f=doty(x,y); f=-2*y+2*x^2+2*x;

在Matlab 命令窗口输入: [x, y] =ode45('doty',0,0.5,1) 即可求得数值解。

7.1.2 刚性常微分方程的解法

Matlab 的工具箱提供了几个解刚性常微分方程的功能函数,如ode15s ,ode23s ,ode23t ,ode23tb ,这些函数的使用同上述非刚性微分方程的功能函数。

7.1.3 高阶微分方程 ()(1)

(,,,,)n n y y f t y y

'-=解法 例3 考虑初值问题

30(0)1(0)1y y y y y y '''''''-+===-

解 (i )如果设123,,y y y y y y '''

===,那么

12123

23

3213(0)0(0)13(0)1

y y y y y y y y y y

y ''

'⎧==⎪==⎨⎪=+=-⎩

初值问题可以写成 Y '= F (t ,Y ), 0(0)Y Y = 的形式,其中

123[;;]Y y y y =。

(ii )把一阶方程组写成接受两个参数t 和y ,返回一个列向量的M 文件F.m : function dy=F(t,y);

dy=[y(2);y(3);3*y(3)+y(2)*y(1)];

-10-

注意:尽管不一定用到参数t 和y ,M —文件必须接受此两参数。这里向量dy 必须是列向量。

(iii )用 Matlab 解决此问题的函数形式为

[T,Y]=solver('F',tspan,y0)

这里solver 为ode45、ode23、ode113,输入参数F 是用M 文件定义的常微分方程组, tspan= [t0 tfinal] 是求解区间,y0 是初值列向量。在 Matlab 命令窗口输入

[T,Y]=ode45('F',[0 1],[0;1;-1])

就得到上述常微分方程的数值解。这里Y 和时刻T 是一一对应的,Y(:,1)是初值问题的 解,Y(:,2)是解的导数,Y(:,3)是解的二阶导数。

例4 求 van der Pol 方程

2(1)0y y y y μ'''--+= 的数值解,这里 0μ> 是一参数。

解 (i )化成常微分方程组。设 12,y y y y '

==,则有

12

22

1

21

(1)y y y y y y μ''==--

(ii )书写M 文件(对于1μ=)vdp1.m:

function dy=vdp1(t,y);

dy=[y(2);(1-y(1)^2)*y(2)-y(1)];

(iii )调用 Matlab 函数。对于初值 y (0) = 2, y '(0) = 0,解为 [T,Y]=ode45('vdp1',[0 20],[2;0]);

(iv )观察结果。利用图形输出解的结果: plot(T,Y(:,1),'-',T,Y(:,2),'--')

title('Solution of van der Pol Equation,mu=1'); xlabel('time t');

ylabel('solution y'); legend('y1','y2');

例 5 van der Pol 方程 1000μ=(刚性) 解 (i)书写 M 文件 vdp1000.m:

function dy=vdp1000(t,y);

dy=[y(2);1000*(1-y(1)^2)*y(2)-y(1)];

-11-

(ii )观察结果

[t,y]=ode15s('vdp1000',[0 3000],[2;0]);

plot(t,y(:,1),'o')

title('Solution of van der Pol Equation,mu=1000');

xlabel('time t');

ylabel('solution y(:,1)');

7.2 常微分方程的解析解

在 Matlab 中,符号运算工具箱提供了功能强大的求解常微分方程的符号运算命令 dsolve 。常微分方程在Matlab 中按如下规定重新表达:

符号 D 表示对变量的求导。Dy 表示对变量y 求一阶导数,当需要求变量的n 阶导数时,用 Dn 表示,D4y 表示对变量 y 求 4 阶导数。

由此,常微分方程 y ''+2y '= y 在 Matlab 中,将写成'D2y+2*Dy=y'。

7.2.1 求解常微分方程的通解

无初边值条件的常微分方程的解就是该方程的通解。其使用格式为:

dsolve('diff_equation')

dsolve(' diff_equation','var')

式中diff_equation 为待解的常微分方程,第 1 种格式将以变量t 为自变量进行求解,第 2 种格式则需定义自变量var 。

例6 试解常微分方程

2(2)0x y x y y '++-=

解 编写程序如下:

syms x y

diff_equ='x^2+y+(x-2*y)*Dy=0';

dsolve(diff_equ,'x')

7.2.2 求解常微分方程的初边值问题

求解带有初边值条件的常微分方程的使用格式为:

dsolve('diff_equation','condition1,condition2,…','var')

其中condition1,condition2,… 即为微分方程的初边值条件。

例7 试求微分方程

y '''−y ''= x , y (1) = 8, y '(1) = 7, y ''(2) = 4

的解。

解 编写程序如下:

y=dsolve('D3y-D2y=x','y(1)=8,Dy(1)=7,D2y(2)=4','x')

7.2.3 求解常微分方程组

求解常微分方程组的命令格式为:

dsolve('diff_equ1,diff_equ2,…','var')

dsolve('diff_equ1,diff_equ2,…','condition1,condition2,…','var')

第1 种格式用于求解方程组的通解,第2 种格式可以加上初边值条件,用于具体求解。

例8 试求常微分方程组:

3sin cos f g x g f x

''''⎧+=⎨+=⎩ 的通解和在初边值条件为 f '(2) = 0, f (3) = 3, g (5) = 1的解。

解 编写程序如下:

clc,clear

-12-

equ1='D2f+3*g=sin(x)';

equ2='Dg+Df=cos(x)';

[general_f,general_g]=dsolve(equ1,equ2,'x')

[f,g]=dsolve(equ1,equ2,'Df(2)=0,f(3)=3,g(5)=1','x')

7.2.4 求解线性常微分方程组

(i )一阶齐次线性微分方程组

11111,,n n n nn x a a X AX X A x a a ⎡⎤⎡⎤⎢⎥⎢⎥'===⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦

这里的 ’ 表示对 t 求导数。At e 是它的基解矩阵。 X AX '=,00()X t X = 的解为0()0()A t t X t e X -= 。

例9 试解初值问题

2131021,(0)20021X X X ⎡⎤⎡⎤⎢⎥⎢⎥'=-=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦

解 编写程序如下:

syms t

a=[2,1,3;0,2,-1;0,0,2];

x0=[1;2;1];

x=expm(a*t)*x0

(ii )非齐次线性方程组

由参数变易法可求得初值问题

00(),

()X AX f t X t X '=+=

的解为 00

()()0()()t A t t A t s t X t e X e f s ds --=+⎰ 例10 试解初值问题

100002120,(0)1321cos 21t X X X e t ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥'=-+=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦

解 编写程序如下:

clc,clear

syms t s

a=[1,0,0;2,1,-2;3,2,1];ft=[0;0;exp(t)*cos(2*t)];

x0=[0;1;1];

x=expm(a*t)*x0+int(expm(a*(t-s))*subs(ft,s),s,0,t);

x=simple(x)

习 题 十 五

1. 用欧拉方法和龙格—库塔方法求微分方程数值解,画出解的图形,对结果进行分析

-13-

比较。

(i )2222()0,2,22x y xy x n y y y πππ⎛⎫⎛⎫''''++-===- ⎪ ⎪⎝⎭⎝⎭

(Bessel 方程,令12

n =

),精确解sin y = 。

(ii )cos 0,(0)1,(0)0y y x y y '''+===,幂级数解

24681295512!4!6!8!

y x x x x =-

+-+

- 2. 一只小船渡过宽为 d 的河流,目标是起点 A 正对着的另一岸 B 点。已知河水流速 1v 与船在静水中的速度 2v 之比为 k 。 (i )建立小船航线的方程,求其解析解。

(ii )设 d = 100 m , 1v =1 m/s , 2v =2 m/s ,用数值解法求渡河所需时间、任意时刻小船的位置及航行曲线,作图,并与解析解比较。

常微分方程数值解法

第五章 常微分方程数值解法 §1引言 在实际工作中常常会遇到求解常微分方程的定解问题。虽然我们已经学过一些常微分方程的定解问题的解法,但是那只是对一些特殊类型的方程给出了解析方法。而实际问题中归纳出来的常微分方程往往不能用解析方法来求解。有时虽然能求出其解析式子,但真要求它在某一点的值时,还会遇到一些麻烦。见下例。 例 已知初值问题???=-='0)0(21y xy y 求其解。 易知,dx e e x y x t x ?-=02 2)(。若要求它在某 一点的值,还要求 积分,而这个积分是不能求出的,需要用数值积分来求解。因此不如直接用数值解法求其解了。以下我们就研究常微分方程的数值解法。 本章主要考虑下列一阶方程的定解问题(又称初值问题)。 ???=='0 0)() ,(y x y y x f y (1-1) 这里假设函数),(y x f 满足Lipschitz (李卜西兹)条件。即),(y x f 满足: y y L y x f y x f -≤-),(),( 其中,L 为某一常数。这是保证问题(1-1)有唯一解。下面就研究关于问题(1-1)的数值解法。

所谓数值解法,就是直接寻求解函数)(x y 在一系列离散点 <<<<<+121n n x x x x 上的近似值1y ,2y ,…,n y ,1+n y ,…。其中,i i i h x x =-+1称为步长,今后如果不特殊说明,我们总是假定是等步长的。即有 h x x i i =-+1 ,此时节点nh x x n +=0, ,2,1,0=n 。由于00)(y x y =为已知,所以自然设想利用这个已知信息求出)(1x y 的 近似值1y ,然后由1y 求得)(2x y 的近似值2y ,如此继续下去,这就是初值问题数值解法的一般思想。称为“步进法”。 §2 Euler 方法(折线法) 2-1 Euler 公式 这一方法是初值问题数值解中最简单的一个方法,其精度不高。所以实际计算中很少应用。但在某种程度上反映了数值方法的基本思想,且在此基础上得到的某些改进的方法目前还在使用,因此我们有必要介绍一下这种方法。 Euler 公式的推导方法很多,在此我们用Tarlor 展开的方法。 ∵ )()(1h x y x y n n +=+)(! 2)()(2 n n n y h h x y x y ξ''+'+= 其中,),(1+∈n n n x x ξ ,由(1-1)式知, )(! 2)](,[)()(2 1n n n n n y h x y x hf x y x y ξ''++=+ ,2,1,0=n 当h 充分小时,略去)(! 22 n y h ξ'',即得 )](,[)()(1n n n n x y x hf x y x y +≈+ 取近似,并写成等式得,

常微分方程数值解法

第八章 常微分方程的数值解法 一.内容要点 考虑一阶常微分方程初值问题:?????==0 0)() ,(y x y y x f dx dy 微分方程的数值解:设微分方程的解y (x )的存在区间是[a,b ],在[a,b ]内取一系列节 点a= x 0< x 1<…< x n =b ,其中h k =x k+1-x k ;(一般采用等距节点,h=(b-a)/n 称为步长)。在每个节点x k 求解函数y(x)的近似值:y k ≈y(x k ),这样y 0 , y 1 ,...,y n 称为微分方程的数值解。 用数值方法,求得f(x k )的近似值y k ,再用插值或拟合方法就求得y(x)的近似函数。 (一)常微分方程处置问题解得存在唯一性定理 对于常微分方程初值问题:?????==0 0)() ,(y x y y x f dx dy 如果: (1) 在B y y A x x 00≤-≤≤,的矩形内),(y x f 是一个二元连续函数。 (2) ),(y x f 对于y 满足利普希茨条件,即 2121y y L y x f y x f -≤-),(),(则在C x x 0≤≤上方程?????==0 0)() ,(y x y y x f dx dy 的解存在且唯一,这里C=min((A-x 0),x 0+B/L),L 是利普希茨常数。 定义:任何一个一步方法可以写为),,(h y x h y y k k k 1k Φ+=+,其中),,(h y x k k Φ称为算法的增量函数。 收敛性定理:若一步方法满足: (1)是p 解的. (2) 增量函数),,(h y x k k Φ对于y 满足利普希茨条件. (3) 初始值y 0是精确的。则),()()(p h O x y kh y =-kh =x -x 0,也就是有 0x y y lim k x x kh 0h 0 =--=→)( (一)、主要算法 1.局部截断误差 局部截断误差:当y(x k )是精确解时,由y(x k )按照数值方法计算出来的1~ +k y 的误差y (x k+1)- 1~ +k y 称为局部截断误差。 注意:y k+1和1~ +k y 的区别。因而局部截断误差与误差e k +1=y (x k +1) -y k +1不同。 如果局部截断误差是O (h p+1),我们就说该数值方法具有p 阶精度。

(整理)常微分方程数值解法

i.常微分方程初值问题数值解法 i.1 常微分方程差分法 考虑常微分方程初值问题:求函数()u t 满足 (,), 0du f t u t T dt =<≤ (i.1a ) 0(0)u u = (i.1b) 其中(,)f t u 是定义在区域G : 0t T ≤≤, u <∞上的函数,0u 和T 是给定的常数。我们假设(,)f t u 对u 满足Lipschitz 条件,即存在常数L 使得 121212(,)(,), [0,]; ,(,)f t u f t u L u u t T u u -≤-?∈∈-∞∞ (i.2) 这一条件保证了(i.1)的解是适定的,即存在,唯一,而且连续依赖于初值0u 。 通常情况下,(i.1)的精确解不可能用简单的解析表达式给出,只能求近似解。本章讨论常微分方程最常用的近似数值解法--差分方法。先来讨论最简单的Euler 法。为此,首先将求解区域[0,]T 离散化为若干个离散点: 0110N N t t t t T -=<<<<=L (i.3) 其中n t hn =,0h >称为步长。 在微积分课程中我们熟知,微商(即导数)是差商的极限。反过来,差商就是微商的近似。在0t t =处,在(i.1a )中用向前差商 10()()u t u t h -代替微商du dt ,便得 10000()()(,())u t u t hf t u t ε=++ 如果忽略误差项0ε,再换个记号,用i u 代替()i u t 便得到 1000(,)u u hf t u -= 一般地,我们有 1Euler (,), 0,1,,1n n n n u u hf t u n N +=+=-L 方法: (i.4) 从(i.1b) 给出的初始值0u 出发,由上式可以依次算出1,,N t t L 上的差分解1,,N u u L 。

算法大全第15章_常微分方程的解法

-1- 第十五章 常微分方程的解法 建立微分方程只是解决问题的第一步,通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以肯定得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来”的,即使看起来非常简单的方程如 22dy y x dx =+,于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。 §1 常微分方程的离散化 下面主要讨论一阶常微分方程的初值问题,其一般形式是 (,)()dy f x y a x b dx y a y ⎧=≤≤⎪⎨⎪=⎩ (1) 在下面的讨论中,我们总假定函数(,)f x y 连续,且关于y 满足李普希兹(Lipschitz)条件, 即存在常数L ,使得 |(,)(,)|||f x y f x y L y y -≤- 这样,由常微分方程理论知,初值问题(1)的解必定存在唯一。 所谓数值解法,就是求问题(1)的解 y (x )在若干点 012N a x x x x b =<<< <= 处的近似值(1,2, ,)n y n N =的方法,(1,2, ,)n y n N = 称为问题(1)的数值解, 1n n n h x x +-=称为由n x 到1n x +的步长。今后如无特别说明,我们总取步长为常量h 。 建立数值解法,首先要将微分方程离散化,一般采用以下几种方法: (i )用差商近似导数 若用向前差商 ()() 1n n y x y x h +-代替()n y x '代入(1)中的微分方程,则得 ()() ()()1,(0,1,)n n n n y x y x f x y x n h +-≈= 化简得 ()()()()1,n n n n y x y x hf x y x +≈+ 如果用()n y x 的近似值n y 代入上式右端,所得结果作为()1n y x +的近似值,记为1n y +, 则有 ()1,(0,1,)n n n n y y hf x y n +=+= (2) 这样,问题(1)的近似解可通过求解下述问题 ()10 ,(0,1,) ()n n n n y y hf x y n y y a +⎧=+=⎨ =⎩ (3) 得到,按式(3)由初值0y 可逐次算出1y ,2y ,…。式(3)是个离散化的问题,称为差 分方程初值问题。 需要说明的是,用不同的差商近似导数,将得到不同的计算公式。

常微分方程常用数值解法.

第一章绪论 1.1 引言 常微分方程是现代数学的一个重要分支,是人们解决各种实际问题的有效工具。微分方程的理论和方法从17世纪末开始发展起来,很快成了研究自然现象的强有力工具,在17到18世纪,在力学、天文、科学技术、物理中,就已借助微分方程取得了巨大的成就。1864年Leverrer根据这个方程预见了海王星的存在,并确定出海王星在天空中的位置。现在,常微分方程在许多方面获得了日新月异的应用。这些应用也为常微分方程的进一步发展提供了新的问题,促使人们对微分方程进行更深入的研究,以便适应科学技术飞速发展的需要。 研究常微分方程常用数值解是数学工作者的一项基本的且重要的工作。在国内外众多数学家的不懈努力,使此学科基本上形成了一套完美的体系。微分方程的首要问题是如何求一个给定方程的通解或特解。到目前为止,人们已经对许多微分方程得出了求解的一般方法。由于在生产实际和科学研究中所遇到的微分方程问题比较复杂,使这些问题的解即使能求出解析表达式,也往往因计算量太大而难于求出,而对于一些典型的微分方程则可以运用基本方法求出其解析解,并可以根据初值问题的条件把其中的任意常数确定下来。 由于求通解存在许多困难,人们就开始研究带某种定解条件的特解。首先是Cauchy对微分方程初始解的存在惟一性进行了研究。目前解的存在惟一性、延拓性、大范围的存在性以及解对初始解和参数的延续性和可微性等理论问题都已发展成熟。与此同时,人们开始采取各种近似方法来求微分方程的特解,例如求微分方程数值解的Euler折线法、Runge-Kutta法等,可以求得若干个点上微分方程的近似解。最后,由于当代高科技的发展为数学的广泛应用和深入研究提供了更好的手段。用计算机结合Matlab软件求方程的精确解、近似解,对解的性态进行图示和定性、稳定性研究都十分方便有效。 本章先介绍常微分的一般概念、导出微分方程的一些典型例子及求解微分方程的思路分析。从而得到常微分方程的常用数值解法。

各类微分方程的解法大全

各类微分方程的解法 1.可分离变量的微分方程解法 一般形式:g(y)dy=f(x)dx 直接解得∫g(y)dy=∫f(x)dx 设g(y)及f(x)的原函数依次为G(y)及F(x),则G(y)=F(x)+C为微分方程的隐式通解 2.齐次方程解法 一般形式:dy/dx=φ(y/x) 令u=y/x则y=xu,dy/dx=u+xdu/dx,所以u+xdu/dx=φ(u),即du/[φ(u)-u]=dx/x两端积分,得∫du/[φ(u)-u]=∫dx/x 最后用y/x代替u,便得所给齐次方程的通解 3.一阶线性微分方程解法 一般形式:dy/dx+P(x)y=Q(x) 先令Q(x)=0则dy/dx+P(x)y=0解得y=Ce- ∫P(x)dx,再令y=u e-∫P(x)dx代入原方程 解得u=∫Q(x) e∫P(x)dx dx+C,所以y=e-∫P(x)dx[∫Q(x)e∫P(x)dx dx+C] 即y=Ce-∫P(x)dx +e- ∫P(x)dx∫Q(x)e∫P(x)dx dx为一阶线性微分方程的通解 4.可降阶的高阶微分方程解法 ①y(n)=f(x)型的微分方程 y(n)=f(x) y(n-1)= ∫f(x)dx+C1 y(n-2)= ∫[∫f(x)dx+C1]dx+C2 依次类推,接连积分n次,便得方程y(n)=f(x)的含有n个任意常数的通解②y”=f(x,y’) 型的微分方程 令y’=p则y”=p’,所以p’=f(x,p),再求解得p=φ(x,C1) 即dy/dx=φ(x,C1),所以y=∫φ(x,C1)dx+C2

③y”=f(y,y’) 型的微分方程 令y’=p则y”=pdp/dy,所以pdp/dy=f(y,p),再求解得p=φ(y,C1) 即dy/dx=φ(y,C1),即dy/φ(y,C1)=dx,所以∫dy/φ(y,C1)=x+C2 5.二阶常系数齐次线性微分方程解法 一般形式:y”+py’+qy=0,特征方程r2+pr+q=0 6.二阶常系数非齐次线性微分方程解法 一般形式: y”+py’+qy=f(x) 先求y”+py’+qy=0的通解y0(x),再求y”+py’+qy=f(x)的一个特解y*(x) 则y(x)=y0(x)+y*(x)即为微分方程y”+py’+qy=f(x)的通解 求y”+py’+qy=f(x)特解的方法: ①f(x)=P m(x)eλx型 令y*=x k Q m(x)eλx[k按λ不是特征方程的根,是特征方程的单根或特征方程的重根依次取0,1或2]再代入原方程,确定Q m(x)的m+1个系数 ②f(x)=eλx[Pl(x)cosωx+P n(x)sinωx]型 令y*=x k eλx[Q m(x)cosωx+R m(x)sinωx][m=max﹛l,n﹜,k按λ+iω不是特征方程的根或是特征方程的单根依次取0或1]再代入原方程,分别确定Q m(x)和R m(x)的m+1个系数

常微分方程数值解法

介绍常微分方程数值解法 常微分方程(ordinary differential equations,ODE)可用于描述许多日常存在的 物理系统。处理ODE问题常常被称为数值求解法,这指的是找到概括ODE或者其他适用于数学模型的解决方案来模括这些ODE。这种解决方案可能在一系列不同 方案中发挥重要作用,以此来提供更好的解释和预测。 常微分方程与几何图形更为相关,它利用二维或者三维空间中曲线的绘制以及分析。通过引入一些不同的方法,可以对不同的常微分方程中的量进行描述,使得可以通过数值方法的解析来进行研究。数值解法可能是时间消耗较多的,但有助于验证几何图形中的某些过程,以此帮助揭示数学模型。 四种常见的常微分方程数值解法 四种常见的常微分方程数值解法是:前向差分法、向后差分法、中点法和全分方法。•前向差分法:前向差分法的基本概念是利用ODE的特定解来表达时间步的影响。这是一种基本的数值法,可以在ODE中确定任意位置的点作为终点。 在这里,任何这样的点都可以表示为ODE右边的时间步。 •向后差分法:它是反过来基于前向差分法。它要求对ODE中的时间步进行逆向推导,以获得某一特定点的解。向后差分法要求推导反向解中点,以便 可以从每一步中获取该点的解。 •中点法:这是一种非常基本的数值解法,可以用来求解ODE中的某一步的解,但不具有直观的方法解释。主要的思想是在每一次时间步中通过求出 ODE的中点来寻找解。 •全分方法:这是一种更复杂的数值解法,它要求将ODE中的每一步解细分并解决。与前面提到的三种解法不同,它首先要求将ODE分解成若干离散 区间,然后计算每一段区间中的点。这种解法可以更准确地进行处理,但时 间消耗较多,因此比较少被使用。 优化方案 在需要解决常微分方程时,为了得到最佳的结果,有必要考虑一些优化措施。 •首先,应考虑将一个复杂的ODE拆分成一些更易解决的问题。这样做的结果是,预见到解决此ODR的总耗时将会降低。 •其次,为了加快计算速度,可以考虑使用预解算法。这种算法包括在ODE 中寻找某一特定解后,使用其他算法可以利用这个确定的解来解决其他 ODE的问题。这样可以实现多项式的减少,从而节约时间。

线性常微分方程的级数解法

线性常微分方程的级数解法 第四章 线性常微分方程的级数解法 4.1 常点邻域之级数解法① 常点邻域的级数解概念 ---- (二阶线性常微分方程的一般形式) 0)()(=+'+''w z q w z p w (4.1) ----(常点概念)对于式(4.1)中,若)(z p 与 )(z q 在某点及其邻域内解析,则称此点为常点; 反之,若)(z p 与)(z q 至少一个在该点不解析,则称此点为奇点。 ----(常点邻域内解的存在定理)若)(z p 与 ) (z q 在 R z z <-0内单值解析,则方程(4.1)在 R z z <-0内存在单值唯一的解析解。 ----(常点0z 邻域内之级数解的一般形式)若 )(z p 与)(z q 在R z z <-0内单值解析,则对于式 (4.1),可设级数解∑∞ =-=0 0)(n n n z z a w ,再将 ) (z p 与 )(z q 在R z z <-0内展为泰勒级数,代入式(4.1)以 确定级数解之待定系数。 ② 勒让德方程之级数解 ----(勒让德方程形式) 0)1(2)1(2=++'-''-y l l y x y x (4.2) ----(在常点0=x 邻域内的级数解)分析:由1 2)(2-=

x x x p 及2 1) 1()(x l l x q -+=,可知0=x 为常点;故可设:∑∞==0 n n n x a y , 相应:∑∞ =-='1 1 n n n x na y ,∑∞ =--=''2 2)1(n n n x a n n y , 代入方程(4.2),得: )1(2)1()1)(2(0 2=++--- ++∑∑∑∑∞ =∞ =∞ =∞ =+n n n n n n n n n n n n x a l l x na x a n n x a n n ,即: n n a l l n n a n n )()1)(2(222--+=+++,或n n a n n l n l n a ) 1)(2() 1)((2++++-=+;显然有:

数值分析小论文 土木工程学院-常微分方程数值解法

题目:常微分方程数值解法在钢筋混凝土 梁变形分析的应用 算法:常微分方程数值解法 组号:第9组 组员:马宁涛邵鹏飞王丽君申陆林郭娜王倩聂广虎

常微分方程数值解法在钢筋混凝土梁变形分析的应用 邵鹏飞,马宁涛,申陆林,聂广虎 (河南理工大学土木工程学院河南焦作454003) 摘要:为了获得钢筋混凝土梁变形的规律,运用常微分方程数值解法,使用Matlab数值分析软件,根据实验数据对均布荷载集度在简支梁上不同位置所产生的弯矩值和挠度值的关系进行了函数分析,得出在保证梁的强度及其安全变形条件下,找到梁上最危险点,并提出了相关的措施建议。结果表明:简支梁的位置中点处即为梁上最薄弱、危险位置。这个规律可以有针对性的对钢筋混凝土梁进行加固处理提供理论依据,使梁具有更强的耐久性、抗拉及抗压性。 关键词:Matlab;材料力学;结构力学;数值分析;裂缝 Using the Numerical Method for Ordinary Differential Equations to Distort the Analysis Application In the Simple Reinforced Concrete Beam Shao Pengfei,Ma Ningtao,Shen Lulin,Nie Guanghu (School of Civil Engineering, Henan Polytechinc University, Jiaozuo, Henan, China, 454003) Abstract:In order to obtain the rule which the simple reinforced concrete beam distorts, using the numerical method for ordinary differential equations,and the Matlab numerical analysis software,having carried on the functional analysis to the relationship of bending moment value and amount of deflection value which is produced by equispaced load collection in the simple beam different position according to the experimental data,obtaining to find the most hazard point of the simple beam in guaranteeing the simple beam's intensity and the safe distortion condition,and statementing the related measure suggestions.The results indicate that the simple beam's center point position is the simple beam's weakest and most dangerous position. This rule can provide the theory basis to carry on reinforcement processing of the simple reinforced concrete beam that is target-oriented,causing the simple beam to have the stronger durability, tensile strength and compressive strength. Key words:Matlab;Materials mechanics;Structure mechanics;Numerical analysis;Crack 0.问题背景 在土木工程学科结构工程研究设计领域的钢筋混凝土梁变形分析中,绘制内力图.寻找到危险点的位置是完成梁的截面设计或强度校核的关键环节,并对此危险点提出措施进行加固,防止梁发生破坏。但在有些复杂荷载共同作用下的梁.其计算内力图的过程比较复杂,费时耗力,在计算机高速发展的今天.我们可以运用计算机软件技术辅助完成粱的内力计算和内力图的绘制,可以应用数值分析软件Matlab和Ansys,Matlab (MATrix LABoratory即矩阵实验室)是当今国际科学界最具影响力和活力的科学计算软件,具有功能强大、语言简单、扩充能力和可开发性强、编程易且效率高等特点,使科技人员从繁琐的编程过程中解脱出来,从而节省大量时间以主攻理论研究。我们可以利用Matlab软件对简支梁进行建模分析,利用其高效省时的编程代码对简支梁进行编程,快速计算出简支梁的各部位的弯矩和挠度,以及绘制其弯矩图和挠度图,找出危险点位置,即为弯矩和挠度值最大处,并对此处危险点位置进行加固处理,防止梁发生进一步的破坏,从而提高建(构)筑物的可靠性和稳定性。——————————————————————————————————————————— 作者简介:专业学位-硕士研究生,主要从事土木工程方向研究。电子邮箱:****************

常微分方程数值解法

第八章 常微分方程数值解法 教学目的 1. 掌握解常微分方程的单步法:Euler 方法、Taylor 方法和Runge-Kutta 方法;2. 掌握解常微分方程的多步法:Adams 步法、Simpson 方法和Milne 方法等;3. 了解单步法的收敛性、相容性与稳定性;多步法的稳定性。 教学重点及难点 重点是解常微分方程的单步法:Euler 方法、Taylor 方法和Runge-Kutta 方法和解常微分方程的多步法:Adams 步法、Simpson 方法和Milne 方法等;难点是理解单步法的收敛性、相容性与稳定性及多步法的稳定性。 教学时数 20学时 教学过程 §1基本概念 1.1常微分方程初值问题的一般提法 常微分方程初值问题的一般提法是求函数b x a x y ≤≤),(,满足 ⎪⎩⎪⎨⎧=<<=) 2.1()()1.1(),,(α a y b x a y x f dx dy 其中),(y x f 是已知函数,α是已知值。 假设),(y x f 在区域},),{(+∞<≤≤=y b x a y x D 上满足条件: (1)),(y x f 在D 上连续; (2) ),(y x f 在D 上关于变量y 满足 Lipschitz 条件: 2121),(),(y y L y x f y x f -≤-, 21,,y y b x a ∀≤≤ (1.3) 其中常数L 称为Lipschitz 常数。我们简称条件(1)、(2)的基本条件。 由常微分方程的基本理论,我们有: 定理1 当),(y x f 在D 上满足基本条件时,一阶常微分方程初值问题(1.1)、(1.2)对任意给定α存在唯一解)(x y 在],[b a 上连续可微。 定义1 方程(1.1)、(1.2)的解)(x y 称为适定的,若存在常数0>ε和0>K ,对任意满足条件εδ≤及 εη≤∞)(x 的δ和)(x η,常微分方程初值问题

matlab追赶法解常微分方程

研究领域:数学、计算机科学 文章标题:深入探讨matlab追赶法解常微分方程 在数学和计算机科学领域中,常微分方程是一个重要且广泛应用的课题。而matlab追赶法作为常微分方程的求解方法,在实际应用中具有重要意义。本文将以深度和广度兼具的方式,对matlab追赶法解常微分方程这一主题展开全面评估,并撰写一篇有价值的文章,同时结合个人观点和理解,为读者提供深刻的思考。 一、matlab追赶法解常微分方程简介 1.1 matlab追赶法基本原理 matlab追赶法,又称托马斯算法,是一种用于求解三对角线性方程组的方法。在常微分方程的数值解法中,常常会遇到需要求解三对角线性方程组的情况,而matlab追赶法正是针对这一问题而提出的高效算法。 1.2 追赶法在常微分方程求解中的应用 常微分方程在实际问题中有着广泛的应用,而求解常微分方程的过程中往往需要用到追赶法。追赶法不仅可以提高计算效率,还可以有效地解决数值稳定性和精度的问题,因此在工程和科学计算中得到了广泛的应用。

二、深入探讨matlab追赶法解常微分方程 2.1 算法实现及优化 matlab追赶法的实现涉及到矩阵运算、追赶过程和追赶系数的求解等关键步骤。如何针对不同类型的方程组进行算法优化,是一个需要深入探讨的问题。通过优化算法,可以提高追赶法的计算效率和数值稳定性,使其在常微分方程求解中发挥更大的作用。 2.2 算法的数值分析 通过数值分析,可以更加深入地了解matlab追赶法在解常微分方程过程中的数值特性。包括收敛性、稳定性、误差分析等方面,这些都是影响算法性能和应用效果的重要因素,需要进行深入的研究和分析。 三、对matlab追赶法解常微分方程的个人观点和理解 3.1 算法的优势与局限性 matlab追赶法作为一种高效的求解算法,具有较好的稳定性和精度,特别适合于大规模的常微分方程求解。但在某些特定问题上,追赶法的适用性和效率仍然存在局限性,需要进行合理的选择和应用。 3.2 算法的未来发展方向 随着计算机科学和数值计算的不断发展,matlab追赶法也需要不断优

《常微分方程的数值解法》论文

《常微分方程的数值解法》论文 《常微分方程的数值解法》 常微分方程(ODE)是研究物理过程的重要工具,其伴随着 极大的应用价值。当一个物理系统被简化为一个常微分方程,它就可以用于描述物理学中的各种现象。但是,大多数现实系统的常微分方程未能得到解析解,因此,数值解法就变得非常重要。本文将研究并比较几种常见的常微分方程数值解法,诸如Euler法、奇异点法、Runge-Kutta法、前向差分法等,以便更好地提供协助解决常微分方程。 首先,Euler法是常用的数值解法之一,它主要用于解决常微 分方程模型。其核心思想是将微分方程通过采用不断变化的步长对状态量求近似值,并通过预测下一步的值来求解微分方程,从而达到求解常微分方程的目的,且操作简单、容易理解。但是,由于其步长的不动性,往往使得其精度较低,因此,当遇到复杂环境时,Euler法的表现就有些不尽如人意。 此外,另一种常见的数值解法是奇异点法。此法将一个微分方程情况分解成多个分段函数,每一段函数都可以精确求解,从而可以求解复杂的微分方程。它的特点是分段的每一部分的精度和复杂度都较低,而且运行效率也较快,但是,奇异点法的精度需要在段间合理设定,然后再进行微调,以保证数值模拟的准确性。 其次,Runge-Kutta法是一种常用的数值解法,它可以有效地 求解一些常微分方程,其原理是利用积分函数插值,然后利用

积分函数求近似值,最后根据边界条件求取解析结果。Runge-Kutta法的步长可以随着计算过程的进行而逐步变化,这样可 以使得误差得到有效控制,而且可以有效地控制误差,保证算法精度,但是由于其计算效率较低,因此在求解复杂的常微分方程时,Runge-Kutta法的表现并不尽人意。 最后,前向差分法是一种求解常微分方程的数值解法,它利用求取未知函数的一阶导数和二阶导数的值,然后通过求解一次和二次中点差分的方式,从而得到数值解。它的有点是能够得到较高的精确度,且即使步长变化时也可以控制误差,但前向差分法要求在微分方程中必须有高阶导数,这就要求微分方程是复杂的,除此之外,除了必须计算高次导数外,它的计算量也比较大。 综上所述,通过对几种常用的常微分方程数值解法的分析可知,每一种方法都有其优点和缺点,合理选择一种方法则有助于较好地求解相应的常微分方程问题。

非线性方程和常微分方程的解法

非线性方程和常微分方程的解法 非线性方程和常微分方程的解法 实验8 非线性方程和常微分方程的解法 一、实验目的 学会用MATLAB软件求解非线性方程和常微分方程。 二、实验内容与要求 1. 非线性方程的整值解 (1)最小二乘法 格式:fsolve(’fun’,x0)%求方程fun=0在估计值x附近的近似解。 [例1.72] 求方程x e 0的解。 fc=inline(‘x-exp(-x)’); xl=fsolve(fc,0) xl= 0.5671 问题1.28:求解方程5xsinx-e 0,观察知有多解,如何求之? 先用命令fplot(’5__^2*sin(x)-exp(-x),0]’,[0,10])作图1.13,注意 5__^2*sin(x)-exp(-x),0]中的“[ ,0]”是作y=0直线,即x轴。方程在[0,10]区间从图中可看出有4个解,分别在0,3,6,9附近,所以用命令:fun=inline(’5__^2*sin(x)-exp(-x)’); fsolve(fun,[0,3,6,9],le-6)

得出结果: ans= 0.5918 3.1407 6.2832 9.4248 【例1.73】求解方程组x-0.7sinx-0.2cosy=0 2-x-x y 0.7cosx 0.2siny 0 先编制函数文件fu.m: function y=fu (x) y (1)=x (1) - 0.7*sin ( x (1) ) - 0.2*cos( x (2) ) ; y (2)=x (1) - 0.7*cos (x (1) ) + 0.2*sin (x (2) ); y =[ y(1), y(2) ]; 在命令窗口调用fu运算: x1 =fsolve( ‘fu’, [0.5,0.5 ]) x1 = 0.5265 0.5079 (2) 零点法 格式:fzero('fun',x0) %求函数fun在x0附近的零点。 说明:估计值x0若为标量时,则在x0附近查找零点,x0=[x1,x2]向量时,则首先要求函数值fun(x1)fun(x2) 0,然后将严格在[x1,x2]区间内零点,若找不到,系统将给出提示。 非线性方程和常微分方程的解法 【例1.74】求函数f(x) sinx2/x xex 4 的零点。 fn =inline('sin (x^2) / x+__ exp (x) - 4' );

常微分方程的几种数值解法

常微分方程的几种数值解法 数学与应用数学肖振华指导教师张秀艳 【摘要】自然界与工程技术中的很多现象,可以归结为微分方程定解问题。其中,常微分方程求解是微分方程的重要基础内容。但是,对于许多的微分方程,往往很难得到甚至不存在精确的解析表达式,这时候,数值解提供了一个很好的解决思路。,针对于此,本文对常微分方程数值解法进行了简单研究,主要讨论了一些常用的数值解法,如欧拉法、改进的欧拉法、Runge—Kutta方法、Adams预估校正法以及勒让德谱方法等,通过具体的算例,结合MA TLAB求解画图,初步给出了一般常微分方程数值解法的求解过程。同时,通过对各种方法的误差分析,让大家对各种方法的特点与适用范围有一个直观的感受。 【关键词】常微分方程数值解法MA TLAB 误差分析 【Abstract】 Many phenomena in nature and engineering can be attributed to the definite solution of the problem for differential equations. Among them, the ordinary differential equation solving is an important foundation for the content of the differential equations. However, many of the differential equations are often difficult to obtain accurate analytical expression .At this time, the numerical solution provides a good idea. For the Numerical Solution of Ordinary Differential Equations in this article, we focuses on some commonly used numerical solution, such as the Euler method, improved Euler method, Runge-Kutta method, Adams predictor corrector method as well as newer spectral methods. Through specific examples, combined with MATLAB solving and drawing, we initially know the solution process of general numerical solution of ordinary differential equations . At the same time, according to the error analysis of various methods , everyone has an intuitive feel of the characteristics and scope of the various methods. 【Keywords】Ordinary Differential Equations Numerical Solution MATLAB error analysis

常微分方程的数值解法

第六章 常微分方程的数值解法 §6.0 引言 §6.1 算法构造的主要途径 §6.2 Runge-Kutta Method 算法 §6.3 线性多步法 §6.4 线性多步法的一般形式 §6.5 算法的稳定性、收敛性 §6.0 引 言 1. 主要考虑如下的一阶常微分方程初值问题的求解: ()()00,dy f x y dx y x y ⎧=⎪⎪⎨ =⎪⎪⎩ 微分方程的解就是求一个函数y=y(x),使得该函数满足微分方程并且符合初值条件。 2. 例如微分方程: xy '-2y=4x ;初始条件: y(1)=-3。 于是可得一阶常微分方程的初始问题 24(1)3y y x y ⎧'=+⎪⎨⎪=-⎩。 显然函数y(x)=x 2-4x 满足以上条件,因而是该初始问题 的微分方程的解。

3. 但是,只有一些特殊类型的微分方程问题能够得到用解析表达式表示的函数解,而大量的微分方程问题很难得到其解析解,有的甚至无法用解析表达式来表示。因此,只能依赖于数值方法去获得微分方程的数值解。 4. 微分方程的数值解:设微分方程问题的解y(x)的存在区间是[a,b ],初始点x 0=a ,将[a,b ]进行划分得一系列节点x 0 , x 1 ,...,x n ,其中a= x 0< x 1<…< x n =b 。 y(x)的解析表达式不容易得到或根本无法得到,我们用数值方法求得y(x)在每个节点x k 的近似值y(x k ),即y≈y(x k ),这样y 0 , y 1 ,...,y n 称为微分方程的数值解。如图所示: §6.1 算法构造的主要途径 1 欧拉公式 1.1 利用差商代替一阶导数,即 10()() x x y x y x dy dx h =-≈ , x 0 x 1 x 2 ... x n-1 x n

常微分方程数值解法综述

常微分方程数值解法 科学技术中的许多问题,在数学中往往归结为微分方程的求解问题。例如天文学中研究星体运动,空间技术中研究物体飞行等,都需要求解常微分方程初值问题。 最简单的常微分方程初值问题是 00d (,),, d (). y f x y a x b x y x y ⎧=≤≤⎪⎨⎪=⎩ ()* 定理 如果),(y x f 在区域{(,),}D x y a x b y =≤≤<∞内连续,且关于y 满足 Lipschitz 条件,那么初值问题()*的解存在且惟一。 因为数值解是求微分方程解)(x y 的近似值,所以总假定微分方程的解存在惟一,即初值问题()*中的),(y x f 满足定理的条件。 除特殊情形外,初值问题()*一般求不出解析解,即使有的能求出解析解,其函数表示式也比较复杂,计算量比较大,况且实际问题往往只要求在某一时刻解的函数值,因此,有必要研究初值问题()*的数值解法。 所谓初值问题()*的数值解法,就是寻求解)(x y 在区间],[b a 上的一系列点 <<<<

常微分方程求解的高阶方法毕业论文

常微分方程求解的高阶方法毕业论文

安徽大学江淮学院 本科毕业论文(设计) 题目:常微分方程求解的高阶方法 学生姓名:圣近学号:JB074219 院(系):计算机科学与技术专业:计算机科学与技术入学时间:2007年9月导师姓名:汪继文职称/学位:教授 导师所在单位:安徽大学计算机科学与技术学院

常微分方程的高精度求解方法 摘要 本文主要讨论了常微分方程的高精度求解方法的相关解法问题。文章首先案例引入微分方程概念,然后给出了微分方程的基本概念。科学和工程中建立数学模型时常用到微分方程。由于它们通常没有已知的解析解,因而需要求其数值近似解。先从常微分方程解析解法出发,分析解析解法在实际运用中的局限性,引入常微分方程的数值解法,呈现常微分方程数值求解的三个步骤:将问题离散化,建立或寻找一个递推格式,按步进方式计算。再从对精度需求出发从低阶数值方法到高阶数值方法进行逐步的探讨,分析各种方法的数学原理,阐述其推导方法,比较不同方法的优缺点,重点介绍实用的龙格—库塔方法、欧拉方法、休恩方法、泰勒级数法和预报—校正方法,并以编写相应程序作总结。最后,再讨论高阶常微分方程和一阶常微分方程组:一般的高阶常微分方程都可以通过相应的变量代换转化为一阶常微分方程组,一阶常微分方程的初值问题求数值解与一阶常微分方程的初值问题求数值解的方法基本相同。 关键词:龙格—库塔方法;欧拉方法;休恩方法; 泰勒级数法;预报—校正方法;

High accuracy method for solving ordinary differential equations Abstract This paper discusses the accuracy method for solving ordinary differential equations related to solution problems. The article first case to introduce the concept of differential equations, and then gives the basic concepts of differential equations. Science and engineering often use a mathematical model equations. As they often do not have known analytic solution, and thus demand for its numerical approximate solution. Start with the analytical solution of ordinary differential equations, analyzes the analytical solution of the limitations in the practical application, the introduction of numerical solution of ordinary differential equations, numerical solution of ordinary differential equations presented in three steps: discretization of the problem, create or find a

相关主题
相关文档
最新文档