[matlab] 矩陣操作


 

 

>_<:矩陣構造

1.簡單矩陣構造

最簡單的方法是采用矩陣構造符“[]”。構造1´n矩陣(行向量)時,可以將各元素依次放入矩陣構造符[]內,並且以空格或者逗號分隔;構造m´n矩陣時,每行如上處理,並且行與行之間用分號分隔。

2.特殊矩陣構造

在MATLAB中還提供一些函數用來構造特殊矩陣,這些函數如下表所示。

(1)ones(n) 或ones(m,n)產生mXn全為1的矩陣
(2)zeros(n) 或 zeros(m,n)產生mXn全為0的矩陣
(3)eye(n)產生nXn的單位矩陣
(4)diag(v)將向量v轉化為一個對角矩陣
(5)magic(n)產生nXn的模方矩陣[每行每列之和相等]
(6)rand(n)或 rand(m,n)產生mXn的隨機矩陣,其中隨機數分布服從0~1的均勻分布
(7)randn(n) 或 randn(m,n)產生mXn的隨機矩陣,其中隨機數服從標准高斯分布[均值為0方差為1]
(8)randperm(n)產生1~n的隨機排列

3.向量構造

最簡單的方法是采用向量構造符“:”,其常用的用法如下。

(1)a:b  返回以a為起點,以1為步長,且所有取值在a與b之間的向量。
(2)a:s:b 返回以a為起點,以s為步長,且所有取值在a與b之間的向量。

 

>_<:矩陣大小的改變

1.矩陣的合並

矩陣的合並就是把兩個或者兩個以上的矩陣連接成一個新矩陣。矩陣構造符[] 可用於構造矩陣,並可以作為一個矩陣合並操作符。

 Ø  表達式C=[A B]在水平方向合並矩陣A和B [具有相同行數的兩個矩陣,合並為一個新矩陣,否則不行]
   Ø  表達式C=[A;B]在豎直方向合並矩陣A和B [具有相同列數的兩個矩陣,合並為一個新矩陣,否則不行]
 
 
2.函數調用合並矩陣
 
(1)cat(1,A,B)和[A;B]一樣  cat(2,A,B)和[A B]一樣
(2)horzcat(A,B)和[A B]一樣
(3)vertcat(A,B)和[A;B]一樣
(4)repmat(A,M,N)得到MXN塊矩陣,每塊都為A
(5)blkdiag(A,B)得到以矩陣A和B為對角塊的矩陣
 
 
>_<:矩陣行列的刪除
     
1、刪除矩陣的某一行或者是某一列:只需將該行或者該列賦予一個空矩陣[]即可:A(2,:)=[]第二行為空
 
 
>_<:矩陣下標引用
1、訪問單個元素可用A(i,j)
2、線性引用元素
  Ø  對於矩陣A,線性引用元素的格式為A(k)。通常這樣的引用用於行向量或列向量,但也可用於二維矩陣。
  Ø  MATLAB按列優先排列的一個長列向量格 式(線性引用元素)來存儲矩陣元素。
  例如:A=zeros(3);那么A(3,2)就是對應位置從(1,1)豎着編號的號碼k,A(k)
3、訪問多個元素

  操作符“:”可以用來表示矩陣的多個元素。若A是二維矩陣,其主要用法如下:

  Ø  A(:,:) 返回矩陣A的所有元素。
  Ø  A(i,:) 返回矩陣A第i行的所有元素。
  Ø  A(i,k1:k2) 返回矩陣A第i行的自k1到k2列的所有元素。
  Ø  A(:,j) 返回矩陣A第j列的所有元素。
  Ø  A(k1:k2,j) 返回矩陣A第j列的自k1到k2行的所有元素。

     若A是多維矩陣,也可以通過類似的方法實現對其訪問。

 

>_<:矩陣信息的獲取

1、矩陣尺寸信息

  Ø size(X)或size(X,dim)返回各個方向的長度,以向量的方式存儲;后一個是返回指定方向的長度
  Ø length(x)返回各個方向中最長長度
  Ø ndims(A)矩陣的維數
  Ø numel(A)矩陣的元素個數

2、元素的數據類型[is---略]

3、矩陣的數據結構[is---略]

4、矩陣結構的改變

  Ø reshape(A,m,n)把A重新排列為mXn的矩陣[按照長列向量的順序重排元素]
  Ø rot90(A)或rot90(A,k)逆時針旋轉矩陣900或k*900
  Ø fliplr(A)以豎直方向為軸做鏡像
  Ø filpud(A)以水平方向為軸做鏡像
  Ø flipdim(A,dim)以指定軸做鏡像[1水平、2豎直]
  Ø transpose(A)矩陣的轉秩相當於B=A.'
  Ø ctranspose(A)矩陣的共軛轉秩相當於B=A'
 

>_<:稀疏矩陣

Ø  在MATLAB中,可以用滿矩陣存儲方式和稀疏矩陣存儲方式來存儲矩陣。
Ø  若一個矩陣只有少數的元素非零,稱為稀疏矩陣。稀疏矩陣非零元素及其對應的下標來表示。
Ø  用戶可以創建雙精度、復數和邏輯等類型的稀疏矩陣。
 
1、稀疏矩陣的創建
  Ø  在MATLAB中,用函數sparse()實現滿矩陣到稀疏矩陣的轉換。
  Ø  在MATLAB中用函數full()實現稀疏矩陣到滿矩陣的轉換。
  Ø  在MATLAB中,還可以用函數sparse()直接創建稀疏矩陣,其具體用法如下。
           S = sparse(i,j,s,m,n),其中,i和j分別是稀疏矩陣非零元素的行和列下標,s為相應的非零元素的值,m和n分別是矩陣的行數和列數。
  Ø  MATLAB還提供一些函數用於創建特殊稀疏矩陣,這些函數如下表所示。
     speye(n)創建單位稀疏矩陣
     spones(S)將稀疏矩陣的非0元素的值改為1
       sprand(S)或sprand(m,n,density)將稀疏矩陣S的非0元素的值改為均勻分布的隨機數或創建mXn的隨機稀疏矩陣
       sprandn(S)或sprandn(m,n,density)將稀疏矩陣S的非0元素的值改為高斯分布的隨機數

2、查看稀疏矩陣

MATLAB提供一些函數用於查看稀疏矩陣的信息,如下表所示:

  Ø nnz(X)返回非零值個數
  Ø nonzeros(A)返回非0值
  Ø nzmax(S)返回用於存儲非零值的空間長度

 

[matlab自帶的稀疏矩陣矩陣west0479:導入load west0479 可以用spy(west0479)圖形化顯示稀疏矩陣非零值分布

 

3、稀疏矩陣的運算規則

在MATLAB中的各種命令和函數都可以用於稀疏矩陣的運算,並且遵循如下的一些約定。

  Ø 把矩陣變為標量或者定長向量的函數總是給出滿矩陣;
  Ø 對於標量或者定長向量變換到矩陣的函 數,如函數zeros()、ones()、eye()、rand()等總是給出滿矩陣;
  Ø 從矩陣到矩陣的變換函數將以原矩陣的形式出現;
  Ø 在參與矩陣擴展的子矩陣(如[ A B;C D])中,只要有一個是稀疏矩陣,那么所得的結果也是稀疏矩陣;
  Ø 在矩陣引用中,將仍以原矩陣形式給出結果。

 

 

 

 

 

 

 

 

 

  

  

 

 

 
 
 
 
 
 
 
 
 
 
 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM