-4

私はこのルンゲクッタコードを持っています。しかし、私のアプローチが間違っていると述べた人がいます。そして、私は彼からその理由をよく理解できませんでした。この方法が間違っている理由についてヒントを与えることができる人はいますか?

    Vector3d r = P.GetAcceleration();

    Vector3d s = P.GetAcceleration() + 0.5*m_dDeltaT*r;

    Vector3d t = P.GetAcceleration() + 0.5*m_dDeltaT*s;

    Vector3d u = P.GetAcceleration() + m_dDeltaT*t;

    P.Velocity += m_dDeltaT * (r + 2.0 * (s + t) + u) / 6.0);

====編集====

Vector3d は座標 x、y、z を格納しています。

GetAcceleration は、x、y、および z ごとに加速度を返します。

4

2 に答える 2

0

メソッドを定義していませんが、私が飛び出しているのは、結果を入力と混合していることです。Runge-Kutta は y_(n+1) = y_n + h sum(b_i k_i) を計算する方法であるため、あなたのソリューションは右側に _n 項、左側に(n+1) 項を保持することを期待します. これはあなたがしていることではありません。代わりに、s (n+1) は r_n ではなく r_(n+1) に依存し、t_(n+1) は s_(n+1) などに依存します。これは、使用する変数の数を制限しようとしたエラーのにおいがします。

それを念頭に置いて、プログラムが生成する計算の実際の中間値を示し、それらを意図した中間値と比較できますか?

于 2015-11-16T17:56:49.860 に答える