《MATLAB程式设计入门篇矩阵的处理与运算.ppt》由会员分享,可在线阅读,更多相关《MATLAB程式设计入门篇矩阵的处理与运算.ppt(22页珍藏版)》请在三一办公上搜索。
1、MATLAB 程式設計入門篇矩陣的處理與運算,張智星(Roger Jang)http:/mirlab.org/jang台大資工系 多媒體檢索實驗室,9-1 矩陣的索引或下標,矩陣 A 中,位於第 i 橫列、第 j 直行的元素可表示為 A(i,j)i 與 j 即是此元素的下標(Subscript)或索引(Index)MATLAB 中,所有矩陣的內部表示法都是以直行為主的一維向量A(i,j)和 A(i+(j-1)*m)是完全一樣的,其中m為矩陣A的列數 我們可以使用一維或二維下標來存取矩陣,Quiz,Suppose that A is a 2-dimensional array of size m
2、n.Given A(i,j),how to find the linear index y such that A(y)=A(i,j)?Given A(y),how to find i and j such that A(i,j)=A(y)?,矩陣的索引或下標,矩陣的索引或下標,可以使用矩陣下標來進行矩陣的索引(Indexing)A(4:5,2:3)-取出矩陣 A 的 第四、五 橫列與 二、三 直行所形成的部份矩陣A(9 14;10 15)-用一維下標的方式來達到同樣目的 用冒號(:),取出一整列或一整行 A(:,5)-取出矩陣 A 的第五個直行 用 end 這個保留字來代表某一維度的最大值
3、A(:,end)-矩陣 A 的最後一個直行 可以直接刪除矩陣的某一整個橫列或直行 A(2,:)=刪除A矩陣的第二列 A(:,2 4 5)=-刪除 A 矩陣的第二、四、五直行,矩陣的索引或下標,可把矩陣 A 和其倒數並排起來,得到新矩陣 B B=A 1./A%1./A 是矩陣 A 每個元素的倒數用 diag 指令取出矩陣的對角線各元素 D=diag(B)%取出矩陣 B 的對角線元素D=diag(v)%產生以向量 v 為主對角線的方陣E=A*diag(v)%將矩陣A的每個行向量乘上向量v的元素E=diag(v)*A%將矩陣A的每個列向量乘上向量v的元素用 reshape 指令來改變一個矩陣的維度
4、B=B(1:4,1:4);C=reshape(B,2,8)%將矩陣 B 排成 28 的新矩陣 CMATLAB 會先將矩陣 B 排成一個行向量(即 MATLAB 內部的矩陣表示法),再將此行向量塞成 28 的新矩陣,9-2 特殊用途矩陣,產生各種特殊用途矩陣的好用指令:,Hilbert矩陣&魔方陣,hilb(n)指令可以產生 nn 的 Hilbert 矩陣 Hilbert 矩陣的特性:當矩陣變大時,其反矩陣會接近 Singular(即矩陣的行列式會接近於 0)Hilbert 矩陣常被用來評估各種反矩陣計算方法的穩定性 magic(n)可以產生一個 nn 的魔方陣(Magic Matrix),其各
5、個直行、橫列及兩對角線的元素值總和都相等,均勻和高斯分布,rand 指令及 randn 指令則常用於產生亂數矩陣 範例9-11:matrix11.m,9-3矩陣的數學運算,矩陣的加減與一般純量(Scalar)的加減類似 相加或相減的矩陣必需具有相同的維度 範例9-12:matrix12.mC=13 37 58 24 矩陣與純量可以直接進行加減,MATLAB 會直接將加減應用到每一個元素 A=1 2 3 2 1+5 A=6 7 8 7 6,矩陣的乘法與除法,純量對矩陣的乘或除,可比照一般寫法 A=123,442;C=A/3 B=2*A C=B=41.0000 147.3333 246 884 欲
6、進行矩陣相乘,必需確認第一個矩陣的直行數目(Column Dimension)必需等於第二個矩陣的橫列數目(Row Dimension)範例9-13:matrix12.m C=3 4 5 6 8 10 矩陣的除法,常藉由反矩陣或解線性方程式來達成,矩陣的次方運算,矩陣的次方運算,可由來達成,但矩陣必需是方陣,其次方運算才有意義 範例9-14:matrix14.m B=91 67 67 67 91 67 67 67 91 在*,/及之前加上一個句點,MATLAB 將會執行矩陣內元素對元素(Element-by-element)的運算,轉置和共軛轉置矩陣,複數矩陣 z,其共軛轉置矩陣(Conjug
7、ate Transpose)可表示成矩陣 z 範例9-16:conjTranspose01.mw=1.0000-1.0000i 3.0000 想得到任何矩陣 z 的轉置(Transpose),則可表示成矩陣 z.範例9-17:transpose01.mw=1.0000+1.0000i 3.0000 2.0000 1.0000+2.0000i若 z 為實數,則 z 和 z.的結果是一樣的,向量的Lp-norm,一個向量 a 的 Lp-norm 可以定義為p=1 taxicab distance,or Manhattan distancep=2 Euclidean Length(length of
8、 a)P=inf max.distance 欲求一向量的 p-norm,可使用 norm 指令 norm(x,p)範例9-18:normVector01.m,Quiz!,Quiz for Lp-norm,ProveOn a 2D space,plot the trajectory of,矩陣的Lp-norm,一個矩陣 A 的 Lp-norm 可以定義如下:norm 指令亦可用於計算矩陣的 Lp-norm範例9-19:normMatrix01.m MATLAB 有相當完整的數學函數,三角函數還有計算向量元素統計量的函數(課本 9-159-17),Sort指令,sort 指令可對向量元素進行排序(
9、Sorting)範例9-20:sort01.msorted=1 3 4 5 8index=4 1 5 2 3sorted 是排序後的向量,index 則是每個排序後的元素在原向量 x 的位置,因此 x(index)即等於 sorted 向量。如何使用 sort 指令加上前例中的 sorted 及 index 來求得原先的向量 x?,Exerrcise!,矩陣的最大元素,找出一矩陣最大元素的位置 範例9-21:max01.m colMax=23 24 25 21 22colMaxIndex=2 1 5 4 3colMax 代表每一直行的最大值,colMaxIndex 則是每一直行出現最大值的位置
10、 求得 x 的最大元素的位置 範例9-22:max02.mMax value=x(5,3)=25x 的最大元素即是 maxValue,發生位置為 colMaxIndex(maxIndex),maxIndex=5,3 若只要找出一矩陣 x 的最大值,可輸入 max(max(x)或是 max(x(:),9-4 矩陣的內部資料型態,一般矩陣的內部資料型態都是 double(雙精準浮點數),但在 MATLAB 5.3 版之後,也支援不同長度的整數與浮點數資料態,不同資料的儲存,我們要節省記憶體空間,可以依矩陣元素值的範圍,選用不同的資料來儲存 範例9-23:datatype01.mName Size
11、Bytes Class x16 10 x10 200 uint16 array x32 10 x10 400 uint32 array x8 10 x10 100 uint8 array x_double 10 x10 800 double array x_single 10 x10 400 single arrayGrand total is 500 elements using 1900 bytes uint8 來儲存變數所佔的空間只有 double 的八分之一!,資料儲存的注意事項,整數資料型態的範圍有限,若超過此範圍,則超出部分將會被裁掉 uint8(300)%uint8 的最大值為
12、255 ans=255 int8(-500)%int8 的最小值為-128 ans=-128 整數資料型態可以比較大小,亦可直接進行數學運算,但必須注意其資料型態的自動轉換:uint8(20)=20%可比較大小 ans=1 z=uint8(magic(3)z*2.5(Please try it by yourself to get the conversion rule!)若要進行精準的數學運算,需先用 double 指令將整數型態之變數轉成雙倍精準浮點數,Interesting Demos by Cleve,Under“cleve”folder of this chaptereigshow.msvdshow.mvorodrag.mvshow.m,