標籤:

微分方程數值方法和偏微分方程有什麼區別嗎?


題主想問的是常微分方程(ODE)和偏微分方程(PDE)的數值方法區別呢還是微分方程這個領域和微分方程數值解領域的區別呢?按照前面@趙永峰 的回答,我也按照前者理解吧。畢竟後者的一些區別是顯而易見的。

先說一點共性。微分方程的數值方法,無論是ODE還是PDE,都是將連續的、無限未知數的問題近似為離散的、有限未知數的問題求解。從經典數值分析的角度,通常會關心下面一些問題:相容性、穩定性、收斂性、收斂階、計算量等等。相容性是指格式在局部是不是做出了正確的近似;穩定性是說局部的近似誤差會不會隨著計算而積累放大;收斂性是說當離散尺度無窮小的時候數值解是否會趨向於真實解;收斂階則刻畫了收斂的速度,高階的格式可以用較大的離散尺度獲得較好的數值結果,但是代價通常是單步下稍多的計算量。因此數值方法的最終表現需要在誤差和計算量之間找到一個平衡。

先說說ODE。在這個領域裡,無論是初值問題還是邊值問題,有限差分方法都是最常用的方法,比如說著名的Runge-Kutta方法。最常用的RK4方法就有穩定性條件比較寬泛、收斂階很高(4階)、計算量較小的優點。ODE數值方法中,差分方法是絕對的主流。儘管有限元方法、譜方法等等也可以用於解ODE,但是差分法依然更受歡迎。即便是邊值問題,基於差分法的打靶法也比有限元更受歡迎。

由於ODE的解行為通常比較好,只要右端項滿足一定的Lipschitz連續性,解就存在唯一,對初值參數連續依賴。所以ODE數值方法的特點是有限差分法是一種適用面非常廣泛的方法。也就是說,如果你是一個工程師,對數值方法並不熟悉。你在實際工作用需要求解一個(規模不太大的)ODE,那麼你閉著眼睛把這個方程扔給一個RK4標準程序,效果一般不會太差……

實際應用中ODE數值方法面臨的最主要問題是剛性。簡單說,如果把方程組理解為一組粒子的運動,那麼這些粒子的運動存在時間尺度的分離,而你的數值方法應該要抓住最小的時間尺度,這就意味著超大的計算量。這種問題在分子動力學模擬(MD)中特別常見。本來MD就要計算10^6量級的粒子,再有很強的剛性就會使得模擬幾乎無法進行。實際中,無論是從理論上做漸近分析或是平均化(averaging)抑或是數值上構造穩定性條件更加寬鬆的數值格式都是非常有挑戰性的工作。

ODE數值解面對的另一個困難時長時間模擬。再好的數值格式也會有誤差,誤差總會隨著時間積累,時間充分長之後總會讓數值解變得不可信。尤其是如果方程的解包含周期結構的時候數值誤差很容易在長時間上破壞解的周期性(一個典型的例子是用Euler法求解地球軌道方程,數值解最終會遠離太陽而去)。因此一個很有挑戰性的問題就是如何在長時間的計算中保持數值解的某種結構,比如說能量守恆。如何構造這種滿足特殊要求的數值格式同時還能盡量保持高精度是需要仔細設計的。實際中如果面對超大規模方程的長時間模擬,計算量的限制使得高階格式都難以應用的時候,其結果的可信度基本屬於玄學……

除此之外,ODE數值解還有一些具體的問題。比如說不適定問題的求解、方程在臨近分岔時的精確求解等等。總的來說,ODE數值解的領域相對成熟,理論比較完善,有一些可以作為標準方法的解法。實際應用中,可以根據實際問題的特點在這些標準方法上做出改進。

說到PDE數值解,那簡直就是天坑……這個領域太大了,即便你說PDE數值解就是全部的計算數學,錯的也不算離譜。教授們如果不注意維護自己的個人主頁,很容易發現一所高校計算數學系教授的研究興趣都是偏微分方程數值解……

還是簡單說幾句好了。從方法構造上,前面@趙永峰 的答案中提到的有限差分法、有限元方法和譜方法確實是最主要的幾種方法。有限差分法依然是最基礎的。差分法有直觀清楚、構造簡單、易於編程的優點,對於沒有受過專門數值方法訓練的工程師來說,差分法依然是最好的選擇。精心構造的差分方法可以非常高效。比如在求解流體力學方程的時候,守恆型差分格式有非常成熟的理論和方法。有限差分法的缺點主要是只能用於比較規則的區域,對於複雜區域邊界的處理不但困難,而且很容易損失精度,進而影響數值解在全局的精度。

