見出し画像

元少年の自由研究:太陽系の惑星運動をシミュレーションしてみた!🌍🌞

割引あり

かつて宇宙少年だった皆さん、こんにちは!宇宙への情熱を忘れられない元少年です。夜空を見上げて、惑星たちがどのように動いているのか、不思議に思ったことはありませんか?今回は、Pythonを使って太陽系内の惑星運動をシミュレーションしてみました。その結果を皆さんとシェアしたいと思います。


惑星運動って何?

太陽系には、太陽を中心に回る多くの惑星があります。それぞれの惑星は、太陽の重力に引かれながらも、自身の運動エネルギーによって軌道を描いています。このバランスが崩れると、惑星は太陽に落ち込んだり、宇宙の彼方へ飛び去ったりしてしまいます。

太陽, 地球, 土星

シミュレーション結果

シミュレーションでは、太陽と水星、金星、地球、火星の5つの天体をモデル化しました。それぞれの惑星が楕円軌道を描きながら太陽の周りを回る様子が再現されました。


太陽系の惑星運動シミュレーションにおける瞬間的な惑星配置を示した図。中央の黄色が太陽であり、周りに位置するのは水星(灰色)、金星(オレンジ)、地球(青)、火星(赤)です。この図はシミュレーションの一場面を切り取ったもので、各惑星が公転運動の中である特定の位置にあることを示しています。惑星の運動はニュートンの万有引力の法則とケプラーの法則に従い、軌道の形や速度はそれぞれの質量や太陽からの距離によって異なります。

特に、各惑星が異なる速度で太陽を周回し、公転周期の違いが視覚的に理解できる結果となりました。地球の動きと比較して、水星や金星、火星がどのように動くのか、一目でわかります。

動画で確認!

百聞は一見に如かず、ということで実際のシミュレーション動画をご覧ください。

シミュレーションの概要

今回は、Pythonの数値計算ライブラリであるNumPyと、データ可視化ライブラリのMatplotlibを使用してシミュレーションを行いました。

主な設定

  • 天体の数:5(太陽、水星、金星、地球、火星)

  • 単位系:天文単位(AU)、年、太陽質量

  • 重力定数:$${G = 4\pi^2}$$

  • 時間ステップ:$${\Delta t = 0.002 \, \text{年}}$$

  • シミュレーション期間:$${ 7 \, \text{年} }$$ (フレーム数:3500)

重力定数の説明

重力定数:$${G = 4\pi^2}$$

この値がなぜ成り立つのか、簡単に説明します!

単位系の選び方

まず、シミュレーションで使っている単位系についてお話しします。ここでは、

  • 天文単位(AU):地球から太陽までの平均距離

  • :地球の公転周期

  • 太陽質量:太陽の質量を1として他の天体の質量を表す単位

これらの単位を使うことで、計算がとてもシンプルになります。

ケプラーの第三法則との関係

ケプラーの第三法則によると、惑星の公転周期 $${T}$$ の二乗は、軌道半径 $${a}$$の三乗に比例します。これを数式で表すと、

$${T^2 = \frac{4\pi^2}{G(M + m)}a^3}$$

ここで、

  • $${T}$$ は公転周期(年)

  • $${a}$$ は軌道半径(AU)

  • $${M}$$ は中心天体(太陽)の質量

  • $${m}$$ は惑星の質量

  • $${G}$$ は重力定数

単位系の選択による簡略化

シミュレーションでは、太陽の質量 $${M}$$を1.0とし、惑星の質量$${m}$$ を無視できるほど小さいものと仮定します。すると、式は以下のように簡略化されます。

$${T^2 = \frac{4\pi^2}{G}a^3}$$

これをケプラーの第三法則と比較すると、

$${G = 4\pi^2}$$

となります。

なぜ $${G = 4\pi^2}$$ なのか?

 
これは、選んだ単位系(AU、年、太陽質量)によるものです。この単位系を使うと、重力定数 $${G}$$ が $${G = 4\pi^2}$$ というシンプルな値になります。これにより、計算が簡単になり、シミュレーションを効率的に行うことができるのです。


これで、重力定数がなぜ $${G = 4\pi^2}$$ になるのか、少し理解できたでしょうか?単位系を工夫することで、複雑な物理法則もシンプルに表現できるんです。シミュレーションを楽しみながら、ぜひ他の物理法則についても探求してみてくださいね!

天体の初期条件

各惑星の質量、初期位置、初期速度は以下のように設定しました。

  • 質量

    • 太陽:$${1.0 \text{太陽質量}}$$

    • 水星:$${1.651 \times 10^{-7} \text{太陽質量}}$$

    • 金星:$${2.447 \times 10^{-6} \text{太陽質量}}$$

    • 地球:$${3.003 \times 10^{-6} \text{太陽質量}}$$

    • 火星:$${3.213 \times 10^{-7} \text{太陽質量}}$$

  • 初期位置:各惑星を太陽からの平均距離に応じてx軸上に配置

  • 初期速度:円軌道を描くように、速度をy方向に設定

重力の計算

ニュートンの万有引力の法則に基づき、各天体間の重力を計算します。

$${F_{ij} = G \frac{m_i m_j}{r_{ij}^2}}$$

