封存 Archive
封存 Archive
計算數學入門系列 - 線性代數問題(二)
- 取得連結
- X
- 電子郵件
- 其他應用程式
上面這個例子,我們考慮一個2X2 的矩陣,矩陣內每一個元素都是1。由於這個矩陣的兩橫行相等,在計算時,程式就會跟我們說這方程組並不何解。
對於MATLAB 來說,最神妙(不是之一)的內置程式,就是這個「\」,用法是
>> x=A\b;
這個計算裏面,並不會計算A的逆。這個表達式要求程式找出x 令到A乘以x等於右手邊的向量b。MATLAB 會根據A的特性用不同的方法把一個答案找出來[1]。 自己以往做過一些問題,需要解決的方程組非常巨大也異常複雜,運用其他譬如說C++ 的軟件,根本沒有辦法把方程組的答案找出來。還是需要用到MATLAB 這個神奇的內置程式。網上有人指出,這個backslash 內置函數可能有高達25萬行的程式[2]。因為裏面考慮到那麼多不同的情況,而每一個情況用到的計算方法也比較專業,所以甚至乎你跟我說程式裏面其實有一百萬行,自己一點也不會驚訝。由於這個「秘密武器」,自己也漸漸少用了FORTRAN/C/C++ 的這些編寫程式語言,而越來越多使用MATLAB。
雖然這個內置函數非常強大,但是在研究裏面反而會帶來一點困擾。由於我們很多時候都希望自己做出來的研究成果可以比其他人複製(就是所謂的reproduceable),如果其他研究員並不是使用統一編程語言,有機會沒有辦法再次做出我們在論文裏面提到的結果。所以有些時候,我們反而不希望太過倚賴這個函數。
要避免這個倚賴,有些時候我們就需要仔細考慮矩陣A 的一些特性,去使用其他的計算方法解決這個線性代數問題。在本科生的課程,數值分析的這門課裏面,我們就會介紹幾款經典的迭代方法(Iterative Methods) 去把問題的近似值找出來。在實質應用上,我們一般都不會使用這些經典的方法,可是他們也可作為入門,讓我們了解如何設計一些好像(Preconditioned) Conjugate Gradient 或者Multigrid 等等的新的迭代方法。仔細的也不會在這裏討論有興趣的同學可以看看上面的參考書。MATLAB 裏面也有不同的程式,包括了minres, gmres, fft, pcg 等等的方法。雖然很多時候效果沒有「\」那麼好,可是在使用上我們可以有多一點的控制。
- 取得連結
- X
- 電子郵件
- 其他應用程式
留言
發佈留言