MATLAB矩阵的表示

目录

矩阵的建立

利用直接输入法建立矩阵

建立实矩阵

建立复矩阵

利用已建好的矩阵建立更大的矩阵

大矩阵由已建好的小矩阵拼接而成

用实部矩阵和虚部矩阵构成复数矩阵

冒号表达式

矩阵元素的引用

矩阵元素的引用方式

矩阵元素通过下标(Subscript)来引用

矩阵元素通过序号(Index)来引用

 矩阵元素的序号和下标可以利用sub2ind和ind2sub函数实现相互转换

利用冒号表达式获取子矩阵

 利用空矩阵删除矩阵的元素

改变矩阵的形状


矩阵的建立

利用直接输入法建立矩阵

建立实矩阵

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

A =

     1     2     3
     4     5     6
     7     8     9

建立复矩阵

>> B=[2+3i,5;3-5i,6j]

B =

   2.0000 + 3.0000i   5.0000 + 0.0000i
   3.0000 - 5.0000i   0.0000 + 6.0000i

利用已建好的矩阵建立更大的矩阵

大矩阵由已建好的小矩阵拼接而成

>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,-2,-3;-4,-5,-6;-7,-8,-9];
>> C=[A,B;B,A]

C =

     1     2     3    -1    -2    -3
     4     5     6    -4    -5    -6
     7     8     9    -7    -8    -9
    -1    -2    -3     1     2     3
    -4    -5    -6     4     5     6
    -7    -8    -9     7     8     9

用实部矩阵和虚部矩阵构成复数矩阵

>> R=[1,2,3;4,5,6];
>> I=[6,7,8;9,10,11];
>> ri=R+i*I

ri =

   1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i
   4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i

冒号表达式

用冒号表达式产生行向量

e1:e2:e3

其中e1为初始值,e2为步长,e3为终止值

>> t=0:1:5

t =

     0     1     2     3     4     5

注:如果省略e2不写,则步长为1

>> t=0:5

t =

     0     1     2     3     4     5

还可以用linspace函数产生行向量

linspace(a,b,n)

其中a和b是生成向量的第一个和最后一个元素,n是元素总数

>> linspace(0,pi,6)

ans =

         0    0.6283    1.2566    1.8850    2.5133    3.1416

注:当n省略时,自动生成100个元素

>> linspace(0,pi)

ans =

  1 至 11 列

         0    0.0317    0.0635    0.0952    0.1269    0.1587    0.1904    0.2221    0.2539    0.2856    0.3173

  12 至 22 列

    0.3491    0.3808    0.4125    0.4443    0.4760    0.5077    0.5395    0.5712    0.6029    0.6347    0.6664

  23 至 33 列

    0.6981    0.7299    0.7616    0.7933    0.8251    0.8568    0.8885    0.9203    0.9520    0.9837    1.0155

  34 至 44 列

    1.0472    1.0789    1.1107    1.1424    1.1741    1.2059    1.2376    1.2693    1.3011    1.3328    1.3645

  45 至 55 列

    1.3963    1.4280    1.4597    1.4915    1.5232    1.5549    1.5867    1.6184    1.6501    1.6819    1.7136

  56 至 66 列

    1.7453    1.7771    1.8088    1.8405    1.8723    1.9040    1.9357    1.9675    1.9992    2.0309    2.0627

  67 至 77 列

    2.0944    2.1261    2.1579    2.1896    2.2213    2.2531    2.2848    2.3165    2.3483    2.3800    2.4117

  78 至 88 列

    2.4435    2.4752    2.5069    2.5387    2.5704    2.6021    2.6339    2.6656    2.6973    2.7291    2.7608

  89 至 99 列

    2.7925    2.8243    2.8560    2.8877    2.9195    2.9512    2.9829    3.0147    3.0464    3.0781    3.1099

  100 列

    3.1416

 显然,linspace(a,b,n) 与 a:(b-a)/(n-1):b 等价

矩阵元素的引用

矩阵元素的引用方式

矩阵元素通过下标(Subscript)来引用

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

A =

     1     2     3
     4     5     6

>> A(1,2)

ans =

     2

还可以将矩阵的元素赋新值 


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

A =

     1     2     3
     4     5     6

>> A(1,2)=0

A =

     1     0     3
     4     5     6

当给出的行下标或列下标大于原来矩阵的行数和列数,则将自动扩展原来的矩阵,将扩展后未赋值的矩阵元素置为0

