现在的位置: 首页 > 综合 > 正文

Matlab学习笔记二:矩阵的高级操作

2013年10月06日 ⁄ 综合 ⁄ 共 11036字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.