一種改進的方式是有限體積法(Finite Volume Method)。有限體積法的做法是將微分方程寫成積分方程,在每一個小區域中用數值積分來近似精確積分,進而求解方程組。因為數值積分的方法比較靈活,有限體積法對於區域的要求寬鬆許多,並且可以選擇合適的積分法來保持方程的物理性質。缺點則是如果使用較高階的數值積分方法,那麼計算量將非常大,甚至需要求解非線性方程組;而如果使用較低階的數值積分法,又不如差分法簡潔。

差分法的思想是在局部用差商代替微商,這是一個局部的近似。從全局看,差分法相當於用分片常數近似導數,也就是用分片線性函數近似精確解。而分片線性函數在全局其實是不可導的,所以我們通常在連續函數的最大值範數下來考察收斂性。而有限元方法(Finite Element Method)則是用分片多項式來近似精確解,我們不但可以在整體上考慮函數值的收斂性,還可以考慮導數的收斂性。有限元方法的優點在於可以用於不規則的一般區域,原則上可以構造出非常高階的格式,收斂性和收斂階有比較成熟的理論,缺點則是有限元的構造比較困難,也不容易寫程序。在一些漢譯文獻中經常混淆有限體積法和有限元方法兩個術語,需要特別注意。(一個特別有名的例子,LeVeque的名著「Finite Volume Methods for Hyperbolic Problems」就被翻譯成了有限元方法……)

譜方法則是一種無網格方法。它不像差分法和有限元那樣需要首先將區域做剖分,而是將解按照一組正交基做展開(也就是廣義的Fourier展開),截取有限項作為近似,需要求解的是對應的Fourier係數。譜方法的好處是高精度,以及搭配一些快速演算法(比如快速Fourier變換)計算速度很快,缺點則是一般只適用於非常規則的區域,並且對邊界條件有比較苛刻的限制。此外,將譜方法和有限元方法結合起來的譜元法也是當下比較熱門的領域。

可以看到,和ODE不同,PDE數值解沒有一種占絕對優勢地位的方法乃至於框架。一般來說,我們需要針對不同的方程設計不同的數值方法。所以PDE方程的數值求解是一件技術含量比較高的事情。如果你是一個對數值方法不熟悉的工程師,在實際應用中需要求解一個PDE,那麼最好還是找一本書簡單學習一下。即便是最簡單的方程、最簡單的差分法,也需要一些知識來設計合適的格式(舉兩個學生作業中常見的例子,對流方程的差分格式需要滿足CFL條件,對流佔優的對流擴散方程也需要仔細設計格式來避免數值耗散對解的污染,即便這些方程都是常係數的)。

PDE數值解的困難主要在於PDE的解表現出的行為太豐富了。很多時候,我們對要求解的方程性質都缺少基本的認識,更說不上根據方程的特點設計有效的演算法。實際中我們只能針對一類方程來設計一類格式,這一類格式對另一類方程很可能根本就不靈。我們都知道,u_{xx}+u_{yy}=0u_{xx}-u_{yy}=0 一個符號之差就是兩種完全不一樣的方程。適用於前者的格式根本就解不了後者。

ODE中我們提到的困難對於PDE都存在,比如剛性,比如長時間行為。但是這都不是PDE數值解的主要問題。因為PDE的數值解還遠到不了討論這麼精細問題的程度,當務之急還是在有限的計算時間內解出來。對ODE數值解要求4、5階的精度不算過分,但是PDE數值解能有時空2階精度就非常令人滿意了。

和ODE相比,PDE的數值解更加強調對方程物理性質的保持。因為PDE問題通常都來自物理背景。計算流體力學中要求保持物理量的守恆性,還要能夠準確的捕捉激波。既要利用數值粘性來避免數值振蕩,還要盡量減小數值粘性來保持解的守恆性。這些使得某一種PDE的數值求解都變成一門需要深入研究的學問。泛泛的談PDE的數值解通常是談不出什麼來的。

PDE數值解的另一個巨大困難就是維數災難(curse of dimensionality)。一般的說,PDE需要求解的未知數數量是隨著問題維數指數增加的。這就意味著合理的計算量根本處理不了高維的問題。現今,無論是差分法、有限元還是譜方法,一般都只能處理三維以下的問題。超過三維,如果沒有可以利用的對稱性,基本可以宣告放棄了。然而高維的PDE求解在統計物理中隨處可見。即便要求解Boltzmann方程,也是7維的,遠遠超出了傳統方法的能力範圍。

