初始值为分母根的 ODE 的 Runge-Kutta 方法

计算科学 数字 龙格库塔 微分方程
2021-12-08 22:39:15

我在 Fortran 中编写了一个代码来使用 RK4 方法求解这个微分方程:

dydx=ABy+Cy2

A,B, 和C是一些已知的常数。问题是我的初始值是x=0y=0因为y=0是分母的根我得到一个运行时错误。

有谁知道我该如何解决这个问题?

3个回答

你的问题不是很好。两边乘以|y|以形式获得 ODE

|y(x)|y(x)=ABy(x)+C.
如果您的初始条件是y(0)=0,那么在最初的时候你有
0y(0)=AC.
这意味着如果AC0, 没有值y(0)可以满足方程。

换句话说,您的问题不在于您不知道如何说服您使用的任何 ODE 积分器来接受您的初始条件。你的问题是你的数学模型没有意义。

积分曲线的整体形式如下图所示, 在此处输入图像描述它们有垂直渐近线在y=0,这肯定会给从y=0(x 无关紧要)。这并不一定意味着问题不成立;如果积分曲线随着初始条件的变化而迅速发散,即缺乏 Lyapunov 意义上的稳定性,就会出现这种情况。但是对于手头的 ODE,一个简单的解决方法是走一小步ϵ更多y=0并从那里整合,整合曲线将保持接近精确曲线。

如果常数为正,则y是积极的和设置u=y2你得到

u=2AB|u|+C
这更规则一些,并允许初始值u(0)=0没有奇点。

这个方程在接近初始点时仍然是僵硬的,这应该会对固定步长 RK4 的局部误差产生影响,只要u接近于零。人们可以通过最初使用较小的步长来抵消这一点。