Matlab學習筆記二:矩陣的高級操作

26.%例3-19 塊狀複製函數repmat

>> A=eye(2)
repmat(A,3,3)

A =

     1     0
     0     1


ans =

     1     0     1     0     1     0
     0     1     0     1     0     1
     1     0     1     0     1     0
     0     1     0     1     0     1
     1     0     1     0     1     0
     0     1     0     1     0     1

27.邏輯索引

>> A=rand(5)

A =

    0.9501    0.7621    0.6154    0.4057    0.0579
    0.2311    0.4565    0.7919    0.9355    0.3529
    0.6068    0.0185    0.9218    0.9169    0.8132
    0.4860    0.8214    0.7382    0.4103    0.0099
    0.8913    0.4447    0.1763    0.8936    0.1389

>> B=A>0.8

B =

     1     0     0     0     0
     0     0     0     1     0
     0     0     1     1     1
     0     1     0     0     0
     1     0     0     1     0

>> A(B)=0 

A =

         0    0.7621    0.6154    0.4057    0.0579
    0.2311    0.4565    0.7919         0    0.3529
    0.6068    0.0185         0         0         0
    0.4860         0    0.7382    0.4103    0.0099
         0    0.4447    0.1763         0    0.1389

28.數組數據類型測試函數

>> A=[1 2;3 5]
isnumeric(A)       %返回Boolean值,指出表達式的運算結果是否爲數字
isreal(A)              %isreal判斷是不是實數
isfloat(A)
isinteger(A)
ischar(A)

A =

     1     2
     3     5


ans =

     1


ans =

     1


ans =

     1


ans =

     0


ans =

     0

29.數組裁剪

A=magic(8)
A(1:2:5,3:7) %提取數組A的1、3、5行,3到7列
A(2,:)  %提取數組A第2行所有元素
A(:,3:2:7) %提取數組A第3、5、7列所有元素
A([3 2 1],[6 5 8]) %提取第3、2、1行的第6、5、8列元素
A(50:60) %單下標索引裁減數組,提取第50到60號元素

30.數組查找函數find

>> A=rand(3,5)
A>0.3
A<0.5
(A>0.3)&(A<0.5)

A =

    0.2028    0.2722    0.7468    0.4660    0.5252
    0.1987    0.1988    0.4451    0.4186    0.2026
    0.6038    0.0153    0.9318    0.8462    0.6721


ans =

     0     0     1     1     1
     0     0     1     1     0
     1     0     1     1     1


ans =

     1     1     0     1     0
     1     1     1     1     1
     0     1     0     0     0


ans =

     0     0     0     1     0
     0     0     1     1     0
     0     0     0     0     0

%find邏輯數組中的非零元素,返回符合關係的元素索引

>> find((A>0.3)&(A<0.5))

ans =

     8
    10
    11

 %實現元素訪問

>> A(find((A>0.3)&(A<0.5)))

ans =

    0.4451
    0.4660
    0.4186

31.數組排序

>> A=rand(1,8)
[B,I]=sort(A,'descend')

A =

    0.8381    0.0196    0.6813    0.3795    0.8318    0.5028    0.7095    0.4289    


B =

    0.8381    0.8318    0.7095    0.6813    0.5028    0.4289    0.3795    0.0196    %降序排序結果


I =

     1     5     7     3     6     8     4     2            %矩陣元素索引

>> A(I)

ans =

    0.8381    0.8318    0.7095    0.6813    0.5028    0.4289    0.3795    0.0196

%對每一列進行升序排序

>> C=rand(3,6)
sort(C)

C =

    0.3046    0.6822    0.1509    0.8600    0.4966    0.6449
    0.1897    0.3028    0.6979    0.8537    0.8998    0.8180
    0.1934    0.5417    0.3784    0.5936    0.8216    0.6602


ans =

    0.1897    0.3028    0.1509    0.5936    0.4966    0.6449
    0.1934    0.5417    0.3784    0.8537    0.8216    0.6602
    0.3046    0.6822    0.6979    0.8600    0.8998    0.8180

%指定對每一行進行升序排序,並返回排序後各元素的列號

>> [D,I]=sort(C,2)     %2代表按行排序,默認是升序

D =

    0.1509    0.3046    0.4966    0.6449    0.6822    0.8600
    0.1897    0.3028    0.6979    0.8180    0.8537    0.8998
    0.1934    0.3784    0.5417    0.5936    0.6602    0.8216


I =

     3     1     5     6     2     4
     1     2     3     6     4     5
     1     3     2     4     6     5

 

