线性多步法2
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
y 2 = y i + λ 2 h[c1 K 1 + c 2 K 2 ] y 2 = y i + 1 = y i + λ 2 h[c1 K 1 + c 2 K 2 ]
y i + 1 = y i + h[c1 K 1 + c 2 K 2 ]
K 1 = f ( xi , yi )
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
x n +1 xn
f ( x , y )dx ≈ h∑ c i f ( x n + λ i h, y ( x n + λ i h))
m i =1 i =1
y ( x n + 1 ) − y ( x n ) ≈ h∑ c i f ( x n + λ i h, y ( x n + λ i h)) y n + 1 = y n + h∑ c i f ( x n + λ i h, y ( x n + λ i h))
{
}
§2 Runge-Kutta Method
Step 3: 将 yi+1 与 y( xi+1 ) 在 xi 点的泰勒展开作比较 点的泰勒 泰勒展开作比较
y′( x1 ) ≈
y ( x 2 ) ≈ y ( x 0 ) + 2 h f ( x1 , y ( x1 ))
y ( x 2 ) − y ( x0 ) 2h
x0 x1 x2
y i +1 = yi −1 + 2h f ( x i , y i ) i = 1, ... , n − 1
假设 yi −1 = y( xi −1 ), yi = y( xi ) ,则可以导出 Ri = y( xi+1 ) − yi +1 = O(h3 ) 阶精度。 即中点公式具有 2 阶精度。
1 1 y i + 1 = y i + h[ 2 K 1 + 2 K 2 ] K 1 = f ( xi , yi ) K = f ( x + h , y + hK ) 2 i i 1
斜率 一定取K 一定取 1 K2 平均值吗 的平均值吗?
步长一定是一个h 步长一定是一个 吗?
y 1 = y i + λ 1 hf ( x i , y i ) = y i + λ 1 hK 1
K 1 = f ( xi , yi )
y
y( xi )
0 < λ1 ≤ 1 0 < λ2 ≤ 1
x i + λ1 h
c1 + c 2 = 1
o
xi
y 2 = y i + λ 2 h[c1 f ( x i , y i ) + c 2 f ( x i + λ1 h, y ( x i + λ1 hi )]
§2 龙格 - 库塔法 /* Runge-Kutta Method */ 建立高精度的单步递推格式
单步递推法的基本思想是从 点出发, 某一斜率沿 单步递推法的基本思想是从 ( xi , yi ) 点出发,以某一斜率沿 基本思想 ( 直线达到 h xi+1 , yi+1 ) 点。欧拉法及其各种变形所能达到的最 y i +1 = yi + 阶。 i , yi ) + f ( x i +1 , y i + h f ( x i , yi ))] ( i = 0, ... , n − 1) 高精度为2阶 高精度为 2 [ f ( x 考察改进的欧拉法,可以将其改写为: 考察改进的欧拉法,可以将其改写为:
Ri = y( xi +1 ) − yi+1
h2 = − y′′(xi )+O(h3 ) 2
阶精度。 即隐式欧拉公式具有 1 阶精度。
梯形公式 /* trapezoid formula */
§1 Euler’s Method
— 显、隐式两种算法的平均 隐式两种算法的平均
h yi +1 = yi + [ f ( x i , yi ) + f ( x i +1 , yi +1 )] ( i = 0, ... , n − 1) 2
x i + hλ 2
xi +1
x
y 2 = y i + λ 2 h[c1 K 1 + c 2 f ( x i + λ 1 h, y 1 )]
Biblioteka Baidu
y 2 = y i + λ 2 h[c1 K 1 + c 2 f ( x i + λ1 h, y i + λ1 hk 1 )]
假如λ 2 = 1
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
称作过三个点的 Runge − Kutta 方法 .
c i , µ 3 j , λ j 待定系数 .i = 1,2,3; j = 1,2.
y n + 1 = y n + h∑ c i K i , 称作 m 级的 Runge − Kutta 方法 .
i =1
m
K 1 = f ( xi , yi )
i −1
y 3 = y i + λ 3 h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
y 3 = y i +1 = y i + h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
K 1 = f ( xi , yi )
y i + 1 = y i + h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
i =1 m
§2 Runge-Kutta Method
如何确定下式中的系数? 如何确定下式中的系数?
yi +1 K1 K2 = = = yi + h [λ1 K 1 + λ2 K 2 ] f ( x i , yi ) f ( x i + ph, yi + phK 1′) x) = d f ( x, y) y′ (
y i + 1 = y i + h λ 1 y ′( x i ) + λ 2[ y ′( x i ) + ph y ′′( x i ) + O ( h 2 )] = y i + ( λ 1 + λ 2 ) h y ′( x i ) + λ 2 ph 2 y ′′( x i ) + O ( h 3 )
§1 Euler’s Method
欧拉公式的改进: 欧拉公式的改进: 隐式欧拉法 /* implicit Euler method */ 向后差商近似导数
y′( x1 ) ≈
y ( x1 ) ≈ y0 + h f ( x1 , y ( x1 ))
y( x1 ) − y( x0 ) h
x0
x1
y i +1 = y i + h f ( x i +1 , y i +1 ) ( i = 0, ... , n − 1)
Step 1: 先用显式欧拉公式作预测,算出 y i +1 = y i + h f ( x i , y i ) 先用显式欧拉公式作预测 显式欧拉公式作预测, Step 2: 再将 yi +1 代入隐式梯形公式的右边作校正,得到 代入隐式梯形公式的右边作校正 隐式梯形公式的右边作校正,
y i +1
h = yi + [ f ( x i , yi ) + f ( x i +1 , y i +1 )] 2
注:的确有局部截断误差 Ri = y( xi +1 ) − yi +1 = O( h3 ) , 需要2个初值 需要 阶精度,比欧拉方法有了进步。 即梯形公式具有2 阶精度 0和 y1来启动递推 即梯形公式具有 个初值 y,比欧拉方法有了进步。 过程,这样的算法称为双步法 过程,这样的算法称为双步法 /* double-step 但注意到该公式是隐式公式,计算时不得不用到 但注意到该公式是隐式公式, 隐式公式 method */,而前面的三种算法都是单步法 而前面的三种算法都是单步法 迭代法,其迭代收敛性与欧拉公式相似。 迭代法,其迭代收敛性与欧拉公式相似。 /* single-step method */。 中点欧拉公式 /* midpoint formula */ 中心差商近似导数
c1 + c 2 = 1
0 < λ1 ≤ 1
称作过两个点的 Runge − Kutta 方法 .
c1 , c 2 , λ1待定系数 .
y 3 = y i + λ 3 h[c1 f ( x i , y i ) + c 2 f ( x i + λ1 h, y ( x i + λ1 hi ) + c 3 f ( x i + λ 2 h, y ( x i + λ 2 hi )]
y i +1
h = yi + [ f ( x i , yi ) + f ( x i +1 , y i + h f ( x i , yi ))] 2
( i = 0, ... , n − 1)
注:此法亦称为预测 校正法 /* predictor-corrector method */。 此法亦称为预测-校正法 预测 阶精度,同时可以看到它是个单 可以证明该算法具有 2 阶精度,同时可以看到它是个单 递推格式,比隐式公式的迭代求解过程简单 简单。 步递推格式,比隐式公式的迭代求解过程简单。后面将 看到,它的稳定性高于显式欧拉法。 稳定性高于显式欧拉法 看到,它的稳定性高于显式欧拉法。
K 3 = f ( x i + λ 2 h, y i + λ 2 h( c1 K 1 + c 2 K 2 )]
µ 3 i = λ 2 c i , i = 1,2 1,
假如λ3 = 1
K 3 = f ( x i + λ 2 h, y i + h( µ 31 K 1 + µ 32 K 2 )] λ 2 = µ 31 + µ 32 ,
dx 首先希望能确定系数 λ1、λ2、p,使得到的算法格式有 阶 ,使得到的算法格式有2阶 精度, 的前提假设下, ( x, y) 精度,即在 yi = y( x i ) 的前提假设下,使得 + f y ( x, y) dy = fx dx Ri = y ( x i +1 ) − y i +1 = O ( h 3 ) = f x ( x, y) + f y ( x, y) f ( x, y) Step 1: 将 K2 在 ( xi , yi ) 点作 Taylor 展开
§1 Euler’s Method
方 法 显式欧拉 隐式欧拉 梯形公式 中点公式
简单 稳定性最好 精度提高 精度提高, 精度提高 显式
精度低 精度低, 精度低 计算量大 计算量大 多一个初值, 多一个初值 可能影响精度
§1 Euler’s Method
改进欧拉法 /* modified Euler’s method */
i = 2,3,L, m
i −1 j =1 m
K i = f ( x n + λ i h, y n + h ∑ ( µ ij K j )
λ i = ∑ µ ij µ ij > 0
j =1
x n +1
n
∑ λi = 1
i =1
m
m 级 Runge − Kutta 方法也可以这样解释 :
∫x
y ′( x )dx = ∫
c1 + c 2 + c 3 = 1
K 2 = f ( x i + λ1 h, y i + hλ1 k1 )]
y 2 = y i + λ 2 h[c1 K 1 + c 2 K 2 ]
y 3 = y i + λ 3 h[c1 K 1 + c 2 K 2 + c 3 f ( x i + λ 2 h, y i + λ 2 h( c1 K 1 + c 2 K 2 )]
K 2 = f ( xi + ph, yi + phK 1 ) = f ( xi , yi ) + phf x ( xi , yi ) + phK 1 f y ( xi , yi ) + O( h2 )
= y ′ ( x i ) + ph y ′′ ( x i ) + O ( h 2 )
Step 2: 将 K2 代入第 式,得到 代入第1式
同时出现在等式的两边,不能直接得到, 由于未知数 yi+1 同时出现在等式的两边,不能直接得到,故 欧拉公式,而前者称为显式 称为隐式 称为隐式 /* implicit */ 欧拉公式,而前者称为显式 /* explicit */ 欧拉公式。 欧拉公式。 一般先用显式计算一个初值, 迭代求解 求解。 一般先用显式计算一个初值,再迭代求解。 隐式欧拉法的局部截断误差 欧拉法的局部截断误差: 隐式欧拉法的局部截断误差:
K 1 = f ( xi , yi )
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
c1 + c 2 + c 3 = 1
0 < α1 ≤ 1
K 3 = f ( x i + λ 2 h, y i + h( µ 31 K 1 + µ 32 K 2 )]
λ 2 = µ 31 + µ 32 ,
y i + 1 = y i + h[c1 K 1 + c 2 K 2 ]
K 1 = f ( xi , yi )
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
x n +1 xn
f ( x , y )dx ≈ h∑ c i f ( x n + λ i h, y ( x n + λ i h))
m i =1 i =1
y ( x n + 1 ) − y ( x n ) ≈ h∑ c i f ( x n + λ i h, y ( x n + λ i h)) y n + 1 = y n + h∑ c i f ( x n + λ i h, y ( x n + λ i h))
{
}
§2 Runge-Kutta Method
Step 3: 将 yi+1 与 y( xi+1 ) 在 xi 点的泰勒展开作比较 点的泰勒 泰勒展开作比较
y′( x1 ) ≈
y ( x 2 ) ≈ y ( x 0 ) + 2 h f ( x1 , y ( x1 ))
y ( x 2 ) − y ( x0 ) 2h
x0 x1 x2
y i +1 = yi −1 + 2h f ( x i , y i ) i = 1, ... , n − 1
假设 yi −1 = y( xi −1 ), yi = y( xi ) ,则可以导出 Ri = y( xi+1 ) − yi +1 = O(h3 ) 阶精度。 即中点公式具有 2 阶精度。
1 1 y i + 1 = y i + h[ 2 K 1 + 2 K 2 ] K 1 = f ( xi , yi ) K = f ( x + h , y + hK ) 2 i i 1
斜率 一定取K 一定取 1 K2 平均值吗 的平均值吗?
步长一定是一个h 步长一定是一个 吗?
y 1 = y i + λ 1 hf ( x i , y i ) = y i + λ 1 hK 1
K 1 = f ( xi , yi )
y
y( xi )
0 < λ1 ≤ 1 0 < λ2 ≤ 1
x i + λ1 h
c1 + c 2 = 1
o
xi
y 2 = y i + λ 2 h[c1 f ( x i , y i ) + c 2 f ( x i + λ1 h, y ( x i + λ1 hi )]
§2 龙格 - 库塔法 /* Runge-Kutta Method */ 建立高精度的单步递推格式
单步递推法的基本思想是从 点出发, 某一斜率沿 单步递推法的基本思想是从 ( xi , yi ) 点出发,以某一斜率沿 基本思想 ( 直线达到 h xi+1 , yi+1 ) 点。欧拉法及其各种变形所能达到的最 y i +1 = yi + 阶。 i , yi ) + f ( x i +1 , y i + h f ( x i , yi ))] ( i = 0, ... , n − 1) 高精度为2阶 高精度为 2 [ f ( x 考察改进的欧拉法,可以将其改写为: 考察改进的欧拉法,可以将其改写为:
Ri = y( xi +1 ) − yi+1
h2 = − y′′(xi )+O(h3 ) 2
阶精度。 即隐式欧拉公式具有 1 阶精度。
梯形公式 /* trapezoid formula */
§1 Euler’s Method
— 显、隐式两种算法的平均 隐式两种算法的平均
h yi +1 = yi + [ f ( x i , yi ) + f ( x i +1 , yi +1 )] ( i = 0, ... , n − 1) 2
x i + hλ 2
xi +1
x
y 2 = y i + λ 2 h[c1 K 1 + c 2 f ( x i + λ 1 h, y 1 )]
Biblioteka Baidu
y 2 = y i + λ 2 h[c1 K 1 + c 2 f ( x i + λ1 h, y i + λ1 hk 1 )]
假如λ 2 = 1
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
称作过三个点的 Runge − Kutta 方法 .
c i , µ 3 j , λ j 待定系数 .i = 1,2,3; j = 1,2.
y n + 1 = y n + h∑ c i K i , 称作 m 级的 Runge − Kutta 方法 .
i =1
m
K 1 = f ( xi , yi )
i −1
y 3 = y i + λ 3 h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
y 3 = y i +1 = y i + h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
K 1 = f ( xi , yi )
y i + 1 = y i + h[c1 K 1 + c 2 K 2 + c 3 K 3 ]
i =1 m
§2 Runge-Kutta Method
如何确定下式中的系数? 如何确定下式中的系数?
yi +1 K1 K2 = = = yi + h [λ1 K 1 + λ2 K 2 ] f ( x i , yi ) f ( x i + ph, yi + phK 1′) x) = d f ( x, y) y′ (
y i + 1 = y i + h λ 1 y ′( x i ) + λ 2[ y ′( x i ) + ph y ′′( x i ) + O ( h 2 )] = y i + ( λ 1 + λ 2 ) h y ′( x i ) + λ 2 ph 2 y ′′( x i ) + O ( h 3 )
§1 Euler’s Method
欧拉公式的改进: 欧拉公式的改进: 隐式欧拉法 /* implicit Euler method */ 向后差商近似导数
y′( x1 ) ≈
y ( x1 ) ≈ y0 + h f ( x1 , y ( x1 ))
y( x1 ) − y( x0 ) h
x0
x1
y i +1 = y i + h f ( x i +1 , y i +1 ) ( i = 0, ... , n − 1)
Step 1: 先用显式欧拉公式作预测,算出 y i +1 = y i + h f ( x i , y i ) 先用显式欧拉公式作预测 显式欧拉公式作预测, Step 2: 再将 yi +1 代入隐式梯形公式的右边作校正,得到 代入隐式梯形公式的右边作校正 隐式梯形公式的右边作校正,
y i +1
h = yi + [ f ( x i , yi ) + f ( x i +1 , y i +1 )] 2
注:的确有局部截断误差 Ri = y( xi +1 ) − yi +1 = O( h3 ) , 需要2个初值 需要 阶精度,比欧拉方法有了进步。 即梯形公式具有2 阶精度 0和 y1来启动递推 即梯形公式具有 个初值 y,比欧拉方法有了进步。 过程,这样的算法称为双步法 过程,这样的算法称为双步法 /* double-step 但注意到该公式是隐式公式,计算时不得不用到 但注意到该公式是隐式公式, 隐式公式 method */,而前面的三种算法都是单步法 而前面的三种算法都是单步法 迭代法,其迭代收敛性与欧拉公式相似。 迭代法,其迭代收敛性与欧拉公式相似。 /* single-step method */。 中点欧拉公式 /* midpoint formula */ 中心差商近似导数
c1 + c 2 = 1
0 < λ1 ≤ 1
称作过两个点的 Runge − Kutta 方法 .
c1 , c 2 , λ1待定系数 .
y 3 = y i + λ 3 h[c1 f ( x i , y i ) + c 2 f ( x i + λ1 h, y ( x i + λ1 hi ) + c 3 f ( x i + λ 2 h, y ( x i + λ 2 hi )]
y i +1
h = yi + [ f ( x i , yi ) + f ( x i +1 , y i + h f ( x i , yi ))] 2
( i = 0, ... , n − 1)
注:此法亦称为预测 校正法 /* predictor-corrector method */。 此法亦称为预测-校正法 预测 阶精度,同时可以看到它是个单 可以证明该算法具有 2 阶精度,同时可以看到它是个单 递推格式,比隐式公式的迭代求解过程简单 简单。 步递推格式,比隐式公式的迭代求解过程简单。后面将 看到,它的稳定性高于显式欧拉法。 稳定性高于显式欧拉法 看到,它的稳定性高于显式欧拉法。
K 3 = f ( x i + λ 2 h, y i + λ 2 h( c1 K 1 + c 2 K 2 )]
µ 3 i = λ 2 c i , i = 1,2 1,
假如λ3 = 1
K 3 = f ( x i + λ 2 h, y i + h( µ 31 K 1 + µ 32 K 2 )] λ 2 = µ 31 + µ 32 ,
dx 首先希望能确定系数 λ1、λ2、p,使得到的算法格式有 阶 ,使得到的算法格式有2阶 精度, 的前提假设下, ( x, y) 精度,即在 yi = y( x i ) 的前提假设下,使得 + f y ( x, y) dy = fx dx Ri = y ( x i +1 ) − y i +1 = O ( h 3 ) = f x ( x, y) + f y ( x, y) f ( x, y) Step 1: 将 K2 在 ( xi , yi ) 点作 Taylor 展开
§1 Euler’s Method
方 法 显式欧拉 隐式欧拉 梯形公式 中点公式
简单 稳定性最好 精度提高 精度提高, 精度提高 显式
精度低 精度低, 精度低 计算量大 计算量大 多一个初值, 多一个初值 可能影响精度
§1 Euler’s Method
改进欧拉法 /* modified Euler’s method */
i = 2,3,L, m
i −1 j =1 m
K i = f ( x n + λ i h, y n + h ∑ ( µ ij K j )
λ i = ∑ µ ij µ ij > 0
j =1
x n +1
n
∑ λi = 1
i =1
m
m 级 Runge − Kutta 方法也可以这样解释 :
∫x
y ′( x )dx = ∫
c1 + c 2 + c 3 = 1
K 2 = f ( x i + λ1 h, y i + hλ1 k1 )]
y 2 = y i + λ 2 h[c1 K 1 + c 2 K 2 ]
y 3 = y i + λ 3 h[c1 K 1 + c 2 K 2 + c 3 f ( x i + λ 2 h, y i + λ 2 h( c1 K 1 + c 2 K 2 )]
K 2 = f ( xi + ph, yi + phK 1 ) = f ( xi , yi ) + phf x ( xi , yi ) + phK 1 f y ( xi , yi ) + O( h2 )
= y ′ ( x i ) + ph y ′′ ( x i ) + O ( h 2 )
Step 2: 将 K2 代入第 式,得到 代入第1式
同时出现在等式的两边,不能直接得到, 由于未知数 yi+1 同时出现在等式的两边,不能直接得到,故 欧拉公式,而前者称为显式 称为隐式 称为隐式 /* implicit */ 欧拉公式,而前者称为显式 /* explicit */ 欧拉公式。 欧拉公式。 一般先用显式计算一个初值, 迭代求解 求解。 一般先用显式计算一个初值,再迭代求解。 隐式欧拉法的局部截断误差 欧拉法的局部截断误差: 隐式欧拉法的局部截断误差:
K 1 = f ( xi , yi )
K 2 = f ( x i + λ1 h, y i + λ1 hk 1 )]
c1 + c 2 + c 3 = 1
0 < α1 ≤ 1
K 3 = f ( x i + λ 2 h, y i + h( µ 31 K 1 + µ 32 K 2 )]
λ 2 = µ 31 + µ 32 ,