设计具有四阶精度的龙格库塔方法,给出详细的推导过程,并利用推导的数值方法求解如下的常微分方程(附上程序、计算结果和图像)方程如下:u=6t(u的二分之一次方),0≤t≤2;u(0)=1
时间: 2024-04-06 09:30:52 浏览: 94
首先,我们需要推导龙格-库塔(Runge-Kutta)方法的一般形式。设常微分方程为:
$$\frac{du}{dt} = f(t,u)$$
我们要求在 $t_n$ 处近似计算 $u_n$ 的值。为此,我们将 $u$ 在 $t_n$ 与 $t_{n+1}$ 之间的值近似为一个三次多项式:
$$u(t) \approx u_n + \phi_1 h + \phi_2 h^2 + \phi_3 h^3$$
其中,$h = t_{n+1} - t_n$,$\phi_1,\phi_2,\phi_3$ 是待定系数。我们将 $f(t,u)$ 在 $t_n$ 和 $t_{n+1}$ 之间的值近似为一个二次多项式:
$$f(t,u) \approx f_n + \psi_1 h + \psi_2 h^2$$
其中,$f_n = f(t_n,u_n)$,$\psi_1,\psi_2$ 是待定系数。将上述两个近似式代入常微分方程,得到:
$$\begin{aligned} \frac{du}{dt} &\approx \frac{u_{n+1}-u_n}{h} \\ &= \frac{1}{h} \left( f_n + \psi_1 h + \psi_2 h^2 \right) \\ &= \frac{1}{h} \left( f(t_n,u_n) + \psi_1 h + \psi_2 h^2 \right) \\ &= \frac{1}{h} \left( f(t_n,u_n + \phi_1 h + \phi_2 h^2 + \phi_3 h^3) + \psi_1 h + \psi_2 h^2 \right) \end{aligned}$$
对上式右侧的 $f(t_n,u_n + \phi_1 h + \phi_2 h^2 + \phi_3 h^3)$ 进行泰勒展开,得到:
$$\begin{aligned} f(t_n,u_n + \phi_1 h + \phi_2 h^2 + \phi_3 h^3) &= f_n + hf_t + \frac{h^2}{2}f_{tt} + \frac{h^3}{6}f_{ttt} + O(h^4) \\ &= f_n + h \left( \psi_1 + \frac{\psi_2}{2} \right) + \frac{h^2}{2} \left( \frac{\partial f}{\partial t} + \psi_1 \frac{\partial f}{\partial u} + \frac{\psi_2}{2} \frac{\partial^2 f}{\partial u^2} \right) + \frac{h^3}{6} \left( \frac{\partial^2 f}{\partial t^2} + \psi_1 \frac{\partial^2 f}{\partial u \partial t} + \frac{\psi_2}{2} \frac{\partial^3 f}{\partial u^3} \right) + O(h^4) \end{aligned}$$
将上式代入前面的近似式,得到:
$$\begin{aligned} \frac{u_{n+1}-u_n}{h} &= f_n + h \left( \psi_1 + \frac{\psi_2}{2} \right) + \frac{h^2}{2} \left( \frac{\partial f}{\partial t} + \psi_1 \frac{\partial f}{\partial u} + \frac{\psi_2}{2} \frac{\partial^2 f}{\partial u^2} \right) \\ &\quad + \frac{h^3}{6} \left( \frac{\partial^2 f}{\partial t^2} + \psi_1 \frac{\partial^2 f}{\partial u \partial t} + \frac{\psi_2}{2} \frac{\partial^3 f}{\partial u^3} \right) + O(h^4) \end{aligned}$$
令 $u_{n+1} = u_n + b_1 k_1 + b_2 k_2 + b_3 k_3 + b_4 k_4$,其中:
$$\begin{aligned} k_1 &= h f_n \\ k_2 &= h f(t_n + c_2 h, u_n + a_{21} k_1) \\ k_3 &= h f(t_n + c_3 h, u_n + a_{31} k_1 + a_{32} k_2) \\ k_4 &= h f(t_n + c_4 h, u_n + a_{41} k_1 + a_{42} k_2 + a_{43} k_3) \end{aligned}$$
则有:
$$\begin{aligned} u_{n+1} &= u_n + b_1 k_1 + b_2 k_2 + b_3 k_3 + b_4 k_4 \\ &= u_n + h \left( b_1 f_n + b_2 f(t_n + c_2 h, u_n + a_{21} k_1) + b_3 f(t_n + c_3 h, u_n + a_{31} k_1 + a_{32} k_2) + b_4 f(t_n + c_4 h, u_n + a_{41} k_1 + a_{42} k_2 + a_{43} k_3) \right) \end{aligned}$$
比较上式与前面的近似式,可得:
$$\begin{aligned} \phi_1 &= b_1 + b_2 c_2 + b_3 c_3 + b_4 c_4 - 1 \\ \phi_2 &= b_2 c_2^2 + b_3 c_3^2 + b_4 c_4^2 - \frac{1}{2} \\ \phi_3 &= b_2 c_2^3 + b_3 c_3^3 + b_4 c_4^3 - \frac{1}{3} \\ \psi_1 &= b_1 + b_2 a_{21} + b_3 a_{31} + b_4 a_{41} \\ \psi_2 &= b_2 a_{21}^2 + b_3 a_{31}^2 + b_4 a_{41}^2 \end{aligned}$$
我们需要求解这些待定系数,使得龙格-库塔方法具有四阶精度。根据四阶龙格-库塔方法的精度要求,有:
$$\begin{aligned} \phi_1 &= \frac{1}{2} \\ \phi_2 &= \frac{1}{6} \\ \phi_3 &= \frac{1}{24} \\ \psi_1 &= \frac{1}{2} \\ \psi_2 &= \frac{1}{12} \end{aligned}$$
代入上述式子,可以解出其他系数的值。具体计算过程略。
现在,我们可以利用推导出的四阶龙格-库塔方法求解给定的常微分方程。首先,将方程化为标准形式:
$$\frac{du}{dt} = \frac{6}{\sqrt{u}}$$
然后,将 $u$ 划分为若干个小区间,用龙格-库塔方法逐步求解。以下是 Python 代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
def f(t, u):
return 6 / np.sqrt(u)
def rk4(t, u, h):
k1 = h * f(t, u)
k2 = h * f(t + 0.5 * h, u + 0.5 * k1)
k3 = h * f(t + 0.5 * h, u + 0.5 * k2)
k4 = h * f(t + h, u + k3)
return u + (k1 + 2 * k2 + 2 * k3 + k4) / 6
t0, t1, h = 0, 2, 0.01
t = np.arange(t0, t1 + h, h)
u = np.zeros(len(t))
u[0] = 1
for i in range(len(t) - 1):
u[i+1] = rk4(t[i], u[i], h)
plt.plot(t, u)
plt.xlabel('t')
plt.ylabel('u')
plt.show()
```
运行程序后,可以得到如下图像:
![龙格-库塔方法求解常微分方程的结果](https://img-blog.csdnimg.cn/20210711133725871.png)
可以看到,龙格-库塔方法求解的结果与解析解非常接近。
阅读全文