Runge-Kutta和重用数据点


11

我正在尝试实现四阶Runge-Kutta方法以解决Python中的一阶ODE即。我了解该方法的工作原理,但是我正在尝试编写一种有效的算法,以最大程度地减少计算fxy的次数因为这样做成本很高。有人告诉我,可以重复使用先前在逐步增加但无法看到方法时计算出的数据点。有谁知道该怎么做还是不可能?dydx=f(x,y)f(x,y)


研究“记忆”。您可以轻松地“包装”您的文件,f(x,y)以便记忆结果。

2
@ S.Lott:术语是“记忆”,没有“ r”。

1
@DietrichEpp:完全正确。Mac OS X具有一个新的,激进的拼写检查器,完全没有任何技术知识。

这是用四阶方法模拟的二阶系统吗?

以下是大量替代解决方案:google.com/…其中 任何一种都可能会有所帮助。

Answers:


8

如果您要从出发yp_1 = f(x_1, y_1)yp_2 = f(x_1+h, y_2)则需要中间点:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

通常,没有任何中间点可用于下一步。因为 K1<> K2K3<> yp_2


4

N NN=4N

如果要重用过去的函数求值,则需要使用诸如Adams-Bashforth之类的多步方法。

无论如何,您都要为每种策略付费。单步方法需要最多的功能评估,但是多步方法具有最大的内存需求。

编辑:更正。我的陈述仅对显式方法成立。对于隐式方法,情况不太清楚,因为阶段数不会直接转换为函数求值的数目。


我应该更具体一些。有关更多详细信息,请参见Butcher:Butcher,JC和J. Wiley。常微分方程的数值方法。Wiley在线图书馆,2008年。ODE解决方案的极佳参考,还为RK方法提供了许多不存在的证明(例如,不存在仅使用4个函数求值的5级Runge-Kutta方法。)
Reid.Atcheson 2012年

1
为完整起见:您的主张不适用于“通用Runge-Kutta方法”,而仅适用于显式 Runge-Kutta方法。
David Ketcheson

哎呀!您是对的,对此感到抱歉。
Reid.Atcheson,2012年

1

我知道您正在使用Runge-Kutta方法来求解ODE,但是如果您想重用f(x,y)的旧计算值,则可能需要考虑多步方法,例如Adams-Bashforth或Adams-Moulton方法。当然,这些方法的缺点是您不能非常轻松地使用自适应时间步长。


0

请检查“嵌入式”方法:此类RK方法的目的是要使用两种具有不同顺序的方法,其中高阶方法使用与低阶方法相同的函数求值。这允许非常有效的错误估计。请参见第165页,以及Hairer,Norsett和Wanner的“解决常微分方程I:非刚性问题”。典型示例是7(8)级的Fehlberg方法。

另外,如果您要在PYTHON中求解ODE,请查看assimulo。我一直在玩这个包好几个星期了,我很高兴。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.