赞
踩
y ′ ( x ) = f ( x , y ) y ( x 0 ) = y 0 y'(x)=f(x,y) \\\quad\\ y(x_0)=y_0 y′(x)=f(x,y)y(x0)=y0
y n + 1 = y n + h f ( x n , y n ) y_{n+1}=y_n+hf(x_n,y_n) yn+1=yn+hf(xn,yn)
y
n
+
1
=
y
n
+
h
f
(
x
n
+
1
,
y
n
+
1
)
y_{n+1}=y_n+hf(x_{n+1},y_{n+1})
yn+1=yn+hf(xn+1,yn+1)
即采用了后面点的斜率作为两点连线的斜率。
从上方公式可以看出,求常微分方程的初值问题的关键是:
如何选取一个合适的斜率
f
′
(
ξ
)
f'(\xi)
f′(ξ)使得
y
n
+
1
y_{n+1}
yn+1的值最为精确
y
n
+
1
=
y
n
+
(
x
n
+
1
−
x
n
)
∗
f
′
(
ξ
)
,
ξ
∈
(
x
n
,
x
n
+
1
)
y_{n+1} = y_n + (x_{n+1}-x_n)*f'(\xi),\quad\xi\in (x_n,x_{n+1})
yn+1=yn+(xn+1−xn)∗f′(ξ),ξ∈(xn,xn+1)
但我们如果将欧拉公式和隐式欧拉公式的斜率平均会不会得到更为近似的斜率呢?
为此引出梯形公式
y n + 1 = y n + h [ f ( x n , y n ) + f ( x n + 1 , y n + 1 ) ] 2 y_{n+1}=y_n+h\frac{\left[ f(x_n,y_n)+f(x_{n+1},y_{n+1})\right]}{2} yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]
但如何求解隐式公式:
如果
y
′
(
x
)
=
f
(
x
,
y
)
y'(x)=f(x,y)
y′(x)=f(x,y)中,f(x,y)只包含y的一次项 (即
f
(
x
,
y
)
f(x,y)
f(x,y)是
y
y
y的线性函数)),则可显示计算。
但若不是线性函数,则需要用迭代法计算。
迭代公式:
y
n
+
1
0
=
y
n
+
h
f
(
x
n
,
y
n
)
y
n
+
1
(
k
+
1
)
=
y
n
+
h
2
[
f
(
x
n
,
y
n
)
+
f
(
x
n
+
1
,
y
n
+
1
k
)
]
y_{n+1}^0=y_n+hf(x_n,y_n) \\ y_{n+1}^{(k+1)} = y_n + \frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_{n+1}^k)]
yn+10=yn+hf(xn,yn)yn+1(k+1)=yn+2h[f(xn,yn)+f(xn+1,yn+1k)]
上标为迭代次数,第一次迭代使用欧拉公式确定一个近似值。
为了编程方便,且具有较好的精确度,一般采用改进的欧拉公式。
{
T
1
=
y
n
+
h
f
(
x
n
,
y
n
)
T
2
=
y
n
+
h
f
(
x
n
+
1
,
T
1
)
y
n
+
1
=
T
1
+
T
2
2
两步欧拉公式:用前两步的值作为迭代初值,用前一步的斜率作为两步间的斜率。
y
n
+
1
=
y
n
−
1
+
2
h
f
(
x
n
,
y
n
)
y_{n+1} = y_{n-1}+2hf(x_n,y_n)
yn+1=yn−1+2hf(xn,yn)
中点公式:
y
n
+
1
=
y
n
+
2
h
f
(
x
2
n
+
1
2
,
y
2
n
+
1
2
)
y_{n+1} = y_{n}+2hf(x_{\frac{2n+1}{2}},y_{\frac{2n+1}{2}})
yn+1=yn+2hf(x22n+1,y22n+1)
T n + 1 = y ( x n + 1 ) − y ( x n ) − h ∗ φ ( x n , x n + 1 , y ( x n ) , y ( x n + 1 ) , h ) T_{n+1} = y(x_{n+1})-y(x_n)-h*\varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h ) Tn+1=y(xn+1)−y(xn)−h∗φ(xn,xn+1,y(xn),y(xn+1),h)
φ ( x n , x n + 1 , y ( x n ) , y ( x n + 1 ) , h ) \varphi(x_n,x_{n+1},y(x_n),y(x_{n+1}),h ) φ(xn,xn+1,y(xn),y(xn+1),h)为各种方法中的斜率近似值函数
T
n
+
1
=
O
(
h
p
+
1
)
T_{n+1}=O(h^{p+1})
Tn+1=O(hp+1)则称该方法是具有p阶精度的。
含
h
p
+
1
h^{p+1}
hp+1的项称为局部截断误差主项。
求解截断误差需要使用泰勒展开:
y
n
+
1
=
y
(
x
n
)
+
h
y
′
(
x
n
)
+
h
2
2
!
y
′
′
(
x
n
)
+
.
.
.
+
h
p
p
!
y
(
p
)
(
x
n
)
+
O
(
h
p
+
1
)
y_{n+1} = y(x_n) + hy'(x_n)+\frac{h^2}{2!}y''(x_n)+...+\frac{h^p}{p!}y^{(p)}(x_n)+O(h^{p+1})
yn+1=y(xn)+hy′(xn)+2!h2y′′(xn)+...+p!hpy(p)(xn)+O(hp+1)
式中:
y
′
′
(
x
)
=
f
x
′
(
x
,
y
)
+
f
y
′
(
x
,
y
)
f
(
x
,
y
)
y
′
′
′
(
x
)
=
f
x
x
+
2
f
∗
f
x
y
+
f
∗
f
y
y
+
y
′
′
(
x
)
f
y
y''(x) = f'_x(x,y)+f'_y(x,y)f(x,y) \\y'''(x) = f_{xx}+2f*f_{xy}+f*f_{yy}+y''(x)f_y
y′′(x)=fx′(x,y)+fy′(x,y)f(x,y)y′′′(x)=fxx+2f∗fxy+f∗fyy+y′′(x)fy
通过多个采样点,加权近似精度最高的斜率。
即构造方程组,使得局部截断误差达到最小。
{
y
n
+
1
=
y
n
+
h
6
(
k
1
+
2
k
2
+
2
k
3
+
k
4
)
k
1
=
f
(
x
,
y
)
k
2
=
f
(
x
n
+
h
2
,
y
n
+
h
2
k
1
)
k
3
=
f
(
x
n
+
h
2
,
y
n
+
h
2
k
2
)
k
4
=
f
(
x
n
+
h
,
y
+
h
k
3
)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。