« July 2009 | Main | September 2009 »

August 19, 2009

小惑星とラグランジュ・ポイント

E1661ちょっと脇道にそれてラグランジュ・ポイントの話をする。
前回の軌道シミュレーション・プログラムでは、100年後の小惑星の位置を計算させると、元々ラグランジュ・ポイント4と5に集まっていた小惑星が、ばらけてしまうと言うことを書いた。
ばらけてしまう理由は、本来、小惑星をラグランジュ・ポイントに集めている木星の引力を計算に入れていないからだ。
じゃあ、どうやれば計算に木星引力の影響を入れるかと言うのが、今回のプログラムasteroid2.rbだ。このプログラムも愛媛の実家で作った。前回のプログラムと同じようにダウンロードし、惑星や小惑星の軌道データの入っているフォルダ/ディレクトリで実行すると、木星と近い軌道半径を持った小惑星を50個だけロードし表示する。メニューの「編集」「日時の設定」を選び、目標の日時(未来に限る)を入力すると、アニメーションで動きだし、目標の日時まで計算したところで止まる。
冒頭の画像は、そうやって、100年後の惑星・小惑星の位置を計算して表示したものだ。画像の中で黒い丸は、前回と全く同じ楕円近似で計算した小惑星の位置だ。これに対して、緑色の丸は、木星引力の影響を考慮した小惑星の位置である。見て判る通り、黒い丸はラグランジュ・ポイントから外れているが、緑の丸はラグランジュ・ポイントに集まったままである。

E1662プログラム中の Radius の数値を 2.25 にすると、軌道長半径が 2.25AU 付近の小惑星を選ばれる。その100年後の位置が、2つ目の画像だ。多少ずれているところもあるが、黒い丸と緑色の丸の位置はほとんど変わっていない事が判る。これは、木星の引力の影響が積み重ならず、打ち消し合うためだ。ラグランジュ・ポイントの場合、軌道回転周期が木星と一致しているため、木星の引力の影響が積み重なるので、影響が大きいのである。

E1663Radius の数値を 2.5 にして、100年後の位置を計算したのが、3つ目の画像だ。これも黒い丸と緑色の丸の位置が異なっている。実は、これらの小惑星の軌道周期は、木星の 3分の1 だ。ラグランジュ・ポイント4・5とは逆に木星の引力は積み重なりあって、小惑星を、この軌道からはじき出してしまう。

さて、今回のプログラムがどうやって計算しているかを説明しよう。今回のプログラムはルンゲ=クッタと言う方法で小惑星の位置・速度から引力の大きさを計算し、数値積分して位置を計算したものだ。
小惑星にかかる力は、太陽の引力と木星の引力を考慮している。それ以外の惑星の引力は計算していないが、他の惑星は木星に比べて小さいので余り影響が無いと考えた。もちろん、プログラムを改造して、他の惑星の引力の影響を計算することは可能だから、興味がある人は試すと良いだろう。

E1664太陽と木星の引力を計算する時、太陽の場所は木星や小惑星の軌道の中心ではない。図に示したように、太陽と木星は、2つの共通重心を中心に互いを回っているようにした。図では大げさに描いたが、実際は、共通重心は太陽の中心から70万キロ強離れていて、太陽の表面から僅かに出ている場所だ。
70万キロと言うと大きな距離なようだが、太陽系スケールで言うとホンの僅かな距離で、木星軌道から見れば、0.1%程度だ。そのような僅かな太陽の位置のずれを考慮しないと、ラグランジュ・ポイントに小惑星は集まらない。太陽の位置のずれの計算は、プログラムの167〜169行にあるので、試しに、これらをゼロにすると、小惑星がラグランジュ・ポイントから離れて行くことが判る。
先ほどから、私は「木星の引力が影響して・・」と言ってきたが、本当は「木星の引力と 太陽の位置のずれが影響して・・」と言うのが正確だ。