ここで、

  • $${F_{ij}}$$ は天体 iii が天体 jjj から受ける力

  • $${m_i,m_j​}$$ は各天体の質量

  • $${r_{ij}}$$ は天体間の距離

時間発展

オイラー法を用いて、各天体の速度と位置を時間ステップごとに更新します。

  • 速度の更新: $${\mathbf{v}_i(t + \Delta t) = \mathbf{v}_i(t) + \frac{\mathbf{F}_i}{m_i} \Delta t}$$

  • 位置の更新: $${\mathbf{r}_i(t + \Delta t) = \mathbf{r}_i(t) + \mathbf{v}_i(t + \Delta t) \Delta t}$$

シミュレーションの応用例

このシミュレーションを拡張して、より多くの惑星や小惑星帯、さらには外惑星まで含めることも可能です。また、相対論的効果や他の力(例えば太陽風の影響)を追加して、よりリアルなモデルを構築することもできます。

  1. 惑星の追加:木星や土星などの巨大ガス惑星を追加し、その重力的影響を観察する。

  2. 小惑星帯のモデル化:多数の小天体を追加して、小惑星帯やエッジワース・カイパーベルトをシミュレーションする。

  3. 相対論的補正:一般相対性理論の効果を取り入れて、水星の近日点移動などを再現する。

シミュレーションの限界と改善点

今回のシミュレーションはとても楽しかったですが、まだまだ改善できるポイントがいくつかあります。ここでは、そのポイントを簡単に説明しますね。

1. モデルが簡単すぎる

  • 惑星の数が少ない: 今回のシミュレーションでは、太陽と水星、金星、地球、火星の5つの天体だけを使っています。でも、実際の太陽系にはもっとたくさんの惑星や小惑星、彗星があって、それらも惑星の動きに影響を与えています。これをもっと増やすと、もっとリアルな動きを再現できるようになります。

  • 質量が固定されている: 各惑星の質量は固定していますが、実際には惑星同士が互いに影響し合うことはあまりありません。ただし、他の天体からの影響を考えると、もっと複雑なモデルにすることができます。

2. 数値解析の方法

  • オイラー法を使っている: 今回はオイラー法という簡単な方法を使って速度と位置を更新していますが、この方法だと時間が長くなると誤差が大きくなってしまいます。もっと正確な方法(例えばルンゲ・クッタ法)を使うと、もっと正確な結果が得られます。

3. 二次元のモデル

  • 三次元じゃない: 宇宙は三次元なので、銀河も立体的に動いています。でも、このシミュレーションは平面(2次元)で行っているので、立体的な動きや影響を完全には再現できません。三次元に拡張すると、もっと現実に近い動きを再現できます。

4. 他の力を無視している

  • 太陽風や相対論的効果: 今回のシミュレーションでは重力だけを考えていますが、実際には太陽風や相対性理論に基づく効果など、他の力も惑星の動きに影響を与えます。これらを追加すると、シミュレーションがもっとリアルになります。

5. 計算資源の制約

  • 計算が遅い: 今回のシミュレーションは比較的小規模なモデルなので問題ありませんが、天体の数やシミュレーション期間を増やすと計算時間がかなり増えてしまいます。これを改善するためには、コードをもっと効率的にしたり、並列処理を導入したりする必要があります。

今後の改善点

  1. 数値手法の改良: より正確な数値解析手法(例:ルンゲ・クッタ法)を使って、長い時間シミュレーションしても誤差が少ないようにします。

  2. 三次元モデルへの拡張: シミュレーションを三次元にして、もっと現実的な惑星の動きを再現します。

  3. 追加の物理現象の導入: 太陽風や相対論的効果など、他の力もモデルに取り入れて、シミュレーションの精度を高めます。

  4. 計算資源の最適化: コードを最適化したり、並列処理を使ったりして、計算速度を上げて、もっと大きなシミュレーションができるようにします。

  5. 追加の天体のモデル化: 木星や土星などの大きな惑星や、小惑星帯、彗星なども追加して、シミュレーションをもっとリアルにします。

まとめ

今回のシミュレーションを通じて、太陽系内の惑星運動を理解する一助となれば幸いです。自分でコードを実行し、パラメータを変更してみることで、さらなる発見や疑問が生まれるかもしれません。ぜひ、あなたも宇宙の謎に挑戦してみてください!

シミュレーションは宇宙の動きを視覚的に理解する強力なツールです。今後も様々な天体システムのシミュレーションに挑戦し、宇宙の壮大さとその中で働く物理法則の美しさを探求していきましょう。


ここから先は、有料記事になります!✨

この有料記事では、Pythonコードを一行ずつ丁寧に解説し、各部分の役割や機能をわかりやすく説明していきます。さらに、木星や土星などの外惑星を追加する方法も詳しく解説!これにより、よりリアルな太陽系シミュレーションを自分の手で作れるようになります。

サポートしていただけると、とても嬉しいです! あなたのご支援が、今後の充実したコンテンツ作成の励みになります。引き続き、一緒に宇宙の旅を楽しみながら、新たな発見をしていきましょう!😊


コード全文

Pythonのコードを通じて、どのようにシミュレーションを実装したのかを詳しく解説します。

ここから先は

8,313字 / 1画像

この記事が参加している募集

この記事が気に入ったらチップで応援してみませんか?