題:
豬排圖生成器和Lambert求解器測試用例
ChrisR
2017-03-16 13:19:26 UTC
view on stackexchange narkive permalink

我正在尋找可以生成豬排情節的免費工具。我這樣做是為了將我的工具的輸出與第三方之一進行比較。另外,如果有人有解決Lambert邊值問題的特定測試用例,我將非常渴望查看。

這純粹是為了驗證。

下圖是我之前生成的一個地球到火星的PCP。 PCP Earth to Mars

一 回答:
Escualo
2017-03-17 23:14:02 UTC
view on stackexchange narkive permalink

我使用開普勒問題求解器測試蘭伯特問題求解器。例如:如果我想生成各種測試用例,其中要改變偏心率和半長軸,則只需解決:

$$ M_0 + \ sqrt {\ frac {\ mu} {a ^ 3 }} \ Delta t = E-e \ sin(E)$$

用於多種$(e,a,\ Delta t)$組合。解決了許多開普勒問題(由於開普勒方程必須成立,我可以立即進行測試),所以我解決了相應的蘭伯特問題並驗證是否獲得了相同的偏心距。

以下代碼說明了這種方法

  import numpy as npdef kepler(a,e,mu = 1.0):#給定偏心距,對飛行時間進行顯式計算#[in 0,2 pi] n = np.sqrt(mu / pow(a,3))E = np.linspace(0,2 * np.pi,360)#每度一個點t =(E-e * np.sin(E))/ n return(t,E) def笛卡爾(sma,ecc,ean,mu = 1.0):smp = sma *(1- ecc ** 2)能量= -mu /(2 * sma)f = 2 * np.arctan(np.sqrt((1 + ecc)/(1-ecc))* np.tan(ean / 2))r = smp /(1 + ecc * np.cos(f))v = np.sqrt(2 *(能量+ mu / r ))如果f < 0:f = 2 * np.pi + f返回np.array([r,v,f])#讓我們測試給定sma / ecc組合的算法。在真實測試中,您將添加更多值,並考慮多個轉速(對於大多數multirev情況,您將獲得兩個解決方案)sma = 1.0ecc = 0.1#這將計算飛行時間和偏心距異常注意:顯式計算tof,ean =開普勒(sma,ecc)#這會將量轉換為笛卡爾矢量幅度和#無限制的真實異常(以計算傳遞角) ])r = rvf [:, 0] v = rvf [:, 1] f = rvf [:, 2]#在這裡,我將只調用自己的Lambert求解器(在C ++中實現)import ctypeslib = ctypes.CDLL(“ libsolve.so“)vs =(ctypes.c_double * 2)()N = len(tof)max_diff = 0.0#這個醜陋的循環簡單地比較了每個分段成對組合
#單次修訂(您也可以進行多次修訂,只需要增加TOF和f即可)。您將在此處附加自己的#Lambert求解器。對於xrange(N)中的n1:對於xrange(n1 + 1,N)中的n2:lib.solve(ctypes.c_double(1.0),#gm ctypes.c_double(r [n1 ]),#第一位置ctypes.c_double(r [n2])的範數,#第二位置ctypes.c_double(f [n2]-f [n1])的範數,#角行程ctypes.c_double(tof [n2]- tof [n1]),#飛行時間ctypes.byref(vs))#輸出#比較速度的範數(可以在#徑向/切向中分解)diff = np.sqrt((v [n1]-vs [0 ])** 2 +(v [n2]-vs [1])** 2)如果diff > max_diff:max_diff = diff#報告最大差異,請打印max_diff  

注意可以計算出給定的飛行時間一系列的偏心距,偏心距和半長軸。在這種情況下,我僅考慮單次發布,但推廣很簡單。

借助偏心異常,您可以計算真實的異常和飛行時間(後者通過開普勒方程,但是您不需要迭代求解)。

該信息用於獲取軌道上不同點的距離和速度。

然後,您可以使用範圍,速度,飛行時間和傳輸角度(由於軌道為開普勒人而在真實異常中的差異)的所有這些組合來測試Lambert求解器。

我使用自己的Gooding算法實現方案進行了快速測試,得出最大差值為 8.76111591946e-14 ,對於雙精度計算而言,這是非常合理的。

為進行比較,我生成了一個類似的圖表-它與您的圖表比較好。我建議您將到達時間的軸數增加到2016年1月1日之後的420天,以確保您的Lambert求解器能夠檢測到轉移節點(另外,請注意我們到達日期的基線時間不同)。

Porkchop Earth-Mars Transfer

您能否提供指向“免費工具”的鏈接-OP在問題中的要求?還是幾行代碼或腳本,或者算法的概述,或者至少是算法的鏈接?並非每個人都可以使用先驗方程求解器。目前,這實際上並沒有對OP有所幫助-只是說出如果您處於類似情況,您會怎麼做。嘗試將自己置於OP的位置。
您不需要方便的“超越方程求解器”。您可以顯式進行計算,因為偏心異常是自變量。無論如何,我要附加一些代碼。
太棒了-我從來不知道!如果選擇$ a $和$ e $並設置$ \ mu = 1 $並將$ E $從$ 0 $步進到$ \ pi $,則可以直接獲得$ r $和$ \ theta $,而無需花哨的錢求解器,甚至*牛頓法*。我從椅子上掉下來了。如果願意,您也可以在[這裡](http://hsm.stackexchange.com/q/3575/3869)上對此做一個很好的解釋作為補充答案。感謝您為我解決問題!
當然可以我認為開普勒方程式的*精神*使我們所有人都認為*總是*需要為* E *求解。我經常愛上它。
指出這一點我感到很糟糕,但是如果要在包括端點時每度一個點,則需要361點,現有代碼步進1.00278度。 (在嘗試調試我的越野車Gooding Solver之前,我試圖針對您的驗證碼嚴格驗證自己的驗證碼...)


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...