0

我有一个使用 Runge Kutta 算法求解微分方程组的问题。到目前为止,我已经将二阶 PDE 重写为一组两个耦合方程,其中

    f(L1,L2) = L2
    g(L1,L2) = A*(B*L1-C*L2-D)

是两个方程,A、B、C 和 D 是常数。为了获得下一步的值,我对每个时间步 dt 进行如下操作:

    k1 = f(L1,L2)
    l1 = g(L1,L2)

    k2 = f(L1 + 0.5 * dt * k1,L2 + 0.5 * dt * l1 )
    l2 = g(L1 + 0.5 * dt * k1,L2 + 0.5 * dt * l1 )

    k3 = f(L1 + 0.5 * dt * k2,L2 + 0.5 * dt * l2 )
    l3 = g(L1 + 0.5 * dt * k2, L2 + 0.5 * dt * l2 )

    k4 = f(L1 + dt * k1,L2 +  dt * l1 )
    l4 = g(L1 + dt * k1,L2 + dt * l1 ) 

我使用当前时间步的 L1 和 L2 的值并迭代计算系数。

结果,我通过在最后对系数求和和加权得到 L1 和 L2。我的问题是,整个算法在 4 个时间步后变得不稳定。

有人知道实现在技术上是否正确吗?谢谢!

4

3 回答 3

0

只是一个猜测,因为你没有说dt你使用什么值:让它尽可能小,因为

局部截断误差为 O(h^5) 量级,而总累积误差为 O(h^4) 量级。

(引自这篇维基百科文章,dt 扮演 h 角色)。

于 2013-11-10T09:40:35.907 回答
0

两件事情:

Runge-Kutta总体上是不稳定的。它只是比欧拉的“更稳定”。根据您的微分方程 的条件dt,它可能还不够。小一点有dt帮助吗?

我在您对 and 的定义中遗漏了 of的t概念。假设and不是恒定的,最好通过and传递它。喜欢。这迫使您考虑那些系数计算,您现在需要相应地传递另一个。这将导致在中点对 L1 和 L2 进行评估。fgL1L2tfgf(t,L1,L2)t'

于 2013-11-10T09:46:38.470 回答
0

在计算中,k4, l4您用于k1, l1计算 ODE 函数被评估的状态,而该方法需要使用k3, l3. 这个误差会降低方法的阶数,可能会降低到 2,误差对步长的依赖性将反映这一点。

于 2018-06-15T07:17:15.700 回答