改进的Euler 法收敛
Download
Report
Transcript 改进的Euler 法收敛
第二讲
常微分方程(组)
数值求解
1
主要内容
Euler 法与改进的 Euler 法
算法分析:误差与收敛性
Runge-Kutta 法
一阶常微分方程组与高阶方程
应用举例
Matlab 相关函数
2
初值问题
考虑一维经典初值问题
dy
f ( x, y)
dx
y( a ) y0
x [a, b]
问题:如何计算 y(b) 的近似值?
3
Euler 公式
Euler 公式
两边求积分可得
b
a
dy
dx
dx
b
a
f ( x , y) dx
b
y( b) y( a) f ( x, y) dx
a
b
y( b) y( a) f ( x, y) dx
a
y( a) ( b a) f ( a, y( a))
y0 (b a) f (a, y0 )
左点矩形公式
Euler 公式
4
Euler 法
Euler 法
分割区间,在每个小区间上使用 Euler 公式,逐步递推
x0
x1
x2
x i 1
y
f ( x)
o a
xi 1 xi
xn1
xi
b
x
xn
5
Euler 法
Euler 法
y( x1 ) y0 ( x1 x0 ) f ( x0 , y0 )
y1
y( x2 ) y1 ( x2 x1 ) f ( x1 , y1 )
y2
y( xn ) yn1 ( xn xn1 ) f ( xn1, yn1 )
yn
yk 1 yk ( xk 1 xk ) f ( xk , yk )
k 0, 1, 2, ..., n 1
6
几何含义
7
举例
例:用 Euler 法求解蹦极模型
cd 2
dv
g
v
m
dt
v ( 0) 0
t [0, T ]
参数取值:g = 9.81, m = 68.1, cd = 0.25
解:见 bungee.m
8
梯形法
梯形法
计算定积分时采用梯形公式,即
y( xk 1 ) y( xk )
xk 1
xk
f ( x, y) dx
梯形公式
xk 1 xk
y( x k )
f ( xk , y( xk )) f ( xk 1 , y( xk 1 ))
2
yk 1
xk 1 xk
yk
f ( xk , yk ) f ( xk 1 , yk 1 )
2
k 0, 1, 2, ..., n 1
梯形法
缺点:公式右端含有 yk+1,求解较困难
9
改进的Euler法
改进的 Euler 法
先用 Euler 法计算出 yk+1 的近似值,然后代入后端项中
yk 1 yk ( xk 1 xk ) f ( xk , yk )
yk 1
xk 1 xk
yk
f ( xk , yk ) f ( xk 1 , yk 1 )
2
k 0, 1, 2, ..., n 1
第一步称为预估,第二步称为校正
改进的 Euler 法
通常也写为:
1
yk 1 yk hk K1 K 2
hk xk 1 xk
2
其中: K1 f ( xk , yk ), K2 f ( xk hk , yk hk K1 )
10
举例
例:用 Euler 法和改进的 Euler 法解初值问题
2x
dy
y
y
dx
y(0) 1
x [0, 1]
解:见 Euler.m, EulerM.m,
Example2.m
11
主要内容
Euler 法与改进的 Euler 法
算法分析:误差与收敛性
Runge-Kutta 法
一阶常微分方程组与高阶方程
应用举例
Matlab 相关函数
12
单步法
单步法与多步法
如果在计算 yk+1 时,只需用到 yk 的值,则称为单步法
如果在计算 yk+1 时,需用到 yk , yk-1 , . . . , yk-r+1 的值(即
需要使用前 r 的点的值),则称为多步法
解初值问题的等步长单步法的一般形式
yk1 yk h xk , yk , yk1, hk
如果 中含有 yk+1 ,则称算法为隐式的,否则为显式的
显式单步法的一般形式
yk1 yk h xk , yk , hk
称 为增量函数
13
局部截断误差
定义:设 y(x) 是初值问题的精确解,则称
Rk 1 y( xk 1 ) y( xk ) hk xk , y( xk ), hk
为显式单步法的局部截断误差。
Rk+1 是局部的,因为这里假定 yk 是精确的,即 yk=y(xk)
例:采用等步长的 Euler 法和梯形公式Euler法的局部截断误差
Euler 法的局部截断误差: Rk 1
h2
y ''( xk ) O ( h3 )
2
梯形公式 Euler法的局部截断误差:
Rk 1
h3
y '''( xk ) O ( h4 )
12
14
相容性与阶
等步长显式单步法的相容性与阶
定义:若增量函数 (x, y, h) 在 h=0 处连续,且满足
x , y, 0 f ( x , y )
则称显式单步法是相容的。
定义:设 p 是使得下式成立的最大正整数
Rk O ( h p 1 )
则称显式单步法是 p 阶的。
例:等步长的 Euler 法是 1 阶的,
等步长的梯形公式 Euler 法是 2 阶的。
15
收敛性
定义:若设 y(x) 是解析解,yk 是 xk 处的数值解,若
lim yk y( xk ) 0
h0
( k 1, 2, ..., n)
则称算法是 收敛的。
如果不是等步长算法,则 h 是指小区间长度的最大值
定理:若增量函数 (x, y, h) 关于 x, y, h 均满足 Lipschitz 条
件,则显式单步法的收敛性与相容性等价。
16
收敛性
定理:设显式单步法
yk 1 yk hk xk , yk , hk
是 p 阶的,且增量函数 关于 y 满足 Lipschitz 条件,又设初
值是精确的,即 y0=y(x0),则算法整体误差为
yk y( xk ) O( h p )
即算法是收敛的,且收敛阶是 p。
推论:设 f(x, y) 关于 y 满足 Lipschitz 条件,则
(1) Euler 法收敛
(2) 改进的 Euler 法收敛
17
主要内容
Euler 法与改进的 Euler 法
算法分析:误差与收敛性
Runge-Kutta 法
一阶常微分方程组与高阶方程
应用举例
Matlab 相关函数
18
Runge-Kutta法
y( xk 1 ) y( xk )
xk 1
xk
f ( x, y) dx
k 1, 2, ..., n
算法的精度取决于数值积分的精度
xk 1
xk
r
f ( x , y ) dx h i f xk i h, y( xk i h)
i 1
采用高精度的数值积分方法就可能构造出高精度的算法
一般来说,积分点越多,精度可能越高(但不宜太多)
由于 y( xk i h) 无法获得,因此需要用近似方法计算
19
R-K法
显式 R-K 法的一般格式
r
yk 1 yk h i K i
k 1, 2, ..., n
i 1
K1 f xk , yk
i 1
K i f xk i h, yk h ij K j
j 1
这里
i 2, ..., r
i , i , ij 是参数
参数选取准则:使得公式具有尽可能高的精度
采用的工具:Taylor 展开
20
R-K法
一阶 R-K 法
二阶 R-K 法
三阶 R-K 法
课堂板书
21
经典R-K法
经典 R-K 方法
yk 1
h
yk K1 2 K 2 2 K 3 K 4
6
k 1, 2, ..., n
K1 f xk , yk
1
h
K 2 f xk h, yk K1
2
2
1
h
K 3 f xk h, yk K 2
2
2
K4 f xk h, yk hK3
设 f(x, y) 关于 y 满足 Lipschitz 条件,则该算法是收敛的,
且具有 4 阶收敛阶。
22
举例
例:用经典 R-K 方法解初值问题
2x
dy
y
y
dx
y(0) 1
x [0, 1]
解:见 Example3.m,RK4.m
23
主要内容
Euler 法与改进的 Euler 法
算法分析:误差与收敛性
Runge-Kutta 法
一阶常微分方程组与高阶方程
应用举例
Matlab 相关函数
24
一阶方程组
一阶常微分方程组
dY
F ( x,Y )
dx
Y ( x0 ) Y0
y1
y
其中 Y 2
ym
x0 a x b
f1
f
2
F
fm
y10
0
y2
Y0
0
ym
25
四阶 R-K 法
四阶 R-K 法
Yk 1
h
Yk K1 2 K 2 2 K 3 K 4
6
k 1, 2, ..., n
K1 F xk ,Yk
1
h
K 2 F xk h, Yk K1
2
2
1
h
K 3 F xk h, Yk K 2
2
2
K4 F xk h,Yk hK3
26
举例
例:m=2 时的四阶 R-K 方法
y ' f ( x , y, z )
z ' g ( x , y, z )
y( x ) y , z ( x ) z
0
0
0
0
四阶 R-K 方法
h
yk 1 yk K1 2 K 2 2 K 3 K 4
6
h
zk 1 zk L1 2 L2 2 L3 L4
6
k 1, 2, ..., n
27
举例
K1 f xk , yk , zk
L1 g xk , yk , zk
1
h
h
K 2 f xk h, yk K1 , zk L1
2
2
2
1
h
h
L2 g xk h, yk K1 , zk L1
2
2
2
1
h
h
K 3 f xk h, yk K 2 , zk L2
2
2
2
1
h
h
L3 g xk h, yk K 2 , zk L2
2
2
2
K4 f xk h, yk hK3 , zk hL3
L4 g xk h, yk hK3 , zk hL3
28
高阶方程
处理方法:化为一阶方程组
dm y
( m 1)
f
(
x
,
y
,
y
',
...,
y
)
m
dx
y( x ) y , y '( x ) y ', ... , y( m1) ( x ) y( m1)
0
0
0
0
0
0
引入变量: z y, z y ', ..., z y( m1)
1
2
m
z1 ' z2
z2 ' z3
z ' f ( x , z , z , ..., z )
1
2
m
m
( m 1)
z
(
x
)
y
,
z
(
x
)
y
',
...
,
z
(
x
)
y
1 0
0
2
0
0
m
0
0
29
举例:Van der Pol
例:求解 Van der Pol 方程
Balthasar van der Pol 是荷兰的一位著名电
子工程师。在20世纪20年代至30年代之间,
他开创了现代实验动力学。1927年,为了
描述在电子电路中三极管的震荡效应,第
一次推导出了著名的van der Pol方程
y (1 y 2 ) y y 0
Balthasar van der Pol
1889 -- 1959
van der Pol 震荡系统作为一种经典的自激震
荡系统,已经作为一种重要的数学模型并且
在更加复杂的动力系统的建模中广泛使用。
30
举例:Van der Pol
例:求解 Van der Pol 方程
3
d y
1 dy
dy
y0
2
3 dt
dt
dt
2
初值:y(0) 1, y '(0) 1 ,求解区间 [0,100]
转化为一阶方程组:
z1 ' z2
1 3
z
'
z
z
z
1
2
3 2
2
以 u=5为例,编程求解:vandelpol.m, vandelpol_main.m
31