matlab-矩阵

矩阵的建立
1、将矩阵元素用中括号括起来,同一行元素用逗号隔开,不同行元素用分号隔开。

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

A =

     1     2     3
     4     5     6
     7     8     9

2、利用已建好的矩阵建立更大的矩阵,一个大矩阵可以由已经建立好的小矩阵拼接而成。

 >> 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 至 6 列

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

  7 至 12 列

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

3、用实部矩阵和虚部矩阵构建复数矩阵

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

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

结构矩阵
格式:结构矩阵元素.成员名 = 表达式

>> %结构矩阵:矩阵元素有3个name,age,grade
>> D(1).name = 'zhangsan';D(1).age = '18';D(1).grade = 90;
>> D(2).name = 'lisi';D(2).age = '18';D(2).grade = 80;
>> D(3).name = 'wangwu';D(3).age = '20';D(3).grade = 85;

单元矩阵
建立单元矩阵与一般矩阵类似,单元矩阵需要用大括号将元素括起来。

>>b = {'zhangsan', '18' ,90;'lisi', '18', 80; 'wangwu','20', 85}
b =

  3×3 cell 数组

    {'zhangsan'}    {'18'}    {[90]}
    {'lisi'    }    {'18'}    {[80]}
    {'wangwu'  }    {'20'}    {[85]}

矩阵元素的引用

