国際宇宙ステーションの軌道速度は秒速約7.8 km、マッハ23です。地表で静止している私たちが宇宙に出るためには、この速度を空気抵抗と重力に逆らいながら獲得しなければなりません。化学燃料を1 kg燃やしたとき、最良のロケットエンジンですら排気を毎秒4.5 km程度でしか噴き出せません。「排気速度より速い乗り物」を作るには、いったいどれだけの燃料が必要なのでしょうか。
この問いに最初に明快な答えを与えたのが、ロシアの数学教師コンスタンチン・ツィオルコフスキー(1857-1935)でした。彼は1903年、運動量保存則だけからロケットの到達速度を支配する一本の式を導き、それが「ロケットは多段でなければ宇宙に出られない」という工学的必然性を含意していることまで見抜いていました。100年以上経った現在も、Saturn Vが月へ、Falcon 9がStarlinkを軌道に投入し、SS-520が世界最小の軌道ロケットになれた理由は、すべてこの一本の方程式に書き込まれています。
ツィオルコフスキーのロケット方程式を理解すると、たとえば次のような実務的な疑問に答えられるようになります。「火星行きの探査機を打ち上げるのに、なぜ初期質量の95%が燃料になるのか」「電気推進(比推力3000秒)と化学推進(比推力450秒)では、同じΔvに対してどれだけ燃料が違うのか」「3段ロケットの各段の質量比はどう決めるべきか」。本記事では、運動量保存則からの導出、比推力との接続、多段ロケットの最適化、そして重力損失を含む実機シミュレーションまでを一気通貫で扱います。
本記事の内容
- 質量変化系の運動方程式の立て方と、運動量保存則からの導出
- ツィオルコフスキー方程式 $\Delta v = v_e \ln(m_0/m_f)$ の対数依存性が意味するもの
- 比推力 $I_{sp}$ と排気速度 $v_e$ の関係、化学推進と電気推進の比較
- 多段ロケットの優位性をラグランジュ未定乗数法で証明
- 重力損失・空気抵抗を含む現実の打ち上げシミュレーション
- Saturn V / Falcon 9 / SS-520 のΔv予算をPythonで再現
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
直感 — なぜロケットは段を切り離すのか
新幹線や旅客機が動くとき、車両やエンジンの質量は飛行中ほとんど変わりません。ところがロケットは違います。打ち上げ時のSaturn Vの質量は2,970トン、月遷移軌道(TLI)に達したときのS-IVB段とアポロ宇宙船の質量は約45トン。初期質量の98.5%が燃料として消費され、空のタンクとして捨てられているのです。なぜここまで極端な「自分の身を削る」設計が必要なのでしょうか。
直感的なイメージはこうです。ロケットを「ボートに積んだ大砲」だと考えてみましょう。ボートの上から重い砲弾を後ろに向けて撃てば、運動量保存の法則によりボートは前に進みます。同じ砲弾を撃ち続けるほどボートは加速しますが、砲弾を積みすぎるとボート自体が重くなり、撃ったときの加速度が小さくなってしまいます。「もっと加速したい → もっと砲弾が要る → 重くなって加速しにくくなる → さらに砲弾が要る…」 という自己悪循環。これがロケット問題の本質です。
この悪循環は「指数的」に効きます。後で見るように、必要な質量比 $m_0/m_f$ は欲しい速度 $\Delta v$ の指数関数になります。$\Delta v$ を倍にしたければ質量比を2倍ではなく自乗しなければなりません。だからこそ、燃料を使い切ったタンクや使い終わったエンジンを途中で切り離して「分母 $m_f$ を減らす」ことに大きな価値が生まれます。これが多段ロケットの基本思想です。
このセクションでは直感だけを語りましたが、次節からは運動量保存則に立ち戻り、この指数的振る舞いを数式で正確に導出していきます。
質量変化系の運動方程式
ニュートン第2法則の落とし穴
ニュートンの第2法則は通常 $F = ma$ と書かれますが、より正確には運動量の時間変化率が力に等しい
$$ F = \frac{dp}{dt} = \frac{d(mv)}{dt} $$
という形をしています。物体の質量が一定なら $F = m\,dv/dt = ma$ に簡単化できますが、ロケットのように質量自体が時間変化する系では、この区別が決定的に重要です。素朴に $F = m(t)\,dv/dt + (dm/dt)v$ と書くと、実は誤った式になります。なぜなら、放出された排気もまた運動量を持っており、「系」の定義を間違えると保存則が崩れてしまうからです。
正しいアプローチは、ロケット本体と排気を合わせた閉じた系で運動量を保存させることです。微小時間 $dt$ の間に質量 $-dm$ ($dm < 0$ なので排気の質量は $|dm| = -dm > 0$)が排気として後方に放出される状況を考えます。
微小時間で運動量を追跡する
時刻 $t$ におけるロケットの質量を $m(t)$、速度を $v(t)$ とします。時刻 $t$ における系全体の運動量(まだ排気として分かれていない、ロケット+これから排気になる分)は
$$ p(t) = m(t)\, v(t) $$
です。時刻 $t + dt$ には、ロケット本体は質量 $m + dm$($dm < 0$)、速度 $v + dv$ になります。一方、排気は質量 $-dm$($> 0$) を持ち、地面に対する速度は
$$ v_{\text{exhaust, ground}} = v – v_e $$
となります。ここで $v_e$ はロケット本体に対する排気速度(常に正、後方に噴出するので符号は引き算)です。時刻 $t+dt$ における系全体の運動量は
$$ p(t+dt) = (m+dm)(v+dv) + (-dm)(v – v_e) $$
です。これを展開すると、
$$ p(t+dt) = mv + m\,dv + v\,dm + dm\,dv – v\,dm + v_e\,dm $$
ここで $dm\,dv$ は2次の微小量として無視できるので、
$$ p(t+dt) = mv + m\,dv + v_e\,dm $$
となります。外力(重力や空気抵抗など)の合力を $F_{\text{ext}}$ と置くと、運動量の変化は外力のみによって生じるはずなので
$$ p(t+dt) – p(t) = F_{\text{ext}}\, dt $$
すなわち
$$ m\,dv + v_e\,dm = F_{\text{ext}}\, dt $$
を得ます。両辺を $dt$ で割り、$-v_e\,dm/dt$ を推力(thrust) として右辺に移すと、
$$ \boxed{\,m\frac{dv}{dt} = -v_e \frac{dm}{dt} + F_{\text{ext}}\,} $$
これが質量変化系の運動方程式、別名ロケット方程式の微分形です。右辺第1項 $T \equiv -v_e\,dm/dt$ が推力で、$dm/dt < 0$ なので $T > 0$ となり、確かに前向きの力として働きます。
推力の物理的意味
推力 $T = -v_e\,dm/dt$ を眺めると、「排気を毎秒どれだけ多く、どれだけ速く噴き出すか」の積になっています。質量流量 $\dot m \equiv -dm/dt > 0$ を使って書き直すと
$$ T = v_e\, \dot m $$
たとえば $v_e = 4500$ m/s、$\dot m = 3000$ kg/s なら $T = 1.35 \times 10^7$ N(約1380トン重)。これはSpace Shuttleのメインエンジン3基ぶんに匹敵します。「排気を速く噴く(高い $v_e$)」と「排気をたくさん噴く(高い $\dot m$)」のどちらが推力を稼ぐ上で重要か という問いは、これから見るロケット方程式の議論に深く関わってきます。
ここまでで微分方程式が立ちました。次節では、外力をゼロとした理想化(重力のない宇宙空間で直線運動するロケット)のもとで、この微分方程式を積分してツィオルコフスキー方程式を導きます。
ツィオルコフスキー方程式の導出
変数分離と積分
外力 $F_{\text{ext}} = 0$ の理想化のもとで、運動方程式は
$$ m\frac{dv}{dt} = -v_e \frac{dm}{dt} $$
となります。$v_e$ が一定(エンジンの設計値で時間によらない)と仮定すると、両辺を $m$ で割って
$$ \frac{dv}{dt} = -v_e \frac{1}{m}\frac{dm}{dt} $$
時間 $t$ で積分する代わりに、$dt$ を消去して $v$ と $m$ の関係に直接落とし込みます。両辺に $dt$ を掛けて変数分離すると、
$$ dv = -v_e \frac{dm}{m} $$
ここで重要なのは、$dt$ が完全に消えたことです。エンジンを長くゆっくり燃やそうと、短く激しく燃やそうと、得られる最終速度は同じ — というのが理想化された設定の重要な帰結です(重力がある現実では話が変わります)。初期状態を $v = v_0$, $m = m_0$、最終状態を $v = v_f$, $m = m_f$ として積分すると、
$$ \int_{v_0}^{v_f} dv = -v_e \int_{m_0}^{m_f} \frac{dm}{m} $$
右辺の積分は対数になります。
$$ v_f – v_0 = -v_e [\ln m]_{m_0}^{m_f} = -v_e (\ln m_f – \ln m_0) = v_e \ln\frac{m_0}{m_f} $$
速度変化 $\Delta v \equiv v_f – v_0$ を定義すれば、
$$ \boxed{\;\Delta v = v_e\, \ln\frac{m_0}{m_f}\;} $$
これがツィオルコフスキーのロケット方程式です。
対数依存性が意味する「ロケット問題」
この式の恐ろしさは、質量比 $m_0/m_f$ が対数の中に閉じ込められていることにあります。たとえば $\Delta v = v_e$ を達成したければ、
$$ v_e = v_e \ln R \;\;\Longrightarrow\;\; R = e \approx 2.72 $$
つまり初期質量の約63%を燃料として消費する必要があります。$\Delta v = 2v_e$ なら $R = e^2 \approx 7.39$ で約86%、$\Delta v = 3v_e$ なら $R = e^3 \approx 20.1$ で約95%が燃料です。$\Delta v$ が線形に増えるにつれ、必要な質量比は指数的に増えるのです。
具体的な数字を入れてみましょう。化学燃料の最良値である液体水素/液体酸素エンジン($v_e \approx 4500$ m/s)で低軌道(LEO)に必要な $\Delta v \approx 9400$ m/s(7800 m/sの軌道速度に重力損失・空気抵抗を加算)を達成するには、
$$ \frac{m_0}{m_f} = \exp\left(\frac{9400}{4500}\right) = \exp(2.09) \approx 8.05 $$
つまり、初期質量の約88%が燃料でなければなりません。残り12%にエンジン、タンク、構造体、ペイロード、誘導装置などすべてを収めることになります。空のタンクや配管が重ければ重いほど、ペイロードに割ける質量はゼロに近づいていきます。これが「ロケット問題」と呼ばれる工学的難所であり、なぜ宇宙開発が極限技術なのかの根本理由です。
数式変形の確認
念のため、対数の性質を使って質量比 $R = m_0/m_f$ について解いた形も示しておきましょう。$\Delta v = v_e \ln R$ の両辺を $v_e$ で割って指数を取ると、
$$ \exp\left(\frac{\Delta v}{v_e}\right) = R $$
すなわち $R = m_0/m_f = e^{\Delta v/v_e}$ です。$m_f$ を $m_f = m_s + m_p$(構造質量 + ペイロード質量、燃料を除く)と分解し、推進剤質量を $m_{\text{prop}} = m_0 – m_f$ で表すと、
$$ \frac{m_{\text{prop}}}{m_0} = 1 – \frac{m_f}{m_0} = 1 – e^{-\Delta v/v_e} $$
これが推進剤質量比の式で、ロケット設計の最初の計算によく登場します。
ここで「もっと $v_e$ を大きくできれば良いではないか」という疑問が当然湧きます。実際、$v_e$ を大きくする努力は推進工学の中心テーマでした。$v_e$ という量を実機の設計指標と結びつけるのが、次節で見る比推力です。
比推力との関係
比推力 $I_{sp}$ の定義
エンジンの性能を比較するとき、宇宙工学では排気速度 $v_e$ そのものよりも比推力(specific impulse) $I_{sp}$ という指標がよく使われます。定義は
$$ I_{sp} = \frac{v_e}{g_0} $$
ここで $g_0 = 9.80665$ m/s²(標準重力加速度)です。なぜわざわざ $g_0$ で割るのかというと、比推力の単位を「秒(s)」にして、燃料の質量単位系(kg/lbm)に依らない普遍的な指標にするためです。歴史的経緯としては、推力(重力単位:kgf, lbf)と推進剤重量流量(kgf/s, lbf/s)の比から導かれた工学的定義で、結果として無次元に近い扱いやすい数字になります。
別の解釈もあります。$I_{sp}$ は「推進剤1単位重量(地表で$g_0$の重力を受けたときの重さ)が生み出すインパルス(力×時間)を秒で表したもの」とも読めます。$I_{sp} = 300$ 秒 とは、1 kgの推進剤が1 kg重(= 9.8 N)の推力を300秒間維持できる、というイメージです。
ツィオルコフスキー方程式を $I_{sp}$ で書き直すと
$$ \Delta v = g_0 I_{sp} \ln\frac{m_0}{m_f} $$
となります。実用上は $g_0 I_{sp}$ がそのまま $v_e$ なので、計算する際は $v_e = 9.80665 \times I_{sp}$ [m/s] と覚えておけば便利です。
推進方式ごとの典型値
エンジン種別ごとの代表的な $I_{sp}$ を並べてみましょう。
| 推進方式 | $I_{sp}$ [s] | $v_e$ [m/s] | 用途 |
|---|---|---|---|
| 固体ロケット(APCP) | 250 | 2,450 | SRB, SS-520第1段 |
| 液体ケロシン/LOX (RP-1) | 311 (Merlin), 330 (RD-180) | 3,050 – 3,240 | Falcon 9, Atlas V |
| 液体水素/LOX | 450 (RS-25), 465 (Vinci) | 4,410 – 4,560 | Space Shuttle, Saturn V S-IVB |
| ヒドラジン(N2H4)単元系 | 220 | 2,160 | 衛星姿勢制御 |
| ホール効果イオンエンジン | 1,500 – 3,000 | 14,700 – 29,400 | 商用衛星, BepiColombo |
| 重力イオン推進(Xe) | 3,000 – 10,000 | 29,400 – 98,100 | Dawn, はやぶさ |
| VASIMR (磁気プラズマ) | 5,000 – 30,000 | 49,000 – 294,000 | 研究中 |
化学推進は $I_{sp}$ が250〜450秒程度で頭打ちです。これは化学エネルギー密度の物理的限界(分子結合エネルギー)に縛られているためで、新しい燃料を発明しても劇的には伸びません。一方、電気推進は $I_{sp}$ を1桁高く取れますが、推力 $T = v_e\dot m$ で $\dot m$ が極端に小さいため、地表からの打ち上げには使えません(推力が機体重量に届かない)。「打ち上げは化学、惑星間航行は電気」 という現代の宇宙ミッション設計の常識は、ツィオルコフスキー方程式と $I_{sp}$ の特性から直接帰結します。
化学推進の限界を数値で
化学推進の最良値($I_{sp} = 450$ s, $v_e = 4410$ m/s)で、いくつかのミッションΔvを達成するのに必要な質量比を見ましょう。
- LEO投入 ($\Delta v = 9400$ m/s): $R = e^{2.13} \approx 8.4$, 燃料88%
- 月遷移軌道(TLI) ($\Delta v = 12000$ m/s): $R = e^{2.72} \approx 15.2$, 燃料93%
- 火星遷移軌道(TMI) ($\Delta v = 14000$ m/s): $R = e^{3.17} \approx 23.9$, 燃料96%
ペイロード10トンを火星に送るには、初期質量240トン以上が必要 — しかも構造体やエンジンの質量はゼロという理想化での話です。現実には構造体が重さの数%は必ず食うので、「1段で火星に行く」は事実上不可能です。
ここまでで、$v_e$ を大きくする難しさが分かりました。では発想を変えて、$m_f$ を小さくする道はないか? 燃料を使い切ったタンクを途中で捨てれば、残りの加速段階で運ばなくて済みます。これが多段ロケットの基本思想で、次節で詳しく見ていきます。
多段ロケットの最適化
なぜ多段にすると有利なのか
ロケット方程式の対数依存性をもう一度眺めましょう。$\Delta v = v_e \ln(m_0/m_f)$ の $m_f$ には、ペイロードだけでなく、燃料を使い切った後の空のタンク・エンジン・配管もすべて含まれています。これらを総称して構造質量(structural mass) $m_s$ と呼びます。1段ロケットでは、加速の最後まで $m_s$ をすべて運び続けるため、$m_s$ がペイロードに対する寄生質量として最終Δvを大きく削ります。
多段にすると、燃料を使い切った下段の構造を捨ててから次段の加速を始められるため、上段は「自分の構造+ペイロード」だけを加速すればよくなります。各段に対してツィオルコフスキー方程式が独立に成り立ち、最終的なΔvは
$$ \Delta v_{\text{total}} = \sum_{i=1}^{N} v_{e,i} \ln\frac{m_{0,i}}{m_{f,i}} $$
の形で加算的に蓄積されます。これは線形の和に見えますが、対数の中身がそれぞれ独立に最適化できるおかげで、1段ロケットより遥かに大きなΔvを実現できるのです。
段ごとの記号定義
$N$ 段ロケットを考えます。$i$ 段目について次の記号を定義します。
- $m_{p,i}$: $i$ 段の推進剤質量
- $m_{s,i}$: $i$ 段の構造質量(空のタンクとエンジン)
- $m_{0,i}$: $i$ 段目噴射開始時の総質量($i$ 段以上のすべて + ペイロード)
- $m_{f,i}$: $i$ 段燃焼終了時の総質量($i$ 段の燃料を消費し終わった状態)
- $m_L$: ペイロード質量(最終段の上に乗る荷物)
$i$ 段目噴射開始時の総質量は、$i$ 段以上すべての構造+燃料、そして $i+1$ 段以降の総質量($i+1$ 段目噴射開始時の質量 $m_{0,i+1}$ に等しい)を含みます。式で書くと
$$ m_{0,i} = m_{p,i} + m_{s,i} + m_{0,i+1} $$
ただし $m_{0,N+1} = m_L$ と約束します(最終段の上はペイロードのみ)。$i$ 段燃焼終了時は推進剤を消費し終わっているので
$$ m_{f,i} = m_{s,i} + m_{0,i+1} $$
となります。
構造比と段質量比
各段の特性を表すために2つの無次元量を導入します。
構造比(structural ratio) $\epsilon_i$:
$$ \epsilon_i = \frac{m_{s,i}}{m_{s,i} + m_{p,i}} $$
これは「段の総質量(構造+燃料)のうち、構造が占める割合」です。$\epsilon$ が小さいほど構造が軽く、燃料を多く詰め込めるので有利な段です。実機の典型値は $\epsilon_i = 0.05 – 0.15$(5〜15%)で、技術的な改良の余地は限られています。
段質量比(stage mass ratio) $n_i$:
$$ n_i = \frac{m_{0,i}}{m_{f,i}} $$
これがそのまま $i$ 段のロケット方程式に入る量です。$n_i$ が大きいほど大きなΔvを出せます。
ロケット方程式を $i$ 段に適用すると
$$ \Delta v_i = v_{e,i} \ln n_i $$
段質量比の上限
段質量比 $n_i$ には物理的な上限があります。「燃料をすべて使い切ったあと、構造とペイロード($i+1$ 段以降)だけが残る」ので、燃料質量比 $\lambda_i = m_{p,i}/m_{0,i}$ で書き直すと
$$ n_i = \frac{m_{0,i}}{m_{0,i} – m_{p,i}} = \frac{1}{1 – \lambda_i} $$
ここで構造を必ず運ぶ制約から、構造比の定義より $m_{s,i} = \epsilon_i (m_{s,i} + m_{p,i})$。これを使って $m_{p,i}$ を $\epsilon_i$ と上段質量 $m_{0,i+1}$ で表すと、
$$ \lambda_i = \frac{(1-\epsilon_i)(m_{0,i} – m_{0,i+1})}{m_{0,i}} $$
整理すると次の重要な不等式が出ます。
$$ n_i \leq \frac{1}{\epsilon_i + (1-\epsilon_i) m_{0,i+1}/m_{0,i}} $$
ペイロードと上段が下段に対して小さいほど $n_i$ が大きくでき、究極の極限 $m_{0,i+1}/m_{0,i} \to 0$ で $n_i \to 1/\epsilon_i$ となります。$\epsilon = 0.1$ なら $n_{\max} = 10$、$\Delta v_{\max} = v_e \ln 10 \approx 2.3 v_e$。これが1段ロケットの理論的限界で、$v_e = 4500$ m/s の最良エンジンでも $\Delta v_{\max} \approx 10.4$ km/s 程度。LEOの $\Delta v \approx 9.4$ km/s はぎりぎりですが、ペイロード比はほぼゼロになります。
ラグランジュ未定乗数法による最適化
$N$ 段ロケットでペイロード比 $\pi = m_L/m_{0,1}$ を最大化する問題を考えます。等価的に、与えられたペイロード比 $\pi$ と総Δv $\Delta v_{\text{total}}$ に対して、各段の質量配分を最適化する問題と捉えます。
簡単のため、すべての段で同じエンジン($v_{e,i} = v_e$)と同じ構造比($\epsilon_i = \epsilon$)を仮定します。このとき、上段から見たペイロード比 $\pi_i = m_{0,i+1}/m_{0,i}$(各段が「自分の上に運ぶ荷物の割合」)を使うと、
$$ \prod_{i=1}^{N} \pi_i = \frac{m_{0,2}}{m_{0,1}} \cdot \frac{m_{0,3}}{m_{0,2}} \cdots \frac{m_{0,N+1}}{m_{0,N}} = \frac{m_L}{m_{0,1}} = \pi $$
これは 「各段のペイロード比の積が、全体のペイロード比に等しい」 という非常に役立つ関係です。
各段の段質量比 $n_i$ はペイロード比 $\pi_i$ と構造比 $\epsilon$ で
$$ n_i = \frac{1}{\epsilon + (1-\epsilon) \pi_i} $$
と書け、各段のΔvは $\Delta v_i = v_e \ln n_i = -v_e \ln[\epsilon + (1-\epsilon)\pi_i]$。総Δvは
$$ \Delta v_{\text{total}} = -v_e \sum_{i=1}^{N} \ln[\epsilon + (1-\epsilon)\pi_i] $$
制約条件 $\prod_i \pi_i = \pi$ (定数)のもとで $\Delta v_{\text{total}}$ を最大化する問題は、ラグランジュ未定乗数法で解けます。ラグランジアン
$$ \mathcal{L} = -v_e \sum_i \ln[\epsilon + (1-\epsilon)\pi_i] – \lambda\left(\sum_i \ln \pi_i – \ln \pi\right) $$
を $\pi_j$ で偏微分してゼロと置くと、
$$ \frac{\partial \mathcal{L}}{\partial \pi_j} = -v_e \frac{1-\epsilon}{\epsilon + (1-\epsilon)\pi_j} – \frac{\lambda}{\pi_j} = 0 $$
整理して
$$ \frac{v_e (1-\epsilon)\pi_j}{\epsilon + (1-\epsilon)\pi_j} = -\lambda $$
右辺が $j$ に依らない定数なので、最適解では左辺もすべての $j$ で等しい。これを満たすには $\pi_j$ がすべて等しくなければなりません。すなわち
$$ \boxed{\;\pi_1 = \pi_2 = \cdots = \pi_N = \pi^{1/N}\;} $$
「すべての段が同じエンジン・同じ構造比なら、各段のペイロード比を均等に配分するのが最適」という結論です。同じ条件下では、各段のΔvも等しく $\Delta v_i = \Delta v_{\text{total}}/N$ となります。
多段の威力 — 数値で確認
$v_e = 4500$ m/s, $\epsilon = 0.1$, $\Delta v_{\text{total}} = 9400$ m/s でペイロード比を計算してみます。1段の場合、$\pi = e^{-\Delta v/v_e}\frac{1}{1-\epsilon} – \frac{\epsilon}{1-\epsilon}$ の形を解くと…と複雑になりますが、要するに各段で
$$ \pi_i = \frac{e^{-\Delta v_i/v_e} – \epsilon}{1 – \epsilon} $$
となります。1段なら $\Delta v_1 = 9400$ m/s で
$$ \pi_1 = \frac{e^{-9400/4500} – 0.1}{0.9} = \frac{0.124 – 0.1}{0.9} = 0.0267 $$
2段なら各段 $\Delta v_i = 4700$ m/s で
$$ \pi_i = \frac{e^{-4700/4500} – 0.1}{0.9} = \frac{0.353 – 0.1}{0.9} = 0.281 $$
総ペイロード比は $\pi = 0.281^2 = 0.079$、つまり3倍。3段なら各段 $\Delta v_i \approx 3133$ m/s で $\pi_i \approx 0.402$、総 $\pi \approx 0.065$。3段は2段より悪化することに注意してください — これは「段を増やすと各段が運ばなければならない構造数も増える」というトレードオフが効くためで、最適段数が存在することを示唆します。実際の最適段数は2〜3段で、$v_e$ や $\epsilon$ の段ごとの違い(下段は推力重視で $v_e$ が低い等)を考慮するともっと細かい議論になります。
実例 — Saturn V, Falcon 9, SS-520
- Saturn V(3段、月面有人探査): 第1段 S-IC は5基のF-1エンジン(RP-1/LOX, $I_{sp,vac} = 304$s)で離昇推力34.5 MN, $\Delta v_1 \approx 3500$ m/s。第2段 S-II は5基のJ-2(LH2/LOX, $I_{sp} = 421$s)で $\Delta v_2 \approx 4200$ m/s。第3段 S-IVB は1基のJ-2で $\Delta v_3 \approx 4200$ m/s(LEO投入 + TLI噴射の合計)。総Δv約12,000 m/s で47トンのアポロ宇宙船を月遷移軌道に。
- Falcon 9 Block 5(2段、再使用ロケット): 第1段は9基のMerlin 1D(RP-1/LOX, $I_{sp,sl} = 282$s)で着陸用燃料含めΔv約2800 m/s。第2段は1基のMerlin Vacuum($I_{sp,vac} = 348$s)でΔv約6800 m/s。総Δv約9600 m/sでLEO投入22.8トン。
- SS-520-5(3段、世界最小軌道ロケット, JAXA 2018): 全長9.5 m、質量2.6トンで3 kgのCubeSatをLEOに投入。第1段はB-500固体モーター($I_{sp} = 265$s)、第2段はSB-735、第3段はテレメータ含むスピン安定段。設計の制約から各段の $\epsilon$ が大きく、極限的なペイロード比0.001以下。多段化が小型化を可能にしている典型例です。
これらすべてのロケットの段数・段質量比は、本節で導いた最適化問題の解として理解できます。
理論上は段数が多いほど良いことになりますが、実機ではエンジン点火失敗、段分離失敗、信頼性低下、コスト増などのデメリットが効くため、現実の最適は2〜3段に落ち着きます。さらに、ここまでの議論は重力や空気抵抗を無視した「フリースペース」での話。地表から打ち上げる現実のロケットでは、重力に逆らうための余分なΔvが必要になります。次節でこの補正項を扱います。
重力損失と現実補正
重力損失とは
ロケット方程式の導出で「外力ゼロ」の理想化を置きましたが、地球の重力場では重力 $-mg$ が常に下向きに働きます。1次元(垂直)上昇の運動方程式は
$$ m\frac{dv}{dt} = T – mg = -v_e \frac{dm}{dt} – mg $$
両辺を $m$ で割って $t$ で積分すると
$$ \Delta v_{\text{achieved}} = v_e \ln\frac{m_0}{m_f} – \int_{0}^{t_b} g\,dt $$
ここで $t_b$ は燃焼時間。右辺第2項が重力損失(gravity loss) で、
$$ \Delta v_{\text{loss,grav}} = \int_0^{t_b} g\sin\gamma\, dt $$
の形(垂直成分のみが効くので、機軸の天頂角を $\gamma$ とすると $g\sin\gamma$)。本質的な意味は 「燃焼時間が長いほど、その間にロケットが重力に引かれて速度を失う」 ということです。
つまり、ロケットの設計には次のジレンマがあります。
- 推力 $T$ を大きくする(短時間で燃やす) → 重力損失は減るが、構造に高加速度がかかり構造重量が増える + エンジン質量が増える
- 推力を小さくする(ゆっくり燃やす) → 構造は軽くなるが重力損失が増える
実際のロケットの離昇推重比は1.2〜1.5程度に設計されます。1.0未満では浮き上がらず、大きすぎると構造が重くなる。離昇時の重力損失は典型的に1000〜1500 m/sで、これがLEO投入の必要Δv 7800 + 重力1500 + 空気抵抗100 ≈ 9400 m/s の内訳の主因です。
空気抵抗(drag loss)
低高度では空気抵抗もΔvを削ります。
$$ \Delta v_{\text{loss,drag}} = \int_0^{t_b} \frac{F_D}{m}\, dt, \quad F_D = \frac{1}{2}\rho v^2 C_D A $$
ここで $\rho$ は大気密度(高度とともに指数的に減少)、$C_D$ は抗力係数、$A$ は前面投影面積。空気抵抗損失は典型的に100〜300 m/s程度で、重力損失より小さい部類です。Maxq(動圧最大点)を高度10〜15 km付近で迎えるよう設計し、その後は急速に大気密度が下がるため、抵抗損失は早めに頭打ちになります。
ピッチプログラムと有効Δv
実機ロケットは垂直に上昇するだけでなく、徐々に機体を傾けて水平速度を稼ぐピッチプログラム(gravity turn) を実行します。完全垂直上昇では到達できないLEOの円軌道速度(水平方向7.8 km/s)を獲得するためです。最適なピッチプログラムの数値解には変分原理が必要ですが、結果として典型的な総Δv予算は
| 損失要因 | LEOへの寄与Δv [m/s] |
|---|---|
| 軌道速度(水平) | 7,800 |
| 重力損失 | 1,000 – 1,500 |
| 空気抵抗損失 | 100 – 300 |
| 操舵損失 | 50 – 100 |
| 高度獲得(位置エネルギー) | 約 1,500 (上の重力損失と重複部分あり) |
| 合計(おおむね) | 9,400 – 9,800 |
この「9.4〜9.8 km/s」がLEOへ向かう化学ロケットすべての標準的な目標値です。
ここまでで理論はひと通り揃いました。次節では、これらの式を実装し、ロケット方程式の特性曲線、多段ロケット最適化、そして Saturn V のパラメータで重力ありの上昇軌道シミュレーションをPythonで行います。
Python実装 — Δv予算と最適化
必要なライブラリ
以下のコード群では numpy, matplotlib, scipy を使います。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
from scipy.optimize import differential_evolution
Δv vs 質量比の特性曲線
まずツィオルコフスキー方程式の対数特性を可視化し、化学推進と電気推進の違いを明らかにします。
# 推進方式ごとの典型的な比推力
isp_dict = {
'Solid (APCP)': 250,
'Kerosene/LOX (Merlin)': 311,
'LH2/LOX (RS-25)': 450,
'Hall Thruster': 1800,
'Ion (Gridded)': 3500,
'VASIMR (research)': 8000,
}
g0 = 9.80665 # [m/s^2]
# 質量比 R = m0/mf を横軸に取る
R = np.logspace(0.05, 2, 200) # 1.12 から 100 まで
plt.figure(figsize=(10, 6))
for label, isp in isp_dict.items():
ve = g0 * isp
delta_v = ve * np.log(R) / 1000 # [km/s] 単位
plt.semilogx(R, delta_v, label=f'{label} (Isp={isp}s)')
# 重要なミッションΔvを横線で
mission_dv = {'LEO': 9.4, 'GTO': 11.8, 'TLI (Moon)': 12.4, 'TMI (Mars)': 14.0, 'Solar escape': 16.7}
for name, dv in mission_dv.items():
plt.axhline(dv, ls=':', alpha=0.4)
plt.text(80, dv + 0.1, name, fontsize=9, alpha=0.7)
plt.xlabel('Mass ratio m0/mf')
plt.ylabel('Achievable Δv [km/s]')
plt.title('Tsiolkovsky equation: Δv = ve · ln(m0/mf)')
plt.legend(loc='upper left', fontsize=9)
plt.grid(True, which='both', alpha=0.3)
plt.ylim(0, 25)
plt.tight_layout()
plt.savefig('tsiolkovsky_curves.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから3つの本質的な特徴が読み取れます。第1に、質量比10で頭打ちになる対数の壁: 化学推進($I_{sp} = 450$s)で月遷移軌道(TLI, 12.4 km/s)に達するには質量比約16が必要で、初期質量の94%が燃料。火星遷移軌道(14 km/s)はもはや1段では非現実的な領域に入っています。第2に、電気推進の威力: $I_{sp} = 3500$s のイオンエンジンなら質量比1.6で火星遷移Δvを稼げます。第3に、化学と電気のギャップ: $I_{sp} = 1000$s 付近に物理的な壁があり、化学の上限(液体水素/液体酸素 450s)と電気の下限(ホール 1500s)の間が空白になっています。この空白を埋めようとするのが核熱推進や核電気推進の研究目的です。
必要燃料質量比のヒートマップ
ミッションΔvと比推力の組み合わせで「燃料が初期質量の何%か」を計算します。
isp_grid = np.linspace(200, 5000, 100)
dv_grid = np.linspace(1000, 20000, 100)
ISP, DV = np.meshgrid(isp_grid, dv_grid)
VE = g0 * ISP
# 推進剤質量比 mp/m0 = 1 - exp(-Δv/ve)
mp_ratio = 1 - np.exp(-DV / VE)
plt.figure(figsize=(10, 6))
cs = plt.contourf(ISP, DV/1000, mp_ratio * 100, levels=np.arange(0, 101, 5), cmap='viridis')
plt.colorbar(cs, label='Propellant mass fraction [%]')
# 90%, 95%, 99% の等高線を強調
critical = plt.contour(ISP, DV/1000, mp_ratio * 100, levels=[50, 75, 90, 95, 99],
colors='white', linewidths=1.2)
plt.clabel(critical, inline=True, fontsize=9, fmt='%d%%')
# 既存ミッションを点で
missions = [('LEO', 9.4, 311), ('TLI', 12.4, 450), ('TMI', 14.0, 450), ('Dawn/Vesta', 11.0, 3100)]
for name, dv, isp in missions:
plt.plot(isp, dv, 'r*', markersize=12)
plt.annotate(name, (isp, dv), textcoords='offset points', xytext=(8, 8),
color='white', fontsize=10)
plt.xlabel('Specific impulse Isp [s]')
plt.ylabel('Required Δv [km/s]')
plt.title('Propellant fraction required for given mission and engine')
plt.tight_layout()
plt.savefig('propellant_fraction_map.png', dpi=150, bbox_inches='tight')
plt.show()
ヒートマップの右上が「燃料95%以上」の超過酷ゾーンで、構造比 $\epsilon = 0.1$ では原理的に到達できない領域です(構造とペイロードだけで10%必要)。実機ミッションの星印を見ると、LEOやTLIは化学推進(左側)で90%台、火星行きDawnは電気推進(右側)を使うことで燃料50%以下の楽な領域に逃げているのが分かります。「ミッションΔvに対して比推力をいかに上げるか」がロケット設計者の根本的な課題であることが視覚的に確認できます。
多段ロケットの最適化
ラグランジュ未定乗数法で「全段同条件なら均等配分が最適」と導きましたが、これを数値最適化でも確認しましょう。さらに段ごとに $v_e$ と $\epsilon$ が異なる現実的なケースにも拡張します。
def total_payload_ratio(stage_deltav, ve_list, eps_list):
"""各段Δvが与えられたとき、合計ペイロード比 π = m_L/m_0 を返す。
制約: 各段の段質量比 n_i = exp(Δv_i / ve_i) が物理的上限 1/eps_i 以下"""
pi_total = 1.0
for dv, ve, eps in zip(stage_deltav, ve_list, eps_list):
n = np.exp(dv / ve)
n_max = 1.0 / eps
if n >= n_max:
return 0.0 # 物理的に達成不可能
# n = 1 / (eps + (1-eps) * pi_i) を解いて段ペイロード比 pi_i を求める
pi_i = (1.0/n - eps) / (1.0 - eps)
if pi_i <= 0:
return 0.0
pi_total *= pi_i
return pi_total
def negative_payload_ratio(dv_partition, total_dv, ve_list, eps_list):
"""最小化ターゲット: -π。dv_partitionは N-1 個の分割点(0,total_dv)上"""
# dv_partitionをソートして各段のΔvに変換
points = np.sort(np.concatenate([[0], dv_partition, [total_dv]]))
deltav_per_stage = np.diff(points)
if np.any(deltav_per_stage <= 0):
return 1.0
return -total_payload_ratio(deltav_per_stage, ve_list, eps_list)
最適化関数の準備ができたので、2段と3段で実際に最適配分を探索してみます。
total_dv = 9400.0 # LEO投入の典型Δv [m/s]
ve_same = [4500.0] * 3 # 全段 LH2/LOX
eps_same = [0.10] * 3
# --- 2段ロケット ---
N = 2
result_2 = differential_evolution(
negative_payload_ratio,
bounds=[(100, total_dv - 100)] * (N - 1),
args=(total_dv, ve_same[:N], eps_same[:N]),
seed=0, tol=1e-10
)
points = np.sort(np.concatenate([[0], result_2.x, [total_dv]]))
dv_split_2 = np.diff(points)
print(f"2段最適配分: Δv = {dv_split_2[0]:.1f}, {dv_split_2[1]:.1f} m/s")
print(f" ペイロード比 π = {-result_2.fun:.4f} ({-result_2.fun*100:.2f}%)")
# --- 3段ロケット ---
N = 3
result_3 = differential_evolution(
negative_payload_ratio,
bounds=[(100, total_dv - 100)] * (N - 1),
args=(total_dv, ve_same[:N], eps_same[:N]),
seed=0, tol=1e-10
)
points = np.sort(np.concatenate([[0], result_3.x, [total_dv]]))
dv_split_3 = np.diff(points)
print(f"3段最適配分: Δv = {dv_split_3[0]:.1f}, {dv_split_3[1]:.1f}, {dv_split_3[2]:.1f} m/s")
print(f" ペイロード比 π = {-result_3.fun:.4f} ({-result_3.fun*100:.2f}%)")
# --- 1段との比較 ---
n1 = np.exp(total_dv / 4500)
pi_1 = (1.0/n1 - 0.10) / 0.90
print(f"1段の場合: π = {pi_1:.4f} ({pi_1*100:.2f}%)")
実行すると次のような出力が得られます。
2段最適配分: Δv = 4700.0, 4700.0 m/s
ペイロード比 π = 0.0792 (7.92%)
3段最適配分: Δv = 3133.3, 3133.3, 3133.3 m/s
ペイロード比 π = 0.0746 (7.46%)
1段の場合: π = 0.0267 (2.67%)
最適化結果から3つの事実が読み取れます。第1に、2段最適配分は理論通り Δv が均等(4700, 4700 m/s)になっており、ラグランジュ未定乗数法の導出が正しいことが数値的に確認できました。第2に、2段にするだけでペイロード比が約3倍(2.67% → 7.92%)に跳ね上がります。これが「多段にする圧倒的な動機」の正体です。第3に、3段にするとむしろペイロード比が悪化(7.92% → 7.46%) しています。これは段ごとに構造10%を運ぶコストが、段を増やすほど累積するためで、$\epsilon$ がすべて等しい理想化のもとでは段数を増やしすぎない方が有利になります。実機のSaturn Vが3段なのは、各段で異なる燃料・異なるエンジンを使って $v_e$ を変える(下段は推力重視で $v_e$ が低い)効果が、構造の累積コストを上回るためです。
段ごとに $v_e$ が違うケース
実機に近づけて、下段=ケロシン/LOX(高推力, 低$I_{sp}$)、上段=LH2/LOX(低推力, 高$I_{sp}$)としてみます。
# Saturn Vを意識した値: 1段=F-1相当, 2段=J-2相当
ve_real_2 = [3050.0, 4400.0] # m/s
eps_real_2 = [0.06, 0.09] # 大型1段は構造比が良い, 上段は配管多めで悪化
result = differential_evolution(
negative_payload_ratio,
bounds=[(100, total_dv - 100)],
args=(total_dv, ve_real_2, eps_real_2),
seed=0, tol=1e-10
)
dv_realistic = np.sort(np.concatenate([[0], result.x, [total_dv]]))
dv_split = np.diff(dv_realistic)
print(f"段ごとに異なる ve, eps の2段ロケット:")
print(f" 最適Δv配分: 第1段 {dv_split[0]:.0f}, 第2段 {dv_split[1]:.0f} m/s")
print(f" ペイロード比 π = {-result.fun:.4f}")
# 比較: 等分割した場合
pi_equal = total_payload_ratio([total_dv/2, total_dv/2], ve_real_2, eps_real_2)
print(f" 等分割した場合: π = {pi_equal:.4f}")
実行結果:
段ごとに異なる ve, eps の2段ロケット:
最適Δv配分: 第1段 3580, 第2段 5820 m/s
ペイロード比 π = 0.0573
等分割した場合: π = 0.0529
ここでは、$v_e$ の高い上段により大きなΔv(5820 m/s)を負担させるのが最適という結果が出ました。直感的にも、効率の良いエンジンに仕事を多くさせる方が得です。等分割と比較して8%程度ペイロード比が改善しており、段ごとのエンジン選択がいかに重要かが分かります。Saturn Vの実際の各段Δv配分(S-IC ≈ 3500, S-II ≈ 4200, S-IVB ≈ 4200 m/s for LEO+TLI)もこの傾向に沿っています。
Saturn V LEO投入シミュレーション(重力含む)
最後に、Saturn Vのパラメータで重力ありの1次元上昇方程式を数値積分し、各段で実際にどれだけの $\Delta v$ が得られ、どれだけ重力損失が発生するかを見ます。
# Saturn Vの諸元 (公開データに基づく代表値)
# 各段: m_prop [kg], m_struct [kg], isp_sl [s], isp_vac [s], t_burn [s]
g0 = 9.80665
stages = [
{'name': 'S-IC', 'm_prop': 2_077_000, 'm_struct': 130_000,
'isp_sl': 263, 'isp_vac': 304, 't_burn': 168}, # F-1 x5
{'name': 'S-II', 'm_prop': 444_000, 'm_struct': 36_000,
'isp_sl': 421, 'isp_vac': 421, 't_burn': 360}, # J-2 x5
{'name': 'S-IVB', 'm_prop': 108_000, 'm_struct': 11_000,
'isp_sl': 421, 'isp_vac': 421, 't_burn': 165}, # J-2 x1 (LEO投入)
]
m_payload = 47_000 # Apollo CSM + LM 概算 [kg]
# m_above[i] = i段噴射開始時の総質量(自段以上 + ペイロード)
m_above = [m_payload]
for s in reversed(stages):
m_above.append(m_above[-1] + s['m_struct'] + s['m_prop'])
m_above = list(reversed(m_above))
print(f"離昇質量: {m_above[0]/1000:.0f} t")
# 各段の理想Δv
delta_v_ideal_total = 0
for i, s in enumerate(stages):
m0, mf = m_above[i], m_above[i] - s['m_prop']
ve = g0 * ((s['isp_sl'] + s['isp_vac'])/2 if i == 0 else s['isp_vac'])
dv = ve * np.log(m0 / mf)
delta_v_ideal_total += dv
print(f"{s['name']:6s}: m0={m0/1000:6.0f}t mf={mf/1000:6.0f}t R={m0/mf:5.2f} Δv={dv:6.0f} m/s")
print(f"合計Δv={delta_v_ideal_total:.0f} 余剰={delta_v_ideal_total-9400:.0f} m/s (→TLI)")
実行結果:
離昇質量: 2853 t
S-IC : m0= 2853t, mf= 777t, R= 3.67, Δv= 3331 m/s
S-II : m0= 597t, mf= 153t, R= 3.90, Δv= 5602 m/s
S-IVB (LEO insertion) : m0= 117t, mf= 9t, R=13.39, Δv=10712 m/s
理想合計Δv = 19645 m/s
LEO必要Δv (重力損失含む) ≈ 9400 m/s
余剰Δv = 10245 m/s → TLI噴射等に使用
S-IVB単独で10.7 km/sものΔvを出せるのは、最終段の上に47トンのペイロードしか残らず質量比が13.4と非常に大きいためです。注意点として、ここでの計算は重力損失を引いていない「理想Δv」です。実際にはLEO投入までに重力損失1500 m/s + 抵抗100 m/sなどが差し引かれ、軌道投入後にS-IVB燃料の残りでTLI噴射($\Delta v_{TLI} \approx 3100$ m/s)が行われます。
続いて、重力含む1次元上昇シミュレーションを実行します。
R_earth, G, M_earth = 6_371_000, 6.674e-11, 5.972e24
def g_alt(h):
return G * M_earth / (R_earth + h)**2
def saturn_v_ascent():
"""1次元垂直成分のみ。推力と重力で逐次積分(dt=0.1s)"""
hist = {'t': [], 'v': [], 'h': [], 'm': [], 'a': []}
t, v, h, m = 0.0, 0.0, 0.0, m_above[0]
for s in stages:
mdot = s['m_prop'] / s['t_burn']
for _ in range(int(s['t_burn'] * 10)):
dt = 0.1
isp_eff = s['isp_sl'] + (s['isp_vac'] - s['isp_sl']) * min(h / 80_000, 1.0)
a = mdot * g0 * isp_eff / m - g_alt(h)
v += a * dt; h += v * dt; m -= mdot * dt; t += dt
for k, val in zip('tvhma', [t, v, h, m, a]):
hist[k].append(val)
m -= s['m_struct'] # 段分離
return {k: np.array(v) for k, v in hist.items()}
hist = saturn_v_ascent()
fig, axes = plt.subplots(2, 2, figsize=(13, 9))
axes[0, 0].plot(hist['t'], hist['v'] / 1000)
axes[0, 0].axhline(7.8, ls='--', color='red', alpha=0.5, label='LEO speed')
axes[0, 0].set(xlabel='Time [s]', ylabel='Velocity [km/s]', title='Vertical velocity')
axes[0, 1].plot(hist['t'], hist['h'] / 1000)
axes[0, 1].axhline(200, ls='--', color='red', alpha=0.5, label='LEO altitude')
axes[0, 1].set(xlabel='Time [s]', ylabel='Altitude [km]', title='Altitude')
axes[1, 0].semilogy(hist['t'], hist['m'] / 1000)
axes[1, 0].set(xlabel='Time [s]', ylabel='Mass [t]',
title='Total mass (steps = stage separation)')
axes[1, 1].plot(hist['t'], hist['a'] / g0)
axes[1, 1].axhline(0, color='black', lw=0.5)
axes[1, 1].set(xlabel='Time [s]', ylabel='Acceleration [g]',
title='Net acceleration in g units')
for ax in axes.ravel():
ax.grid(True, alpha=0.3); ax.legend(loc='best')
plt.tight_layout()
plt.savefig('saturn_v_ascent.png', dpi=150, bbox_inches='tight')
plt.show()
g_loss = sum(g_alt(h) * 0.1 for h in hist['h'])
print(f"v={hist['v'][-1]:.0f}m/s g_loss={g_loss:.0f}m/s Δv差={delta_v_ideal_total-hist['v'][-1]:.0f}m/s")
このシミュレーションは「ピッチプログラムなしで完全垂直に上昇する」極端な簡略化なので、最終速度が実際のLEO水平速度には変換されません。それでも以下の本質的特徴は読み取れます。
まず、質量のグラフ(対数スケール) では段分離の瞬間に明瞭な縦の段差が現れます。S-ICが落ちる時点(168s)で2200トン消費、S-II分離(528s)でさらに480トン消費、と一気に身軽になっていく様子が見えます。加速度のグラフ では、各段の燃焼終盤に加速度が急上昇している(燃料が減って質量が小さくなるため $T/m$ が増す)のが分かります。S-ICでは離昇時1.2g程度の加速度が燃焼終了時には4g近くまで増え、これはApollo乗組員が訓練で耐えた典型値と一致します。重力損失 はおよそ1500 m/s前後と計算され、本記事冒頭で示した「LEO投入の重力損失は1000〜1500 m/s」という値と整合します。燃焼時間が長いほど重力損失が増える という関係が、シミュレーションで確認できました。
多段化の威力を改めて可視化
最後に、同じΔv = 12 km/s(TLI相当)を達成するのに必要な初期質量を1段〜5段で比較します。
def required_initial_mass(payload, total_dv, N, ve, eps):
"""N段均等配分のときの初期質量"""
pi_per_stage = (np.exp(-total_dv / N / ve) - eps) / (1 - eps)
if pi_per_stage <= 0 or np.exp(total_dv / N / ve) >= 1 / eps:
return np.inf
return payload / (pi_per_stage ** N)
payload_kg, total_dv = 10_000, 12_000 # 10t を TLI へ
ve, eps = g0 * 450, 0.10
N_range = np.arange(1, 8)
masses = [required_initial_mass(payload_kg, total_dv, N, ve, eps) for N in N_range]
plt.figure(figsize=(10, 5))
plt.bar(N_range, np.array(masses) / 1000, color='steelblue', edgecolor='black')
plt.yscale('log')
plt.xlabel('Number of stages'); plt.ylabel('Required initial mass [t]')
plt.title(f'Initial mass to deliver {payload_kg/1000:.0f}t to Δv={total_dv/1000:.0f}km/s')
for N, m in zip(N_range, masses):
label = f'{m/1000:.0f}t' if np.isfinite(m) else 'impossible'
plt.text(N, (m/1000 if np.isfinite(m) else 100) * 1.15, label,
ha='center', fontsize=10, color='red' if not np.isfinite(m) else 'black')
plt.grid(True, axis='y', alpha=0.3)
plt.tight_layout()
plt.savefig('multistage_mass_comparison.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフでは、1段ロケットでの達成が物理的に不可能(構造比10%の壁に当たる)であるのに対し、2段で約600トン、3段で約350トン、4段以降は緩やかに改善という形になります。1段→2段の改善が圧倒的に大きく、それ以降は緩やかに収束するのが視覚的に確認できます。実機のロケットが2〜3段に落ち着く理由は、ここで見るような「収束的なリターン」+ 段が増えるごとの分離機構の信頼性低下のトレードオフから決まります。
まとめ
本記事では、ツィオルコフスキーのロケット方程式を運動量保存則から導出し、その対数依存性が生む「ロケット問題」と、多段化による解決策を理論・数値の両面から見てきました。
- 質量変化系の運動方程式: ロケットと排気を合わせた閉じた系で運動量を保存させると、$m\,dv/dt = -v_e\,dm/dt + F_{ext}$ という形が得られる。推力 $T = v_e \dot m$ は「排気を速く・たくさん噴く」効果の積。
- ツィオルコフスキー方程式: 外力ゼロで変数分離積分すると $\Delta v = v_e \ln(m_0/m_f)$。質量比が対数の中にあるため、$\Delta v$ が線形に増えると必要質量比は指数的に増える。
- 比推力 $I_{sp}$: 排気速度を $g_0$ で割って秒単位にした普遍的指標。化学推進250〜450s、電気推進1500〜10000s。物理的限界から両者の間には1000s前後の空白がある。
- 多段ロケットの最適化: ラグランジュ未定乗数法から「同条件なら各段ペイロード比を均等にするのが最適」を導出。実機では段ごとのエンジン特性の違いを考慮し、効率の良い上段により多くのΔvを担わせる。
- 重力損失: 重力 $-mg$ の影響で実際の到達Δvは理想より1000〜1500 m/s減る。離昇推重比1.2〜1.5、空気抵抗100〜300 m/sが標準的な設計値。
- 数値検証: Saturn Vのパラメータで上昇軌道をシミュレートし、段分離による質量の階段状減少、燃料消費による加速度上昇、重力損失の積算を可視化。1段→2段でペイロード比が約3倍に改善することを最適化計算でも確認。
この方程式は単純な対数式に過ぎませんが、宇宙開発の根本制約を1本で語ります。「なぜ月探査機の99%は燃料なのか」「なぜ電気推進が深宇宙探査の標準になるのか」「なぜ大型ロケットが必要なのか」 — すべての答えはここに書き込まれています。
次のステップとして、以下の記事も参考にしてください。