清华大学数学实验教程 实验4 常微分方程数值解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
opt为选项,缺省时精度为:相对误差10-3, 绝对误差10-6, 计算步长按精度要求自动调整
实例1 海上缉私(续)
模型的数值解
y
dx
dt
dy
dt
b(c x) (c x)2 (at y)2
b(at y) (c x)2 (at y)2
x(0) 0, y(0) 0
设: 船速a=20 (海里/小时) 艇速b=40 (海里/小时) 距离c=15 (海里)
0.2924 2.0
0.6906 3.0
1.2899 4.0
2.1178 5.0
3.2005 6.0
4.5552 7.0
6.1773 8.0
8.0273 9.0
9.9979 10.0
实例1 海上缉私(续)
设b,c不变,a变大 为30, 35, 接近40,
观察解的变化 :
a=35, b=40, c=15
向后欧拉公式
yn1 yn hf ( xn , yn )
yn1 yn hf ( xn1, yn1 )
二者平均得到梯形公式
yn1
yn
h[ f 2
( xn , yn )
f
( xn1, yn1)], n
0,1,
仍为隐式公式,需迭代求解
改进欧拉公式 将梯形公式的迭代过程简化为两步
yn1 yn hf (xn , yn ) 预测
Tn1
y( xn1)
yn1
h2 2
y(xn ) O(h3 ) O(h2 )
局部截断误差主项为
h2 2
y(xn )
k2
f (xn
c2h, yn
c2hk1)
L级?阶
i 1
ki f ( xn cih, yn cih aijk j ), i 3, 4, , L
L
j 1 i 1
i , ci , aij满足 i 1, 0 ci 1, aij 1 使精度尽量高
i 1
j 1
常用的(经典) 龙格—库塔
yn1
yn
h[ f 2
( xn , yn )
f ( xn1, yn1)], n
0,1,
校正
龙格-库塔方法
y(xn1) y(xn ) hf (x, y(x)), x [xn, xn1] • 向前,向后欧拉公式:
用[xn, xn+1]内1个点的导 数代替 f(x, y(x)) • 梯形公式,改进欧拉公式:
(x(t),y(t))
a
b
0
cx
求: 缉私艇的位置x(t),y(t) 缉私艇的航线y(x)
jisi.m, seajisi.m
实例1 海上缉私(续) 模型的数值解
a=20, b=40, c=15
t
x(t)
走私船的位置 x1(t)= c=15 y1(t)=at=20t
缉私艇的航线y(x)
10 y
0
0
0.05 1.9984
y1 y2
y2 f(
x,
y1
,
y2
)
龙格—库塔方法的 MATLAB 实现
x(t) f (t, x), x(t0 ) x0 , x (x1, xn )T , f ( f1, fn )T
[t,x]=ode23(@f,ts,x0,opt) 3级2阶龙格-库塔公式
[t,x]=ode45(@f,ts,x0,opt) 5级4阶龙格-库塔公式
缉私艇的航线y(x)
0.4 12.539454 8.269840 14.0
60 y
0.5 13.753974 12.075344 17.5
40
20
1.2 14.999616 40.000005 42.0
x
1.3 14.999963 44.000005 45.5
0
0
5
10
15
20
t=1.6时缉私艇追上走私船
f是待解方程写成 的函数m文件:
function dx=f(t,x) dx=[f1; f2;; fn];
ts = [t0,t1, …,tf] 输出指定时刻 t0,t1, …,tf 的函数值
ts = t0:k:tf
输出 [t0,tf] 内等分点处的函数值
百度文库
x0为函数初值(n维) 输出t=ts, x为相应函数值(n维)
1.4
14.999993
48.000005
49.0
判断“追上”的有效方 法?
1.5 14.999998 52.000005 52.5 1.6 15.000020 55.999931 56.0
实例1 海上缉私(续)
dx
b(c x)
, dy
dt (c x)2 (at y)2 dt
模型的解析解
2c
c
k a/b1
y(0) 0
y
c[ 1 2 1 k
(c
c
x )1k
1 1 k
(c
c
x )1k
]
kc 1 k2
缉私艇的航线y(x)的解析解
x=c时
y
1
kc k
2
abc b2 a2
缉私艇追上走私船的y坐标
缉私艇追上走私船的时间:
t1
bc b2 a2
a=20, b=40, c=15 t1=0.5
0.10 3.9854
0.15 5.9445
0.20 7.8515
8
0.25 9.6705
6
0.30 11.3496
4
2
x
0
0
5
10
15
20
0.35 12.8170 0.40 13.9806
t=0.5时缉私艇追上走私船 0.45 14.7451
0.50 15.0046
y(t) y1(t)
0
0
0.0698 1.0
0
0
0
0
opt=odeset('RelTol',1e-6,
'AbsTol',1e-9); 0.1 3.956104 0.505813 3.5
[t,x]=ode45(@jisi,ts,x0,opt); 0.2 7.592822 2.130678 7.0
a=35, b=40, c=15
0.3 10.521921 4.829308 10.5
向后欧拉公式 隐式公式
y
y=y(x)
y0 P0
P1
P2
P3
x0 x1 x2 x3 x
右端y
未知,需迭代求解
n+1
初值yn(0)1 yn hf ( xn , yn )
y(k 1) n1
yn
hf
(
xn1,
y(k) n1
)
k 0,1, 2, , n 0,1, 2,
lim
k
y(k) n1
yn1
向前欧拉公式
a=35, b=40, c=15 t1=1.6
微分方程数值解法的误差分析
数值解法: 计算微分方程精确解y(xn)的近似值yn 按照步长h一步步计算, 每步都有误差; 每一步的误差会逐步积累, 称累积误差.
讨论计算一步出现的误差 假定yn= y(xn) , 估计yn+1的误差: y(xn+1)- yn+1
x(t ) axy y(t ) axy by
实验4的基本内容
1. 两个最常用的数值算法: • 欧拉(Euler)方法 • 龙格-库塔(Runge-Kutta)方法
2. 龙格-库塔方法的MATLAB实现
3. 实际问题用微分方程建模,并求解 *4. 数值算法的收敛性、稳定性与刚性方程
实例1 海上缉私
大学数学实验
Mathematical Experiments
实验4 常微分方程数值解
为什么要学习微分方程数值解
• 微分方程是研究函数变化规律的重要工具,有着广泛 的应用。如:
物体的运动, 电路的电压, 人口增长的预测
• 许多微分方程没有解析解,数值解法是求解的重要手 段,如
dy y2 x, dx
t=? 缉私艇追上走私船
累积误差较大 提高精度!
模型的数值解
t
x(t)
0
0
y(t)
y1(t)
0
0
0.1 3.9561 0.5058 3.5
0.2 7.5928 2.1308 7.0
0.3 10.5240 4.8283 10.5
0.4 12.5384 8.2755 14.0
0.5 13.7551 12.0830 17.5
1.2 14.9986 40.0164 42.0
1.3 14.9996 44.0165 45.5
1.4 15.0117 48.0183 49.0
1.5 15.0023 52.0146 52.5
1.6 14.9866 55.9486 56.0
实例1
模型的数值解
海上缉私(续)
t
x(t)
y(t) y1(t)
f (x, y)中的x取[xn, xn1]内的某一点 x取不同点
y(xn1) y(xn ) hf (x, y(x)), x [xn, xn1]
x取左端点xn
y
y(xn1) y(xn ) hf (xn, y(xn ))
P1
各种欧拉公式 P2 P3
yn y( xn ), yn1 y( xn1)
(c
x)
d2y dx 2
a b
1 ( dy )2 dx
(c x) dp k 1 p2 , k a
dx
b
p(0) 0
实例1 海上缉私(续) 模型的解析解
(c x) dp k 1 p2 dx
p(0) 0
1 p2 p (c x )k c
1 p2 p (c x )k c
p 1 [(c x )k (c x )k ]
用[xn, xn+1]内2个点导数的平均值代替 f(x, y(x))
龙格-库塔方法的基本思想
在[xn, xn+1]内多取几个点,将它们的导数加权平 均代替 f(x, y(x)),设法构造出精度更高的计算公式。
L
yn1 yn h iki
i 1
龙格-库塔 方法的 一般形式
k1 f ( xn , yn )
b(at y) (c x)2 (at y)2
dy at y dx (c x)
(c x) dy y at dx
d 2 y dt
(c x) dx2
a dx
ds b dt
dt dt ds dx ds dy
ds (dx)2 (dy)2
令 p dy dx
dy dy dt dx dt dx
y f (x, y, z) z g(x, y, z)
向前欧拉公式
yn1 yn hf (xn , yn , zn )
z
n1
zn
hg(xn ,
yn, zn )
y(x0 ) y0, z(x0 ) z0
n 0,1,2,
高阶方程需要先降阶为一阶微分方程组
y f (x, y, y) y1 y
建立坐标系如图: t=0 艇在(0, 0), 船在(c, 0); 船速a, 艇速b 时刻 t 艇位于P(x, y), 船到达 Q(c, at)
模型: dx bcos, dy bsin
dt
dt
dx
dt
b(c x) (c x)2 (at y)2
y
dy
b(at y)
dt (c x)2 (at y)2
局部截断误差
误差分析 估计欧拉公式的局部截断误差
y(xn+1)在xn处作Taylor展开:
y ( xn1 )
y(xn ) hy(xn )
h2 2
y(xn ) O(h3 )
向前欧拉公式 yn1 yn hf (xn , yn )
yn= y(xn)
yn1 y(xn ) hf (xn , y(xn )) y(xn ) hy(xn )
求y( xn )的近似值yn (n 1, 2, )
y 通常取等步长h
y y(x)
y(xn )
xn x0 nh
y0
• y1 y2
x0 x1 x2
yn
xn x
欧拉方法
y ' f (x, y), y(x0 ) y0
基本 思路
在小区间[xn, xn1]上 y ' [ y(xn1) y(xn )]/ h,
由方程无法得到x(t), y(t)的解析解
需要用数值解法求解
0
Q(c,at)
P(x,y)
b
R(c,y )
cx
“常微分方程初值问题数值解”的提法
设y ' f (x, y), y(x0 ) y0的解y=y(x)存在且唯一
不求解析解 y = y(x) (无解析解或求解困难)
而在一系列离散点 x1 x2 xn
公式
yn
1
yn
h 6
(k1
2k2
2k3
k4 )
kk12
f (xn, yn ) f (xn h / 2,
yn
hk1
/ 2)
4级4阶
k3 f (xn h / 2, yn hk2 / 2)
k4 f ( xn h, yn hk3 )
不足:收敛速度较慢
微分方程组和高阶方程初值问题的数值解
欧拉方法和龙格-库塔方法可直接推广到微分方程组
海防某部缉私艇上的雷达发现正东方向c海里处有一艘走私船 正以速度a向正北方向行驶,缉私艇立即以最大速度b(>a)前往 拦截。如果用雷达进行跟踪时,可保持缉私艇的速度方向始终 指向走私船。
• 建立任意时刻缉私艇位置及 航线的数学模型,并求解; • 求出缉私艇追上走私船的时间。
北
b
a
艇
c
船
实例1 海上缉私
y0 P0
y=y(x)
yn1 yn hf (xn, yn ),n 0,1,
向前欧拉公式
显式公式
x0 x1 x2 x3 x
欧拉方法
y(xn1) y(xn ) hf (x, y(x)), x [xn, xn1]
x取右端点,yn y(xn ), yn1 y(xn1)
yn1 yn hf ( xn1, yn1), n 0,1,