3つの星の行方

-- 地球は太陽の周りを回っている --
引力で引き合っている2つの星は、互いに楕円軌道を描いて回ります。
それでは、星が3つだったら、どんな運動になるでしょうか?
実はこれ、計算して答を出すことができないと言われている超難問なんです。
>> wikipedia:多体問題
えーっ、たった3つで解けないの?
はい、確かに解けません。
ここで言う「解けない」とは、紙と鉛筆を使って Sinとか、Cosとか、積分とかを駆使して厳密に解く、という意味です。
今日では、紙と鉛筆の代わりに、パソコンという強い身方がいます。
厳密解は無理としても、雰囲気をつかむだけであれば、パソコンでわりと手軽にシミュレートできます。
さっそくパソコンを使って、3つの物体の運動について、いくつかのパターンを試してみました。
(物体が最初に置かれた位置とスピードは乱数で振ってあります。
 画面を再読込すれば、違った値でシミュレーションがスタートします。)

1.規則的な連成振動。
まず最初のパターンがこれ
>> http://brownian.motion.ne.jp/memo/ThreeBalls_LinRK.html

X方向(横方向)とY方向(縦方向)について、それぞれ独立にバネで結んだ物体の運動。
これは計算で解ける規則的なパターンです。
しばらく見ていると、一定の周期で巡回していることがわかるでしょう。
これが規則的で計算で解けるのは
・バネの力が、バネの伸びに比例している。
・X方向とY方向の運動に相互作用がなく、独立している。
といった理由によります。
実際にバネとボールを使って、ここにあるような運動を作り出すのはかなり面倒です。
縦横が独立ということなので、例えばボールをそろばん玉のように棒に串刺しにして、
その串と串と間をバネで結ぶ、といった仕掛けになるでしょう。
つまり、こうした計算で解けるようなパターンを現実に用意するのは、むしろ難しいことなのです。

2.連成振動が崩れた形。
次のパターンがこれ
>> http://brownian.motion.ne.jp/memo/ThreeBalls_BaneKnot.html

3つのボールを互いに線形なバネで結んだ物体の振動。
上の解けるパターンの振動と似ています。
でもしばらく見ているうちに、だんだん振動がずれてきて、必ずしもピッタリ周期的ではないことがわかります。
振動運動なので基本的には予想の範囲内ではあるのですが、
少しずつずれが生じているので正確な答は計算から外れてしまう、といった感じです。
なぜ軌道が少しずつずれてゆくのか。
それは「斜めに引っ張る力」が働いているからです。
上の規則的なパターンでは(不自然ではありますが)、縦と横の力がそれぞれ別々のものでした。
今回は縦横の区別がないので、縦方向の運動が横方向にも影響しています。(むしろそれが自然な姿です)
この影響が累積して、単純な振動に「だんだん狂いが生じる」といった運動になるわけです。

3.カオス運動。
最後のパターンが、本当に解けない、いわゆる多体問題。
>> http://brownian.motion.ne.jp/memo/ThreeBallsC.html

3つの星が、互いに引力で引き合っている運動。
星が近づくと小さく速くクルクルっと回って、時々大きくポーンと跳ねる。
なんとも言えない、複雑な運動になります。
これを見ていると、なぜ計算で答が出ないのか、わかりますよね。

この3つの星の運動、正確にシミュレーションするのが難しくって、けっこうズルしてます。
・ずるっこ その1. 壁で反射する。
 星は画面の端で跳ね返ります。
 これが無いと、星が画面からはみ出して遠くまで飛んでいって、戻ってこなくなるからです。
 星が2つの場合は、遠くに飛んでいった星であっても、やがては戻ってきます。
 (2つの星が最初に画面内にあって、初速をそれほど与えていないので)
 ところが3つになると、1個の星が遠くまで飛んでいって戻ってこないことがあります。
 むしろ、その場合の方が大多数のように見えます。

・ずるっこ その2. 星の大きさ。
 星の大きさをどうするか?
 引力は、星と星の距離の二乗に反比例するので、距離が0になると、引力が無限大!になってしまいます。
 これが困った問題で、距離がとても近くになると、引力がとてつもなく大きくなります。
 コンピュータの中の話なので、ここで計算が狂ってしまうわけです。
 ここでは、ある程度以下の距離では引力が働かなくなる、という特別ルールを入れて問題を回避しています。

・ずるっこ その3. だんだん止まる、摩擦力。
 たぶん上の問題の影響だと思うのですが、放っておくと、星のスピードがなぜかだんだん速くなってゆくんですよね。
 (正確な原因はよくわかんないです)
 仕方ないので、ここではちょっとだけ摩擦力を入れて(速度を0.4%減)、放っておくと星がだんだん止まるようにしました。
 結果、星のスピードが落ちてくると近くに集まってきて、小さくクルクル回転し、
 そこでなぜか(たぶん計算誤差の累積で)エネルギーを稼ぎ出し、再び遠くに跳ねる、といった運動を繰り返すようになりました。

やはり正確なシミュレーションって、けっこう難しいですね。。。