法:航天軌道設(shè)計(jì)中的連續(xù)變形求解策略)
做軌道轉(zhuǎn)移設(shè)計(jì)時(shí)我經(jīng)常被問(wèn)到一個(gè)問(wèn)題從A點(diǎn)到B點(diǎn)到底有多少種飛法如果只看二體動(dòng)力學(xué)答案是——無(wú)窮多種。初速度大小、方向、轉(zhuǎn)移時(shí)間、中途是否變軌每一個(gè)參數(shù)的變化都會(huì)產(chǎn)生一條不同的軌跡。但真正有意思的問(wèn)題不是“有多少種”而是“這些軌跡之間能不能連續(xù)地相互轉(zhuǎn)化”。同倫Homotopy就是研究這種連續(xù)轉(zhuǎn)化的數(shù)學(xué)工具。它最初來(lái)自拓?fù)鋵W(xué)討論的是兩個(gè)映射或兩條路徑能否在不撕裂、不跳躍的前提下通過(guò)連續(xù)形變彼此過(guò)渡。后來(lái)我發(fā)現(xiàn)這個(gè)“能不能連續(xù)變過(guò)去”的思路在航天軌道動(dòng)力學(xué)里極其好用軌道機(jī)動(dòng)方案的初值設(shè)計(jì)、Lambert問(wèn)題的多解跟蹤、軌道族之間的參數(shù)化掃描本質(zhì)上都在處理同一類問(wèn)題——從一個(gè)已知解出發(fā)沿著一條連續(xù)路徑到達(dá)一個(gè)原本很難直接求解的目標(biāo)解。這篇文章我會(huì)先用橡皮泥的比喻把同倫講透再落到三個(gè)具體航天場(chǎng)景里最后給出同倫延續(xù)法的完整數(shù)值實(shí)操流程和我在工程中踩過(guò)的坑。適合正在做軌道設(shè)計(jì)、任務(wù)規(guī)劃或者單純想了解純數(shù)學(xué)工具如何“落地”的人。1. 同倫到底是什么從橡皮泥到軌道曲線1.1 直覺(jué)版理解連續(xù)形變與橡皮泥拓?fù)鋵W(xué)里有一個(gè)經(jīng)典說(shuō)法在拓?fù)鋵W(xué)家眼里咖啡杯和甜甜圈是同一個(gè)東西。原因是它們都有一個(gè)“洞”只要你不撕裂、不粘合就可以把咖啡杯的杯身捏扁、拉長(zhǎng)、彎成一個(gè)圓環(huán)最終變成甜甜圈的形狀。這個(gè)連續(xù)捏的過(guò)程就是一次同倫。把這種直覺(jué)搬到軌道上假設(shè)你有一條從近地軌道到目標(biāo)軌道的轉(zhuǎn)移軌跡只要在形變過(guò)程中不出現(xiàn)“斷裂”——比如軌跡突然跳到一個(gè)完全不相關(guān)的狀態(tài)——那么這條軌跡就可以通過(guò)連續(xù)調(diào)整某些參數(shù)平滑地變成另一條軌跡。兩條軌跡之間如果存在這種連續(xù)形變就稱它們同倫等價(jià)。這里的關(guān)鍵詞是“連續(xù)”。軌道動(dòng)力學(xué)里的方程都是連續(xù)微分方程的解軌跡本身是連續(xù)的但解的“參數(shù)空間”不一定是連通的。你可能遇到這種情況目標(biāo)軌道明明存在但在參數(shù)空間里和當(dāng)前已知解隔著一道“墻”直接迭代求解永遠(yuǎn)發(fā)散。同倫要做的就是找到一條繞過(guò)這道墻的連續(xù)路徑。1.2 數(shù)學(xué)定義與記號(hào)嚴(yán)謹(jǐn)一點(diǎn)說(shuō)設(shè) f 和 g 是從拓?fù)淇臻g X 到 Y 的兩個(gè)連續(xù)映射。如果存在一個(gè)連續(xù)映射H: X × [0,1] → Y使得對(duì)所有 x ∈ X都有H(x, 0) f(x)H(x, 1) g(x)那么稱 f 同倫于 g記作 f ? g。這里的 H 就是同倫映射參數(shù) λ ∈ [0,1] 通常叫同倫參數(shù)。用更工程化的語(yǔ)言翻譯λ0 對(duì)應(yīng)一個(gè)你完全已知、已經(jīng)求解成功的“簡(jiǎn)單問(wèn)題”λ1 對(duì)應(yīng)你真正想解的“目標(biāo)問(wèn)題”。當(dāng) λ 從0連續(xù)增大到1時(shí)H(x, λ) 把簡(jiǎn)單問(wèn)題的解連續(xù)地“推”向目標(biāo)問(wèn)題的解。這個(gè)定義最精妙的地方在于H 本身不需要直接解出目標(biāo)問(wèn)題它只需要保證“每一步都離上一步足夠近”。我在實(shí)際使用中常常把 H 理解成一座橋橋的這頭是已知解橋的那頭是目標(biāo)解橋的每一段都足夠平緩讓牛頓迭代法這種局部算法可以一步一步往前走。1.3 從拓?fù)涞杰壍罏槭裁催B續(xù)形變?cè)诤教炖镉幸饬x有人會(huì)問(wèn)拓?fù)鋵W(xué)里的同倫聽(tīng)起來(lái)很抽象跟火箭上天有什么關(guān)系關(guān)系很大。航天軌道動(dòng)力學(xué)里的核心問(wèn)題幾乎全是強(qiáng)非線性問(wèn)題。二體軌道雖然有解析解但一旦涉及多體引力、推力幅值約束、時(shí)間約束方程就變成非線性方程組解的存在性、唯一性、連續(xù)性都成了問(wèn)題。直接做法是從一個(gè)猜測(cè)初值出發(fā)做牛頓迭代但非線性方程的迭代收斂域往往很小初值稍微差一點(diǎn)就飛到天邊去了。同倫給了你一個(gè)非常實(shí)用的策略與其直接猜目標(biāo)解不如從已知解出發(fā)人為構(gòu)造一條從已知到未知的連續(xù)路徑然后沿著路徑一步步走。每一步只需要解一個(gè)“和上一步很接近”的小問(wèn)題迭代自然容易收斂。這種方法在數(shù)學(xué)上叫同倫延續(xù)法Homotopy Continuation Method在工程上叫連續(xù)法Continuation Method本質(zhì)上都是同一個(gè)思路。另外一個(gè)更深層的價(jià)值是拓?fù)鋵W(xué)告訴你某些形變“在原理上就不可能”。比如航天器姿態(tài)控制中廣泛使用的歐拉角描述存在奇異性萬(wàn)向節(jié)鎖定這本質(zhì)上不是坐標(biāo)選取的問(wèn)題而是 SO(3) 群本身的拓?fù)湫再|(zhì)決定的。理解了這一點(diǎn)你就不會(huì)再浪費(fèi)時(shí)間嘗試“找到一套全球無(wú)奇異歐拉角”而是改用四元數(shù)或其他全局描述。同倫幫你判斷“這件事能不能做到”比教你怎么做更值錢(qián)。2. 同倫在航天軌道動(dòng)力學(xué)中的三類典型應(yīng)用場(chǎng)景2.1 路徑同倫軌道機(jī)動(dòng)方案的連續(xù)變形第一種最直觀的應(yīng)用是把整條軌道轉(zhuǎn)移軌跡當(dāng)作一個(gè)“映射”研究它能否連續(xù)形變到另一條軌跡。舉個(gè)例子。你設(shè)計(jì)了一條從低軌到高軌的轉(zhuǎn)移方案原本是標(biāo)準(zhǔn)的霍曼轉(zhuǎn)移兩次切向脈沖第一次抬遠(yuǎn)地點(diǎn)第二次圓化。現(xiàn)在任務(wù)約束變了要求轉(zhuǎn)移時(shí)間縮短或者要求中途經(jīng)過(guò)某個(gè)特定的空間方向。這時(shí)候你的第一反應(yīng)可能是重新求解一個(gè)新的轉(zhuǎn)移問(wèn)題但如果用同倫的視角你可以把“原方案的軌道要素”和“新方案的軌道要素”分別放在 λ0 和 λ1 兩端構(gòu)造一個(gè)同倫路徑a(λ) a? λ(a? - a?) e(λ) e? λ(e? - e?) i(λ) i? λ(i? - i?)然后從原方案出發(fā)把 λ 從0慢慢增加到1。每增加一小步就用上一步的解作為初值快速迭代收斂到當(dāng)前 λ 對(duì)應(yīng)的解。最終你得到的不是“從零開(kāi)始設(shè)計(jì)的新軌道”而是“從原軌道連續(xù)變形而來(lái)的新軌道”。兩者數(shù)學(xué)上等價(jià)但后者在工程上有一個(gè)巨大優(yōu)勢(shì)中間每一步都是可行解你可以隨時(shí)停下來(lái)評(píng)估而不是到最后才發(fā)現(xiàn)整條路徑失敗。2.2 非線性方程多解跟蹤Lambert問(wèn)題的同倫延續(xù)Lambert問(wèn)題是軌道動(dòng)力學(xué)的經(jīng)典問(wèn)題給定兩個(gè)位置矢量 r?、r?以及轉(zhuǎn)移時(shí)間 Δt求解滿足二體動(dòng)力學(xué)的轉(zhuǎn)移軌道初速度 v?。這個(gè)問(wèn)題的方程是高度非線性的而且對(duì)于同一組輸入可能存在多個(gè)解——因?yàn)檗D(zhuǎn)移軌道可以是橢圓、拋物線、雙曲線飛行的圈數(shù)也可以不同。我記得第一次實(shí)現(xiàn)Lambert求解器時(shí)被多解問(wèn)題折磨得夠嗆給定同一組 r?、r? 和 Δt迭代結(jié)果經(jīng)常會(huì)跳到“另一個(gè)解”上而且你根本不知道當(dāng)前收斂到的是第幾圈的解。后來(lái)我意識(shí)到這正是同倫延續(xù)法的主場(chǎng)。做法是固定 r?、r?讓轉(zhuǎn)移時(shí)間作為同倫參數(shù)從某個(gè)已知解出發(fā)逐步增大 Δt。Δt 很小的時(shí)候轉(zhuǎn)移軌道趨向于直線連接或小偏心率橢圓解的性質(zhì)比較清晰每增大一點(diǎn) Δt新的解都會(huì)落在上一步解的附近。這樣一路跟蹤下來(lái)你可以把某個(gè)特定分支的解完整地“拽”出來(lái)而不是讓求解器在多個(gè)解之間反復(fù)橫跳。這個(gè)技巧在交會(huì)對(duì)接的軌道規(guī)劃里特別有用因?yàn)榻粫?huì)問(wèn)題往往對(duì)轉(zhuǎn)移時(shí)間有苛刻要求而且需要明確知道“在當(dāng)前時(shí)間約束下哪一支解是燃料最優(yōu)的”。用同倫跟蹤完整條解分支后你可以畫(huà)出一張“轉(zhuǎn)移時(shí)間 vs 初始速度”的曲線所有候選解一目了然。2.3 連續(xù)參數(shù)化軌道族圓到橢圓、共面到異面第三種場(chǎng)景是軌道族的參數(shù)化掃描。很多時(shí)候你不是在解一個(gè)單獨(dú)的問(wèn)題而是在分析一族軌道隨著某個(gè)參數(shù)變化的行為。比如偏心率從 0圓軌道連續(xù)增加到 0.9大橢圓軌道軌道能量、近地點(diǎn)速度怎么變傾角從 0° 連續(xù)增加到 60°軌道面的朝向怎么變半長(zhǎng)軸從近地軌道連續(xù)增加到地球同步軌道高度轉(zhuǎn)移軌道的相位角怎么變?nèi)绻麤](méi)有同倫思維你可能會(huì)在每個(gè)參數(shù)點(diǎn)上獨(dú)立求解然后祈禱相鄰點(diǎn)的解差得不要太多。但軌道根數(shù)之間存在耦合獨(dú)立求解很容易發(fā)散。正確做法是把參數(shù)本身當(dāng)作同倫參數(shù)從已知點(diǎn)出發(fā)用上一步的解初始化下一步的迭代。比如掃描 e 從 0 到 0.8每一步解開(kāi)普勒方程 E - e sin E M。圓軌道時(shí) e0開(kāi)普勒方程退化成一個(gè)線性方程解就是 EM這是已知解。然后 e 每增加 0.01以上一步的 E 作為初始猜測(cè)去做牛頓迭代。你會(huì)發(fā)現(xiàn)即使 e 增大到 0.8 附近迭代依然收斂得非常快因?yàn)槊恳徊降某踔刀甲銐蚝?。這就是同倫思想在最樸素層面的勝利好初值來(lái)自連續(xù)形變而非盲目猜測(cè)。2.4 姿態(tài)控制中的拓?fù)湔系K同倫告訴你什么做不到順帶提一個(gè)和軌道動(dòng)力學(xué)關(guān)系密切、但容易被忽略的領(lǐng)域姿態(tài)控制。航天器姿態(tài)運(yùn)動(dòng)發(fā)生在三維旋轉(zhuǎn)群 SO(3) 上而 SO(3) 的拓?fù)浣Y(jié)構(gòu)決定了某些連續(xù)的姿態(tài)切換在原理上就是不可能的。最著名的例子是不存在一個(gè)處處非奇異的、用三個(gè)參數(shù)全局描述 SO(3) 的坐標(biāo)系統(tǒng)。歐拉角的萬(wàn)向節(jié)鎖定不是一個(gè)“實(shí)現(xiàn)不夠好”的問(wèn)題而是拓?fù)鋵W(xué)定理直接給出的結(jié)論。同倫在這里的價(jià)值是提供了一種判斷工具如果你的控制目標(biāo)要求姿態(tài)軌跡從一個(gè)狀態(tài)連續(xù)變化到另一個(gè)狀態(tài)你需要先確認(rèn)這兩點(diǎn)在 SO(3) 的同一“同倫類”中否則任何連續(xù)控制律都不可能實(shí)現(xiàn)。這也是為什么現(xiàn)代航天器姿態(tài)控制普遍使用四元數(shù)單位四元數(shù)構(gòu)成 S3 空間是 SO(3) 的二重覆蓋——因?yàn)?S3 是單連通的沒(méi)有 SO(3) 那種“洞”帶來(lái)的拓?fù)湔系K。3. 同倫延續(xù)法在軌道設(shè)計(jì)中的完整實(shí)操流程3.1 選擇同倫構(gòu)造方式凸組合、自然參數(shù)與變量松弛同倫延續(xù)法的第一步是構(gòu)造一個(gè)從已知問(wèn)題到目標(biāo)問(wèn)題的映射 H(x, λ)。構(gòu)造方式直接影響數(shù)值計(jì)算的穩(wěn)定性和效率我把常用的三種列出來(lái)。第一種是凸組合。設(shè) F?(x) 0 是已知問(wèn)題F?(x) 0 是目標(biāo)問(wèn)題構(gòu)造H(x, λ) (1 - λ)F?(x) λF?(x) 0當(dāng) λ0 時(shí) H(x,0) F?(x)當(dāng) λ1 時(shí) H(x,1) F?(x)。這種構(gòu)造簡(jiǎn)單直接但有個(gè)隱患如果 F? 和 F? 的非線性強(qiáng)度差異太大中間路徑可能出現(xiàn)額外的分支或奇異點(diǎn)。我在軌道轉(zhuǎn)移問(wèn)題中很少直接用純凸組合而是更喜歡下面兩種。第二種是自然參數(shù)加載。把目標(biāo)物理參數(shù)本身作為 λ 的線性函數(shù)直接嵌入方程。比如做軌道轉(zhuǎn)移時(shí)把目標(biāo)軌道半長(zhǎng)軸設(shè)成a(λ) a? λ(a? - a?)然后求解每個(gè) λ 下的軌道能量方程 v2 μ(2/r - 1/a(λ))。這樣 H 的方程形式始終不變變的只是問(wèn)題里的常數(shù)。這種方法貼近物理直覺(jué)路徑通常比較平滑是我在實(shí)際工作中最常用的一種。第三種是變量松弛。如果在目標(biāo)問(wèn)題里有一項(xiàng)特別強(qiáng)的非線性項(xiàng)導(dǎo)致迭代困難可以在這一項(xiàng)前面乘一個(gè)權(quán)重因子 (1-λ)讓它在 λ0 時(shí)完全不生效、λ1 時(shí)完全生效。這有點(diǎn)像一個(gè)“數(shù)值開(kāi)關(guān)”先把難問(wèn)題變成容易問(wèn)題再?gòu)娜菀讍?wèn)題出發(fā)逐步把難度“加回去”。在求解含攝動(dòng)的軌道遞推問(wèn)題時(shí)我經(jīng)常用這種方法測(cè)試攝動(dòng)項(xiàng)的影響。選擇構(gòu)造方式的原則其實(shí)很簡(jiǎn)單**路徑上的每一步都應(yīng)該是容易求解的而且相鄰兩步的解要足夠接近。**如果某個(gè) λ 值附近出現(xiàn)迭代困難首先檢查是不是同倫構(gòu)造本身引入了人為的奇異性。3.2 數(shù)值路徑跟蹤預(yù)測(cè)-校正法的實(shí)現(xiàn)與步長(zhǎng)控制同倫延續(xù)法的數(shù)值核心是沿著 H(x, λ) 0 的解曲線一步步前進(jìn)。最經(jīng)典的實(shí)現(xiàn)是預(yù)測(cè)-校正法Predictor-Corrector思路和射擊時(shí)的提前量計(jì)算類似先猜下一步大概在哪再用迭代把它拉回到精確解曲線上。預(yù)測(cè)步的核心是對(duì) λ 求導(dǎo)。設(shè) H(x(λ), λ) 0 對(duì) λ 全微分?H/?x · dx/dλ ?H/?λ 0所以預(yù)測(cè)方向是dx/dλ -[?H/?x]?1 · ?H/?λ給定當(dāng)前解 x_k 和當(dāng)前 λ_k先預(yù)測(cè)x_pred x_k dx/dλ · Δλ然后用牛頓迭代做校正求解 H(x_pred, λ_k Δλ) 0。我把完整流程整理成下面的偽代碼參數(shù)可以參考我的經(jīng)驗(yàn)值輸入: 已知解 x0, 目標(biāo)同倫參數(shù) λ_target 1 初始化: x x0, λ 0, 初始步長(zhǎng) h 0.1, 最小步長(zhǎng) h_min 1e-5 while λ 1: # --- 預(yù)測(cè) --- J ?H/?x 在 (x, λ) 處 dx_dλ -J?1 · ?H/?λ λ_new min(λ h, 1) x_pred x dx_dλ * (λ_new - λ) # --- 校正 --- for k in 1..10: J ?H/?x 在 (x_pred, λ_new) 處 δ solve(J, -H(x_pred, λ_new)) x_pred x_pred δ if ||δ|| tol: break # --- 判斷成功與步長(zhǎng)調(diào)整 --- if 校正收斂: x x_pred; λ λ_new if 迭代次數(shù) 3: h min(h * 1.5, 0.2) else: h h / 2 if h h_min: 報(bào)錯(cuò)并退出步長(zhǎng)控制是整個(gè)流程里最需要經(jīng)驗(yàn)的地方。我一開(kāi)始用固定步長(zhǎng)結(jié)果要么是步長(zhǎng)太大導(dǎo)致校正不收斂要么是步長(zhǎng)太小浪費(fèi)算力。后來(lái)改成自適應(yīng)策略如果校正階段 3 次迭代內(nèi)就收斂了說(shuō)明步長(zhǎng)還有余量下次放大 1.5 倍如果迭代超過(guò) 8 次才收斂說(shuō)明步長(zhǎng)偏大下次減半。這個(gè)策略非常簡(jiǎn)單但在絕大多數(shù)軌道問(wèn)題上都工作得很好。另外一個(gè)要注意的點(diǎn)是雅可比矩陣的更新頻率。在接近線性區(qū)域的軌道族掃描中雅可比矩陣變化很慢不需要每步都重新計(jì)算可以用 Broyden 擬牛頓更新來(lái)偷懶。但在強(qiáng)非線性區(qū)域比如偏心率接近 1或者轉(zhuǎn)移時(shí)間接近臨界值必須每步重新計(jì)算精確雅可比矩陣否則預(yù)測(cè)方向一錯(cuò)后面全崩。3.3 一個(gè)可以復(fù)現(xiàn)的簡(jiǎn)化算例低軌到高軌的轉(zhuǎn)移為了把上面的理論落到實(shí)地我寫(xiě)一個(gè)簡(jiǎn)化但可以復(fù)現(xiàn)的算例。假設(shè)中心天體引力常數(shù) μ 398600.4418 km3/s2初始軌道為圓軌道半徑 a? 6571 km約 200 km 近地軌道高度。目標(biāo)軌道為高軌半徑 a? 42164 km接近地球同步軌道半徑。在二體模型下做一次單脈沖軌道轉(zhuǎn)移。這個(gè)問(wèn)題的方程是轉(zhuǎn)移軌道的能量由半長(zhǎng)軸 a 決定脈沖施加點(diǎn)的速度滿足v(λ) sqrt(μ * (2/r - 1/a(λ)))其中 r a?在初始圓軌道上施加脈沖a(λ) a? λ(a? - a?)。我們跟蹤的目標(biāo)是隨著 λ 從 0 增大到 1轉(zhuǎn)移軌道近地點(diǎn)速度 v(λ) 如何變化。當(dāng) λ0 時(shí)a(0) a?此時(shí) v sqrt(μ/a?) 7.79 km/s這是已知的圓軌道速度。當(dāng) λ1 時(shí)a(1) a?v sqrt(μ(2/a? - 1/a?))。代入數(shù)值v_target sqrt(398600.4418 * (2/6571 - 1/42164)) ≈ 10.25 km/s同倫延續(xù)法要做的事情就是從 7.79 km/s 出發(fā)逐步逼近 10.25 km/s每一步都用上一步的值作為初猜。實(shí)際上這個(gè)例子過(guò)于簡(jiǎn)單你甚至可以直接算解析解但它的價(jià)值在于讓你看清楚整個(gè)跟蹤過(guò)程每個(gè) λ 點(diǎn)上的迭代從初值到收斂只需要 2-3 步?jīng)]有任何發(fā)散的可能性。更有意思的版本是把目標(biāo)問(wèn)題改成“轉(zhuǎn)移時(shí)間固定為 5 小時(shí)的 Lambert 問(wèn)題”。這時(shí) H(x, λ) 是轉(zhuǎn)移時(shí)間約束下的速度求解方程沒(méi)有解析解你必須依賴同倫延續(xù)法從短轉(zhuǎn)移時(shí)間已知解逐步逼近 5 小時(shí)。我在這個(gè)算例上測(cè)試過(guò)當(dāng) λ 接近 1 時(shí)解曲線會(huì)出現(xiàn)一次明顯的彎曲——這就是“多解分支”的信號(hào)。如果你不注意跟蹤方向很容易跳到另一支解上。保持步長(zhǎng)在 0.05 以下基本可以穩(wěn)定跟蹤到目標(biāo)分支。4. 工程應(yīng)用中的典型坑位與排查經(jīng)驗(yàn)4.1 同倫參數(shù)非單調(diào)掉頭與回環(huán)同倫延續(xù)法最常見(jiàn)的一個(gè)坑是 λ 在跟蹤過(guò)程中不再單調(diào)增加。你可能正在開(kāi)心地一路推進(jìn)突然發(fā)現(xiàn) λ 開(kāi)始減小解曲線在參數(shù)空間里畫(huà)了一個(gè)回環(huán)。這不是 bug而是解曲線本身的幾何性質(zhì)——它可能真的是一個(gè)環(huán)。解決思路是弧長(zhǎng)參數(shù)化。不再把 λ 當(dāng)作自變量而是引入弧長(zhǎng) s把 λ 和解分量 x 一起作為未知數(shù)沿著弧長(zhǎng)方向推進(jìn)。增廣后的雅可比矩陣維度會(huì)多一列但換來(lái)的是對(duì)回環(huán)、掉頭等情況的天然魯棒性。我在處理轉(zhuǎn)移時(shí)間掃描問(wèn)題時(shí)一般會(huì)直接從一開(kāi)始就做弧長(zhǎng)參數(shù)化省得中途再改。4.2 分支點(diǎn)與解分支選擇當(dāng)雅可比矩陣 ?H/?x 在某個(gè)點(diǎn)變成奇異矩陣時(shí)說(shuō)明你可能遇到了分支點(diǎn)——多條解曲線在這里交匯。這是整個(gè)方法中最微妙的地方。我遇到過(guò)的情況是在 Lambert 問(wèn)題中跟蹤轉(zhuǎn)移時(shí)間的解曲線時(shí)兩條不同轉(zhuǎn)移圈數(shù)的解會(huì)在某個(gè)臨界轉(zhuǎn)移時(shí)間處靠得非常近幾乎要交疊在一起。處理方法有三個(gè)層次。第一檢測(cè)奇異在每一步計(jì)算雅可比矩陣的條件數(shù)如果條件數(shù)突然飆升幾個(gè)數(shù)量級(jí)就有理由懷疑接近分支點(diǎn)。第二計(jì)算切向量在分支點(diǎn)附近選取與當(dāng)前切向量夾角最小的解分支繼續(xù)推進(jìn)。第三如果實(shí)在繞不過(guò)去換一套同倫構(gòu)造從另一個(gè)方向逼近目標(biāo)解——有時(shí)候問(wèn)題本身導(dǎo)致的奇異性換條路走反而更順。4.3 物理約束的嵌入方式數(shù)值上可行、物理上不可行是軌道設(shè)計(jì)里經(jīng)常遇到的尷尬事。同倫路徑上的每一步都是數(shù)學(xué)解但不代表這條路徑真的可以用火箭發(fā)動(dòng)機(jī)實(shí)現(xiàn)。典型問(wèn)題包括轉(zhuǎn)移軌道穿過(guò)中心天體內(nèi)部、中途需要負(fù)的推力幅值、轉(zhuǎn)移時(shí)間超出任務(wù)約束。我現(xiàn)在的習(xí)慣是在構(gòu)造同倫時(shí)就加入物理約束條件而不是等解出來(lái)后再檢查。常見(jiàn)做法是用修正方程組加約束罰項(xiàng)或者在每一步校正時(shí)檢查約束并將不滿足的解直接丟棄。比如在跟蹤軌道族時(shí)如果某一步的近地點(diǎn)距離小于中心天體半徑就停止當(dāng)前步進(jìn)縮小步長(zhǎng)嘗試從另一個(gè)分支繞過(guò)去。記住數(shù)學(xué)上的連續(xù)不等于工程上的可達(dá)。4.4 常見(jiàn)問(wèn)題速查表現(xiàn)象可能原因解決辦法跟蹤到一半 λ 不再增加甚至減小解曲線出現(xiàn)回環(huán)改用弧長(zhǎng)參數(shù)化以弧長(zhǎng)為步進(jìn)變量校正階段牛頓迭代發(fā)散步長(zhǎng)過(guò)大或接近分支點(diǎn)步長(zhǎng)減半檢查雅可比條件數(shù)嘗試線搜索解穿過(guò)中心天體內(nèi)部未考慮物理約束在方程中嵌入近地點(diǎn)距離約束不同解分支交叉無(wú)法判斷該走哪條雅可比矩陣接近奇異計(jì)算切向量方向改變同倫構(gòu)造方式計(jì)算量過(guò)大每步都要重新算雅可比雅可比更新過(guò)于頻繁在緩變區(qū)域改用 Broyden 擬牛頓更新初始步長(zhǎng)選不好反復(fù)失敗缺少對(duì)非線性強(qiáng)度的估計(jì)先跑一小段觀察校正迭代次數(shù)再自適應(yīng)調(diào)整最后再分享一個(gè)我在實(shí)際項(xiàng)目中的體會(huì)。同倫延續(xù)法真正難的不是寫(xiě)代碼而是判斷“用什么作為同倫參數(shù)”。我一開(kāi)始總喜歡用時(shí)間、推力這些明顯的物理量后來(lái)發(fā)現(xiàn)最優(yōu)的參數(shù)往往是問(wèn)題里“隱藏的連續(xù)性來(lái)源”。比如在交會(huì)軌道規(guī)劃中用目標(biāo)軌道面的傾角作為同倫參數(shù)比直接掃轉(zhuǎn)移時(shí)間要穩(wěn)定得多。做同倫分析之前先把問(wèn)題的所有參數(shù)列出來(lái)想想哪個(gè)參數(shù)變化時(shí)解的變化最平緩那個(gè)參數(shù)往往就是最好的同倫變量。另外一個(gè)小技巧在做軌道族的批量計(jì)算時(shí)同倫延續(xù)法的步長(zhǎng)不需要每次從固定值開(kāi)始。記錄上一步成功收斂的步長(zhǎng)作為下一步的初始步長(zhǎng)可以顯著減少自適應(yīng)調(diào)整的次數(shù)。對(duì)于成千上萬(wàn)條軌道族曲線的參數(shù)掃描這個(gè)小改進(jìn)能省下不少時(shí)間。