1. 程式人生 > >matlab數組與矩陣

matlab數組與矩陣

沒有 變量的存儲 ica 矩陣 pos pty 狀態 例如 哪些

××××××××××××××××××××××××××

數組與矩陣

××××××××××××××××××××××××××

得到關於數組與矩陣的信息:

isempty()    :        為空,即為[]
isscalar()   :        為標量,即為單一的一個數字
isvector()   :        為向量,即為數組或者矩陣
isrow()      :        為行向量
iscolumn()   :        為列向量
issparse()   :        為稀疏矩陣
size()       :        返回數組或者矩陣的行列大小 , 返回為 [ rowline_number , columnline_number ]
length()     :        返回數組或者矩陣中行或者列中長度最大的一個
ndims()      :        返回數組或者矩陣的維度
使用命令who 可以查看有哪些變量
使用命令whos 可以查看變量的存儲狀態

創立數組與矩陣:

A_matrix = [ 1:3 ; 2:4 ; 3:5 ]

********    顯示結果   ********

a =                            

    1     2     3

    2     3     4

    3     4     5

*******************************

其中 1:3 稱為分片,默認步長為1 , 由 1 遞增加步長 1 直到 3 為止 。

那麽 1 : 2 : 9 所得即為 [ 1 3 5 7 9 ] ,步長為 2 , 增長到 9 。 (當然步長可以為負數)

矩陣的運算:

普通的運算符號也可以直接用於矩陣與數組之間 , 例如 + - * / \  

其中 / 為左除 , \ 為右除 。    A_matrix / B_matrix 等同於 B_matrix \ A_matrix

但運算符號 ^ 與 .^ 存在區別:

    A_matrix ^ 2 等同於 A_matrix * A_matrix

    A_matrix .^2 等同於 矩陣中的每一個元素改為自身的平方 。

    ******************************************************

    >> a.^2

    ans =

    1     4     9

    4     9    16

    9    16    25

    *******************************************************

矩陣的轉置,求逆與點乘:

轉置:  使用符號 ‘ 或者 .‘ 或者使用函數 transpose(matrix)

        A 為矩陣 , 那麽A的轉置即為      A‘        A.‘      transpose(A)

        但 ‘ 並非為真正的轉置,因為當矩陣成員中存在虛數時,轉置後的結果中虛數會變為

    原虛數的共軛虛數,例如:

    *******************************************************************

    >> a = [ 1+1j 2 ; 2+3j 5 ]

    a =

       1.0000 + 1.0000i   2.0000 + 0.0000i

       2.0000 + 3.0000i   5.0000 + 0.0000i

    >> a‘

    ans =

       1.0000 - 1.0000i   2.0000 - 3.0000i

       2.0000 + 0.0000i   5.0000 + 0.0000i

    >> a.‘

    ans =

       1.0000 + 1.0000i   2.0000 + 3.0000i

       2.0000 + 0.0000i   5.0000 + 0.0000i

    *********************************************************************

求逆:  直接使用inv函數,inv(matrix)即可得到相應矩陣的逆矩陣

點乘:  使用函數dot( A_matrix , B_matrix ) 完成矩陣A與矩陣B的點乘

修改數組與矩陣的部分值:

**********************************************************************************************

    >> A = [ 11    10     9    34   837 ]     %   建立數組 A

A =

        11    10     9    34   837

>> C = ( A < 33 )                         %    查找符合要求的元素,返回為邏輯類型

C =

    1     1     1     0     0

>> whos 

Name      Size            Bytes  Class      Attributes

A         1x5                40  double               

C         1x5                 5  logical         

>> A(C) = 32                              %     通過數組C修改相應的符合 < 33 條件的元素的值

A =

    32    32    32    34   837     

**********************************************************************************************

當然也可以通過find函數來進行相同的操作

    A( find( A < 33 ) ) = 32  %   只是對於find函數而言,返回的數據是符合要求的元素的index索引號

矩陣的翻轉與排序操作:

對於排序而言,可以使用sort函數進行排序   sort( X , DIM , MODE )

        X: 為數組或者矩陣  DIM: dimension維度   mode:‘ascend‘正序 ‘descend‘ 反序

        默認對列排序,維度為 1 , 模式為‘ascend‘正序

***********************************************************

>> a = [ 3:5 ; 1:3 ; 4:6 ]

a =

     3     4     5

     1     2     3

     4     5     6

>> sort(a)

ans =

     1     2     3

     3     4     5

     4     5     6

***********************************************************

對於數組與矩陣的翻轉可以使用的函數有

