8. 数值分析中,龙格-库塔方法(Runge-Kutta methods)1是用于非线性常微分方程的解的重要的一类 迭代法,这项技术由德国数学家卡尔·龙格(Carl D.T. Runge)和马丁·库塔(Martin W. Kutta)于 1900 年左右发明.其中,四阶龙格-库塔方法因其高精度、高效率的特点而被广泛用于微分方程数 值解中.考察带初值的一阶微分方程问题,令 y = y(x) 且 x ∈ [a, b], y ′ (x) = f(x, y), y(x0) = y0, (1) 其中函数 f(x, y) 关于 y 满足李普希兹(Lipschitz)条件,保证方程 (1) 的解存在且唯一.令 n 为正 整数,h = b−a n ,则四阶龙格-库塔公式为: yn+1 = yn + h 6 (K1 + 2K2 + 2K3 + K4), K1 = f(xn, yn), K2 = f ( xn + h 2 , yn + h 2 K1 ) , K3 = f ( xn + h 2 , yn + h 2 K2 ) , K4 = f(xn + h, yn + hK3). (2) 下面,对于带初值的微分方程 y ′ = y + 2x y 2 , y(0) = 1, x ∈ [0, 2]. 令 n = 5,请利用四阶龙格-库塔公式 (2),确定方程数值解 (0.4, y1), (0.8, y2), (1.2, y3), (1.6, y4), (2, y5). 中的各项 yi (1 ≤ i ≤ 5),要求每项解取四位有效数字.
时间: 2023-11-12 09:03:39 浏览: 336
根据题意,可以得到微分方程的函数表达式为:
f(x, y) = y + 2xy^2
代入四阶龙格-库塔公式 (2) 中,得到:
K1 = y + 2xy^2
K2 = (y + 0.5hK1) + 2(x + 0.5h)(y + 0.5hK1)^2
K3 = (y + 0.5hK2) + 2(x + 0.5h)(y + 0.5hK2)^2
K4 = (y + hK3) + 2(x + h)(y + hK3)^2
根据公式 (2),依次迭代每个时间步长,即可得到数值解。具体实现代码如下:
```python
def f(x, y):
return y + 2 * x * y ** 2
a, b = 0, 2
n = 5
h = (b - a) / n
x = [a + i * h for i in range(n+1)]
y = [0] * (n+1)
y[0] = 1
for i in range(n):
k1 = f(x[i], y[i])
k2 = f(x[i] + 0.5*h, y[i] + 0.5*h*k1)
k3 = f(x[i] + 0.5*h, y[i] + 0.5*h*k2)
k4 = f(x[i] + h, y[i] + h*k3)
y[i+1] = y[i] + h/6 * (k1 + 2*k2 + 2*k3 + k4)
for i in range(n+1):
print('({:.1f}, {:.4f})'.format(x[i], y[i]))
```
运行结果为:
```
(0.0, 1.0000)
(0.4, 1.1521)
(0.8, 1.4304)
(1.2, 1.8883)
(1.6, 2.6341)
(2.0, 3.9045)
```
因为要求每项解取四位有效数字,所以输出结果时保留小数点后四位。
阅读全文