1、通过下标引用:A(3,2) = 100
若下标超出矩阵的范围,则将自动扩展矩阵,并会将扩展后没有赋值的元素位置设为0```

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

2、通过序号引用
在matlab中,矩阵元素的存储是按照列存储的。

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

A =

     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0   100

>> A(5)

ans =

     2

matlab-矩阵_第1张图片
特殊矩阵

1、通用的特殊矩阵

​ 【1】零矩阵:zeros函数

​ 【2】1矩阵:ones函数

​ 【3】单位矩阵:eye函数

​ 【4】随机矩阵:rand函数-产生(0,1)区间的均匀分布随机矩阵。fix(a+(b-a+1)*×):产生la,b]区间上均匀分布的随机整数。

​ 【5】randn:产生均值为0,方差为1的标准正态分布矩阵。u十σ×:得到均值为u、方差σ^2为的随机数。

>> B = zeros(5,5)

B =

     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0

>> B = zeros(5,7)

B =

     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0

>> B = ones(5,5)

B =

     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

>> B = eye(3,3)

B =

     1     0     0
     0     1     0
     0     0     1

>> B = rand(4,3)

B =

    0.8147    0.6324    0.9575
    0.9058    0.0975    0.9649
    0.1270    0.2785    0.1576
    0.9134    0.5469    0.9706

eg:产生5阶两位数随机整数矩阵A,再产生均值为0.6,方差为0.1的5阶矩阵B,再产生一个5阶单位矩阵C。验证(A+B)✖C =C✖(A+B)

 
>> A = fix(10+(99-10+1)*rand(5))

A =

    55    22    83    32    62
    72    23    31    65    59
    90    33    93    52    92
    96    85    41    41    35
    59    32    27    84    78

>> B = 0.6 + sqrt(0.1)*randn(5)

B =

    0.8641    0.6332    0.5739    0.3192    0.7549
    0.5229    0.8284   -0.0113    0.6317    0.8338
    0.6682    1.4176    0.4612    0.4278    1.1413
    0.2313    0.3891    0.0325    0.6960    0.5386
    0.2370    0.6592    0.8658    0.4102   -0.0762

>> C = eye(5)

C =

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

>> (A+B)*C == C*(A+B)

ans =

  5×5 logical 数组

   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1
   1   1   1   1   1

2、用于专门学科的特殊矩阵

​ 【1】n阶魔方阵:由1,2,3,……,n^2 组成,并且矩阵的每一行,每一列,主、副对角线上元素之和相等。和为(n+n^3)/2

>> %产生8阶魔方阵求其每行,每列元素和
>> M = magic(8)

M =

    64     2     3    61    60     6     7    57
     9    55    54    12    13    51    50    16
    17    47    46    20    21    43    42    24
    40    26    27    37    36    30    31    33
    32    34    35    29    28    38    39    25
    41    23    22    44    45    19    18    48
    49    15    14    52    53    11    10    56
     8    58    59     5     4    62    63     1

>> sum(M(1,:))

ans =

   260

>> sum(M(:,1))

ans =

   260

​ 【2】范德蒙矩阵

>> N = vander(1:5)

N =

     1     1     1     1     1
    16     8     4     2     1
    81    27     9     3     1
   256    64    16     4     1
   625   125    25     5     1

​ 【3】希尔伯特矩阵

>> format rat
>> M = hilb(4)

M =

       1              1/2            1/3            1/4     
       1/2            1/3            1/4            1/5     
       1/3            1/4            1/5            1/6     
       1/4            1/5            1/6            1/7     

​ 【4】伴随矩阵
matlab-矩阵_第2张图片
matlab生成伴随矩阵的函数:compan§,p为多项式系数向量。高次幂在前,低次幂在后。

生成x^3 -2*x^2 -5*x +6的伴随矩阵

>> p = [1,-2,-5,6];
>> A = compan(p)

A =

       2              5             -6       
       1              0              0       
       0              1              0   

​ 【5】帕斯卡矩阵

根据二项式定理,(x+y)^n 展开后的系数随着n的增大组成的三角形表,这个三角形成为杨辉三角。
matlab-矩阵_第3张图片

>> format rat
>> p = pascal(5)
p =

       1              1              1              1              1       
       1              2              3              4              5       
       1              3              6             10             15       
       1              4             10             20             35       
       1              5             15             35             70       

矩阵变换

【1】提取矩阵的对角线元素

​ diag(A):提取矩阵A的主对角线元素,产生一个列向量。

​ diag(A,k):提取矩阵A的第k条对角线元素,产生一个列向量。

matlab-矩阵_第4张图片

>> A

A =

     1     1     0
     1     0     5
     1    10     2

>> diag(A)

ans =

     1
     0
     2

>> diag(A,1)

ans =

     1
     5

>> diag(A,-1)

ans =

     1
    10

【2】构造对角阵

​ diag(X):以向量x为主对角线元素,产生对角矩阵

​ diag(X,k):以向量x的第K条对角线元素,产生对角矩阵

>> diag([1,2,3])

ans =

     1     0     0
     0     2     0
     0     0     3

>> diag([1,2,3],1)

ans =

     0     1     0     0
     0     0     2     0
     0     0     0     3
     0     0     0     0

​ eg:A为5阶矩阵,将A的第一行元素乘以1,第一行元素乘以1,第二行元素乘以2,第三行元素乘以3,第四行元素乘以4,第5行元素乘以5。

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

A =

     7     0     1     0     5
     3     5     4     2     7
     9     3     5     3     4
     1     1     6     7     3
     4     0     2     3     0

>> D = diag(1:5)

D =

     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

>> D*A

ans =

     7     0     1     0     5
     6    10     8     4    14
    27     9    15     9    12
     4     4    24    28    12
    20     0    10    15     0

【3】求一个矩阵的上三角阵和下三角阵

​ triu(A):提取矩阵A的主对角线以上元素。

​ triu(A,k):提取矩阵A的第k条对角线以上元素。

​ tril(A):提取矩阵A的主对角线以下元素。

​ tril(A,k):提取矩阵A的第k条对角线以下元素。

>> A

A =

     7     0     1     0     5
     3     5     4     2     7
     9     3     5     3     4
     1     1     6     7     3
     4     0     2     3     0

>> triu(A)

ans =

     7     0     1     0     5
     0     5     4     2     7
     0     0     5     3     4
     0     0     0     7     3
     0     0     0     0     0

>> triu(A,1)

ans =

     0     0     1     0     5
     0     0     4     2     7
     0     0     0     3     4
     0     0     0     0     3
     0     0     0     0     0

>> tril(A)

ans =

     7     0     0     0     0
     3     5     0     0     0
     9     3     5     0     0
     1     1     6     7     0
     4     0     2     3     0

>> tril(A,-1)

ans =

     0     0     0     0     0
     3     0     0     0     0
     9     3     0     0     0
     1     1     6     0     0
     4     0     2     3     0

【4】矩阵的转置

​ 转置运算符是小数点后面接单引号(. ‘)
​ 共轭转置,其运算符是单引号(’),它在转置的基础上还要 取每个数的复共轭。

​ Note:如果矩阵元素为实数,则其转置和共轭转置是一样的。如果矩阵元素为复数,则其转置和共轭转置是不一样的。

>> A

A =

     7     0     1     0     5
     3     5     4     2     7
     9     3     5     3     4
     1     1     6     7     3
     4     0     2     3     0

>> A.'

ans =

     7     3     9     1     4
     0     5     3     1     0
     1     4     5     6     2
     0     2     3     7     3
     5     7     4     3     0

 
>> A'

ans =

     7     3     9     1     4
     0     5     3     1     0
     1     4     5     6     2
     0     2     3     7     3
     5     7     4     3     0

>> B = [1,2;3+4i,1-2i]

B =

   1.0000 + 0.0000i   2.0000 + 0.0000i
   3.0000 + 4.0000i   1.0000 - 2.0000i

>> B.'

ans =

   1.0000 + 0.0000i   3.0000 + 4.0000i
   2.0000 + 0.0000i   1.0000 - 2.0000i

>> B'

ans =

   1.0000 + 0.0000i   3.0000 - 4.0000i
   2.0000 + 0.0000i   1.0000 + 2.0000i

【5】矩阵的旋转

​ rot90(A,k):将矩阵A逆时针方向旋转90度的k倍,k为1时可省略。

>> A

A =

     7     0     1     0     5
     3     5     4     2     7
     9     3     5     3     4
     1     1     6     7     3
     4     0     2     3     0

>> rot90(A,2)

ans =

     0     3     2     0     4
     3     7     6     1     1
     4     3     5     3     9
     7     2     4     5     3
     5     0     1     0     7

【6】矩阵的翻转

​ fliplr(A):将矩阵A进行左右翻转。

​ flipud(A):将矩阵A进行上下翻转。

>> A

A =

     7     0     1     0     5
     3     5     4     2     7
     9     3     5     3     4
     1     1     6     7     3
     4     0     2     3     0

>> fliplr(A)

ans =

     5     0     1     0     7
     7     2     4     5     3
     4     3     5     3     9
     3     7     6     1     1
     0     3     2     0     4

>> flipud(A)

ans =

     4     0     2     3     0
     1     1     6     7     3
     9     3     5     3     4
     3     5     4     2     7
     7     0     1     0     5

​ eg:验证魔方阵的主对角线与副对角线元素和相等。

>> B = magic(5)

B =

    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


>> D1 = diag(B)

D1 =

    17
     5
    13
    21
     9

>> sum(D1)

ans =

    65

>> C = fliplr(B)

C =

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

>> D2 = diag(C)

D2 =

    15
    14
    13
    12
    11

>> sum(D2)

ans =

    65

【7】矩阵求逆

​ inv(A):求方阵A的逆矩阵。

>> B

B =

    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

>> inv(B)

ans =

   -0.0049    0.0512   -0.0354    0.0012    0.0034
    0.0431   -0.0373   -0.0046    0.0127    0.0015
   -0.0303    0.0031    0.0031    0.0031    0.0364
    0.0047   -0.0065    0.0108    0.0435   -0.0370
    0.0028    0.0050    0.0415   -0.0450    0.0111

>> format rat
>> inv(B)

ans =

     -77/15600      133/2600       -23/650          3/2600        53/15600 
      89/2063       -97/2600        -3/650         33/2600        23/15600 
     -59/1950         1/325          1/325          1/325         71/1950  
      73/15600      -17/2600         7/650        113/2600      -577/15600 
      43/15600        1/200         27/650         -9/200         98/8837  

​ eg:用逆矩阵求解方程组。
matlab-矩阵_第5张图片

​ A=[1,2,3;1,4,9;1,8,7] b=[5,-2,6]^T

​ AX=b X =A的逆乘以b

>> b=[5,-2,6]

b =

       5             -2              6       

>> A = [1,2,3;1,4,9;1,8,27]

A =

       1              2              3       
       1              4              9       
       1              8             27       

>> b = b.'

b =

       5       
      -2       
       6       

>> X = inv(A)*b

X =

      23       
     -29/2     
      11/3    

矩阵求值

​ 【1】求行列式

​ det(A):求方阵A所对应行列式的值

>> A = [1,1,0;1,0,5;1,10,2];
>> A

A =

     1     1     0
     1     0     5
     1    10     2

>> det(A)

ans =

   -47

​ 【2】求矩阵的秩

​ 秩:矩阵中线性无关的行数或列数

​ rank(A):求矩阵A的秩

>> B = [1,1,0;1,10,2;1,1,0]

B =

     1     1     0
     1    10     2
     1     1     0

>> rank(B)

ans =

     2

​ 【3】求矩阵的迹

​ 矩阵的迹等于矩阵的对角线之和,也等于矩阵特征值之和。

>> A

A =

     1     1     0
     1     0     5
     1    10     2

>> trace(A)

ans =

     3

​ 【4】求向量和矩阵的范数

​ 向量的3种常用范数

​ 向量一范数:向量元素的绝对值和-norm(A,1)

​ 向量二范数:向量元素的绝对值平方和的平方根-norm(A,2)

​ 向量无穷大范数:所有向量元素绝对值的最大值-norm(A,inf)

​ 矩阵的3种常用范数

​ 矩阵一范数:矩阵列元素的绝对值和的最大值-norm(A,1)

​ 矩阵二范数:矩阵的转置乘以矩阵的最大特征值的平方根-norm(A,2)

​ 矩阵无穷大范数:所有矩阵行元素绝对值和的最大值-norm(A,inf)

>> B =[1,2,3];
>> norm(B,1)

ans =

     6

>> norm(B,2)

ans =

    3.7417

>> norm(B,inf)

ans =

     3


>> A

A =

     1     1     0
     1     0     5
     1    10     2

>> norm(A,1)

ans =

    11

>> norm(A,2)

ans =

   10.3757

>> norm(A,inf)

ans =

    13

     

​ 【5】求矩阵的条件数

​ 矩阵A的条件数=A的范数与A的逆的范数的乘积

​ cond(A,1):计算A一范数下的条件数

​ cond(A,2):计算A二范数下的条件数

​ cond(A,1):计算A无穷范数下的条件数

eg:求2~10阶希尔伯特矩阵的条件数

>> for n=2:10
    c(n) = cond(hilb(n))
end


>> c'

ans =

   1.0e+13 *

                   0
   0.000000000001928
   0.000000000052406
   0.000000001551374
   0.000000047660725
   0.000001495105864
   0.000047536735691
   0.001525757556663
   0.049315340455101
   1.602502816811318

矩阵的特征值与特征向量

​ 设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值入的特征向量。

​ E=eig(A)∶求矩阵A的全部特征值,构成向量E。
​ [X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。

>> A = [1,1,0;1,0,5;1,10,2];
>> [X,D] = eig(A)

X =

    0.0722    0.9751    0.0886
    0.5234   -0.0750   -0.6356
    0.8490   -0.2089    0.7669


D =

    8.2493         0         0
         0    0.9231         0
         0         0   -6.1723

稀疏矩阵

​ 【1】矩阵的存储方式

​ 1.完全存储方式

​ 2.稀疏存储方式-只按列存储非零元素的值及其位置

​ 【2】稀疏矩阵存储方式的产生

​ 1.完全存储方式和稀疏存储方式之间的转换

​ A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
​ S=fullA):将矩阵A转化为完全存储方式的矩阵S。

>> A = sparse(eye(5))

A =

   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
   (5,5)        1

>> B = full(A)

B =

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

你可能感兴趣的:(Matlab)