华中科技大学数值分析微分方程求解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
¾ 求解区间离散化 点{x k } ,使 a = x0 < x1 < ... < xn < xn+1 < ... < xN = b
] 将求解区间 [a , b]离散化,是在 [a , b 上插入一系列的分
记 hn = xn+1 − xn ( n = 0,1,..., N − 1)称为步长,一般取hn = h b−a ( n = 0 , 1 , 2 ,..., N ) x = x + nh h = (常数),节点为 n 0 N , a b 称为等步长节点 。
1.1000 1.0954 0.6 1.1918 1.1832 0.7 1.2774 1.2649 0.8 1.3582 1.2416 0.9 1.4351 1.4142 1.0
1.5090 1.4832 1.5803 1.5492 1.6498 1.6125 1.7178 1.6733 1.7848 1.7321
§1 Euler’s Method
x1
y n + 1 = y n + h f ( x n , y n ) ( n = 0, ... , N − 1)
例. 求初值问题 2x ⎧ ⎪ y′ = y − ( 0 < x < 1) y ⎨ ⎪ ⎩ y(0) = 1 解:本题的Euler公式的具体形式为
yn+1
y′( x1 ) ≈
向后差商近似导数
y( x1 ) ≈ y0 + h f ( x1 , y ( x1 ))
y( x1 ) − y( x0 ) h
x0 x1
y n+1 = y n + h f ( xn+1 , yn+1 ) (n = 0 , ... , N −1 )
由于未知数 yn+1 同时出现在等式的两边, 不能直接得到,故称为隐式 /* implicit */ 欧拉公式,而前者称 为显式 /* explicit */ 欧拉公式。 一般先用显式计算一个初值,再迭代求解。即
∫
本章的任务:计算出解函数 y(x) 在一系列节点 a = x0< x1<…< xn= b
yn ≈ y( xn ) ( n = 1, ... , N ) 处的近似值 。
建立常微分方程数值方法的基本思想
) 微分方程数值解法,其实是求出方程的解 y( x在一系 列离散点上的近似值。则微分方程数值解的基本思想 是:求解区间和方程离散化。
注:此法亦称为预测-校正法 /* predictor-corrector method */。 可以证明该算法具有 2 阶精度,同时可以看到它是个单 步递推格式,比隐式公式的迭代求解过程简单。后面将 看到,它的稳定性高于显式欧拉法。
9
§1 Euler’s Method
例
作为比较,我们仍用Euler法中的那个例子。 2x ⎧ ′ = − y ⎪y ( 0 < x < 1) y ⎨ ⎪ xn yn ⎩ y(0) = 1 0.1 1.0959 解:改进的Euler公式为 0.2 1.1841 2 xn ⎧ ⎪ y p = yn + h( yn − y ) 0.3 1.2662 n ⎪ 0.4 1.3434 2 xn+1 ⎪ ) ⎨ yc = yn + h( y p − 0.5 1.4164 y p ⎪ 0.6 1.4860 1 ⎪ y n + 1 = ( y p + yc ) 0.7 1.5525 ⎪ 2 ⎩
§1 Euler’s Method
— 显、隐式两种算法的平均
h yn+1 = yn + [ f ( x n , yn ) + f ( x n +1 , yn+1 )] ( n = 0, ... , N − 1) 2
A
梯形方法的平均化思想 可以借助几何直观说明,同 Euler方法的图,见右:
Pn+1
Q
14
¾Taylor级数
函数y (x)在展开点x0作Taylor级数展开, x是被展开点。
1 1 (n) 2 y( x) = y( x0 ) + y′( x0 )( x- x0 ) + y′( x0 )( x- x0 ) +"+ y ( x0 )( x- x0 )n +" n! 2!
然后将上式右端采用第四章介绍的数值积分离散化, 从而获得原初值问题的一个离散差分格式。 (3)Taylor展开法 见后面的叙述。
3
§1 欧拉方法 /* Euler’s Method */
¾ 欧拉公式: 向前差商近似导数
y( x1 ) − y( x0 ) h x0 记为 y ( x1 ) ≈ y ( x 0 ) + hy ′( x 0 ) = y 0 + h f ( x 0 , y 0 ) y1 y′( x0 ) ≈
第五章 常微分方程数值解
/* Numerical Methods for Ordinary Differential Equations */
考虑一阶常微分方程的初值问题 /* Initial-Value Problem */:
⎧ dy ⎪ = f ( x, y) ⎨ dx ⎪ ⎩ y(a ) = y0 x ∈ [a , b ]
改进的Euler公式: ⎧ yi +1 = yi + 0.1( x i2 + x i − yi ) ⎪ 0.1 2 ⎪ 2 = + + − + y y ( x x y x i = 0,1,2, " ,9 ⎨ i +1 i i i i i +1 + xi +1 − yi +1 ) 2 ⎪ y =0 ⎪ ⎩ 0
0.8 0.9 1.0 1.6153 1.6782 1.7379
y( x n )
1.0954 1.1832 1.2649 1.3416 1.4142 1.4832 1.5492 1.6125 1.6733 1.7321
10
我们仍取步长h=0.1,计算结果 见右表:
§1 Euler’s Method
h = yn + [ f ( x n, yn) + f ( x n+1 , yn+1 )] 2
( n = 0, ... , N − 1)
h [ f ( xn , yn ) + f ( xn+1 , yn + h f ( xn , yn ))] 2
y p = yn + hf ( x n , yn ) , yc = yn + hf ( x n +1 , y p ) yn+1 1 = ( y p + yc ) 2
算例3:分别用Euler公式和改进的Euler公式求解:
⎧ y′ = x 2 + x − y, 0 ≤ x ≤ 1 (1) ⎨ 精确解:y = x 2 − x + 1 - e -x y (0) = 0 ⎩
取步长 h = 0.1 ,计算y(0.5Baidu Nhomakorabea的近似值
解:欧拉公式:
⎧ yi +1 = yi + 0.1( xi2 + xi − yi ) , i = 0, 1,", 9 ⎨ ⎩ y0 = 0
(0) yn + 1 = y n + hf ( x n , y n )
( k +1) (k ) yn = y + hf ( x , y n n+1 n + 1 ) k = 0 ,1 , 2 , " +1
(k ) 如果迭代过程收敛,则某步后 yn+1就可以作为 yn+1,从而进行 下一步的计算。
7
# 梯形公式 /* trapezoid formula */
Pn
xn
B
x n +1
# 两步欧拉公式 /* midpoint formula */
中心差商近似导数
y′( x1 ) ≈
y ( x 2 ) ≈ y ( x 0 ) + 2 h f ( x1 , y ( x1 ))
y ( x 2 ) − y ( x0 ) 2h
x0 x1 x2
yn+1 = yn−1 + 2h f ( xn , yn ) n = 1, ... , N − 1
⎧ y′ = x+ y , x ∈[0,1] x y =− x − 1 + 2 e ⎨ 其解析解为 例如: ⎩ y(0) = 1 但是,只有一些特殊类型的微分方程问题能够得到用解析表达式 表示的函数解,而大量的微分方程问题很难得到其解析解,因 此,只能依赖于数值方法去获得微分方程的数值解。 -x 2 ⎧ ⎪ y′ = e , x ∈[0, 1] 例如: ⎨ ⎪ ⎩ y(0) = 1 x 其解析解 −t 2 y = 1 + e dt , x ∈ [0,1]很难得到其解析解。 1 为: 0
2 xn = yn + h( yn − ) yn
4
§1 Euler’s Method
取步长h=0.1。我们将计算结果与其解析解的精确值一同 y( x n ) 列在下表中,其中 x n 是节点,y n 是节点上的近似值, 是精确值,结果见下表:
xn
yn
y( xn )
xn
yn
y( xn )
0.1 0.2 0.3 0.4 0.5
13
§1 Euler’s Method
¾ 局部截断误差和方法的阶 初值问题的单步法可用一般形式表示为:
ϕ 称为增量函数
y n + 1 = y n + h ϕ ( x n , y n , y n + 1 , h)
ϕ ( x n , y n , y n + 1 , h) = f ( x n + 1 , y n + 1 )
8
# 改进欧拉法 /* modified Euler’s method */
Step 2: 再将 yn+1
§1 Euler’s Method
Step 1: 先用显式欧拉公式作预测,算出 y n+1 = y n + h f ( x n, y n)
代入隐式梯形公式的右边作校正,得到
yn+1
yn+1 = yn +
例如对欧拉法有ϕ ( x n , yn , h) = f ( x n , yn ), 隐式欧拉法有
ϕ 含有 y n + 1时,方法是隐式的, ϕ 不含有 y n + 1时,方法是显式的。
从 x0开始计算,如果考虑每一步产生的误差,直到 x n 则有误差 en = y( x n ) − y n ,称为该方法在 x n 的整体截断误 差,分析和求得整体截断误差是复杂的。为此,我们仅考 虑从 x n 到 x n + 1的局部情况,并假设 x n 之前的计算没有误 差,即 yn = y( x n ) ,下面在给出单步法的局部截断误差概念 前,先给出Taylor展式的概念。
改进欧拉法的m函数程序: function z=Modified_Euler(f,a,b,n,ya) z(1)=ya; h=(b-a)/n; for i=1:n x=a+(i-1)*h; y(i+1)=z(i) + h*feval(f,x,z(i)); z(i+1)=z(i)+1/2*h*(feval(f,x,z(i))+feval(f,x+h,y(i+1))); 12 end
x0 x1 x2 ... xn-1 xn
2
¾ 将微分方程离散化 将微分方程离散化,通常有下述方法: (1)差商逼近法 即是用适当的差商逼近导数值。 (2)数值积分法 基本思想是先将问题转化为积分方程
y( xm ) − y( xn ) =
∫
xm xn
f ( x , y ( x )) dx
( y ( x0 ) = y0 )
Matlab作图显示
从表和图可以看出,改进的Euler法的精度提高了 不少。
11
Euler公式的m函数程序:
function y=Euler(f,a,b,n,ya) h=(b-a)/n;y(1)=ya; for i=1:n x=a+(i-1)*h; y(i+1)=y(i)+h*feval(f,x,y(i)); End
如果说表格仍不够直观的话,我们用Matlab做出积分曲 线与近似值的图,如下: 5
§1 Euler’s Method
在图上似乎数值解与 曲线的偏差不是很大, 但不要忘记这只是在0到 1范围内的。通过后面用 其他方法解本题,大家 便会发现Euler方法误差 其实是很大的。
Matlab作图显示
y′ = 2( x + 1) ⎧ 例: ⎨ 其精确解为 y=(x+1)2+1 ⎩y(0) = 2 由 y(0)=2 ,过该曲线上一点 (0,2) 作曲线
的切线,其斜率: dy 切线为:
y − 2 = f ( 0, 2 ) ( x − 0 )
6
dx
= f ( 0, 2 )
x=0
由此, 可计算出 y1 , y1 = 2 + f (0, 2)*1 = 4 类似地, 可计算出 y2 , … 故欧拉法又称欧拉折线法。
§1 Euler’s Method
#
隐式欧拉法 /* implicit Euler method */