matlab軟件的矩陣和數組操作解析


矩陣和數組操作

Matlab中文含義就是矩陣實驗室的意思,輕松靈活的處理矩陣式Matlab語言的特色。

概念:

數組:與其它編程語言一樣,定義是:相同數據類型元素的集合。

矩陣:數學中早已定義。不再贅述,matlab中處理最多的是二維矩陣

矩陣的創建:

1直接輸入

              在命令行窗口中定義  A=[1,2,3;4,5,6;7,8,9]  分好是換行,逗號是本行  回車后如下圖:

2函數法生成特殊的矩陣

(1)零矩陣:zeros(n) :生成n*n的零矩陣

zeros(n,m): 生成n*m的零矩陣

如下圖:

(2)單位矩陣:eye(n): 生成n*n的單位矩陣(對角線元素為1 其余元素為0)

eye(n,m):  生成n*m的單位陣

如下圖:

(3)魔方矩陣(行、列、對角線元素和相同):magic()用法和以上函數一樣

(4)對角矩陣(對角線上的矩陣非0):dig(1:5)  :生成對角線元素為1,2,3,4,5 的5*5矩陣  如下圖:

(5)上三角矩陣(對角線以下的元素為0): triu()

(6)下三角元素(對角線元素以上為0):  tril()

代碼:

>> a=[1,2,3;4,5,6;7,8,9]

 

a =

 

     1     2     3

     4     5     6

     7     8     9

 

>> a=zeros(3,2)

 

a =

 

     0     0

     0     0

     0     0

 

>> a=eye(4)

 

a =

 

     1     0     0     0

     0     1     0     0

     0     0     1     0

     0     0     0     1

 

>> a=magic(3)

 

a =

 

     8     1     6

     3     5     7

     4     9     2

 

>> a=diag([1:5])

 

a =

 

     1     0     0     0     0

     0     2     0     0     0

     0     0     3     0     0

     0     0     0     4     0

     0     0     0     0     5

 

>> b=magic(3)

a=triu(b)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

 

a =

 

     8     1     6

     0     5     7

     0     0     2

 

>> b=magic(3)

a=tril(b)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

 

a =

 

     8     0     0

     3     5     0

     4     9     2

3 矩陣的基本操作

       顯示矩陣:直接在命令中輸入矩陣名稱回車即可,或者使用函數disp(矩陣名字) 也可以

       矩陣判空:isempty(A)  為空返回1  不空返回0

 isequal(A ,B)  判斷矩陣A和矩陣B是否相等(矩陣相等當且僅當矩陣行列一樣,並且對應元素都相等)

size(A)   獲取矩陣行數和列數

length(A)   獲取矩陣的長度(行數和列數中的最大值)

numel(A)    獲取A矩陣中元素個數之和

ndims(A)     獲取A矩陣的維度(注意是維度不是列數)

代碼:

>> a=magic(4);

>> a=magic(4);

dsip(a)

未定義與 'double' 類型的輸入參數相對應的函數 'dsip'。

 

是不是想輸入:

>> a=magic(4);

disp(a)

    16     2     3    13

     5    11    10     8

     9     7     6    12

     4    14    15     1

 

>> b=magic(4);

disp(isequal(A,B))

未定義函數或變量 'A'。

 

是不是想輸入:

>> b=magic(4);

disp(isequal(a,b))

     1

 

>> [m,n]=size(a)

 

m =

 

     4

 

 

n =

 

     4

 

>> disp(length(a))

     4

 

>> numel(a)

 

ans =

 

    16

 

>> ndims(a)

 

ans =

 

     2

 

 

4 訪問矩陣元素

圓括號訪問:A(3,4)   訪問矩陣第三行第四列的元素

       A(3)  訪問矩陣中按列排列的第3個元素(按列排列也成線性編碼,就是第一列排完,再排第二列。。。。依次)

注意:訪問矩陣元素在matlab中使用的是圓括號。而在其他高級編程語言中卻使用的是方括號[] ,在matlab中方括號[]用到矩陣或者數組定義的使用。

冒號運算符:

       冒號運算符很強大,使用頻率也很高。A(:,1)  訪問矩陣A第一列的所有元素。    A(1,:)  訪問矩陣A的第一行的所有元素  

A(:,n)  訪問矩陣A的第n列元素  

A(:,:)  訪問矩陣A的所有元素

diag(A)  訪問矩陣A的對角線元素

diag(A,k)  訪問矩陣A的第K條對角線元素(主對角線為第0條)、

end   A(1,2:end)   訪問矩陣A的第一行的第二列到最后一列的元素

