ラグランジアン使ってみた
こんにちは。おととしです。
いま、MGSというゲームにはまっています。とてもリアルなゲームでCGの美しさに感動するほどです。しかし、それでも現実を完璧に再現するには足りず、ゲームとしてすごいといったものです。そこから、数値シミュレーションってとても難しいのだなと思い、どんなものか自分でもやってみようと思いました。
手始めに何をしたら良いかな、というのが最初の悩みです。私の専攻は化学でしたが、大学の途中から物理にとても興味がわきました。運動方程式が運動の様子を予測しているという授業を聞いて、「これが真実じゃん」と思ったのです。一方で、微分方程式を正確に解くことは困難な場合が多く、数学的な解を求める代わりに数値シミュレーションを行うのです。
私は、運動方程式から始めて、それをシミュレーションのプログラムに落とし込むことをやりたいと思うようになりました。その題材として、見た目はシンプルだけれども、解析解の導出が困難である「二重振り子」がおもしろそうだと辿り着きました。
私が取り組んだ順序は次の通りです。
1.二重振り子の運動方程式を立てる
2.微分方程式をシミュレーションできる形に変形する
3.プログラムとして記述する
最初の運動方程式を立てるところがいきなり苦労しました。調べていると、私たちがよく目にする直交座標だけでなく、一般的な座標で成り立つ「ラグランジアン」なるものがあるとわかりました。まず、私が大学時代に学んだ運動方程式は、次のようなものです。
次に、ネットで調べて出てきたラグランジアンを用いた運動方程式は次の式で表されます。
一般的なqについて成り立つそうです。ドットは時間微分を表します。よくわかりませんでしたが、何を計算すればよいか分かったので、絵をかいてゴリゴリ計算をしました。
xとyをθの式に変換して計算します。すると、次の微分方程式が得られました。
ただし、μ=(m1+m2)/m2です。確かにこれは解けなさそうだな~という見た目をしています。
次にこれをプログラムで書いていきます。
参考: