封存 Archive
封存 Archive
計算數學入門系列 - 矩陣的儲存(一)
- 取得連結
- X
- 電子郵件
- 其他應用程式
矩陣(Matrix)在應用數學裏面有着不可或缺的重要性。我們曾經用過矩陣的方式把計算區域標示出來(可以參考〈科普系列 - 數學、社會隔離與生命遊戲〉一文)。在數據科學裏面,我們曾經討論過如何把高維數據內的低維資訊找出來(可以參考〈科普系列 - 數學與數獨〉一文)。在〈科普系列 - 數學與圖像修復〉裏面,我們也曾經把圖像修復的問題,模擬成為找出鄰近地區色彩平均值的問題。在這篇文章裏面,我們希望討論一些關於矩陣的問題。
最基本要解決的問題,是如何在程式內把這個矩陣標示出來。如果矩陣相對非常細小,我們可以把矩陣內的所有元素一個一個標示出來,我們可以直接用MATLAB 的設定
>> A = [1 2; 3 4];
這個矩陣A是一個2×2的矩陣,第一行是1和2的兩個數值,另外一行就只有3和4兩個數值。這個方法最為簡單,基本上也不會花太多時間就把矩陣定義出來。可是有些時候我們的矩陣非常大,這個把數值一個一個輸入的方法就非常浪費時間,也很容易出錯。可是如果需要解決的問題,矩陣並沒有任何的特性,而且也是一個全矩陣 (Full Matrix,就是說在矩陣內絕大部份的元素都不是0),我們也沒有其他辦法。 幸運的是,大部份這些非常巨大的矩陣,很多時候都會有一些特別的特徵,而且也更可能是一個稀疏矩陣(Sparse Matrix,就是說矩陣裏大部份的元素都是0)。所以我們在設定這些矩陣時會有一些很方便的方法。
如果我們想設定一個10×10的三對角矩陣(Tridiagonal Matrix),對角線上的所有數值都是-2,上對角線和下對角線的所有數值都是1,而剩下來的所有數值都是0,我們可以用MATLAB 內置函數diag
>> B = -2*diag(ones(10,1)) + diag(ones(9,1),1) + diag(ones(9,1),-1);
MATLAB 的內置函數diag 可以把一個向量放到矩陣的對角線上面。ones(10,1) 設定了一個10×1的向量,diag(ones(10,1)) 就做出了一個矩陣,而矩陣的對角線所有元素都是1。內置函數diag 還有一個功能,如果函數有兩個input,他就會把第一個輸入的向量放到第二個輸入的相對應對角線上。舉例來說,diag(ones(9,1),1) 就會把一個9×1的向量放到一個矩陣的上對角線。如果這個矩陣,上對角線有九個元素,整個矩陣就是一個10×10的矩陣。而上邊程式的最後一項就是把一個9×1的向量放到矩陣的下對角線上。而這個矩陣內所有未被定義的數字都將會是等於0。上面這個簡單的例子,由於矩陣自身的特徵,我們可以運用上程式的內置函數簡單地幫我們把矩陣定義出來。
這個方法當然可以很簡單的地拓展到一個n×n 的矩陣,我們只要首先把n 定義出來,把上面的程式作出一點小改變就可以了
>> n=1000;
>> C = -2*diag(ones(n,1)) + diag(ones(n-1,1),1) + diag(ones(n-1,1),-1);
- 取得連結
- X
- 電子郵件
- 其他應用程式
留言
發佈留言