A(end,end)   訪問矩陣A的最后一個元素

 

find()  查找矩陣中滿足一定條件的元素

index=find(A)    查找矩陣A中非零的元素,並返回矩陣中非零元素的線性索引(按列排列)

[m,n]=find(A==1)    查找矩陣A中等於1的元素的行列下標   行給m  列給n

[m,n]=find(A==1,k)   查找矩陣A等於1的元素的行列下標,返回前K個滿足要求的元素的下標

 

連接矩陣:

[A,B]   水平方向上連接兩個矩陣

[A;B]    A在上,B在下,垂直方向上連接矩陣

 

矩陣求逆: A’  即是矩陣A的逆矩陣

改變矩陣大小(假若A是3*3的矩陣):A(:,4)=1   向矩陣A中添加第四列元素,並賦值為1 ,A變成3*4的矩陣。

A(4,1)=1  :第四行第一列為1,剩余的矩陣A的第四行元素為0

   矩陣大小重排:reshape(A ,m,n)  用於重新排列矩陣A,返回大小m*n的矩陣,前提是A的行列乘積=m*n

repmat() 復制矩陣函數 B=repmat(A,m,n)  將A當做一個整體單元,復制成大小為m*n的矩陣

B=unique(A)    去除矩陣A中重復的元素,將不重復的元素從小到大排列傳給B,B以向量形式接受

代碼:

>> a=magic(5)

 

a =

 

    17    24     1     8    15

    23     5     7    14    16

     4     6    13    20    22

    10    12    19    21     3

    11    18    25     2     9

 

>> a(1,2)

 

ans =

 

    24

 

>> a(:,1)

 

ans =

 

    17

    23

     4

    10

    11

 

>> diag(a)

 

ans =

 

    17

     5

    13

    21

     9

 

>> diag(a)

 

ans =

 

    17

     5

    13

    21

     9

 

>> diag(a,1)

 

ans =

 

    24

     7

    20

     3

 

>> a(1,end)

 

ans =

 

    15

 

>> a(:,end)

 

ans =

 

    15

    16

    22

     3

     9

 

>> a(2,2:end)

 

ans =

 

     5     7    14    16

 

>> a(end,end)

 

ans =

 

     9

 

>> index=find(a)

 

index =

 

     1

     2

     3

     4

     5

     6

     7

     8

     9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

 

>> find(a>10)

 

ans =

 

     1

     2

     5

     6

     9

    10

    13

    14

    15

    17

    18

    19

    21

    22

    23

 

>> [m,n]=find(a==1)

 

m =

 

     1

 

 

n =

 

     3

 

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> b=[7,8,9;1,2,3]

 

b =

 

     7     8     9

     1     2     3

 

>> [a,b]

 

ans =

 

     1     2     3     7     8     9

     4     5     6     1     2     3

 

>> [a;b]

 

ans =

 

     1     2     3

     4     5     6

     7     8     9

     1     2     3

 

>> a=magic(3)

 

a =

 

     8     1     6

     3     5     7

     4     9     2

 

>> a'

 

ans =

 

     8     3     4

     1     5     9

     6     7     2

 

>> a(4,1)=2

 

a =

 

     8     1     6

     3     5     7

     4     9     2

     2     0     0

 

>> a(:,4)=1

 

a =

 

     8     1     6     1

     3     5     7     1

     4     9     2     1

     2     0     0     1

 

>> a=[1:12]

 

a =

 

     1     2     3     4     5     6     7     8     9    10    11    12

 

>> reshape(a,3,4)

 

ans =

 

     1     4     7    10

     2     5     8    11

     3     6     9    12

 

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

 

a =

 

     1     2

     3     4

 

>> repmat(a,2,2)

 

ans =

 

     1     2     1     2

     3     4     3     4

     1     2     1     2

     3     4     3     4

 

>> a=repmat(a,2,2)

 

a =

 

     1     2     1     2

     3     4     3     4

     1     2     1     2

     3     4     3     4

 

>> a=unique(a)

 

a =

 

     1

     2

     3

     4

 

 

 

矩陣加減乘除乘方運算

A+B  矩陣加(要求A,B有相同的行列數)

A-B   矩陣減(要求A,B有相同的行列數)

A+1(標量)  矩陣加標量 等價於矩陣的每一個元素都加上標量

A*B    矩陣的乘法  前提是矩陣A的列數等於矩陣B的行數
A.*B    A點乘B   A矩陣的元素乘上B矩陣對應位置的元素(前提是矩陣行列數一樣)

