1. 程式人生 > >Matlab從入門到精通(七)--矩陣基本運算

Matlab從入門到精通(七)--矩陣基本運算

31、稀疏矩陣的建立

函式  sparse

格式  S = sparse(A)   %將矩陣A轉化為稀疏矩陣形式,即由A的非零元素和下標構成稀疏矩陣S。若A本身為稀疏矩陣,則返回A本身。

S = sparse(m,n)   %生成一個m×n的所有元素都是0的稀疏矩陣

S = sparse(i,j,s)   %生成一個由長度相同的向量i,j和s定義的稀疏矩陣S,其中i,j是整數向量,定義稀疏矩陣的元素位置(i,j),s是一個標量或與i,j長度相同的向量,表示在(i,j)位置上的元素。

S = sparse(i,j,s,m,n)         %生成一個m×n的稀疏矩陣,(i,j)對應位置元素為si,m = max(i)且n =max(j)。

S = sparse(i,j,s,m,n,nzmax)    %生成一個m×n的含有nzmax個非零元素的稀疏矩陣S,nzmax的值必須大於或者等於向量i和j的長度。

【例】

>> X = [1 3 5;5 -9 0; 32 1 18];

>> S = sparse(X)

 

S =

 

   (1,1)        1

   (2,1)        5

   (3,1)       32

   (1,2)        3

   (2,2)       -9

   (3,2)        1

   (1,3)        5

   (3,3)       18

32、稀疏矩陣的運算

32.1稀疏矩陣非零元素的個數

函式  nnz

格式  n = nnz(X)    %返回矩陣X中非零元素的個數

32.2稀疏矩陣的非零元素

函式  nonzeros

格式  s = nonzeros(A)    %返回矩陣A中非零元素按列順序構成的列向量

32.3稀疏矩陣非零元素的記憶體分配

函式  nzmax

格式  n = nzmax(S)    %返回非零元素分配的記憶體總數n

32.4稀疏矩陣的存貯空間

函式  spalloc

格式  S = spalloc(m,n,nzmax)   %產生一個m×n階只有nzmax個非零元素的稀疏矩陣,這樣可以有效減少存貯空間和提高運算速度。

32.5稀疏矩陣的非零元素應用

函式  spfun

格式  f = spfun('function',S)   %用S中非零元素對函式'function'求值,如果'function'不是對稀疏矩陣定義的,同樣可以求值。

32.6把稀疏矩陣的非零元素全換為1

函式  spones

格式  R = spones(S)    %將稀疏矩陣S中的非零元素全換為1

32.7  畫稀疏矩陣非零元素的分佈圖形

函式  spy

格式  spy(S)   %畫出稀疏矩陣S中非零元素的分佈圖形。S也可以是滿矩陣。

spy(S,markersize)            % markersize為整數,指定點陣大小。

spy(S,'LineSpec')            %'LineSpec'指定繪圖示記和顏色

spy(S,'LineSpec',markersize)   %引數與上面相同

33、求矩陣對角線上元素之和

函式:trace

例:

>> X = [1 3 5;5 -9 0; 32 1 18];

>> trace(X)

 

ans =

 

    10

 

34、矩陣處理

cat    向量連線    reshape    改變矩陣行列個數

diag    建立對角矩陣或獲取對角向量    rot90    將矩陣旋轉90度

fliplr    按左右方向翻轉矩陣元素    tril    取矩陣的下三角部分

flipud    按上下方向翻轉矩陣元素    triu    取矩陣的上三角部分

repmat    複製並排列矩陣函式

35、特殊矩陣

35.1帕斯卡矩陣

我們知道,二次項(x+y)n展開後的係數隨n的增大組成一個三角形表,稱為楊輝三角形。由楊輝三角形表組成的矩陣稱為帕斯卡(Pascal)矩陣。函式pascal(n)生成一個n階帕斯卡矩陣。注:矩陣的對角線上元素即為(x+y)^n的展開項的係數

35.2範得蒙矩陣

範得蒙(Vandermonde)矩陣最後一列全為1,倒數第二列為一個指定的向量,其他各列是其後列與倒數第二列的點乘積。可以用一個指定向量生成一個範得蒙矩陣。在MATLAB中,函式vander(V)生成以向量V為基礎向量的範得蒙矩陣。例如,A=vander([1;2;3;5])即可得到上述範得蒙矩陣。

35.3希爾伯特矩陣

在MATLAB中,生成希爾伯特矩陣的函式是hilb(n)。
使用一般方法求逆會因為原始資料的微小擾動而產生不可靠的計算結果。MATLAB中,有一個專門求希爾伯特矩陣的逆的函式invhilb(n),其功能是求n階的希爾伯特矩陣的逆矩陣。

35.4託普利茲矩陣

託普利茲(Toeplitz)矩陣除第一行第一列外,其他每個元素都與左上角的元素相同。生成託普利茲矩陣的函式是toeplitz(x,y),它生成一個以x為第一列,y為第一行的託普利茲矩陣。這裡x, y均為向量,兩者不必等長。toeplitz(x)用向量x生成一個對稱的託普利茲矩陣。例如
T=toeplitz(1:6)

36、其它特殊矩陣

compan    生成伴隨矩陣    invhilb    生成逆hilbert矩陣

gallery    生成一些小的測試矩陣    magic    生成magic矩陣

hadamard    生成hadamard矩陣    pascal    生成pascal矩陣

hankel    生成hankel矩陣    toeplitz    生成toeplitz矩陣

hilb    生成hilbert矩陣    wilkinson    生成wilkinson特徵值測試矩陣

37、陣列索引

向量:v = [1 2 3 4 5 6 7 8 9 0];

【例一】:取向量v的前三個元素

>> v(1:3)

 

ans =

 

     1     2     3

【例二】:取向量的後6個元素

>> v(end-5:end)

 

ans =

 

     5     6     7     8     9     0

【例三】:向量轉置

使用v’或者v(:)都可以實現轉置操作

【例四】:從第一個元素開始,步長為2,直到最後一個元素

>> v(1:2:end)

 

ans =

 

     1     3     5     7     9

【例五】:從最後一個元素開始,步長為-2,直到第一個元素

>> v(end:-2:1)

 

ans =

 

     0     8     6     4     2

【例六】:取出第1,4,6個元素

>> v([1,4,6])

 

ans =

 

     1     4     6

38、求向量或矩陣元素之和

  1. v為行向量或者列向量,則sum(v)表示求向量中的所有元素之和;
  2. A為矩陣,則sum(A)矩陣的列求和,返回一個行向量;
  3. A為矩陣,則sum(sum(A))求矩陣所有元素之和。

39、定義空矩陣或空向量

v = [];%定義空向量

A = [];%定義空矩陣

40、矩陣或向量的範數

norm(A,1)         %矩陣A的第1範數

norm(A,2)    %矩陣A的第2範數

norm(A,’inf’)    %矩陣A的範數