是的,在大多數情況下,沒有使用tableaus。實際上,只有在使用ExplicitRK(tableau=...)
方法時纔會使用tableaus。您可以在DiffEqDevTools' tests中看到這些測試中的每一個的收斂性測試,但除此之外通常不會使用它們。
之所以這樣做,是因爲基於表單的實現不一定高效。擺脫由於使用常量指針而導致的間接尋址對運行時間產生可測量的影響。當然,在用戶的f
成本極高的漸近限制中,實現細節並不重要,但大多數真實世界的情況並不像限制在真正的基準測試中那樣(在此限制中,您應該使用多步法aynways)。因此,硬編碼高階插值方案有硬編碼版本的最高效Runge-Kutta方法,因爲這些方法是主力方法,應該可以獲得最高效率。
那麼爲什麼這些tableaus存在?我認爲重要的是要注意DifferentialEquations.jl不僅僅是一個使用微分方程的軟件包,它也是開發和測試新方法的軟件包。這由the testing features in the devdocs來證明。對於具有更高效實現的算法,tableaus仍然具有開發用途,因爲tableaus都具有相同的實現,因此這提供了一種容易的科學方法來確定方法之間的真實效率。不僅具有tableaus允許比較效率,但你可以用情節食譜也比較穩定地區:
plot(constructRK4())
This large tableau library來梳理所有的RK方法和建立現代化的選擇。 I posted some haphazard notes written about it和documented some parts more extensively in a CompSci SO post。這些都是使用開發工具完成的實驗。
最後,DifferentialEquations.jl真的很獨特,因爲它不僅僅是您以前見過的重新實現。從以前的一個明顯的變化是,選擇4/5 Runge-Kutta方法的選擇不是像MATLAB或SciPy(它僅僅是dopri5
包裝)的Dormand-Prince對DP5
,而是現代算法:Tsit5()
方法。這是因爲這種更新的方法在理論上在計算成本均勻時可以實現更低的誤差,並且devtools證實了這一點。 DifferentialEquations.jl中獨一無二的其他內容是its adaptivity for stochastic differential equations,high-order methods for delay differential equations等,還有很多研究成果(私人存儲庫中的內容直到發佈)。由於相關的開發套件,其中大部分成爲可能(或者至少容易實現)。
所以我認爲這表明顯然DifferentialEquations.jl的哲學不像其他語言/庫中的微分方程組。在其他套件中,如MATLAB或SciPy,大多數時候,目標是爲您提供一些通用的基本方法。效率不一定是目標(Shampine有意選擇在MATLAB中沒有高階RK方法),並且包裝「標準」實現通常足夠好(SciPy只是包裝)。簡單性和標準對於這些軟件套件是有意義的。但DifferenceEquations.jl的重點是開發用於處理現代計算困難方程的新方法,並使用這些新方法來解決以前不可行的問題。由於這個不同的焦點,有一些選擇是不同的。例如,在這裏有大量的方法/實現是很好的,因爲它允許用戶和方法研究人員在算法之間進行比較,並找出如何不斷改進它們以及選擇(我邀請用戶在他們的問題上測試畫面方法並查看如果一些不明確的RK方法做得好)。我關心確保提供最高效的研究工具,並通過向用戶提供默認值和建議來處理複雜性。如果文檔中的任何部分建議不明確,請打開問題,以便我們討論如何改進文檔。但我認爲領先用戶將「正確」的方法選擇作爲文檔問題,而不是限制設計,功能或效率的問題。
我要說的是,DifferentialEquations.jl的一些近期博客文章的理念,但是這是它的要點。我不覺得這是多大的SO問題,因爲這是爲什麼我一直知道低效的方法各地的個人問題我的(不推薦,雖然!),我希望這給出了一個信息的答案。