Runge-Kuttaとデータポイントの再利用


11

Pythonでd yの 1次ODEを解くために、4次のRunge-Kuttaメソッドを実装しようとしています。。私はこの方法の仕組みを理解していますが、fxy)の計算回数を最小限に抑える効率的なアルゴリズムを作成しようとしています。これは非常にコストがかかるためです。以前に計算されたデータポイントは、ステップを進めるごとに再利用できるが、その方法はわからない、と言われました。誰もこれを行う方法を知っていますか、それは不可能ですか?dydx=f(x,y)f(x,y)


研究「記憶」。f(x,y)結果をメモするために、簡単に「ラップ」できます。

2
@ S.Lott:用語は「メモ化」であり、「r」はありません。

1
@DietrichEpp:完全に正しい。Mac OS Xには、技術に精通していない新しい積極的なスペルチェッカーがあります。

これは、4次法でシミュレートされた2次システムですか?

ここでは代替ソリューションの膨大なリストです:google.com/... それらのいずれかは、おそらく役立つことになるだろう。

回答:


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<> K2およびK3<>であるため yp_2


4

N NN=4N

過去の関数評価を再利用する場合は、Adams-Bashforthのようなマルチステップメソッドを使用する必要があります。

いずれの場合も、各戦略に対して支払います。シングルステップメソッドは、最大数の関数評価を必要としますが、マルチステップメソッドは最大のメモリ要件を持ちます。

編集:修正。私の声明は、明示的なメソッドにのみ当てはまります。ステージの数は関数評価の数に直接変換されないため、暗黙的なメソッドの状況はそれほど明確ではありません。


私はおそらくもう少し具体的にする必要があります。詳細については、ブッチャー、ブッチャー、JC、およびJ.ワイリーを参照してください。常微分方程式の数値法。Wiley Online Library、2008。ODEソリューションの優れたリファレンス。また、RKメソッドの非存在証明を多数提供します(たとえば、4つの関数評価のみを使用する順序5ルンゲクッタ法は存在しません。)
Reid.Atcheson

1
完全を期すために:あなたの主張は「一般的なルンゲクッタ法」ではなく、明示的なルンゲクッタ法にのみ当てはまります。
デビッドケッチャソン

おっと!そのとおりです、ごめんなさい。
Reid.Atcheson

1

Runge-Kuttaメソッドを使用してODEを解決していることは知っていますが、f(x、y)の古い計算値を再利用する場合は、Adams-BashforthやAdams-Moultonなどのマルチステップメソッドを検討することをお勧めします。メソッド。もちろん、これらの方法の欠点は、アダプティブタイムステップを非常に簡単に使用できないことです。


0

「埋め込み」メソッドを確認してください。このタイプのRKメソッドの目的は、次数の異なる2つのメソッドを使用することです。ここで、高次メソッドは低次メソッドと同じ関数評価を使用します。これにより、非常に効率的なエラー推定が可能になります。Hairer、Norsett、およびWannerによるp.165および「常微分方程式の解法I:非スティッフな問題」を参照してください。典型的な例は、順序7(8)のFehlbergメソッドです。

また、PYTHONでODEを解く場合は、assimuloをチェックしてください。私はこのパッケージで数週間遊んでいて、とても幸せです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.