□ あらき先生制作の2重振り子シュミレーション cpp ファイルの初心者用解説

2重振り子 の角度に関する運動方程式はそのファイルの (16),(17) 式です.これを解いて2重振り子の運動がわかります.その動きを動画化するのがあらき先生制作の cpp ファイル furiko.cppAnimationWindow.cpp です(クリックしてダウンロードしておきます).
さて,動画化するにはC++言語を機械語に直すコンパイラが必要で,Borland C++ Compiler 5.5 無償ダウンロードサービスでゲットしましょう.Borland C++ Compiler 5.5 (freecommandlinetools2.exe(8.46MB))をダウンロードしてインストール(ダブルクリック)します.次に,Borland C++ Compiler 5.5 アップデートパック(freecommandlinetools_update.exe)をダウンロードしてインストールします.デフォルトでは C:\borland フォルダ以下にインストールされます(そうしましょう).

さて,次にコンパイルのための準備です.C:\borland\bcc55\furiko フォルダを作ります(C:\borland\bcc55フォルダで右クリックして,新規作成→フォルダ(名前をfurikoにする)).そこに furiko.cpp と AnimationWindow.cpp を移動します(切り取り→貼り付け). 次に,メモ帳(or秀丸)のような txt ファイルを開いて,
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
と書き(上の2行をコピー→ペーストする),名前を bcc32.cfg と付けて(拡張子がcfgです) C:\borland\bcc55\Bin フォルダに保存します.
同様に,txt ファイルに
-L"c:\Borland\Bcc55\lib"
と書いて,ilink32.cfg の名で C:\borland\bcc55\Bin に保存します.
次に,コンパイルが楽になるように,txt ファイルに
@echo off
PATH=C:\borland\bcc55\Bin;%PATH%
C:
cd C:\borland\bcc55\furiko
command

と書いて,setbcc.bat と名付けて C:\borland\bcc55\Bin に保存します.これで,準備完了です.setbcc.bat は shortcut をつくって,デスクトップに貼り付けておくとあとが楽です.

それではいよいよ2重振り子の図を見るとしましょう.setbcc.bat (またはそのshortcut)をダブルクリックします.真っ黒い画面が現れて,最後の行が
C:\BORLAND\BCC55\FURIKO>
と書かれていますね.そのあとに
bcc32 -W furiko.cpp
と打ち込んで Enter します.オプションスイッチ -W はグラフィカルユーザーインターフェース(GUI)アプリケーションを働かせるためのものです(thanks あらき先生).その結果,C:\BORLAND\BCC55\furiko フォルダに furiko.exe ファイルができていればOKです.
最後に,C:\BORLAND\BCC55\FURIKO> の後に
furiko
と打ち込んで Enter します.

すると,2重振り子が振動している画面が現れましたね.じっと見ていると,下の振り子が回転する場合もありますね.これは上の振り子の多くのエネルギーが下の振り子に移ったときです.なお,振り子の糸は(縮まないように)‘重さのない棒’と見なされ,また振り子の重りは図では省略されています(そのうち,付けてくれるでしょう).
2重振り子の振動の様子は,furiko.cpp ファイルに書かれている初期条件:
// 二重振り子のパラメーター
#define m0 1.0 // 上の振り子の質量 [kg]
#define m1 0.1 // 下の振り子の質量 [kg]
#define l0 1.5 // 上の振り子の長さ [m]
#define l1 1.5 // 下の振り子の長さ [m]
#define g 9.8 // 重力加速度 [m/s^2]
// シミュレーションのパラメーター
double
x[N]={ // 振り子の角度・角速度(ここに書かれた数値はシミュレーションの初期値)
   1.0 // x[0]: 上の振り子の角度 [rad]
   ,0.0 // x[1]: 下の振り子の角度 [rad]
   ,0.0 // x[2]: 上の振り子の角速度 [rad/s]
   ,0.0 // x[3]: 下の振り子の角速度 [rad/s]
    }
  ,dt= 0.001 // 数値積分の時間間隔 Δt
 ,tend= 0.050 // アニメーション1コマ分の積分時間
  ;
によって決まります(赤字の部分).
この設定では,
m1 0.1 // 下の振り子の質量 [kg]
なので,上の振り子の質量の10分の1となっています.そのため,上の振り子のエネルギーの一部が下の振り子に移っただけで下の振り子は回転するのに十分なエネルギーを持ちます.そこで,furiko.cpp ファイルを開いて
m1 0.23 // 下の振り子の質量 [kg]
と書き換えて上書き保存し,また,setbcc.bat に
bcc32 -W furiko.cpp

furiko
を打ち込みましょう.
今度は,下の振り子が重くなったので,なかなか回転しませんね.また,下の振り子が回転を始めると上の振り子はほとんど動きが止まりますね.

振り子の角度は [rad](ラジアン)単位です:π [rad]=180°,1 [rad]=180°/π=57.296°,90°=π/2=1.5708 [rad].
   1.5708 // x[0]: 上の振り子の角度 [rad]
   ,0.0 // x[1]: 下の振り子の角度 [rad]
などの初期値も試して見ましょう.

setbcc.bat を終わらせるには exit と打ち込みます.

トップページに戻る.