%對二維數組不能通過sort返回的單下標索引產生排序的數組

>> C(I)

ans =

    0.1934    0.3046    0.3028    0.5417    0.1897    0.6822
    0.3046    0.1897    0.1934    0.5417    0.6822    0.3028
    0.3046    0.1934    0.1897    0.6822    0.5417    0.3028

32.矩陣除法

>> A=[3 5 6;2 1 4;2 5 6]
B=randn(3)
A/B
A*inv(B)
A\B
pinv(A)*B

A =

     3     5     6
     2     1     4
     2     5     6


B =

   -0.4326    0.2877    1.1892
   -1.6656   -1.1465   -0.0376
    0.1253    1.1909    0.3273


ans =

    4.9369   -3.0803    0.0406
    3.9586   -2.4124   -2.4389
    4.7620   -2.3806    0.7564


ans =

    4.9369   -3.0803    0.0406
    3.9586   -2.4124   -2.4389
    4.7620   -2.3806    0.7564


ans =

   -0.5579   -0.9032    0.8619
    0.5902    0.5735    0.3559
   -0.2850    0.0216   -0.5293


ans =

   -0.5579   -0.9032    0.8619
    0.5902    0.5735    0.3559
   -0.2850    0.0216   -0.5293

33.數組大小

>> A=[]
size(A)
B=[1 2 3 4 5]
length(B)
size(B)
size(B')
C=[1:5;2:6]
size(C)
length(C)
numel(C)

A =

     []


ans =

     0     0


B =

     1     2     3     4     5


ans =

     5


ans =

     1     5


ans =

     5     1


C =

     1     2     3     4     5
     2     3     4     5     6


ans =

     2     5


ans =

     5


ans =

    10

34.數組的內存佔用

>> A=[3 2 5]
whos

A =

     3     2     5

  Name      Size                    Bytes  Class

  A         1x3                        24  double array

Grand total is 3 elements using 24 bytes

35.數組結構測試函數

>> A=32
isscalar(A)%標量
B=1:5
isvector(B)%向量
isempty(B)
B=[]
isempty(B)

A =

    32


ans =

     1


B =

     1     2     3     4     5


ans =

     1


ans =

     0


B =

     []


ans =

     1

36.數組維度

>> A=[]
ndims(A)
B=2
ndims(B)
C=1:5
ndims(C)
D=[1 2;2 1]
ndims(D)

A =

     []


ans =

     2


B =

     2


ans =

     2


C =

     1     2     3     4     5


ans =

     2


D =

     1     2
     2     1


ans =

     2

37.數組元素的索引與尋址

A=[4 2 5 6;3 1 7 0;12 45 78 23] %創建數組
A(2,3)  %雙下標索引訪問數組第2行第3列元素
A(2)  %單下標索引訪問數組第2個元素(即第2行第1列)
A(7)  %單下標索引訪問數組第7個元素(即第1行第3列)
A(3:5)  %單下標索引訪問數組第3到5位的元素(即第1列第3行和第2列第1、2行)
A(2,1:4) %雙下標索引訪問數組第2行,第1到4列的元素
A([3,1],2) %雙下標索引訪問數組第3、第1行,第2列的元素
A([3,1],[2,1]) %雙下標索引訪問數組第3、第1行,第2、第1列的元素
A(7)=100 %對數組第7個元素(即第1行第3列)重新賦值

38.數組元素刪除

A=magic(7)
A(1:3:8,:)=[]
A(:,[3 5 6])=[]

39.數組運算函數
A=magic(4)
sqrt(A)
sqrtm(A)
exp(A)
expm(A)

40.索引擴展

>> A=eye(3)
A(4,6)=25 %索引擴展
A(5,2)=3 %索引擴展
A(5,5)=10 %索引尋址修改零元素

A =

     1     0     0
     0     1     0
     0     0     1


A =

     1     0     0     0     0     0
     0     1     0     0     0     0
     0     0     1     0     0     0
     0     0     0     0     0    25


A =

     1     0     0     0     0     0
     0     1     0     0     0     0
     0     0     1     0     0     0
     0     0     0     0     0    25
     0     3     0     0     0     0


A =

     1     0     0     0     0     0
     0     1     0     0     0     0
     0     0     1     0     0     0
     0     0     0     0     0    25
     0     3     0     0    10     0

 

41.通過cat函數擴展數組
A=rand(3,5)
B=eye(3)
C=magic(5)
cat(1,A,B)  %列數不同,不能垂直連接
cat(2,A,B)  %行數相同,可以水平連接
cat(1,A,C)  %列數相同,可以垂直連接
cat(2,A,C)  %行數不同,不能水平連接

>> cat(2,A,B)  %行數相同,可以水平連接

ans =

    0.9501    0.4860    0.4565    0.4447    0.9218    1.0000         0         0
    0.2311    0.8913    0.0185    0.6154    0.7382         0    1.0000         0
    0.6068    0.7621    0.8214    0.7919    0.1763         0         0    1.0000

cat(1,A,C) %列數相同,可以垂直連接
ans =

    0.9501    0.4860    0.4565    0.4447    0.9218
    0.2311    0.8913    0.0185    0.6154    0.7382
    0.6068    0.7621    0.8214    0.7919    0.1763
   17.0000   24.0000    1.0000    8.0000   15.0000
   23.0000    5.0000    7.0000   14.0000   16.0000
    4.0000    6.0000   13.0000   20.0000   22.0000
   10.0000   12.0000   19.0000   21.0000    3.0000
   11.0000   18.0000   25.0000    2.0000    9.0000

>> horzcat(A,B)

ans =

    0.9501    0.4860    0.4565    0.4447    0.9218    1.0000         0         0
    0.2311    0.8913    0.0185    0.6154    0.7382         0    1.0000         0
    0.6068    0.7621    0.8214    0.7919    0.1763         0         0    1.0000

 

>> vertcat(A,C)

ans =

    0.9501    0.4860    0.4565    0.4447    0.9218
    0.2311    0.8913    0.0185    0.6154    0.7382
    0.6068    0.7621    0.8214    0.7919    0.1763
   17.0000   24.0000    1.0000    8.0000   15.0000
   23.0000    5.0000    7.0000   14.0000   16.0000
    4.0000    6.0000   13.0000   20.0000   22.0000
   10.0000   12.0000   19.0000   21.0000    3.0000
   11.0000   18.0000   25.0000    2.0000    9.0000

42.%轉置

>> B=[2-i,3+4i,2,5i;6+i,4-i,2i,7]
B'  
ctranspose(B) %轉置

B =

   2.0000 - 1.0000i   3.0000 + 4.0000i   2.0000                  0 + 5.0000i
   6.0000 + 1.0000i   4.0000 - 1.0000i        0 + 2.0000i   7.0000         


ans =

   2.0000 + 1.0000i   6.0000 - 1.0000i
   3.0000 - 4.0000i   4.0000 + 1.0000i
   2.0000                  0 - 2.0000i
        0 - 5.0000i   7.0000         


ans =

   2.0000 + 1.0000i   6.0000 - 1.0000i
   3.0000 - 4.0000i   4.0000 + 1.0000i
   2.0000                  0 - 2.0000i
        0 - 5.0000i   7.0000 

43.矩陣的特徵值和特徵向量

在MATLAB中,計算矩陣A的特徵值和特徵向量的函數是eig(A),常用的調用格式有5種:
(1) E=eig(A):求矩陣A的全部特徵值,構成向量E。
(2) [V,D]=eig(A):求矩陣A的全部特徵值,構成對角陣D,並求A的特徵向量構成
V的列向量。
(3) [V,D]=eig(A,'nobalance'):與第2種格式類似,但第2種格式中先對A作相似
變換後求矩陣A的特徵值和特徵向量,

而格式3直接求矩陣A的特徵值和特徵向量。

(4) E=eig(A,B):由eig(A,B)返回N×N階方陣A和B的N個廣義特徵值,構成向量E
(5) [V,D]=eig(A,B):由eig(A,B)返回方陣A和B的N個廣義特徵值,構成N×N階對

角陣D,其對角線上的N個元素即爲相應的廣義特徵值,同時將返回相應的特徵向

量構成N×N階滿秩矩陣,且滿足AV=BVD

>> A=[1 2 2;2 6 8;2 8 13]
eig(A)

A =

     1     2     2
     2     6     8
     2     8    13


ans =

    0.0859
    1.2477
   18.6664

44.Cholesky分解

>> A=[1 2 2;2 6 8;2 8 13]
R=chol(A)
R'*R

A =

     1     2     2
     2     6     8
     2     8    13

R =

    1.0000    2.0000    2.0000
         0    1.4142    2.8284
         0         0    1.0000


ans =

     1     2     2
     2     6     8
     2     8    13

45.LU分解

>> A=rand(3)
[L,U]=lu(A)
L*U
[L,U,P]=lu(A)

A =

    0.4057    0.4103    0.3529
    0.9355    0.8936    0.8132
    0.9169    0.0579    0.0099


L =

    0.4337   -0.0278    1.0000
    1.0000         0         0
    0.9802    1.0000         0


U =

    0.9355    0.8936    0.8132
         0   -0.8180   -0.7872
         0         0   -0.0216


ans =

    0.4057    0.4103    0.3529
    0.9355    0.8936    0.8132
    0.9169    0.0579    0.0099


L =

    1.0000         0         0
    0.9802    1.0000         0
    0.4337   -0.0278    1.0000


U =

    0.9355    0.8936    0.8132
         0   -0.8180   -0.7872
         0         0   -0.0216


P =

     0     1     0
     0     0     1
     1     0     0

46.QR分解
A=rand(3)
[Q,R]=qr(A)
Q'*Q
Q*R
B=rand(2,4)
[QQ,RR]=qr(B)
QQ*QQ'
QQ*RR

47.對角元素操作

>> A=rand(3)
diag(A)
trace(A)
sum(diag(A))

A =

    0.1389    0.6038    0.0153
    0.2028    0.2722    0.7468
    0.1987    0.1988    0.4451


ans =

    0.1389
    0.2722
    0.4451


ans =

    0.8562


ans =

    0.8562

 

>> tril(A,0)

ans =

    0.1389         0         0
    0.2028    0.2722         0
    0.1987    0.1988    0.4451

>> tril(A,1)

ans =

    0.1389    0.6038         0
    0.2028    0.2722    0.7468
    0.1987    0.1988    0.4451

>> tril(A,2)

ans =

    0.1389    0.6038    0.0153
    0.2028    0.2722    0.7468
    0.1987    0.1988    0.4451

48.矩陣的標準正交基

A=rand(3)
B=orth(A)
B'*B

A =

    0.5341    0.8385    0.7027
    0.7271    0.5681    0.5466
    0.3093    0.3704    0.4449


B =

   -0.6979    0.6002   -0.3907
   -0.6098   -0.7841   -0.1153
   -0.3756    0.1577    0.9133


ans =

    1.0000    0.0000   -0.0000
    0.0000    1.0000    0.0000
   -0.0000    0.0000    1.0000

49.矩陣的範數和條件數

 norm(magic(3))
norm(inv(magic(3)))
cond(magic(3))
cond(inv(magic(3)))
cond(zeros(3,3))

ans =

    15


ans =

    0.2887


ans =

    4.3301


ans =

    4.3301


ans =

   Inf

50.矩陣的特徵值、特徵向量和特徵多項式

>> A=rand(3,3)
d=eig(A)
[V,D]=eig(A)
A*V
V*D
roots(poly(A))

A =

    0.6946    0.9568    0.1730
    0.6213    0.5226    0.9797
    0.7948    0.8801    0.2714


d =

    1.9726
   -0.1728
   -0.3112


V =

   -0.5399   -0.7402    0.6566
   -0.6177    0.6724   -0.7267
   -0.5718   -0.0079    0.2020


D =

    1.9726         0         0
         0   -0.1728         0
         0         0   -0.3112


ans =

   -1.0649    0.1279   -0.2043
   -1.2185   -0.1162    0.2261
   -1.1280    0.0014   -0.0629


ans =

   -1.0649    0.1279   -0.2043
   -1.2185   -0.1162    0.2261
   -1.1280    0.0014   -0.0629


ans =

    1.9726
   -0.3112
   -0.1728

51.矩陣的秩

>> rank(magic(3))
rank(eye(5))
rank(zeros(2,4))

ans =

     3


ans =

     5


ans =

     0

52.矩陣行列式
A=magic(3)
det(A)


A =

     8     1     6
     3     5     7
     4     9     2


ans =

  -360

 

53.稀疏矩陣的創建
A=(rand(20)>0.99);
S=sparse(A)
whos


S =

  (20,2)        1
  (13,6)        1
  (11,11)       1

  Name      Size                    Bytes  Class

  A        20x20                      400  logical array
  B         3x3                        72  double array
  C         4x3                        96  double array
  D         3x3                        72  double array
  L         3x3                        72  double array
  P         3x3                        72  double array
  R         3x3                        72  double array
  S        20x20                       99  logical array (sparse)
  U         3x3                        72  double array
  V         3x3                        72  double array
  a         3x1                        24  double array
  ans       1x1                         8  double array
  b         2x1                        16  double array
  c         4x1                        32  double array
  d         3x1                        24  double array
  x         3x1                        24  double array

Grand total is 494 elements using 1227 bytes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章