天天看點

[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])中,隻要有一個是稀疏矩陣,那麼所得的結果也是稀疏矩陣;

  Ø 在矩陣引用中,将仍以原矩陣形式給出結果。

本文轉自beautifulzzzz部落格園部落格,原文連結:http://www.cnblogs.com/zjutlitao/p/3668132.html,如需轉載請自行聯系原作者

繼續閱讀