>> A=[1,2,3;4,5,6];
>> A(4,5)=20

A =

     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0    20

矩阵元素通过序号(Index)来引用

矩阵元素的序号就是相应元素在内存中的排列顺序,即线性索引号。

在MATLAB中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后第二列,.....


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

A =

     1     2     3
     4     5     6

>> A(3)

ans =

     2

​

 显然,序号与下标是一一对应的,m*n的矩阵A中,矩阵元素A(i,j)的序号为(j-1)*m+i

 矩阵元素的序号和下标可以利用sub2ind和ind2sub函数实现相互转换

sub2ind函数将矩阵指定元素的行、列下标转换成存储的序号

D=sub2ind(S,I,J)

其中,S表示要转换的矩阵的行数和列数,是列数和行数组成的向量,通常用size函数获取;I是要转换矩阵的行下标。J是要转换矩阵的列标。

注:I,J分别是两个矩阵,分别是是要转换的元素的行标和列标组成,且存在对应关系


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

A =

     1     2     3
     4     5     6
     7     8     9

 
>> D=sub2ind(size(A),[1,2;1,2],[1,2;2,1])

D =

     1     5
     4     2

以上例子,可以看出矩阵I,J对应起来依次得到A(1,1)、A(2,2)、A(1,2)、A(2,1),对应的序号为

1,5,4,2,按照I,J的元素摆放形式摆放

ind2sub函数用于将矩阵的序号转换为对应的下标

[I,J]=ind2sub(S,D)

其中,S表示要转换的矩阵的行数和列数;D是序号,返回值为序号所对应元素的行下表和列下标

>> [I,j]=ind2sub([3,3],[1,3,5])

I =

     1     3     2


j =

     1     1     2

3*3的矩阵的第1、3、5个元素的下标分别是(1,1)、(3,1)、(2,2)

利用冒号表达式获取子矩阵

A(i,:)表示A矩阵第i行的全部元素,A(:,j)表示A矩阵的第j列全部元素。

A(i:i+m,k:k+n)表示A矩阵第i-i+m行且j-j+n列的全部元素

A(i:i+m,:)表示A矩阵第i-i+m行的全部元素,A(:,k:k+m)表示A矩阵第k-k+m列的全部元素

end表示某一维的末尾元素下标

[i,j,k,...]表示取第i,j,k,...行/列的元素

>> A=[1:1:5;6:1:10;11:1:15;16:1:20]

A =

     1     2     3     4     5
     6     7     8     9    10
    11    12    13    14    15
    16    17    18    19    20

>> A(1,:)

ans =

     1     2     3     4     5

>> A(:,2)

ans =

     2
     7
    12
    17

>> A(:,2:4)

ans =

     2     3     4
     7     8     9
    12    13    14
    17    18    19

>> A(2:3,:)

ans =

     6     7     8     9    10
    11    12    13    14    15

>> A(2:3,4:5)

ans =

     9    10
    14    15

>> A(2 :3,4:5)

ans =

     9    10
    14    15

>> A(2:3,1:3:5)

ans =

     6     9
    11    14

>> A(2:3,1:2:5)

ans =

     6     8    10
    11    13    15
>> A(end,:)

ans =

    16    17    18    19    20

>> A([1,4],3:end)

ans =

     3     4     5
    18    19    20

 利用空矩阵删除矩阵的元素

空矩阵

>> X=[]

X =

     []

将某些元素从矩阵中删除,采用将其置为空矩阵是一种有效的方法

>> A=[1,2,3,0,0;7,0,9,2,6;1,4,-1,2,8]

A =

     1     2     3     0     0
     7     0     9     2     6
     1     4    -1     2     8

>> A(:,[2,4])=[]

A =

     1     3     0
     7     9     6
     1    -1     8

改变矩阵的形状

reshape(A,m,n)函数在矩阵总元素保持不变的前提下,将矩阵A重新排成m*n的二维矩阵

>> A=[1,2,3,4,5,6,7,8,9,10,11,12]

A =

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

>> Y=reshape(A,3,4)

Y =

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

>> Z=reshape(Y,2,6)

Z =

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

注:reshape函数只是改变了原矩阵的行数和列数,即改变了其逻辑结构,但不改变原矩阵元素个数及其储存顺序

A(:)将矩阵A的每一列堆叠起来,形成一个列向量,从而改变了矩阵的形状

>> A=[1,2,3,4,5,6,7,8,9,10,11,12]

A =

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

>> B=A(:)

B =

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

你可能感兴趣的