プログラムでの計算ステップは、5日にしてある。つまり、小惑星にかかる引力を計算して、5日後の位置と速度を計算している。ただし、5日間同じ力がかかり続けるわけではなく、その間の変化を効率的に計算している。これが、ルンゲ=クッタと言うアルゴリズムだ。
10日後の小惑星の位置の計算なら5日ステップを2回繰り返し、100日後なら20回繰り返さす。いきなり100日後を計算するわけには行かない。
100年後なら7305回の繰り返しだし、小惑星50個なら、更に50倍の36万回以上だ。
わずか数年後の位置計算だとしても、とてもじゃないが、何十万個もある小惑星の計算などでやしない。とにかく、数値計算には時間がかかる。
私のプログラムに無駄があるが、それを治したとしても何倍か速くなるだけで、焼け石に水だろう。ruby のようなスクリプト言語ではなくて、コンパイラ言語にしても無駄だろう。抜本的には、グレープのような並列コンピュータを使わざるを得ないだろう。そこまで行かないでも、CUDAやOpenCLのようにGPUを使って並列計算するのも良いかもしれない。

でも、これ以上、数値積分プログラムを追求する気は無い。
数値積分をしなくても、楕円近似なら何年後でも、現実的な時間で小惑星の位置計算ができる。

要は、小惑星の軌道計算が十分な精度で行えれば良いだけである。
今回の積分計算プログラムで、ラグランジュ・ポイント4・5に小惑星を集めているのは、間違いなく木星の引力の影響である事が判り、楕円近似計算であろうが積分計算プログラムであろうが、少なくとも数十年程度であれば、大きな誤差が無い事が判った。だから、その範囲であれば、楕円近似計算で十分と判断できる。今回の積分計算プログラムは、それが判った時点でお役ご免。

じゃあ、なんで今回は、わざわざ今後使うつもりのない積分計算を細々と紹介したかと言うと、こういうのを限りなく改良してくと言うのが、コンピュータ・シミュレーションの入門者が陥りがちな事例だからだ。
コンピュータ・シミュレーションには、必ず誤差がある。どんなにプログラムを改良しても、誤差は残る。逆に言えば、限りなくシミュレーション・プログラムに改良する事ができて、それに応じてシミュレーションの精度は、どんどん良くなる。
頑張れば頑張るほど、精度は高くなるので、如何にも正しい事をしている気になってしまう。

だが、本来は、シミュレーションに必要な精度を見極め、それさえ達成すれば良いのである。
それを必要な精度も考えずに、闇雲に精度を限りなく高く・・・と陥ってしまうのだ。
まあ、何に使うかも判らずにシミュレーションにハマる人も多いけどね。

さて、愛媛の実家で作ったプログラムのストックも今回で終わり。
次回は、小惑星から小惑星に移る惑星間航行の軌道計算を紹介するつもりだが、これからプログラムを作らなければならない。次に暇ができてプログラムを作り込めるのが、いつになるか判らないから、次回が、いつになるかも判らない。

| | Comments (6) | TrackBack (0)

August 16, 2009

惑星と小惑星の軌道

E1651小惑星に移り住もうと言うのだが、実際に小惑星は何処にあるのだろう?
では、簡単に小惑星の位置を計算する方法を紹介しよう。

まず、惑星とか小惑星の軌道データを公開している場所を探そう。
ネット上を探してみると、JPLのホームページに軌道データが公開してあった。
JPL Solar System DynamicsEphemeridesである。

最初は、惑星の軌道だ。
Keplerian Elements for Approximate Positions of the Major Planets のページにある惑星の軌道データである p_elem_t1.txt が使いやすそうだ。
これは、ケプラリアン要素と言い、楕円軌道の長半径とか離心率、軌道面の傾きなどの6つの要素で軌道を示すものだ。これを使って、軌道を太陽を焦点とした楕円として計算すれば、好きな日時の惑星の位置が判る訳だ。
とは言え、惑星の軌道は正確には楕円ではない。惑星にかかる引力が太陽の引力だけなら、正確な楕円になるのだが、実際には他の惑星の引力もかかるので、楕円から少しずつずれる(これを摂動と言う)。だから、楕円近似の計算だけでは、正確な位置計算はできない。
もっと正確な惑星の軌道を計算するには、DE405 や DE406 と言う軌道データが良い。これらは ジェット推進研究所(JPL)のWeb ページJPLのデータフォルダ の中に Fortran や C のソースコードと共に公開されている。使い方は、DE405 や DE406 と言うキーワードでググると使い方が沢山見つかると思う。

E1652正確な軌道計算は、DE405 や DE406 を使えば良いのだが、今回は使わないで、先ほどのケプラリアン要素による楕円近似計算を使う事にする。理由は、DE405 や DE406 の計算は時間がかかるのと、肝心の小惑星軌道の軌道データはケプラリアンだけで、DE405 や DE406 に匹敵する高精度な要素が無いからだ。また、楕円近似計算とは言え、50年程度の近未来では大きくずれないから、小惑星の配置を理解する程度なら十分な精度だと言えるからだ。

