標籤:

為什麼計算熱物理的模擬問題中,二階精度已經足夠高了?

感謝 @Genius 同學的邀請。

問題如下:

為什麼計算熱物理的模擬問題中,二階精度已經足夠高了?

這是一道絕好的題。其實這個問題也是一個,在計算科學中相當典型的問題。我們知道大量的計算物理問題是可以用級數展開來求解的。當然也存在完全不能使用級數展開求解的bug情況。這類問題一般出現在原子物理或者高能物理裡頭的一些非常bug的情況,這個時候要解決這些問題就比較難了。

我們通過直覺來思考,在一個物理模擬的問題里,多加幾個冪次方項應該是可以增加精確性的。比如,你用數值計算求解y=exp(x).

exp(x)=1+x+x^2/2!

肯定是沒有:

exp(x)=1+x+x^2/2!+x^3/3!+x^4/4!

求解的來的準的。理論上我們計算無限多次項目是肯定可以算出非常精確的結果的,但是實際上我們都知道這也受到軟體和硬體環境的條件的諸多限制。在Brian老師的電腦上最多可以算exp展開300項(Python-Anaconda編程環境)。這個數值計算題目求解的訣竅是分析每一項的增長率(通過做比較),然後設置一個循環,然後尋找一個循環的終點。這樣在數值計算的過程中是可以取得很好的效果的。

但是,這個思路,在計算物理里用不成。其中有兩個原因:

  1. 可能物理本質的解析表達式,本來就是幾個項的簡單加和而已。比如:Lennard-Jones勢能就是負六次方冪與負十二次方冪的差。而原子物理學裡非常經典的Yukawa勢能的表達式則是:

Lennard-Jones potential

Yukawa potential

2.非線性系統,用於計算的數據可能是帶有誤差的,然後這種誤差也被傳遞進計算的過程,最終導致強行高次展開中的係數受到極大的擾動,並最終導致計算結果出現嚴重偏差。

其實類似的問題,我們應該如何去處理呢?答案是,在常規的數值計算表達式的基礎上設計一系列的經驗公式。這些經驗公式往往是來自於實驗的,也有一部分來自於更精細的數值計算或者一些非常複雜的理論推導。比如,在計算流體力學(CFD)的性能不夠強,解決不了實際的問題的時候,我們可以用水力學裡的一些經驗公式來解決問題。

比如說,做分子動力學。我們可以通過歷朝歷代的經驗積累,求出許許多多的勢能函數(美國的Sandia National Lab,Harvard Univ和Argonne National Lab以及荷蘭的格羅寧根大學在這方面做過大量的工作)。這樣的話我們求解問題會更接近於物理過程的本質。然後,我們再用類似夾角,球坐標等等參數,在計算的過程中引入這些函數,而不是借用很容易想到,但是是錯的的高階泰勒展開。

運用恰當的分子動力學,用好裡面的這一系列補丁,模擬的效果絕不亞於量子模擬。

其實機器學習里也有非常類似的方法。做LR,Linear-regression,用對數函數,指數函數代替整個線性函數中的某個次冪提高模擬性能其實也是這種思想。

數學表達式如下:

y=k1x1+k2x2+k3x3+β

我們把x1變成ln(x1)即可。

推薦閱讀:

【計算材料學】最近一年乾貨總結
物理所之行學術總結 凝聚態中的哲學與概念
如何評價丁澤軍的計算物理?
如何學習計算物理課程?
Metropolis蒙特卡羅方法、動力學蒙特卡羅方法、分子動力學方法這三種模擬方法有何特點與差異?

TAG:计算物理学 |