二阶Runge-Kutta法的参数确定

文章讨论了RK方法如何实现泰勒级数的精度,强调了n阶RK方法对n阶微分方程的解的高精度,以及如何通过比较泰勒展开求解参数。特别提到了二阶RK方法的实例和Ralston方法在参数选择中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RK方法实现了泰勒级数的精度,其n阶形式可以概括如下

\begin{equation} y_{i+1}=y_i+\phi\left(x_i, y_i, h\right) h \end{equation}^{}

\begin{equation} \phi=a_1 k_1+a_2 k_2+\cdots+a_n k_n \end{equation}
\begin{equation} \begin{aligned} &\begin{aligned} & k_1=f\left(x_i, y_i\right) \\ & k_2=f\left(x_i+p_1 h, y_i+q_{11} k_1 h\right) \\ & k_3=f\left(x_i+p_2 h, y_i+q_{21} k_1 h+q_{22} k_2 h\right) \end{aligned}\\ &k_n=f\left(x_i+p_{n-1} h, y_i+q_{n-1,1} k_1 h+q_{n-1,2} k_2 h+\cdots+q_{n-1, n-1} k_{n-1} h\right) \end{aligned} \end{equation}

在这个方法中,每一个斜率值都是由上一个斜率值推出来的。p,q,a都是常数,需要将n阶RK算法与n阶泰勒展开进行对比得到具体值。

注意,由于RK方法实现了泰勒级数的精度,故对于一个微分方程的解为关于x的n阶方程的时候,其n阶RK方法得到的数值解与解析解的误差总是收敛于0的。这是因为n阶方程总可以得到泰勒n阶展开,而我们知道n阶RK方法的局部截断误差和全局截断误差和n阶泰勒级数的相同,都分别为\begin{equation} O\left(h^{n+1}\right) \end{equation}\begin{equation} O\left(h^{n}\right) \end{equation},由全局截断误差为h的n阶无穷小我们知道,当步长足够多的时候,误差趋于0。

至于如何通过同阶泰勒展开求解p,q,a的值,可以通过一个二阶RK方法的例子清楚地了解到。

首先我们知道,对于一元函数在x0处有二阶泰勒展开:

\begin{equation} f(x)=f\left(x_0\right)+f^{\prime}\left(x_0\right)\left(x-x_0\right)+\frac{f^{\prime \prime}\left(x_0\right)}{2}\left(x-x_0\right)^2 \end{equation}

当x=x0+h的时候,我们令f(x0)为\begin{equation} y_{i} \end{equation},f(x0+h)为\begin{equation} y_{i+1} \end{equation}。所以上式又可以转换为式1.2

\begin{equation} y_{i+1}=y_i+f\left(x_i, y_i\right) h+\frac{f^{\prime}\left(x_i, y_i\right)}{2 !} h^2 \end{equation}

又有链式法则我们可以得到式1.3:

\begin{equation} f^{\prime}\left(x_i, y_i\right)=\frac{\partial f(x, y)}{\partial x}+\frac{\partial f(x, y)}{\partial y} \frac{d y}{d x} \end{equation}

代入式1.2可以得到式1.4:

\begin{equation} y_{i+1}=y_i+f\left(x_i, y_i\right) h+\left(\frac{\partial f}{\partial x}+\frac{\partial f}{\partial y} \frac{d y}{d x}\right) \frac{h^2}{2 !} \end{equation}

上式便是泰勒二阶展开表示的估计值,接下来我们看一下二阶RK方法表示的估计值.对于二阶RK算法,其标准形式为:

\begin{equation} y_{i+1}=y_i+\left(a_1 k_1+a_2 k_2\right) h \end{equation}

\begin{equation} k_1=f\left(x_i, y_i\right) \end{equation}

\begin{equation} k_2=f\left(x_i+p_1 h, y_i+q_{11} k_1 h\right) \end{equation}

又由二元二阶泰勒展开式:

\begin{equation} g(x+r, y+s)=g(x, y)+r \frac{\partial g}{\partial x}+s \frac{\partial g}{\partial y}+\cdots \end{equation}

将上式代入k2,我们可以得到:

\begin{equation} \begin{aligned} & f\left(x_i+p_1 h, y_i+q_{11} k_1 h\right)=f\left(x_i, y_i\right)+p_1 h \frac{\partial f}{\partial x} \\ &+q_{11} k_1 h \frac{\partial f}{\partial y}+O\left(h^2\right) \end{aligned} \end{equation}

代入 \begin{equation} y_{i+1}=y_i+\left(a_1 k_1+a_2 k_2\right) h \end{equation}

可以得到:

\begin{equation} \begin{aligned} y_{i+1}= & y_i+\left[a_1 f\left(x_i, y_i\right)+a_2 f\left(x_i, y_i\right)\right] h \\ & +\left[a_2 p_1 \frac{\partial f}{\partial x}+a_2 q_{11} f\left(x_i, y_i\right) \frac{\partial f}{\partial y}\right] h^2+O\left(h^3\right) \end{aligned} \end{equation}

对比式1.4可以得到:

\begin{equation} \begin{aligned} & a_1+a_2=1 \\ & a_2 p_1=\frac{1}{2} \\ & a_2 q_{11}=\frac{1}{2} \end{aligned} \end{equation}

而由于a1或a2的不同选择可以得到不同的参数,所以理论上来说二阶及高阶RK方法的参数选择是无穷多的。我们一般选用经典的,具有较小的局部截断误差的参数。在众多的参数选择中,Ralston等人的方法可以提供最小的截断误差约束,使得数值解更加接近于解析解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值