当前位置:文档之家› 计算方法第八章(常微分方程数值解)

计算方法第八章(常微分方程数值解)


xi 1, xi , xi 1,, xi k
作为
节点,可得亚当斯(Adams)隐式公式
h * * * * yi 1 yi (b0 fi 1 b1 fi b2 f i bk f i k ) A
局部截断误差:
R[ y] B h
* k 2 k 1ห้องสมุดไป่ตู้
则局部截断误差为:
n1 y( xn1 ) yn1
p
如局部截断误差为 O(h ) ,称为具有 p 阶局部截断误差。
欧拉方法的误差分析:
y ( xn 1 ) y ( xn ) y ( xn h) y ( xn ) h h y ( xn ) y( xn )h y( )h 2 / 2 y ( xn ) y( xn ) y( )h / 2 h
用迭代法计算 yn+1 的值。 (1)简单迭代
(0) yn 1 yn hf ( xn , yn )
( k 1) (k ) yn y f ( x , y ) h / 2 f ( x , y 1 n n n n 1 n 1 ) h / 2
收敛的条件:
Lh / 2 1
ynk ( xn ,, xnk , yn ,, ynk 1 , ynk )
1.2 欧拉方法的其他改进 微分方程数值解的关键在于对导数的处理,可以用差分来近似
导数,也可以通过积分,将导数项化掉。
对于方程: y( x) f ( x, y( x)) 首先,作出划分 a x x x x 0 1 2 N 1 xN b 设已经求出第 n 个节点的函数值 yn ,在区间 [ x , x ] 上对 n n 1 方程两边积分
这是我们最终使用的计算格式。
例子:
y y (0 x 1) y (0) 1
1 yn 1 yn 2 ( K1 K 2 ) K1 hf ( xn , yn ) hyn K hf ( x h, y K ) h( y K ) n n 1 n 1 2
下面我们分别取步长为0.1与0.01进行计算, 计算结果显示在下面的图中。
步长为0.1的计算结果。
步长为0.01的计算结果
0.01 0.1 0.2 0.3 0.4 0.41 0.59 0.6 0.9 0.91 0.99 1
0.99005 0.90484 0.81873 0.74082 0.67032 0.66365 0.55433 0.54881 0.40657 0.40252 0.37158 0.36788
y ( xn 1 ) y ( xn ) 欧拉公式中我们利用了近似公式 y ( xn ) h
光这个近似产生的误差为
y ( xn 1 ) y ( xn ) 1 y( xn ) y ( )h O (h ) h 2
y ( xn 1 ) y ( xn 1 ) 利用 y ( xn ) 2h
第八章 常微分方程初值
问题数值解法
本章主要研究常微分方程初值问题的数值求解:
y( x) f ( x, y ( x)) a x b y (a) y0
通常,假设函数 f 关于第二个变量满足李普希茨条件(L条 件),即为存在常数 L > 0,使得
f ( x, y1 ) f ( x, y2 ) L y1 y2
完全类似的可以得到 后退欧拉公式的局部截断误差为:
n1 y( xn1 ) yn1 O(h )
2
欧拉中点公式的局部截断误差为:
n1 y( xn1 ) yn1 O(h )
3
欧拉梯形公式的局部截断误差为:
n1 y( xn1 ) yn1 O(h )
取步长为0.1计算,结果如图。
图:
DOUBLE PRECISION h,y(0:10),ak1,ak2 OPEN(20,FILE='OUTPUT1.DAT',STATUS="UNKNOWN") h=1.0/10 y(0)=1.0 do 10 i=1,10 ak1=-h*y(i-1) ak2=-h*(y(i-1)+ak1) y(i)=y(i-1)+(ak1+ak2)/2.0 10 continue do 20 i=0,10 write(20,*) i*h,y(i),exp(-i*h) 20 continue END
第一节 一般概念 1.1 欧拉法及其简单改进
y( x) f ( x, y ( x)) a x b y (a) y0
方法:选择适当的节点,用差分近似微分,将方程离散化, 从而求在这些节点上的解的近似值。
a x0 x1 x2 xN 1 xN b hn xn1 xn 称为 xn 到 xn1 的步长(通常取为常数h) y ( xn 1 ) y ( xn ) y( x ) |x xn ,记yn为 y(xn)的近似计算值,有 h
例如:后退欧拉法、欧拉梯形公式 显然,利用隐式法求微分方程的数值解是,需要从表达式中 反解未知节点上的函数值。
1.3 隐式法的具体计算: 例如欧拉梯形公式
yn1 yn [ f ( xn , yn ) f ( xn1 , yn1 )] h / 2 yn f ( xn , yn ) h / 2 f ( xn1 , yn1 ) h / 2
若用简单迭代,而且只迭代一步,这样组成的一组计算公式称 为预测--校正公式。(迭代初值 称为校正)
(0) yn 1 yn hf ( xn , yn ) (0) y y [ f ( x , y ) f ( x , y n n n n 1 n 1 )] h / 2 n 1
作为节点,将被积函数用插值多
项式来近似,用插值多项式带到积分中去求出积分,则可以得
到所谓的亚当斯(Adams)显式公式
h yi 1 yi (b0 fi b1 fi 1 bk fi k ) A
局部截断误差:
R[ y] Bk h
k 1 ( k 1)
y
(i )
类似地,如果取
y( xn1 ) y( xn )
积分公式计算积分!
xn1
xn
f ( x, y( x))dx
容易看出,要求第 n+1 个节点的函数值,关键在于选择适当的
(1)如选择下矩形公式,则得
yn1 yn f ( xn , yn )h
这正是前面的欧拉公式。
(2)如选择上矩形公式,则得
yn1 yn f ( xn1 , yn1 )h
(0) 称为预测,迭代步 yn 1
预测-校正公式也称为改进的欧拉法,将上面的组合公式改 写为:
yn1 yn [ f ( xn , yn ) f ( xn1, yn hf ( xn , yn ))] h / 2
注意到 xn1 xn h ,将上式进一步改写为:
1 yn 1 yn 2 ( K1 K 2 ) K1 hf ( xn , yn ) K hf ( x h, y K ) n n 1 2
用此法解前面的例子
步长0.1
步长0.01
1.4 误差估计 定义:利用第n个节点或之前更多节点的函数精确值,利用近 似公式数值计算第n+1个节点的近似值,所引起的误差,称 为第n+1个节点上的局部截断误差。
我们记 y ( xn 1 ) 为第n+1个节点上解的精确值, yn 1 为假设
yn y ( xn ) 等条件下计算所得的近似值,
同理,对于后退欧拉公式
yn1 yn f ( xn1 , yn1 )h
有预测-校正公式
(0) y n 1 yn hf ( xn , yn ) (0) y y f ( x , y n n 1 n 1 ) h n 1
或改写为:
K hf ( xn , yn ) yn 1 yn f ( xn 1 , yn K )h
0.99 0.90438 0.81791 0.7397 0.66897 0.66228 0.55268 0.54716 0.40473 0.40068 0.36973 0.36603
DOUBLE PRECISION h,y(0:100) OPEN(20,FILE='OUTPUT.DAT',STATUS="UNKNOWN") h=1.0/100 y(0)=1.0 do 10 i=1,100 y(i)=y(i-1)*(1.0-h) write(20,*) i*h,y(i) 10 continue END
同时初值是准确的,则整体截断误差为p阶。 欧拉公式、后退欧拉公式的整体误差为 1 阶。 欧拉中点公式、欧拉梯形公式的整体误差为 2 阶。
微分方程数值解法的进一步改进。再回到恒等式
y( xi 1 ) y( xi )
如果取
xi1
xi
f ( x, y( x))dx
xi , xi 1,, xi k
(2)牛顿迭代
( k 1) yn 1 (k ) (k ) y y f ( x , y ) h / 2 f ( x , y (k ) n 1 n n n n 1 n 1 ) h / 2 yn1 (k ) 1 f y ( xn1 , yn1 ) h / 2
y( xn ) f ( xn , y( xn )) y ( xn1 ) y ( xn ) hf ( xn , y ( xn )) O(h )
2

yn1 y( xn ) hf ( xn , y( xn )) 2 n 1 y ( xn 1 ) yn 1 O(h )
这是所谓的后退欧拉公式。
(3)如选择梯形公式,则得
相关主题