A*標量   矩陣A中的每一個元素都乘以標量

A/B    右除 計算Bx=A

A\B    左除 計算Ax=B

(區分左除還是右除很簡單,就是看除號往那邊倒,哪邊就是除數)同樣左除和右除也在數值的計算中,如1/2   1\2

A^2  矩陣乘方運算,A*A

A.^2  矩陣的點乘方運算  矩陣A中每一個元素的平方

det(A)   求矩陣A的行列式

inv(A)   求矩陣A的逆

rank(A)    求矩陣A的秩

[v,d]=eig(A)   求矩陣A的特征值和特征向量,   V是矩陣,每一列對應一個特征向量,d是特征向量對應的特征值。

C=A>B  判斷A中的元素是否大於B中的元素,返回一個大小一樣的矩陣,在其對應的位置上賦值,1表示大於,0表示不大於。

C=A<B  原理和上述一樣

C=find(A>k)  將矩陣A中大於k的元素按照線性編碼傳入C中。

 

 

 

 

數組和向量的一些運算和矩陣的運算基本一致,向量就是一個一維的數組,而數組運算無非就比矩陣運算多了個關系和邏輯運算。在matlab中我們使用最多的就是向量和矩陣

代碼:

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> b=[1,1,1;8,10,12]

 

b =

 

     1     1     1

     8    10    12

 

>> a+b

 

ans =

 

     2     3     4

    12    15    18

 

>> a-b

 

ans =

 

     0     1     2

    -4    -5    -6

 

>> a./b

 

ans =

 

    1.0000    2.0000    3.0000

    0.5000    0.5000    0.5000

 

>> a/b

 

ans =

 

   -3.0000    0.5000

   -0.0000    0.5000

 

>> a\b

 

ans =

 

    3.0000    4.0000    5.0000

         0         0         0

   -0.6667   -1.0000   -1.3333

 

>> a.\b

 

ans =

 

    1.0000    0.5000    0.3333

    2.0000    2.0000    2.0000

 

>> a^2

錯誤使用  ^

輸入必須為標量和方陣。

要按元素進行 POWER 計算,請改用 POWER (.^)。

 

>> a=[1,2,3;4,5,6;7,8,9]

 

a =

 

     1     2     3

     4     5     6

     7     8     9

 

>> a^2

 

ans =

 

    30    36    42

    66    81    96

   102   126   150

 

>> a.^2

 

ans =

 

     1     4     9

    16    25    36

    49    64    81

 

>> det(a)

 

ans =

 

   6.6613e-16

 

>> a=ones(3)

 

a =

 

     1     1     1

     1     1     1

     1     1     1

 

>> det(a)

 

ans =

 

     0

 

>> inv(a)

警告: 矩陣為奇異工作精度。

 

ans =

 

   Inf   Inf   Inf

   Inf   Inf   Inf

   Inf   Inf   Inf

 

>> a=dig(3)

未定義與 'double' 類型的輸入參數相對應的函數 'dig'。

 

是不是想輸入:

>> a=diag(3)

 

a =

 

     3

 

>> a=eye(3)

 

a =

 

     1     0     0

     0     1     0

     0     0     1

 

>> det(a)

 

ans =

 

     1

 

>> inv(a)

 

ans =

 

     1     0     0

     0     1     0

     0     0     1

 

>> rank(a)

 

ans =

 

     3

 

>> [v,d]=eig(a)

 

v =

 

     1     0     0

     0     1     0

     0     0     1

 

 

d =

 

     1     0     0

     0     1     0

     0     0     1

 

>> a=[1,2,3;3,2,1;4,5,6]

 

a =

 

     1     2     3

     3     2     1

     4     5     6

 

>> b=magic(3)

 

b =

 

     8     1     6

     3     5     7

     4     9     2

 

>> c=a>b

 

c =

 

     0     1     0

     0     0     0

     0     0     1

 

>> a<b

 

ans =

 

     1     0     1

     0     1     1

     0     1     0

 

>> a==b

 

ans =

 

     0     0     0

     1     0     0

     1     0     0

 

>> a=[1,2,3;4,5,6]

 

a =

 

     1     2     3

     4     5     6

 

>> find(a)

 

ans =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a)

 

v =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a)

 

v =

 

     1

     2

     3

     4

     5

     6

 

>> v=find(a>2)

 

v =

 

     2

     4

     5

     6

 

>> a=3

 

a =

 

     3

 

>> ~a

 

ans =

 

     0

 

>> 

 

 

 

 

                            


免責聲明!

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



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