有人可以向我解釋爲什麼Verlet整合比Euler整合好?爲什麼RK4比Verlet更好呢?我不明白爲什麼這是更好的方法。爲什麼Verlet整合比Euler整合更好?
回答
如果一切都以線性方式滑行,使用什麼方法並不重要,但是當有趣的事情發生時(即,即非線性),您需要仔細觀察,或者考慮非直線性(verlet)或採用較小的時間步長(rk4)。
Euler method是一階積分方案,即總誤差與步長成比例。但是,它可能在數值上不穩定,換句話說,累計誤差可能會使計算失去意義,從而導致無意義。請注意,無論您的步長是多少,或者系統是否線性,都會出現這種不穩定性。我不熟悉verlet整合,所以我不能說它的功效。但是,Runge-Kutta methods不同於歐拉方法,不僅僅是步長。
實質上,它們基於數值逼近導數的更好方式。目前確切的細節讓我無法接受。一般來說,四階Runge-Kutta方法被認爲是整合方案的主力,但它確實有一些disadvantages。它具有輕微的耗散性,即一個小的一階導數相關項被添加到您的計算中,類似於增加的摩擦。此外,它具有固定的步長,可能會導致難以達到您想要的精度。或者,您可以使用自適應步長方案,如Runge-Kutta-Fehlberg method,它爲額外的6個功能評估提供五階精度。這可以大大減少執行計算所需的時間,同時提高準確性,如here所示。
^請注意,無論您製作步長的大小或系統是否線性,都會出現此不穩定情況。 當你說線性時,你指的是二階(加速度),而不是一階(速度),是否正確?我相信tom10指的是一個穩定的非加速度。 – 2010-10-31 14:02:49
@Steve H,當我說線性時,我指的是線性微分方程的標準定義,而不是方程的階數。 – rcollyer 2010-10-31 15:54:33
歐拉方法*是一種龍格庫塔方法,所以你不能說龍格庫塔方法不同於歐拉方法。此外,請注意,有四個以上的四階Runge-Kutta方法,但其中一個被稱爲RK4方法,並且是衆所周知的。但是也許這就隱含在你所說的內容中。 – HelloGoodbye 2013-10-28 16:40:15
Verlet方法擅長模擬節能系統,其原因是它是辛的。爲了理解這個陳述,你必須在你的模擬中描述一個時間步驟作爲函數f,將狀態空間映射到它本身。換句話說,每個時間步可以寫在下面的表格上。
(X(t + dt的),V(T + DT))= F(X(t)的,V(t))的
時間步長函數f的verlet的方法具有特殊的它保存了狀態空間的屬性。我們可以用數學術語寫這個。如果狀態空間中有一組狀態A,則可以通過定義f(A)
f(A)= {f(x)|對於A中的x}
現在讓我們假設集合A和f(A)是平滑的,所以我們可以定義它們的體積。那麼一個辛映射f將始終滿足f(A)的體積與A的體積相同(並且對於A的所有良好和平滑的選擇,這將被滿足)。這由Verlet方法的時間步長函數來實現,因此Verlet方法是一種辛方法。
現在最後的問題是。爲什麼辛方法很好地模擬節能系統,但恐怕你必須閱讀一本書才能理解這一點。
- 1. Verlet/Euler積分不準確
- 2. iCloud整合了什麼
- 3. 爲什麼CQL讀取整個集合?
- 4. 爲什麼有一個比正整數更多的負整數?
- 5. 整合比爾特在JSP
- 6. 如何整合SVN和有什麼好處
- 7. 什麼是最好的方式來整合node_acl與風帆
- 8. 有什麼好的工具可以整合GWT和ASP.Net嗎?
- 9. 整合
- 10. 是什麼讓Git比Subversion更好的合併?
- 11. 比較兩個整數:爲什麼==真?
- 12. perforce提交文件標記爲「編輯」或「整合」,爲什麼?
- 13. 浮點合併和整數合併有什麼區別?
- 14. 整合大平原,最好的方式?
- 15. paypal phonegap整合爲Android
- 16. Omniture整合爲Roku公司
- 17. 完整的Magento/Wordpress整合
- 18. 爲什麼要將兩個32位整數合併成一個64位整數?
- 19. 爲什麼「基於集合的方法」比「程序方法」更好?
- 20. 爲什麼關係型基於集合的查詢比遊標更好?
- 21. 爲什麼基於合併的SCM比基於鎖的系統更好?
- 22. 爲什麼使用str()比__str更好__()
- 23. 爲什麼使用比使用更好?
- 24. 爲什麼requestAnimationFrame比setInterval或setTimeout更好
- 25. 爲什麼mysql count(*)比count更好(id)
- 26. 爲什麼FileChannel比MemoryMappedBuffer表現更好?
- 27. 爲什麼str.format()比str()更好?
- 28. Excel VBA:爲什麼API比SendKeys更好?
- 29. 爲什麼ArrayDeque比LinkedList更好
- 30. 爲什麼boost :: any比void *更好?
是啊!我認爲這是一個非常有用的東西要指出,並缺乏其他全面的答案。如果你沒有加速度,歐拉積分將給你確切的結果,除了數字四捨五入。但你幾乎肯定會加速。你的速度改變了。它在迭代點不會瞬時變化 - 它在平滑加速下的各個步驟之間連續變化。這就是爲什麼更復雜的集成技術有助於現實主義和可能的其他屬性如模擬穩定性。 – Benjohn 2016-01-19 12:52:43