rot90( matrix , k )           矩陣逆時鐘旋轉 k*90 度  [ rotate 90 degree ]

fliplr(A)                     矩陣左右旋轉  [ flip left , flip right ]

flipud(A)                     矩陣上下旋轉  [ flip up   , flip down  ]

**************************************************************

>> a = [ 1:9 ; 2:10 ]

a =

     1     2     3     4     5     6     7     8     9

     2     3     4     5     6     7     8     9    10

>> flipud(a)

ans =

     2     3     4     5     6     7     8     9    10

     1     2     3     4     5     6     7     8     9

>> a      %   調用函數並沒有改變 矩陣 a 

a =

     1     2     3     4     5     6     7     8     9

     2     3     4     5     6     7     8     9    10

>> fliplr(a)

ans =

     9     8     7     6     5     4     3     2     1

    10     9     8     7     6     5     4     3     2

a =

     1     2     3     4     5     6     7     8     9

     2     3     4     5     6     7     8     9    10

>> rot90(a,1)     

ans =

     9    10

     8     9

     7     8

     6     7

     5     6

     4     5

     3     4

     2     3

     1     2

**************************************************************

對矩陣的求和操作:

(1)  使用函數sum函數對矩陣求和

    sum( A_matrix , Dim ) Dim :維度默認為 1 , 即默認為列求和

    對一個矩陣使用sum兩次即得到矩陣每個元素的和

    ****************************************************

    >> a

    a =

       1.0000 + 1.0000i   2.0000 + 0.0000i

       2.0000 + 3.0000i   5.0000 + 0.0000i

    >> sum(a)      

    ans =

       3.0000 + 4.0000i   7.0000 + 0.0000i

    >> sum(a,2)

    ans =

       3.0000 + 1.0000i

       7.0000 + 3.0000i

    >> sum(sum(a))

    ans =

      10.0000 + 4.0000i

    *****************************************************

(2) 使用累加函數cumsum , 對矩陣進行累加 

    cumsum(A,DIM)   DIM 默認為 1 , 對列進行操作

    若 matrix A 為 [ 

            a1 a2 a3 ; 

            b1 b2 b3 ; 

            c1 c2 c3 

               ] 

    那麽對A使用cumsum函數後,結果為 

               [ 

            a1       a2       a3    ; 

            a1+b1    a2+b2    a3+b3 ; 

            a1+b1+c1 a2+b2+c2 a3+b3+c3 

               ]

    *****************************************************

    >> a

    a =

       1.0000 + 1.0000i   2.0000 + 0.0000i

       2.0000 + 3.0000i   5.0000 + 0.0000i

       0.0000 + 5.0000i   6.0000 + 8.0000i

    >> cumsum(a)

    ans =

       1.0000 + 1.0000i   2.0000 + 0.0000i   

       3.0000 + 4.0000i   7.0000 + 0.0000i

       3.0000 + 9.0000i  13.0000 + 8.0000i

    *****************************************************

通過原矩陣構造新的矩陣:

(1) 以已有的矩陣為基本元素來構造新的矩陣,使用repmat函數:

**************************************************************

>> a = [ 1:3 ; 2:4 ]

a =

     1     2     3

     2     3     4

>> repmat(a,2,3)        

%     以矩陣 a 為基本的元素構造矩陣

%     [ a a a ; a a a ]

ans =

     1     2     3     1     2     3     1     2     3

     2     3     4     2     3     4     2     3     4

     1     2     3     1     2     3     1     2     3

     2     3     4     2     3     4     2     3     4  

**************************************************************

(2) 以已有矩陣作為對角塊建立新的矩陣,使用blkdiag函數:

**************************************************************

>> blkdiag(a,a)

ans =

     1     2     3     0     0     0

     2     3     4     0     0     0

     0     0     0     1     2     3

     0     0     0     2     3     4

>> blkdiag(a,a,a)

ans =

     1     2     3     0     0     0     0     0     0

     2     3     4     0     0     0     0     0     0

     0     0     0     1     2     3     0     0     0

     0     0     0     2     3     4     0     0     0

     0     0     0     0     0     0     1     2     3

     0     0     0     0     0     0     2     3     4

**************************************************************

(3) 矩陣形狀修改,使用函數reshape,但是原矩陣的元素個數不變:

**************************************************************

>> size(a)

ans =

     2     3

>> a

a =

     1     2     3

     2     3     4

>> reshape(a,3,2)

ans =

     1     3

     2     3

     2     4

**************************************************************

matlab數組與矩陣