射火箭最大高度:重力損失的完整推導(dǎo)與數(shù)值驗(yàn)證)
我一直覺得“垂直發(fā)射火箭的最大高度”是航天動(dòng)力學(xué)里最能暴露物理本質(zhì)、也最容易把人繞暈的入門題?;鸺胍w得更高要么老老實(shí)實(shí)忍受重力帶來的速度損失要么推力不足、結(jié)構(gòu)失控還沒離開發(fā)射臺(tái)就讓一切歸零——教材當(dāng)然不會(huì)教“原地爆炸”的部分它只會(huì)把問題揉進(jìn)一個(gè)編號(hào)類似“例題11.1”的題目里單級(jí)火箭、垂直發(fā)射、給定噴氣速度和質(zhì)量流率求最大高度順便讓你體會(huì)什么叫重力損失。這篇文章我就把這類題從運(yùn)動(dòng)方程到數(shù)值驗(yàn)證完整走一遍既講清最大高度的推導(dǎo)全過程也把重力損失單獨(dú)拎出來做一次直觀的對(duì)比實(shí)驗(yàn)。這道題到底能解決什么問題往小說它是理論力學(xué)和航天器動(dòng)力學(xué)課程里的經(jīng)典入門題往大說它決定了你以后看待運(yùn)載火箭的第一直覺為什么火箭不早點(diǎn)關(guān)機(jī)為什么發(fā)射后要轉(zhuǎn)彎為什么推力不能太小如果你正在學(xué)理論力學(xué)、空氣動(dòng)力學(xué)或航天器動(dòng)力學(xué)或者你在玩模型火箭想知道“發(fā)動(dòng)機(jī)參數(shù)到底怎么影響最終高度”這篇就是照著教材例題做的完整實(shí)戰(zhàn)拆解。我自己做這類題的習(xí)慣是先建方程再求解析解然后用數(shù)值積分反算一遍兩邊互相驗(yàn)證。這樣推導(dǎo)里哪怕有一個(gè)符號(hào)錯(cuò)誤都會(huì)在對(duì)照中原形畢露。下面正式開始。1. 先把例題的物理直覺建立起來1.1 為什么垂直發(fā)射這么“吃虧”垂直發(fā)射是所有飛行剖面里重力損失最大的一種。因?yàn)檎麄€(gè)有動(dòng)力段推力方向都和重力方向完全相反重力每秒都在從發(fā)動(dòng)機(jī)給出的加速度里硬性扣除約9.8m/s2。如果發(fā)動(dòng)機(jī)的推重比只有1.1那它可以用來“加速”的凈余量其實(shí)只有0.1g絕大多數(shù)推力都用在和重力拔河上。生活里可以這樣理解你拎著一袋20斤的大米爬五樓腿確實(shí)在發(fā)力但那部分力氣并沒有變成你水平?jīng)_刺的速度它只是用來“對(duì)抗重力”。垂直發(fā)射就是把這種“抗重力開銷”放到最大每升一米都要支付一份勢(shì)能每一秒都要付出一次速度賬面損失。這個(gè)現(xiàn)象就是題眼重力損失一般用速度單位m/s度量記作 Δv_gravity。它并不是什么玄學(xué)概念而是火箭方程給出的理想速度增量里被重力這個(gè)“常駐稅種”劃走的一筆開銷。等算完整道題你會(huì)看到它的量級(jí)甚至比很多人想象得要大得多。1.2 例題11.1的完整原始設(shè)定在某本經(jīng)典航天動(dòng)力學(xué)教材里這道題以極其樸素的方式出現(xiàn)單級(jí)火箭垂直發(fā)射忽略空氣阻力忽略地球自轉(zhuǎn)重力加速度取常數(shù)。我給出一個(gè)數(shù)值化之后的版本方便復(fù)現(xiàn)和檢驗(yàn)物理量符號(hào)數(shù)值初始總質(zhì)量m05000 kg燃料質(zhì)量m_fuel4000 kg燒完后結(jié)構(gòu)質(zhì)量m_e1000 kg有效噴氣速度ve2500 m/s質(zhì)量流率?50 kg/s重力加速度g9.8 m/s2由這些參數(shù)可以立刻算出三件事燃燒時(shí)間 tb 4000 / 50 80 秒發(fā)動(dòng)機(jī)推力 T ?·ve 50 × 2500 125000 N初始推重比 T/(m0·g) 125000 / (5000 × 9.8) ≈ 2.55。也就是說這枚理想火箭在地面時(shí)推力是自身重量的2.55倍能順利離地。為什么敢做這么多“理想化假設(shè)”因?yàn)檫@道題的目的不是預(yù)測(cè)真實(shí)火箭的軌跡而是把重力損失這個(gè)核心因素隔離出來??諝庾枇?huì)影響低空段的精確數(shù)值地球自轉(zhuǎn)會(huì)影響最終入軌幾何但如果一上來就把它們?nèi)咳M(jìn)方程你反而看不清“純重力到底從你的速度預(yù)算里偷走了多少”。例題的價(jià)值就是先做減法把次要因素剝干凈讓主要矛盾暴露在聚光燈下。1.3 力學(xué)模型一個(gè)質(zhì)量不斷變小的質(zhì)點(diǎn)火箭的運(yùn)動(dòng)方程本質(zhì)上還是牛頓第二定律只不過質(zhì)量是時(shí)間的函數(shù)。以豎直向上為正方向作用在“火箭殼體加剩余燃料”這個(gè)控制體上的外力包括發(fā)動(dòng)機(jī)推力 T 和重力 mg于是T - mg m·a把 T ?·ve 和 m(t) m0 - ?·t 代進(jìn)去得到瞬時(shí)加速度a(t) (?·ve) / (m0 - ?·t) - g這一步很多人會(huì)踩坑他們想直接套高中物理的勻加速公式。但請(qǐng)注意這里的加速度是隨時(shí)間變化的。原因有兩個(gè)一是推力恒定而質(zhì)量不斷減少相同推力產(chǎn)生的加速度會(huì)越來越大二是重力項(xiàng)始終存在像一個(gè)固定稅率的“常駐扣款”。也就是說火箭的推力雖然不變但“越來越輕的自己推自己”當(dāng)然越飛越猛。一個(gè)重要的自查點(diǎn)初始加速度必須為正。代入數(shù)值初始 a(0) 125000 / 5000 - 9.8 15.2 m/s2說明火箭能離地。如果初始推重比小于1算出來的 a(0) 就會(huì)是負(fù)的那這枚火箭會(huì)先在發(fā)射臺(tái)上“寸步難行”燃料白白燒完也飛不起來——用標(biāo)題的話說想飛得更高至少先把重力和推力的勝負(fù)關(guān)系搞清楚。2. 最大高度的完整推導(dǎo)從運(yùn)動(dòng)方程到623.6km2.1 動(dòng)力段速度與高度都要靠積分把加速度對(duì)時(shí)間積分一次得到動(dòng)力段速度v(t) ve·ln(m0 / m(t)) - g·t其中 m(t) m0 - ?·t。這個(gè)公式的第一項(xiàng)正是齊奧爾科夫斯基火箭方程給出的理想速度增量第二項(xiàng)就是累計(jì)的重力損失。你可以這么看火箭方程告訴你“如果不被重力拖后腿你能取得多少速度”而重力項(xiàng)告訴你“現(xiàn)實(shí)里每秒鐘要交多少稅”。再積分一次得到高度。這一步最容易出錯(cuò)因?yàn)楸环e函數(shù)里有對(duì)數(shù)項(xiàng)。我直接給出換元法的中間結(jié)果對(duì) h(t) ∫v(t)dt令 u m0 - ?·τ整理后得到h(t) ve·[ t - (m(t)/?)·ln(m0/m(t)) ] - (1/2)·g·t2這個(gè)公式看起來不友好但每個(gè)部分都有物理意義。方括號(hào)代表“理想速度隨時(shí)間的積分結(jié)果”后面的半重力項(xiàng)則是重力在位移上的累計(jì)后果。代入 t 80sm(80) 1000kg可以得到v1 2500·ln(5000/1000) - 9.8×80 3239.6 m/sh1 2500×(80 - (1000/50)×ln5) - 0.5×9.8×6400 88168 m ≈ 88.2 km也就是說發(fā)動(dòng)機(jī)工作80秒后火箭飛了88.2公里高速度約3.24km/s。它此時(shí)還在快速上升遠(yuǎn)沒到最高點(diǎn)。要注意的是有動(dòng)力段結(jié)束時(shí)加速度已經(jīng)拉到 a(80) (125000 - 1000×9.8) / 1000 115.2 m/s2約11.8g。這種過載在真實(shí)載人火箭里是絕對(duì)不允許的但教材例題里它只是理想化模型的副產(chǎn)品。你真正該關(guān)心的是關(guān)機(jī)點(diǎn)速度而不是把過載也當(dāng)作可接受的設(shè)計(jì)指標(biāo)。2.2 滑行段把剩余速度換成高度燃料燒完后發(fā)動(dòng)機(jī)不再提供推力火箭只剩一個(gè)1000kg的“空殼”做慣性滑行。此時(shí)質(zhì)量恒定受力只有重力運(yùn)動(dòng)變成標(biāo)準(zhǔn)的勻減速直線運(yùn)動(dòng)。設(shè)滑行段上升高度為 h2最高點(diǎn)速度必須降為0。由能量守恒或者直接套勻減速公式(1/2)·m·v12 m·g·h2于是 h2 v12 / (2g)。代入 v1 3239.6 m/sh2 3239.62 / (2×9.8) ≈ 535.5 km最大高度為H h1 h2 88.2 535.5 623.7 km ≈ 624 km很多初學(xué)朋友看到這個(gè)數(shù)字會(huì)愣住燃料才燒80秒為什么還能再爬升535公里答案在于滑行段幾乎是在“真空邊緣以上”飛行。雖然這里把大氣阻力忽略了但物理直覺是對(duì)的高空空氣稀薄火箭以3.2km/s的速度沖上去慣性足以把它送到很遠(yuǎn)的高度。教材故意選這個(gè)題目就是讓你建立一個(gè)觀念最大高度出現(xiàn)在速度降為零的時(shí)刻而不是發(fā)動(dòng)機(jī)停機(jī)的時(shí)刻。2.3 把結(jié)果放進(jìn)數(shù)量級(jí)坐標(biāo)系里623.7公里是個(gè)什么概念國(guó)際空間站軌道高度約400公里地球半徑約6371公里。所以這枚例題火箭的亞軌道頂點(diǎn)已經(jīng)越過了近地軌道高度甚至接近很多低軌衛(wèi)星的運(yùn)行高度。當(dāng)然它沒有橫向速度不會(huì)入軌只是會(huì)落回來。這時(shí)候值得做一個(gè)反事實(shí)對(duì)比如果完全沒有重力損失理想末速度會(huì)是 v_ideal ve·ln(m0/m_e) 2500×ln5 ≈ 4023.6 m/s。用同樣的重力場(chǎng)做滑行分析對(duì)應(yīng)的最大高度將是h1_ideal v_ideal2/(2g) 119.5 km 825.9 km 945.4 km也就是說重力損失讓這枚例題火箭的最大高度從接近945公里降到624公里損失了約321公里。這個(gè)差距不是“修正量”而是主導(dǎo)量。這恰恰是這類例題最想讓你看見的事重力損失不是小賬而是大賬。3. 重力損失解析到底損失了什么東西3.1 核心公式Δv_g g·tb從一個(gè)最簡(jiǎn)單的動(dòng)作開始。豎直飛行中重力對(duì)加速度的貢獻(xiàn)每時(shí)每刻都是 -g只要發(fā)動(dòng)機(jī)在燃燒這9.8m/s2的“稅”就一直扣。累計(jì) tb 秒速度損失就是Δv_g g·tb代入本題Δv_g 9.8×80 784 m/s。這就是為什么說重力損失和“燒了多久”強(qiáng)相關(guān)而和噴氣速度、質(zhì)量比并沒有直接關(guān)系。同一枚火箭如果把質(zhì)量流率調(diào)大一倍燃燒時(shí)間會(huì)從160秒縮到80秒重力損失直接從1568m/s減半到784m/s。這個(gè)結(jié)論對(duì)工程選型極其有用想降低重力損失最直接的辦法是縮短燃燒時(shí)間而不是一門心思提高比沖。當(dāng)然真實(shí)任務(wù)里推力方向會(huì)隨姿態(tài)變化g也會(huì)隨高度變化。更嚴(yán)謹(jǐn)?shù)膶懛ㄊ前阉鼣U(kuò)展成矢量積分 Δv_g ∫(g·sinγ)dt其中γ是速度矢量與當(dāng)?shù)厮矫娴膴A角。垂直發(fā)射時(shí)γ 90°sinγ 1就退化成本題的一維形式。這也是“垂直發(fā)射重力損失最大”的原因sinγ取到了最大值。3.2 快燒還是慢燒一次控制變量的對(duì)比實(shí)驗(yàn)為了把重力損失的分量看得更清楚我把例題改成方案B保持初始質(zhì)量、燃料質(zhì)量、噴氣速度都不變只把質(zhì)量流率從50kg/s降到25kg/s。于是理想速度增量不變但燃燒時(shí)間變成160秒初始推重比只剩1.28。參數(shù)方案A快速燃燒方案B慢速燃燒質(zhì)量流率50 kg/s25 kg/s燃燒時(shí)間80 s160 s初始推重比2.551.28理想速度增量4023.6 m/s4023.6 m/s重力損失784 m/s1568 m/s動(dòng)力段末速度3239.6 m/s2455.6 m/s動(dòng)力段末高度88.2 km113.6 km滑行段上升高度535.5 km307.6 km最終最大高度623.7 km421.2 km這個(gè)表的信息量很大。慢速燃燒方案前期推力小、加速度低在動(dòng)力段里“磨蹭”的時(shí)間更長(zhǎng)因此動(dòng)力段高度反而更高但它最終總高度卻少了200多公里。原因就是關(guān)機(jī)點(diǎn)速度差太多一個(gè)帶著3.2km/s關(guān)機(jī)一個(gè)只帶2.5km/s關(guān)機(jī)。速度差距在滑行高度上被平方放大于是重力損失在總高度上體現(xiàn)出壓倒性影響。這也解釋了為什么運(yùn)載火箭的第一級(jí)幾乎都是“大力出奇跡”的設(shè)計(jì)寧可發(fā)動(dòng)機(jī)重一點(diǎn)、結(jié)構(gòu)粗一點(diǎn)也要在盡量短的時(shí)間內(nèi)把火箭推離稠密大氣用較小的重力損失換取更高的凈速度和彈道收益。3.3 真實(shí)火箭為什么不是一直垂直加速既然垂直發(fā)射重力損失最大為什么火箭不從一開始就水平加速答案有兩層。低空大氣太稠密水平速度會(huì)產(chǎn)生巨大動(dòng)壓和熱流必須先垂直沖過稠密區(qū)離開稠密大氣后火箭也不能立刻大角度轉(zhuǎn)彎而是采用“重力轉(zhuǎn)彎”程序——推力方向始終跟隨速度方向讓重力負(fù)責(zé)慢慢把速度矢量從豎直轉(zhuǎn)向水平。重力轉(zhuǎn)彎的本質(zhì)是讓重力從“純敵人”變成“教練”它一方面繼續(xù)造成重力損失另一方面不斷改變速度方向使推進(jìn)劑產(chǎn)生的速度增量越來越多的朝水平方向注入。最終近地軌道任務(wù)的重力損失仍然有幾公里每秒但相比純垂直發(fā)射已經(jīng)小很多。例題里的垂直發(fā)射故意把這種工程復(fù)雜性全部剝掉只剩一個(gè)清潔的物理事實(shí)重力和推力之間最簡(jiǎn)單的拔河。4. 用數(shù)值積分驗(yàn)證解析解別讓推導(dǎo)變成自說自話4.1 用Python做一維彈道積分解析推導(dǎo)再漂亮也值得用一個(gè)數(shù)值積分來“對(duì)賬”。我習(xí)慣把運(yùn)動(dòng)方程直接交給歐拉法雖然它精度不如RK4但對(duì)于這種光滑的一維問題只要步長(zhǎng)取足夠小已經(jīng)足夠驗(yàn)證解析結(jié)果。dt 0.01 h 0.0 # 高度單位m v 0.0 # 速度單位m/s m 5000.0 # 當(dāng)前質(zhì)量單位kg m_empty 1000.0 mdot 50.0 ve 2500.0 g 9.8 while v 0: if m m_empty: thrust mdot * ve a (thrust - m * g) / m m max(m_empty, m - mdot * dt) else: a -g v_new v a * dt h (v v_new) / 2 * dt # 梯形積分降低位移誤差 v v_new if v 0: break print(最大高度約, h / 1000, km)這段代碼的核心邏輯很簡(jiǎn)單每個(gè)時(shí)間步重新計(jì)算當(dāng)前質(zhì)量和當(dāng)前加速度先更新速度再用梯形公式更新高度燃料耗盡后加速度只剩 -g當(dāng)速度降到0循環(huán)停止此刻的高度就是最大高度。我故意沒有在動(dòng)力段結(jié)束時(shí)停止循環(huán)因?yàn)樽罡唿c(diǎn)永遠(yuǎn)在關(guān)機(jī)之后。4.2 數(shù)值結(jié)果和解析結(jié)果對(duì)賬按上面代碼用 dt0.01s 跑一遍最大高度會(huì)落在623公里附近和解析解623.7km的差距通常只有幾公里量級(jí)并且步長(zhǎng)越小越接近解析值。如果不做梯形積分只用樸素歐拉 h v*dt誤差會(huì)比梯形版本明顯大。這本身也是數(shù)值方法的一個(gè)教訓(xùn)位移積分盡量用梯形或更高階方法不然算這種高空滑行問題會(huì)出現(xiàn)肉眼可見的偏差。更有意思的是打印“達(dá)到最高點(diǎn)的時(shí)間”。解析上滑行段時(shí)間 t_coast v1/g 3239.6/9.8 ≈ 330.6秒加上動(dòng)力段80秒總時(shí)間約410.6秒。這意味著在發(fā)動(dòng)機(jī)熄火后火箭還要繼續(xù)向上漂5分半鐘才抵達(dá)頂點(diǎn)。許多初算者拿到623km這個(gè)數(shù)字時(shí)總以為它是燒完燃料那一瞬間的高度——錯(cuò)?;鸺?0秒燒完燃料時(shí)只有88km真正的頂點(diǎn)在約6分50秒時(shí)才出現(xiàn)。所以看遙測(cè)數(shù)據(jù)時(shí)“關(guān)機(jī)點(diǎn)速度”比“關(guān)機(jī)點(diǎn)高度”更能判斷最終彈道高度。4.3 什么時(shí)候該相信這個(gè)例題解析模型做了大量簡(jiǎn)化我把邊界條件講透。忽略空氣阻力對(duì)低空段影響極大真實(shí)火箭在30km以下會(huì)受到明顯動(dòng)壓和阻力最大高度會(huì)顯著縮水重力加速度取常數(shù)而624km高度上實(shí)際重力已經(jīng)降到約8.1m/s2滑行段后半段會(huì)比模型“更省力”但影響量級(jí)在10%以內(nèi)地球自轉(zhuǎn)給火箭的初始東向速度在垂直發(fā)射模型里用不上但如果算入軌它是一項(xiàng)免費(fèi)的橫向速度增量。所以例題的價(jià)值不在精確預(yù)報(bào)而在于隔離出重力損失這一單一因素讓你看清量級(jí)。做工程估算時(shí)解析解當(dāng)初步骨架數(shù)值積分加氣動(dòng)模型當(dāng)修正兩者配合才是正確姿勢(shì)。5. 常見誤區(qū)與排查實(shí)錄5.1 最容易被繞進(jìn)去的五個(gè)坑常見誤區(qū)正確理解最大高度出現(xiàn)在燃料燒完瞬間最高點(diǎn)出現(xiàn)在關(guān)機(jī)后的滑行段速度減到0才到頂點(diǎn)直接用 h?at2 算動(dòng)力段高度加速度隨質(zhì)量變化必須積分或逐段累加重力損失 能量白白浪費(fèi)部分轉(zhuǎn)化為勢(shì)能但在速度預(yù)算口徑里確實(shí)是損失推重比越大一定越好理想例題里是真實(shí)工程受結(jié)構(gòu)過載、發(fā)動(dòng)機(jī)增重約束忽略初始推重比是否大于1推重比≤1時(shí)初始加速度≤0火箭連離地都做不到這五條我都在實(shí)際教學(xué)和自算中見過。第一條最經(jīng)典拿到623km后第一反應(yīng)往往是“燃料燒完才88km后面的高度哪來的”。答案就在滑行段。第二條是計(jì)算習(xí)慣問題很多初學(xué)朋友慣性套用勻變速公式結(jié)果動(dòng)力段高度差了近30km再一平方放大總高度千差萬別。第三條值得多說一句。“重力損失”損失的是火箭方程里的速度預(yù)算不是熱力學(xué)意義上的能量。被重力抵消的那部分推力確實(shí)作為勢(shì)能存進(jìn)了火箭的高度里——這就是為什么火箭能到達(dá)高位置。但在判斷能否入軌、能飛多高的“速度指標(biāo)”上這筆開銷無法參與最終速度所以工程上仍然叫損失。它不是無用功而是預(yù)算被劃走。5.2 快速自查你的推導(dǎo)是否靠譜你算完后可以用三個(gè)辦法快速檢查量綱檢查任何公式中的每一項(xiàng)都必須是m/s或m不能出現(xiàn)m2/s之類混搭項(xiàng)。極限檢查如果質(zhì)量流率趨近于0燃燒時(shí)間趨近無窮實(shí)際末速度應(yīng)該趨近一個(gè)很糟糕的值甚至無法起飛如果噴氣速度趨近無窮重力損失占比趨近0。能量復(fù)核滑行段最高點(diǎn)處?·v12應(yīng)該恰好等于g·h2把這個(gè)代入算一遍如果兩邊不相等說明前面的速度或高度公式有問題。還有一個(gè)工程習(xí)慣在跑數(shù)值積分時(shí)把動(dòng)力段結(jié)束時(shí)刻的v、h、m打印出來和解析公式算出的v1、h1對(duì)比。如果這三項(xiàng)都對(duì)得上后面滑行段基本不會(huì)錯(cuò)。我每次推導(dǎo)的最后一公里都是靠這種“打印中間狀態(tài)”的習(xí)慣來兜底。6. 最后再聊點(diǎn)個(gè)人經(jīng)驗(yàn)我第一次算這類題時(shí)也覺得“既然有空氣阻力那重力損失這事肯定沒那么嚴(yán)重”。直到我把方案A和方案B放一起算完才意識(shí)到重力損失才是那個(gè)能把射高砍掉三分之一的大頭空氣阻力在低空段的貢獻(xiàn)反而更像是疊加修正。后來我?guī)腿斯浪闾娇栈鸺湍P突鸺淖畲蟾叨绕鹗疾襟E永遠(yuǎn)是先評(píng)估發(fā)動(dòng)機(jī)推重比再算燃燒時(shí)間然后立刻估計(jì)重力損失的量級(jí)。判斷一枚火箭能飛多高與其去精算阻力系數(shù)不如先把重力損失這筆賬記牢。如果你也打算拿這個(gè)流程去估算自己的模型火箭我建議在發(fā)射前做一次地面靜推力測(cè)試至少測(cè)出平均推力和真實(shí)燃燒時(shí)間然后代入這套框架算一遍。你會(huì)發(fā)現(xiàn)“為什么同樣的發(fā)動(dòng)機(jī)有人裝出2km射高有人只能上300m”——推力一致的情況下多出來的那部分火箭重量要么把初始推重比壓到1附近要么把燃燒時(shí)間拖長(zhǎng)到重力損失爆炸。這道例題教給我的說到底就一句話想飛得更高你必須先和重力把賬算清楚清楚到既不幻想繞開它也不用蠻力挑戰(zhàn)它。