さて、いよいよ肝心の小惑星の軌道データだ。
同じく、JPL のAsteroidsSmall-Body Orbital Elements のページにある
ELEMENTS.NUMBR(圧縮版はELEMENTS.NUMBR.gz)とELEMENTS.UNNUM(圧縮版はELEMENTS.UNNUM.gz)が小惑星の軌道データだ。
ELEMENTS.NUMBR は 名前や番号の付けられた小惑星、ELEMENTS.UNNUM は未だ名前や番号の無い小惑星の軌道データが入っている。これらのデータは常に最新の情報に更新されている。(私の見る限り5日毎に更新されているようだ)
現状、ELEMENTS.NUMBR に約22万個の小惑星、ELEMENTS.UNNUM に約24万個の小惑星、合計約46万個の小惑星が入っている。(ELEMENTS.UNNUM の中に ELEMENTS.NUMBR のデータが重複して入っていないかチェックしていない)
「宇宙暮らしのススメ」には、「小惑星は何万もある」と書いちゃったけど、何十万個もあるねぇ。まあ、増えた分には良いか?

このままじゃ、数字の羅列なので、グラフィック表示してみよう。
データの読み込みと計算には ruby 、グラフィック表示には gnome2 (gtk2) を使った ruby-gnome2 を使ってみよう。

ruby-gnome2 は、マルチプラットフォームで使える。
Ubuntuなら、Synaptic で ruby と ruby-gnome2 をインストするだけだ。

Windows の場合、次のように ruby-gnome2 をインストする。
まず、ruby をインストする。One-Click Ruby Installer for Windows から、たどって、ruby186-26.exe を ダウンロードし、インストール。インスト後、再起動。
次にruby-gnome2 本体をインストする。SourceForge.net: Ruby-GNOME 2: Files から、辿って、SourceForge.net: Ruby-GNOME 2: Files で、ruby-gnome2-0.16.0-1-i386-mswin32.exe をダウンロードして、インストール。

ruby-gnome2 は、マックでも使える筈なのだが、私がマック環境を持っていないので、確認していない。誰か、確認できたら教えてください。

さて、小惑星の位置の表示プログラムは、asteroid.rb だ。(実は、このプログラム、愛媛の実家で作っていた。ネット環境が余り良くないので、帰省前に軌道データだけダウンロードしておいて、向こうでプログラム本体を作った。去年、帰省したときは、小惑星開拓のコンテンツを書いていた。ネット環境が良くないと、逆に集中して作業がはかどるね)

ruby-gnome2 をインストしたパソコンに、先にダウンロードした p_elem_t1.txt ELEMENTS.NUMBR ELEMENTS.UNNUM と共に asteroid.rb を同じフォルダ/ディレクトリに入れて実行するだけだ。
最初に軌道データを読み込む時間がかかり、画面表示が遅れることは許してもらおう。

実行すると、時間がかかるが、実行日の惑星・小惑星の位置が表示される。これが冒頭の画像だ。また、プログラム中のコメントアウトした部分を書き換えると、黄道面を横から見た画像も得られる。これが2つ目の画像だ。
小惑星の表示が完全に終わった後、メニューの「編集」「日時の設定」を選ぶと任意の日時の位置が表示できる。

さて、やってみると色々判る。
まず、意外と遠い軌道、4AUのスノーラインより遠い軌道には小惑星が少ない。とは言え、5千個弱あるのだから、決して少ないとは言えないか?
また、水分のある D型小惑星は 2.5AU 位のところからあると言うが、そこには20万個以上の小惑星がある。これらが全て D型小惑星ではないが、ほんの少しでもあったら、大変な数だ。

また、最初の画像を見ると、明らかに木星のラグランジュ・ポイントの4と5(木星と同一軌道半径で、位置が60度前後に離れている場所)の付近に小惑星が集まっている。

表示する日時を変えると、30年位の未来までならラグランジュ・ポイントの4と5に集まっていた小惑星は、そんなにばらけないが、100年後だと完全にばらけてしまっている。これは、やはり木星の引力の影響を計算していないためだ。まあ、近未来しか計算できないことさえ、納得していれば良いだろう。

さて、小惑星の位置が判ったので、徐々に小惑星探査の方法について検討してみようと思う。

