区切り、数値積分法を用いて解きます。単純なのは、Euler(オイラー)法と呼ばれる数値積分法です。変わらないと見なす方法です。(12)ただし、Euler法はあまり精度が良くありません。科学技術計算で要求される精度を出したければ、4次Runge-Kutta法(RK4)など、もっと高精度の数値積分法を用いる必要があります。(14)このように、位置の更新に、古い速度ではなく、新しい速度を用いるだけです。Symplectic数値積分の一種となり、エネルギーが振動的に保存するようになると共に、精度自体もEuler法より向上します。コード解説コード全体このプログラムのコード全体は、以下のようになっています。all.txt以下では、コードの各部について解説します。」を読み込んでいます。import.txtグローバル変数その下では、グローバル変数を宣言しています。シミュレーションするモデルのパラメータなどを用意しています。関数部分を見ていきましょう。main関数は、グローバル領域の処理(初期化など)が完了した時点で、システムから自動的にコールされます。プログラムの具体的な処理はここから始まります。今回は、以下のようになっています。system.txtこのように、ユーザーに開始を伝えて、初期処理を行うinitialize関数(後述)をコールして初期化したあとは、メインループの処理を行うmainLoop関数へ処理を渡しています。続いてmainLoop関数です。この関数はメインループの処理を行います。メインループとは、プログラムの開始から終了まで、ずっと繰り返し回り続けている部分の事で、アニメーションやゲームでは必須です。毎秒数十回、モデルを少しずつ動かし、その度に画面を更新する事で、アニメーションしているように見せます。中は、プログラムの開始から終了までずっと回り続けます。これがメインループ部です。これがメインループの中では、update関数(後述)でモデルの状態を少しだけ変化させています。plotCounter回に一回、setGraph2DData関数でグラフソフトに座標値配列を転送し、グラフを描画させています。なったタイミングで、グラフを描画するという仕組みです。関数を実装しています。initialize.txtまずは頂点(質点の位置)のX座標配列です。今回のモデルなら、質点はX方向へは動かないのですが、グラフソフトに座標を転送する必要があるので用意しています。値は、モデルの長さをN等分した地点のX座標を入れています。続いて頂点(質点の位置)のY座標配列です。今回は、ガウス関数による波束を設定しています。