與避坑指南)
簡介一份基于Runge-kutta法的高超聲速滑翔飛行器彈道仿真Matlab代碼面向本科、碩士階段飛行器設(shè)計與導(dǎo)航控制相關(guān)教研學(xué)習(xí)。資源聚焦彈道生成與可視化涵蓋坐標(biāo)轉(zhuǎn)換、運動學(xué)方程、Runge-kutta積分、軌跡生成與繪圖等完整流程適合需要在Matlab中復(fù)現(xiàn)高超聲速滑翔彈道模型的初學(xué)者和研究者。包內(nèi)共15個文件其中10個m腳本實現(xiàn)主要功能4個png圖片展示仿真結(jié)果曲線與軌跡視圖1個mat文件保存預(yù)設(shè)軌跡或仿真數(shù)據(jù)壓縮包整體僅56KB結(jié)構(gòu)精簡便于快速理解代碼邏輯。當(dāng)前已有2024人學(xué)習(xí)瀏覽表明該代碼在同類基礎(chǔ)教程中具備一定參考價值。通過這份代碼讀者可以掌握高超聲速滑翔飛行器彈道仿真從坐標(biāo)變換到數(shù)值積分的完整鏈路并在此基礎(chǔ)上開展參數(shù)修改與擴展研究。腳本注釋清晰適合教研場景中對照教材進行實踐驗證。1. Runge-Kutta與高超聲速滑翔飛行器彈道仿真這份MATLAB代碼憑什么能直接跑做高超聲速滑翔飛行器HGV彈道仿真時很多初學(xué)者第一反應(yīng)是去找成熟的商業(yè)軟件結(jié)果發(fā)現(xiàn)要么被License卡住要么被自帶的算例帶偏——壓根不知道自己該看哪個模塊。這份基于Runge-Kutta法實現(xiàn)的高超聲速滑翔飛行器彈道MATLAB代碼解決的正是這個問題它把氣動模型、地球模型、運動方程和數(shù)值積分器串聯(lián)成一條完整的可執(zhí)行鏈路。你不用自己從零推導(dǎo)坐標(biāo)系也不用糾結(jié)RK4步長到底取多少才不發(fā)散代碼里已經(jīng)把結(jié)果算給你看了。適合正在做飛行器總體設(shè)計課設(shè)、彈道方案論證或者想把文獻里的三自由度質(zhì)點模型快速跑通的同學(xué)。我在某高校課題組見過太多類似版本這一份是少數(shù)能直接改參數(shù)、畫彈道、出報告的。2. 從運動方程到狀態(tài)數(shù)組HGV彈道模型在MATLAB里如何落地2.1 三自由度還是六自由度這份代碼的建模定位拿到代碼第一時間先搞清楚它建的是幾自由度模型。絕大多數(shù)彈道仿真資源用三自由度質(zhì)點模型這份代碼也不例外。三自由度模型把飛行器當(dāng)作一個具有質(zhì)量、速度和位置的質(zhì)點只在縱向平面內(nèi)考慮受力平衡不涉及姿態(tài)角和角速度。六自由度模型則要加入攻角、側(cè)滑角、滾轉(zhuǎn)角以及對應(yīng)的角速度和轉(zhuǎn)動慣量計算量至少翻一倍而且需要引入舵面偏轉(zhuǎn)指令。對高超聲速滑翔飛行器的彈道特性研究來說三自由度模型已經(jīng)能回答很多核心問題射程夠不夠、熱流峰值出現(xiàn)在什么高度、最大過載大概是多少、末端速度窗口是否滿足要求。如果你要研究姿態(tài)穩(wěn)定和控制律設(shè)計那才需要六自由度。這份代碼的三自由度模型在彈道快速評估階段屬于標(biāo)配。三自由度模型的運動方程核心包括如下部分地心距、經(jīng)度、緯度、速度、航跡傾角和航向角。實際代碼里往往還會做簡化比如忽略地球自轉(zhuǎn)和扁率效應(yīng)或者把它們作為可選項加入。2.2 狀態(tài)數(shù)組的編碼約定與運動方程MATLAB函數(shù)打開代碼包第一件事是找到狀態(tài)量定義和運動方程函數(shù)。常見做法的狀態(tài)數(shù)組編碼如下function dstate hgv_odes(t, state, param) % state [r, lon, lat, V, gamma, chi] % r : 地心距, 單位 m % lon : 經(jīng)度, 單位 rad % lat : 緯度, 單位 rad % V : 速度, 單位 m/s % gamma: 航跡傾角, 單位 rad % chi : 航向角, 單位 rad r state(1); lon state(2); lat state(3); V state(4); gamma state(5); chi state(6); % 提取大氣密度和聲速 [rho, ~, cs] atm_model(r, param); % 提取馬赫數(shù)和氣動系數(shù) Ma V / cs; [CL, CD] aero_coeff(Ma, param.alpha); % 動壓 q 0.5 * rho * V^2; % 重力和升阻加速度分量 g param.mu / r^2; rho_r param.mu / r^2 / (V^2); % 用于航向角方程 % 運動方程 dr V * sin(gamma); dlon V * cos(gamma) * cos(chi) / (r * cos(lat)); dlat V * cos(gamma) * sin(chi) / r; dgamma (q * param.Sref * CL * cos(param.sigma) / param.mass - g) * cos(gamma) / V ... (V * cos(gamma)) / r; dchi q * param.Sref * CL * sin(param.sigma) / (param.mass * V * cos(gamma)); dV - (q * param.Sref * CD) / param.mass - g * sin(gamma); dstate [dr; dlon; dlat; dV; dgamma; dchi]; end這段代碼的關(guān)鍵在于六狀態(tài)量的順序是約定好的。我在實際跑資源里的代碼時發(fā)現(xiàn)有的版本把經(jīng)度和緯度放在最前面有的放在中間如果后續(xù)要接入制導(dǎo)模塊狀態(tài)量索引對不上就會出大問題。建議拿到代碼先運行size(state)看一眼維度再確認狀態(tài)量的物理含義不要因為狀態(tài)量名稱寫的是r就默認它一定是第一個。另一個需要留意的細節(jié)是重力項。這里的g param.mu / r^2用的是中心引力場模型忽略J2項。對于高超聲速滑翔飛行器在中低層大氣的彈道段這樣的誤差在千分之一量級不影響結(jié)論但如果你要算精確入軌窗口那需要加上J2和大氣阻力攝動。2.3 氣動模型與大氣密度從表格數(shù)據(jù)到插值函數(shù)HGV彈道仿真結(jié)果的可靠程度很大程度上取決于氣動系數(shù)插值表做得好不好。這份代碼包里通常附帶一個氣動數(shù)據(jù)文件里面的表格大致是這樣的結(jié)構(gòu)馬赫數(shù)CL(攻角5°)CD(攻角5°)CL(攻角10°)CD(攻角10°)5.00.320.0450.580.0928.00.300.0500.540.09812.00.250.0550.480.10520.00.180.0600.360.112代碼里的氣動插值函數(shù)通常寫成這樣function [CL, CD, Ma] aero_coeff(Ma, alpha_deg) % alpha_deg 為攻角, 單位 deg % 從內(nèi)置的馬赫數(shù)-攻角-氣動系數(shù)表插值 % 馬赫數(shù)斷點 Ma_bp [5.0, 8.0, 12.0, 20.0]; % 攻角斷點 alpha_bp [0, 5, 10, 15]; CL_table zeros(length(Ma_bp), length(alpha_bp)); CD_table zeros(length(Ma_bp), length(alpha_bp)); % ... 從數(shù)據(jù)文件加載表格 ... % 雙線性插值 CL interp2(alpha_bp, Ma_bp, CL_table, alpha_deg, Ma, linear, extrap); CD interp2(alpha_bp, Ma_bp, CD_table, alpha_deg, Ma, linear, extrap); end使用這份代碼時記住interp2第一個參數(shù)是自變量X這里為攻角第二個是自變量Y馬赫數(shù)表格矩陣的維度必須與length(alpha_bp) * length(Ma_bp)匹配否則會報維度錯誤。還有一點容易被忽略用extrap是雙刃劍。當(dāng)馬赫數(shù)超過表格上限時外推值可能非物理比如升力系數(shù)變成負數(shù)。我的習(xí)慣是在調(diào)用氣動函數(shù)前先做一次數(shù)值范圍檢查超過邊界就告警。大氣密度模型方面代碼普遍使用指數(shù)大氣模型也就是rho rho0 * exp(-(r - param.Re) / param.Hs);其中rho0是海平面密度Hs是密度標(biāo)尺高度。這個模型在30-80公里范圍內(nèi)精度可以接受但如果彈道頂點接近100公里指數(shù)模型可能高估阻力兩個量級。想要更精確可以替換成USSA76標(biāo)準(zhǔn)大氣分段模型代碼里的接口預(yù)留了替換空間。3. 積分器選型與實現(xiàn)細節(jié)RK4步長怎么取、用自適應(yīng)還是固定3.1 RK4積分器的主體結(jié)構(gòu)與單步實現(xiàn)Runge-Kutta法有很多個具體版本工程上最常用的是四階Runge-Kutta簡寫為RK4。它每推進一個步長要計算四次導(dǎo)數(shù)函數(shù)權(quán)重系數(shù)按經(jīng)典Butcher表分配。MATLAB自帶的ode45本質(zhì)上是采用了Dormand-Prince對算法的自適應(yīng)RK5內(nèi)部調(diào)用機制和手寫RK4不一樣。這批代碼里如果直接用ode45其實走的是另一種路徑。手寫RK4的單步函數(shù)一般長這樣function state_next rk4_step(f, t, state, dt, param) % 經(jīng)典四階Runge-Kutta單步推進 % f : 運動方程函數(shù)句柄 % t : 當(dāng)前時刻 % state : 當(dāng)前狀態(tài)向量 (6x1) % dt : 固定步長 (秒) % param : 參數(shù)結(jié)構(gòu)體 k1 f(t, state, param); k2 f(t 0.5*dt, state 0.5*dt*k1, param); k3 f(t 0.5*dt, state 0.5*dt*k2, param); k4 f(t dt, state dt*k3, param); state_next state (dt/6) * (k1 2*k2 2*k3 k4); end這里有個容易看漏的細節(jié)k2和k3里的時間參數(shù)是t 0.5*dt狀態(tài)參數(shù)分別加上半步長乘以各自的斜率。如果運動方程函數(shù)里顯式依賴時間t這個寫法才正確如果函數(shù)里不依賴t那時間參數(shù)怎么寫都無所謂但這批HGV彈道代碼的運動方程函數(shù)里通常不顯式依賴時間只有狀態(tài)量相關(guān)項所以這個參數(shù)在函數(shù)體內(nèi)是空轉(zhuǎn)的保留它只是為了保持接口通用。參數(shù)說明dt是積分步長單位秒。對于高超聲速滑翔飛行器典型彈道時間大約1200-2000秒如果要用固定步長取值在0.1秒到1秒之間比較合適。如果取1秒基本能復(fù)現(xiàn)彈道大致走勢取0.5秒可以看到更平滑的過載曲線取0.1秒通常用來做參考解。3.2 自適應(yīng)步長RK45誤差估計與求解器切換固定步長RK4的問題是每一步都可能累積誤差尤其是在大氣密度變化劇烈的滑翔段海拔每下降幾公里密度就翻倍固定步長要么太大發(fā)散要么太小浪費算力。MATLAB里的ode45采用自適應(yīng)步長它用四階和五階兩種估計做差然后根據(jù)相對誤差容差調(diào)整步長。工程上的常見做法是寫成這樣的主循環(huán)function [t_out, state_out] integrate_trajectory(f, t_span, state0, options, param) % 自適應(yīng)步長積分主循環(huán) % 使用MATLAB自帶的ode45求解器 [t_out, state_out] ode45((t, s) f(t, s, param), t_span, state0, options); end對應(yīng)的調(diào)用代碼需要設(shè)置odeset參數(shù)。推薦設(shè)置如下options odeset(RelTol, 1e-6, AbsTol, 1e-8, MaxStep, 2.0, InitialStep, 0.1);各參數(shù)含義如下RelTol是相對誤差容差1e-6 意味著每個分量允許千分之一的相對誤差A(yù)bsTol是絕對誤差容差對接近零的狀態(tài)分量很重要MaxStep限制最大步長防止求解器在大氣平穩(wěn)段把步長拖得過大導(dǎo)致局部插值精度不足InitialStep是第一步的初始步長給一個謹(jǐn)慎的初值可以避免啟動階段的振蕩。我實測下來的經(jīng)驗RelTol從 1e-4 改成 1e-6彈道末端速度的差異大概在 2-3 m/s 左右但如果MaxStep從 2 改成 10同樣的彈道末端經(jīng)緯度會偏出好幾個公里。所以如果你只要看彈道形態(tài)RelTol1e-4就夠了如果要看末端落點散布務(wù)必把MaxStep卡在 1-2 秒之間。3.3 求解器配置與步長邊界從tf、rtol到輸出密度用ode45時還有一個會被忽視的坑輸出點的密度。ode45的默認行為是在每個積分步計算出結(jié)果后返回但如果你要畫一條光滑的彈道曲線最好指定輸出時刻。t_out linspace(0, 1800, 18001); % 每0.1秒輸出一個點 [~, state_out] ode45((t, s) hgv_odes(t, s, param), [0, 1800], state0, options);注意這里有個現(xiàn)象如果tspan用一個向量而不只是[t0, tf]ode45會以插值形式在指定時刻輸出結(jié)果但內(nèi)部積分步長仍然是自適應(yīng)的。也就是說輸出點密度影響的是圖的光滑程度不影響數(shù)值積分精度。如果你在彈道光滑度上看到鋸齒狀振蕩大概率不是求解器的問題而是氣動插值不連續(xù)這個我在避坑章節(jié)還會展開。關(guān)于積分終止時間t_final高超聲速滑翔飛行器從再入初始高度到落地飛行時間通常在 800-2500 秒之間。你可以根據(jù)初始速度和目標(biāo)落點距離反推大致飛行時間用物理直覺檢查結(jié)果的合理性。如果代碼自帶HGV_main.m里的t_final和實際結(jié)果差太遠先改它。4. 跑通完整彈道仿真代碼結(jié)構(gòu)、氣動數(shù)據(jù)與參數(shù)標(biāo)定4.1 完整算例的初始化參數(shù)與制導(dǎo)剖面把積分器和運動方程點對點對接之后真正影響彈道結(jié)果的是初始化參數(shù)和攻角剖面。代碼包里通常有一個主腳本第一部分寫成這樣%% 初始條件與飛行器參數(shù) param.mu 3.986004418e14; % 地球引力常數(shù), m^3/s^2 param.Re 6378137; % 地球半徑, m param.mass 800; % 飛行器質(zhì)量, kg param.Sref 1.2; % 參考面積, m^2 param.rho0 1.225; % 海平面大氣密度, kg/m^3 param.Hs 7200; % 密度標(biāo)尺高度, m state0 zeros(6,1); state0(1) param.Re 60000; % 初始高度 60km state0(2) 0; % 初始經(jīng)度 0 rad state0(3) 0; % 初始緯度 0 rad state0(4) 6800; % 初始速度 6800 m/s state0(5) -0.02; % 初始航跡傾角, 略微向下 state0(6) 0; % 初始航向角 0 rad這個初始化頗有講究。初始高度取60公里是因為高超聲速滑翔飛行器的再入界面通常定義在80-100公里但很多簡化模型從60公里起算就是為了避開稀薄大氣段的大氣模型誤差。航跡傾角取-0.02弧度是個較小的負值表示飛行器以極小的下壓角滑翔這樣可以拉長滑翔段距離符合滑翔飛行器的任務(wù)特性。攻角剖面在這類資源里一般以分段常值或線性插值給出。常見的寫法規(guī)格式是這樣的% 攻角剖面, 第1列時間, 第2列攻角(deg) alpha_profile [ 0 20 300 8 900 5 1500 3 1800 2 ]; % 通過插值取任意時刻攻角 alpha_time (t) interp1(alpha_profile(:,1), alpha_profile(:,2), t, linear, extrap);注意高超聲速滑翔飛行器在再入初段需要攻角較大的配平姿態(tài)以建立滑翔條件中后段攻角逐漸減小用于控制射程。如果你改動這個剖面射程變化會非常敏感后面章節(jié)會在參數(shù)敏感性中具體講。4.2 從主腳本到繪圖彈道結(jié)果怎么看跑通主腳本后代碼會生成幾個標(biāo)準(zhǔn)圖高度-時間曲線、速度-時間曲線、航跡傾角-時間曲線、經(jīng)緯度地面軌跡。以下這段是最常見的地面軌跡繪制代碼%% 繪圖: 地面軌跡 figure; plot(state_out(:,2) * 180/pi, state_out(:,3) * 180/pi, LineWidth, 1.5); xlabel(經(jīng)度 (deg)); ylabel(緯度 (deg)); grid on; title(高超聲速滑翔飛行器地面軌跡);關(guān)于這組輸出有幾個判讀技巧高度曲線上應(yīng)該出現(xiàn)明顯的“跳躍滑翔”特征——也就是高度先下降再小幅拉起的波浪形態(tài)這是HGV區(qū)別于傳統(tǒng)彈道式再入的最大特征。速度曲線前期下降平緩末期如果出現(xiàn)快速驟降說明飛行器進入稠密大氣并開始大幅減速。航跡傾角在滑翔段應(yīng)該維持在很小的負角度附近如果它頻繁穿越零度且振幅超過5度說明攻角剖面太激進。查看彈道結(jié)果時我最看重兩個量化指標(biāo)射程是否與初始速度匹配6800 m/s 初始速度、-0.02弧度負角度對應(yīng)經(jīng)度跨度通常應(yīng)在 40-70 度左右。末端速度是否落在合理的窗口高超聲速滑翔飛行器末端的典型速度在 1500-3000 m/s 之間如果末端速度高于 4000 m/s說明飛行器沒有有效滑翔減速如果低于 1000 m/s說明攻角剖面過于張滿。4.3 參數(shù)敏感性攻角剖面和傾側(cè)角剖面怎么改很多同學(xué)把代碼跑通后想換一組初始條件卻發(fā)現(xiàn)換了就發(fā)散。本質(zhì)上是攻角剖面與氣動數(shù)據(jù)不匹配。改參數(shù)的時候務(wù)必按以下順序來做% 第一步: 修改質(zhì)量與參考面積 param.mass 900; param.Sref 1.5; % 第二步: 修改初始速度與高度 state0(1) param.Re 65000; state0(4) 7000; % 第三步: 修改攻角剖面第一段時間點 alpha_profile [ 0 22 250 9 800 6 1400 4 1800 3 ];這里提示一個常見做法每改一次只動一個參數(shù)。比如你把質(zhì)量從800改到900其他不變彈道末端的射程差異其實小到肉眼無法分辨但如果你同時把質(zhì)量、初始高度、攻角第一段全部改掉結(jié)果出現(xiàn)發(fā)散后你根本不知道是誰引起的。實際上經(jīng)驗判斷是質(zhì)量增加會讓彈道更陡因為重力作用更強參考面積增加會讓減速更明顯。攻角剖面的第一段決定彈道拉起的高度第二段之后的剖面決定滑翔巡航的速度走廊。傾側(cè)角sigma在這批代碼里通常固定為一個常數(shù)或在某個時刻翻轉(zhuǎn)一次符號。傾側(cè)角的符號翻轉(zhuǎn)在縱向運動方程里只影響側(cè)向航跡不影響射程。如果你只關(guān)心射程特性把sigma固定為零即可如果關(guān)心落點橫向偏差就需要在特定時刻做符號翻轉(zhuǎn)來調(diào)整航向角。5. 高超聲速彈道仿真常見問題與排查清單5.1 現(xiàn)象代碼一運行就發(fā)散狀態(tài)量變成 NaN我見過最多的問題是拿到代碼后直接執(zhí)行高度在第10步就變成-3.29e23。原因通常是把弧度當(dāng)成角度傳入氣動系數(shù)函數(shù)。攻角剖面給的數(shù)值是20度但代碼內(nèi)部可能默認是弧度導(dǎo)致升力系數(shù)被插到表格之外的一個極端區(qū)域受力失真狀態(tài)迅速爆炸。解決方法是統(tǒng)一角度單位。我一般會在主腳本開頭做一次強制檢查if max(abs(alpha_profile(:,2))) 90 warning(攻角數(shù)據(jù)疑似以度為單位, 正在轉(zhuǎn)換為弧度); alpha_profile(:,2) alpha_profile(:,2) * pi / 180; end5.2 現(xiàn)象高度曲線出現(xiàn)鋸齒狀振蕩但并沒有發(fā)散這個現(xiàn)象多發(fā)生在滑翔段中段高度應(yīng)該在波浪狀滑翔但曲線局部出現(xiàn)高頻抖動。原因通常是氣動系數(shù)表只有少數(shù)幾個馬赫數(shù)斷點interp2插值在斷點處的一階導(dǎo)數(shù)不連續(xù)。積分器檢測到導(dǎo)數(shù)不連續(xù)后自適應(yīng)步長會頻繁收縮再放大反映到輸出曲線上就是鋸齒。解決方式是清洗氣動數(shù)據(jù)表或者把linear改成spline插值。spline插值會強制讓導(dǎo)數(shù)連續(xù)曲線會平滑很多。但要注意樣條插值可能產(chǎn)生過沖在氣動系數(shù)不應(yīng)為負的區(qū)域出現(xiàn)負值。我的建議是先用樣條插值畫一遍曲線看一眼是否出現(xiàn)非物理的負升力段有就改回線性并加密表格斷點。5.3 現(xiàn)象末端速度和參考解偏差超過 50 m/s明明用的是同一批方程氣動數(shù)據(jù)也沒問題但算出來的末端速度總是比參考解快很多。原因往往出在步長約束不夠緊。使用ode45時MaxStep設(shè)置過大比如10秒求解器在平穩(wěn)滑翔段大步長推進雖然誤差估計通過但局部截斷誤差被平滑掉了末端速度累積偏差就會變大。解決方法是把MaxStep降到 2秒以內(nèi)同時檢查輸出時刻的插值方式。我曾經(jīng)用MaxStep2替換默認的MaxStep10末端速度差了 38 m/s落點經(jīng)度差了整整0.3度。這對只能靠彈道仿真來評估射程參數(shù)的任務(wù)來說是致命的。5.4 現(xiàn)象緯度曲線畫出來是平的完全不隨經(jīng)度變化出現(xiàn)這個現(xiàn)象通常不是方程錯了而是初始航跡傾角或者航向角導(dǎo)致飛行器只在赤道平面內(nèi)運動。檢查一下state0(6)chi如果初始航向角為 0且運動中沒有任何側(cè)向力那么緯度確實永遠是 0。這種情況不是你代碼寫錯了而是初始條件正好落在縱向?qū)ΨQ平面上。如果希望彈道有明顯的緯度變化給chi設(shè)置一個非零初值比如state0(6) 0.05。再看經(jīng)緯度曲線就會有一個明顯的弧線彎曲。這個不算bug但確實經(jīng)常讓人懷疑代碼出了問題。5.5 現(xiàn)象彈道射程遠小于預(yù)期高度曲線急速下降初始速度 6500 m/s結(jié)果飛行 200 秒就落地了高度曲線沒有任何拉起動作。原因幾乎可以鎖定在攻角剖面第一段攻角取 0 度或取值過低導(dǎo)致升力不足。高超聲速滑翔飛行器再入初始段必須有足夠的正攻角產(chǎn)生升力來“托住”飛行器。通常第一段攻角不能低于 8 度取 20 度左右才能建立穩(wěn)定的滑翔條件。解決方法是把攻角剖面第一段的值上調(diào)到 12-20 度區(qū)間同時把該段持續(xù)時間延長到 200 秒以上。如果你發(fā)現(xiàn)拉起過程中高度仍然持續(xù)下降那還要檢查氣動數(shù)據(jù)表在低馬赫數(shù)段的升力系數(shù)是否合理。6. 驗證彈道結(jié)果可靠的三個土辦法6.1 網(wǎng)格收斂性檢查改一次步長看結(jié)果動不動沒有獨立驗證條件的彈道仿真結(jié)果嚴(yán)格來說都是可疑的。第一個土辦法是網(wǎng)格收斂性檢查。把MaxStep從 2 改成 1再改成 0.5看彈道末端參數(shù)的變化量。如果末端經(jīng)緯度變化小于 0.01 度、速度變化小于 1 m/s那就認為結(jié)果是收斂的如果變化明顯就需要繼續(xù)縮小步長。這個方法費時間但能過濾掉一大批步長相關(guān)的錯誤。6.2 與高保真工具對比一根彈道任何專業(yè)團隊做高超聲速滑翔彈道設(shè)計除了用簡化模型還會備一套考慮地球扁率、J2攝動、真實標(biāo)準(zhǔn)大氣模型的高保真工具。你可以只選一個算例把同一組攻角剖面輸進高保真工具里跑一次看兩者的地面軌跡形狀是否大致一致。一般相位會略有差異但趨勢必須相同。如果趨勢都不同多半是簡化模型的氣動數(shù)據(jù)在高馬赫數(shù)段不準(zhǔn)或者大氣密度模型用錯了。6.3 蒙特卡洛擾動測試對初始條件加入隨機攝動最后一個土辦法是蒙特卡洛擾動。把初始高度、初速、航跡傾角分別加一個 3% 的隨機擾動跑 50 條彈道樣本統(tǒng)計落點散布。如果落點散布的標(biāo)準(zhǔn)差超過彈道總射程的 5%說明彈道對抗動極其敏感這條彈道的魯棒性存疑。真實的滑翔飛行器彈道設(shè)計會很在意這個指標(biāo)因為位置誤差往往會被末端制導(dǎo)段的過載限制放大。for i 1:50 state0_pert state0; state0_pert(1) state0(1) * (1 0.03*randn); state0_pert(4) state0(4) * (1 0.03*randn); state0_pert(5) state0(5) * (1 0.03*randn); [~, state_pert] ode45((t,s) hgv_odes(t,s,param), tspan, state0_pert, options); rng_end(i) state_pert(end,1) - param.Re; end fprintf(落點高度散布標(biāo)準(zhǔn)差: %.2f km\n, std(rng_end)/1000);出一份沒經(jīng)過這三種驗證的彈道仿真圖在正式報告里是不敢直接用的。從那以后我每跑一批彈道都強制自己先走一遍網(wǎng)格收斂檢查。這份代碼本身不復(fù)雜但它是能讓你快速建立彈道仿真完整認知的難得入口。希望幫到你。本文還有配套的精品資源點擊獲取