好きなことを発信していく。コメントこんにちは、Rafkaです。-オイラー法-今回は、前回紹介したオイラー法よりも誤差を抑えられる、ホイン法(2次のルンゲクッタ法とも呼ばれます)の導出と実装を行っていきます。アルゴリズム導出する前に、ホイン法のアルゴリズムを紹介します。ちなみにホインの綴りは少し特殊で、Heunと書きます。値を更新していきます。\(\boldsymbol{k}_2\)を計算し、それらの平均を次の時間ステップへの値の更新に使用するといった感じです。それでは導出の方に進みましょう。前回のオイラー法よりも精度を上げたいので、今回は2次の項まで展開します。t^3)$$ここで厄介なのは2回微分の項です。ついて全微分を行うことで計算を進めることができます。\boldsymbol{x}(t)\bigr)\end{align}$$これをテイラー展開した式の2回微分の項に代入すると、以下のようになります。用いて表現された以下の式を組み合わせて上と同じ形に変形し、それぞれを比較して定数を決定して最終的な更新式の導出を行いたいと思います。1次の項までテイラー展開しておきます。3番目更新式に代入して変形すると、以下の式になります。t^2\end{align}$$同じ様な形になりましたね。\frac{1}{2}$$とすれば良いことが分かります。これらの未知定数を更新式に代入して整理すると、アルゴリズムの部分で示した以下の更新式が導かれます。\boldsymbol{k}_2)\end{align}$$途中示したテイラー展開の式から、ホイン法が計算精度2次の手法であることが分かります。実装オイラー法のメソッドと同様な形になるように、以下のように実装しました。Solverクラスの中からホイン法の部分だけを抜き出してきています。オイラー法と異なるのは更新式の形だけなので、メソッドの違いも10行目で使用している更新値の計算メソッドだけです。計算して、更新値を返すようにしています。まとめ今回はオイラー法よりも計算精度の良いホイン法の導出と実装を行いました。ホイン法の更新式は以下になります。\boldsymbol{k}_2)\end{align}$$次回はルンゲクッタ法の紹介を行いますが、導出は書くと大変なので割愛させていただきます。導出を行っている他のサイトさんを見つけたのでそちらの紹介を行い、アルゴリズムの紹介とその実装をメインに説明したいと思います。RafkaC#とゲームが好き。プログラムの高速化も好き。Themesトップへ戻る。