對於一類特殊的PDE,我們可以將它視作是某個隨機變數的期望,然後利用Monte Carlo方法來計算這個期望。眾所周知,Monte Carlo方法的優點就是計算量對維數的增加不敏感,可以針對少量特殊點求解方程而不必在全局解出整個解,可並行化程度高,是求解高維PDE的一種很有吸引力的方法。當然,Monte Carlo方法的缺點也很多。比如說收斂慢(通常只有半階)、精度低、隨機誤差不可避免、對問題形式要求嚴苛等等。

總的來說,PDE的求解通常是根據具體問題設計具體方法的,泛泛地說PDE的數值方法很難深入下去。PDE求解的問題和困難非常之多,如果說解ODE的時候閉著眼睛上RK4是個不算糟糕的方案,那麼解PDE就一定要對待求解的方程和數值方法理論本身都有基本的認識。


提主是問常微分方程的數值解法和偏微分方程的數值解法有什麼區別吧?

常微分方程解法很多題主應該也很熟,基本上都要對「時間」進行離散化。偏微分方程要離散化的參量不只1個,複雜程度自然要增加。偏微分方程常用的解法有三種:有限差分法,有限元法,譜分析法,其區別很大程度上是如何對空間進行離散化。有限元方法我不懂,我印象中是將空間按單純型分割。有限差分將空間按正方格分割,而譜方法是對空間進行離散傅里葉變換,在某些格式下實際上等價於按某些函數進行分割(比如切比雪夫分點是按cos函數)。經過空間離散化後的偏微分方程會化為一組(比如上千個)常微分方程,這時你就會發現和常微分數值方法有用武之地了。

具體實踐中很多概念是通用的,比如多步演算法和單步演算法的區別,隱式格式增加穩定性等等之類。不過偏微分方程往往用不到很高階的RK步,因為空間做了離散化處理,因此解的誤差會有空間離散的貢獻。這時你使用非常高階的RK步把時間離散化的誤差減小是沒有意義的,因為誤差會被空間離散的貢獻主導,精度無法進一步提高,計算時間反而大幅增加。尤其面對著成百上千個常微分方程,計算的速度是很敏感的。


我的研究方向剛好是微分方法數值解法的,拋磚引玉,介紹一下微分方程數值解法吧。

通常來說微分方程可以分為 常微分方程(ODE) 和偏微分方程(PDE)。

理想狀態下是找到方程的解析解,但是對於大多數工程中遇到的方程,特別是一些 PDE,很難找到他們的解析解,這個時候就需要尋找方程的數值解(近似解)來運用到工程計算中去。

對於 ODE 一般的數值分析的書上會介紹一些經典的方法

例如,歐拉折線法、預估校正法、龍格-庫塔法等

對於 PDE 經典的數值方法有 有限差分法、有限元法等


ode一般都是一維的,多維的才有pde中p偏導的意思。

其實很多也都是相通的,比如一維積分的復化求積分,就和有限元差不多,都是離散區域下的低次分片差值,而且都只是在節點上有一次連續。差分方法看你的值取在哪兒,節點和節點中心是有很大差別的:取在中心,一般的守恆律方程這樣做;取在節點的是最簡單的,通常方便編程。

空間維數增加了之後,方程會有相當豐富的變化,一維的ode的處理方法就不適用了,所以人們更關心維數增加後,某些物理性質的變化/守恆。比如說,一維的彈簧受壓縮短,但三維的固體受壓會變形,但是體積不變,這裡一維意義上的體積,也就是長度,和三維情形不具有可比性。但又有很多可比的,比如說守恆律方程,差分格式設計的時候,一般都要用一維方程驗證格式精度。而且由於維數增加,要想提高精度,如何設計格式降低誤差項是一個很難的問題。

pde的物理背景更濃厚,比如有限元。有限元獲得高精度依賴於微分運算元的正定性,這對應於變分原理和最小余能原理,所以適用性好。但遇到某些存在耗散的過程,也不能過高估計。比如計算流動,有限元可以得到高精度的解,但也只是弱解,完全不能和求解彈性問題時那麼表現優異,和有限體積沒有本質差別。


推薦閱讀:

線性空間的對偶空間和優化里的拉格朗日對偶有什麼關係?
如何通俗地講解對偶問題?尤其是拉格朗日對偶lagrangian duality?
數學基礎不好怎麼補?
華爾街 Quant 的工作環境是怎樣的,強度是怎麼樣的?
數學高手在解題時,是形成了一種難以用語言表達的感覺,還是僅僅搜尋套用以前解過的題的思路?

TAG:應用數學 |