目錄

20200718 想法源起 20200719 我們在做什麼(一) 20200722 我們在做什麼(二) 20200725 竟然成為數學家(一) 20200729 竟然成為數學家(二) 20200801 竟然成為數學家(三) 20200805 不同職級(一) 20200808 不同職級(二) 20200812 趕客系列(一)為什麼讀大學? 20200815 趕客系列(二)不同大學學位跟工作的關係 20200819 趕客系列(三)大學的目的 20200822 趕客系列(四)大學為什麼要有主修 20200826 趕客系列(五)要挑選一個什麼樣的主修 20200829 沒有無緣無故的恨(一) 20200831 科普系列 - 數學與電影動畫製作(一) 20200902 沒有無緣無故的恨(二) 20200905 沒有無緣無故的恨(三) 20200907 科普系列 - 數學與電影動畫製作(二) 20200909 終身職位的評核 20200912 學術界吸引人的地方 20200914 科普系列 - 數學與電影動畫製作 (三) 20200916 學術界辛苦的地方(一) 20200919 學術界辛苦的地方(二) 20200921 科普系列 - 數學與電影動畫製作 (四) 20200923 大學的讀書成績有多重要 20200926 本科生研究機會 20200928 科普系列 - 數學與圖像修復(一) 20200930 用創新的方法去教育科學 20201003 參加研討會的重要 20201005 科普系列 - 數學與圖像修復(二) 20201007 教授與教學 20201010 研究是什麼(一) 20201012 科普系列 - 數學與圖像修復(三) 20201014 研究是什麼(二) 20201017 研究是什麼(三) 20201019 科普系列 - 數學與圖像修復(四) 20201021 如何閱讀研究論文 20201024 研究生應該修什麼課 20201026 科普系列 - 數學與圖像修復(五) 20201029 本科生的多主修多副修 20201102 科普系列 - 數學與數獨(一) 20201105 幾位教授(一) 20201109 科普系列 - 數學與數獨(二) 20201112 幾位教授(二) 20201116 科普系列 - 數學與數獨(三) 20201119 幾位教授(三) 20

計算數學入門系列 - 矩陣的儲存(一)



矩陣(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);



留言