HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > 仮想物理実験室

VisualC++ と OpenGL を利用した仮想物理実験室
【1-1-6】等速度直線運動のシミュレーション結果と解析解との比較

文責:遠藤 理平 (2010年1月18日) カテゴリ:仮想物理実験室(325)

前節(【1-1-5】等差数列を用いた等速度直線運動の解析解)で導出した等速直線運動の解析解を、 シミュレーションの数値解と比較しグラフ化します(【1-1-4】等速度直線運動のグラフ化)。

解析解とシミュレーション結果との比較

解析解がわかっている場合、数値解と比較することでアルゴリズムの評価をすることができます。 等速直線運動のシミュレーションを行なうアルゴリズムと解析解を比較を行ないます。

VisualC++ の変更

【2.1日目】等速度直線運動をグラフ化すると同様に、シミュレーションの数値結果をファイルに書き出します。 今回はΔt = 1, 0.1, 0.01 の3つの場合について、計算結果と解析解との比較を行ないます。 また、速度 v =10[m/s]、初期値 x_0 = 0[m] とします。解析解は、x = 10 t です。 Δt = 1 のときのファイル名を「ball1.data」、 Δt = 0.1 のときのファイル名を「ball01.data」、 Δt = 0.01 のときのファイル名を「ball001.data」とそれぞれの結果を出力するファイル名を変更します。

//////////////////////////////////////////////////////////////////////////
// 変数の定義
//////////////////////////////////////////////////////////////////////////
#define _BITMAP 0 //アニメーション作成用ビットマップの保存 0:しない 1:する
ofstream file1( "ball1.data" ); // <--ここを変更する
//--------------------------------------------------------
// 仮想物理実験室変数の定義
//--------------------------------------------------------
double t = 0.0;  //時刻
double dt= 0.01; //時間刻み // <--ここを変更する
int tn = 0;      //ステップ数

// ボールの定義
struct BALL {  //構造体の定義
  double x, y, z;
  double vx, vy, vz;
};
BALL ball1 = { //変数の宣言+初期値の設定
  0.0, 0.0, 20.0, //(x, y, z)
  10.0, 0.0, 0.0    //(vx,vy,vz)
};

gnuplot のテンプレート

【2.1日目】等速度直線運動をグラフ化すると同様に、描画用のテンプレートを用意します。

plot "ball001.data" using 1:2  ,\
     "ball01.data" using 1:2  ,\
     "ball1.data" using 1:2  ,\
 10*x 
replot

解析解を描画するために「10*x」を追加します。gnuplot では横軸は x なので、「t」ではなく 「x」とします。混乱しないでください。

計算結果

等速直線運動では、x_n がすべての場合 Δt で解析解の直線の上にのることが確認できます。 つまり、数値解と解析解が一致しているということです。 等速直線運動のシミュレーションは、Δt の値によらず解析解と等しいとがわかりました。

VisualC++ と OpenGL を利用した仮想物理実験室

第0章 仮想物理実験室の構築

第1章 様々な運動

第2章 ニュートンの運動方程式

第3章 剛体の運動(エネルギー保存則と運動量保存則)

付録

  • 【A-1】参考文献
    ・(A-1-1)OpenGL について
    ・(A-1-2)VisualC++ について
    ・(A-1-3)物理シミュレーション
    ・(A-1-4)数値計算

未分類

力学

量子力学

波動論



▲このページのトップNPO法人 natural science トップ

関連記事

仮想物理実験室







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました