科學計算 (Scientific Computing) |
送交者: 木樁 2020年08月09日16:58:31 於 [教育學術] 發送悄悄話 |
常常碰到網友問我,什麼是計算數學?什麼是科學計算?這篇文章企圖闡明數學在“科學計算”里的作用。 首先,什麼是科學計算?在這方面有着不同的定義。在我看來,這應該是用數學作為工具,設計有效的算法,然後在計算機上實現。的確,科學計算和計算機科學有着緊密的聯繫,但不是一回事。科學計算着重於數學的角色,強調數學的作用。通過數學,保證設計方法的有效性,有足夠的精確度,足夠的穩定性,而且提高效率。 還是通過幾個有名的例子來說明問題吧。 例一:快速傅立葉變換 (Fast Fourier transform, FFT)。 我想,這個方法大家都不陌生吧?在很多科學技術領域裡,應用的那個部分里,都需要做傅立葉變換,事實上,當今世界上的計算機在運算的時侯,很多都在作快速傅立葉變換。這裡,你就可以看到數學對它的貢獻了。其實,這僅僅是初等數學,而且還是比較簡單的數學。 一維空間:從0到 之間,均勻地分布N 個點。 頻譜空間:傅立葉級數展開。 傅立葉級數的係數和點空間之間是有關係的。這樣說吧,如果你知道了這些點值,就能算出這些係數,反之,知道了這些係數,也能算出那些點值。 計算機在點值和係數的空間來回計算,這是要有代價的。如果已知係數,要算一個點值,這是 N 數量級的工作量;把所有N個點值全算出來 , 則是 N2 數量級的工作量。反之,如果已知點值,要把所有N個係數全算出來,也 是 N2 數量級的工作量。當 N 很大時,這是相當大的計算量,這不,如果 N = 100000,再平方一下,這數字太可怕了,而且,計算機的大量運算會產生誤差積累,導致算出的結果不夠精確。 能不能把 N2 降下來?能。快速傅立葉變換 ( FFT) 的思想其實很簡單:仔細觀察公式,發現有很多重複計算。在算點值時,打個比方(純粹胡說):第一個點,第四個點,第七個點。。。有重複計算。FFT 把重複計算的部分,一次性算好,然後在第一個點,第四個點,第七個點。。。同時使用。就這麼點簡單的思想,你只要把它做到極致,一個 N2 數量級的工作量就降到了N log N 數量級了,相比於 N,log N 是一個很小的數,幾乎等同於常數。這,是一個革命性的創舉。 可以這麼說,如果沒有得益於快速傅立葉變換( FFT)的應用,各種信號處理,電子工程,絕對不會變得像今天這麼廣泛。FFT 在數學上是一個很簡單的東西,這件事情之所以做得非常漂亮,就是在數學上並沒有做新的事情,也沒有改變原來的公式,思路也是簡單的,只是把傅立葉公式算得很快,多快好省幹革命。 FFT的第一篇文章,1965年發表在Mathematics of Computation , 這是美國數學學會的頂級雜誌,也是非常古老的計算數學雜誌。這篇FFT 論文的影響力是巨大的。 例二:快速多極法 (fast multi-pole method) 這種方法是用來快速計算 N 個粒子之間兩兩相互作用的效果。 比如,兩兩粒子間的引力作用。對一個固定的粒子來說,它的運動取決於它和其他所有粒子兩兩相互作用的效果之和。把這些相互作用都算清楚,需要 N 數量級的工作量。那麼,要算好所有 N 個粒子的運動規律,則需要 N2 數量級的工作量。 這次運氣不好,和 FFT 不同,我們似乎找不到明顯的重複運算 (除了兩兩相互作用只需算一次,這只能減少一半運算量,沒法在數量級上減少)。但這難不倒數學家。數學家們發現,一個粒子和距離它較遠的一堆粒子的相互作用,不用兩兩算清楚,只需要算這個粒子和這一堆粒子(看成一個大粒子)的相互作用,也就八九不離十了。當然,誤差是多少,一堆粒子到底可以多大,如何定義 “較遠”,這些都要分析清楚。這次沒有辦法像 FFT 一樣得到和原來公式一樣的數學效果,但是,如果給定能容忍的誤差,比如千分之一,則上述的辦法只需要 N log N 數量級的工作量。實際上,如果把算法和分析再做得精細些,工作量能降到 N 數量級。這種方法叫做 “快速多極法”。 快速多極法的發明,歸功於 耶魯大學的 V. Rokhlin和 L. Greengard。1985 年,他們發表在 Journal of Computational Physics 的一篇文章中,首創性地提出和分析了快速多極法。和FFT 類似,這個方法也在科學和工程中得到廣泛的應用。因為這個工作,這兩位數學家得到了美國數學學會 2001 年的 一個重量級獎項 (the Leroy P. Steele Prize)。這項獎通常都是授予純粹數學家的,應用數學家極少得到該獎,這也說明了快速多極法在數學和應用中的雙重重要性。 例三:多重網格法 (multigrid method) 怎樣解大型的線性方程組 Ax = b A是 N x N矩陣,b 是向量。這個問題看上去十分簡單,用中學學到的Cramer’s Rule 就能得到解。不過,用Cramer’s Rule 的計算量是 N 的階乘(N!)的數量級。當矩陣很大的時候,比如, N=1000, N! 是個非常龐大的數,不信你在計算器上摁一摁,會發現計算器都無法顯示出這麼龐大的結果。不管今天的計算機有多快,都無法在短時間內實現這樣的計算。所以,Cramer’s Rule 在解大型的線性方程組時,只有理論上的意義,沒有實際意義,紙上談兵也。 用高斯消除法(Gaussian elimination)求解,可以將工作量從 N! 數量級降到N3數量級。這已經大大提高了計算效率。對一般的線性方程組,這經常是實際計算中唯一可行的方法。不過, N3 還是實在太大了,數學家希望再進一步降低工作量。對於一些實際應用中的矩陣,有些特殊的性質,比如對稱正定矩陣,何不利用一下?應用數學知識可以設計 N 數量級的算法,如果能如願以賞,的確是美事一樁,故而發明了“多重網格法”。要知道,不是所有的矩陣都能採用多重網格法,矩陣需要滿足特殊的性質。因為哪怕A是對角矩陣,求解也需要 N 數量級的計算,再也沒有油水可榨了,N數量級已經達到了極限。 多重網格法的主要貢獻者是以色列數學家Achi Brandt , 為此,2005 年,他得到了美國工業與應用數學學會(SIAM)和美國計算機學會 (ACM) 共同授予的 “計算科學和工程獎” (Prize in Computational Science and Engineering ), 這是個非常了不起的大獎。 向科學家們致以崇高的敬禮!
|
|
|
|
|
實用資訊 | |
|
|
一周點擊熱帖 | 更多>> |
|
|
一周回復熱帖 |
|
|
歷史上的今天:回復熱帖 |
2019: | 外国在中国创ࡃ | |
2019: | ▲費加羅報:習近平香港失算 | |
2016: | 思想的形成 宇宙圖書館 | |
2016: | 如來一心有三身(三) | |
2015: | 作為精神家園的希臘羅馬社會規範 | |
2015: | bunny2 :“高級範例”的辨析:思維的 | |