なお、プログラム asteroid.rb はオープンソース GPL とするので、改変したり再配布可能だ。ruby と言う判り易い言語で書いてあるので、色々いじって遊んでください。

| | Comments (2) | TrackBack (0)

1ヶ月間の本の売上げ順位

E164私の本、宇宙暮らしのススメが、発売されて1ヶ月だ。この間のアマゾンの売上げ順位の変化を記録したのが、左のグラフだ。
私が、時々見た時の順位を記録したものだから、不定期的な記録だし、これよりも良い順位も悪い順位もあるかもしれないが、傾向だけは判ると思う。
最初は4000位くらいだったのが、いきなり185位まで上昇したのは、松浦さんや堀江貴文さん(<=超有名人!)のブログに紹介してくれたのが影響している。その後、一週間くらいは高い順位を保つものの、再び2000位に落ちる。
売れるのも、ここまでかな? と思っていたら、ブックレビューで紹介してくれたのが影響して、再び上昇。更に、日経新聞夕刊で八谷さんに紹介してくれたのが後押しして、493位まで上昇。
その後、だらだらと順位を落として、現在、2,002位。もう少し上がらないかなあ・・・・
ところで、アマゾンの順位を見ても、何冊売れたか判らないのが困る。

| | Comments (0) | TrackBack (0)

August 15, 2009

ぼくの夏休み

E163某有名ゲームシリーズの最新作じゃないけど、瀬戸内海の小島で夏休みを満喫してきた。
場所は、大三島。尾道と今治を結んでいる瀬戸大橋「しまなみ海道」中の一つだ。水軍の伝説も、ちゃんとある。

四国側から入ったので、大島、伯方島、大三島の順で三番目の島である。

まず、四国の今治から瀬戸大橋に入ると、今治と大島を結ぶ巨大な吊り橋が見えてくる。
と、橋の脇に、細くて大きなループが見えてきた。海沿いの道から登ってくるループだから、数十メートルの高さだろう。この橋、自動車は高速道路のみだから、一体なんだろうと思ったら、自転車道だ。
巨大な吊り橋の中央レーンは自動車専用だが、両側に歩行者と自転車の走れるレーンが設けてある。
しかし、あの細くて、大きなループを何十メートルも自転車で登って来たら、疲れるだろうし、高所恐怖症の人は、たまらんだろうな。むしろ、下りの方が怖いか? もしもブレーキが壊れたら・・と思ったら。

次の島は、伯方島である。かの「伯方の塩」で有名な島だ。この伯方島にかかる橋にも自転車レーンがある。どうやら、しまなみ海道の橋には全て自転車レーンがあって、本州と四国を自転車で渡ることができるらしい。そう言えば、明らかに夏休みに自転車ツーリングしていると思われる人が沢山居る。サイクリングマニアには、有名な場所なんだろうか?

次は、大三島だ。伯方島と大三島を結んでいる橋は、そんなに大きくない。大三島に宿をとっているので、島の中の海水浴場で泳ぐ。
瀬戸内海は綺麗で、波も無い。瀬戸内海を大阪湾と同じくらい汚いと思っている人がいるようだが、瀬戸内海は西に行くほど綺麗だ。尾道〜今治くらいまで来ると、流石は国立公園と言えるほど美しい。ポニョの舞台になったのも尾道のちょっと東くらいらしい。

浮き輪につかまって、ぼぅっと浮かんでいると、息子が水をバシャバシャかける。至福のひと時である。

| | Comments (3) | TrackBack (0)

August 01, 2009

ガンダム

E162お台場のガンダムを見てきた。

写真を撮って来たので、ミニチュア風に加工してみた。実は、何処か忘れたけど、ネット上でミニチュア風に加工した実物大ガンダムの写真を見て面白いと思ったので、これは、その真似。

Ubuntu 8.04 上の GIMP で加工した。GIMP 自体もボケを作ったプラグインも、Ubuntu のパッケージとして用意されているもの。「焦点ぼかし」のプラグインでは、LOOX U/C30 上の ATOM Z520 のハイパースレッドを有効に使うようで、マルチスレッドのサポートをする・しないの設定を変えると実行速度が変わって面白い。

こう言うものも、オープンソースでミニ・ノートPCで十分画像加工できるような時代になったんだなあ。

| | Comments (0) | TrackBack (0)

« July 2009 | Main | September 2009 »