MATLAB与线性代数--矩阵与向量

矩阵相乘

基本操作

特殊类型矩阵

引用矩阵元素

行列式与线性方程组求解

矩阵相乘:

如果A是一个mXp矩阵,而B是pXn矩阵,它们就可以相乘产生mXn矩阵。
在此介绍两个经常出错的概念:

矩阵的相乘与数组的相乘;

  • 矩阵的相乘:

     两个矩阵的阶数可以不同,可以点乘(数量积)也可以叉乘(向量积)
    
  • 数组的相乘

     数组的相乘是点乘(数量积),得到的是一个数
    
>> A = [2 1; 1 2];
>> B = [3 4; 5 6];
>> A.*B
ans =
     6     4
     5    12

现在我们把“.”去掉,进行结果不同的矩阵相乘:

>>  A * B
ans =
    11    14
    13    16

下面是一个例子:
矩阵A是一个3X2矩阵,而B是一个2X3矩阵,由于A的列数和B的行数相匹配 。我们可以计算AB的向量积

>> A = [1 4;8 0; -1 3];
>> B = [-1 7 4;2 1 -2];
>> C = A * B
C =
     7    11    -4
    -8    56    32
     7    -4   -10

虽然这种形式的矩阵可以进行相乘,但不能进行数组的相乘,要使用数组相乘,行数和列数必须相等

更多基本操作

  • 矩阵加上某个元素
  • 矩阵的左除与右除
  • 矩阵元素的平方

MATLAB允许你把数量添加到一个数组(向量或者矩阵)中,即把数加到数组的每个元素中。

>> A = [1 2 3 4];
>> b = 2;
>> C = A + b
C =
     3     4     5     6
矩阵的左除与右除

这时数组元素与元素相匹配,因此两个数组必须等大。

  • 右除:
>> A = [2 4  6 8];
>> B = [2 2 3 1];
>> C = A./B
C =
     1     2     2     8
  • 左除:
>> E = A.\B 
E =
    1.0000    0.5000    0.5000    0.1250

E = A.\BE = B./A相同

  • 对数组的每个元素平方:
>> B = [2 4; -1 6];
>> B.^2
ans =
     4    16
     1    36

特殊类型矩阵:

  • 单位矩阵:

     主对角线元素全为1,其余全为0的方形矩阵。
    

使用以下命令创建一个nxn的单位矩阵

eye(n);
>> eye(5)
ans =
     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
  • 零矩阵:
  1. nxn阶矩阵:
zeros(n);
>> zeros(4)
ans =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
  1. mxn阶矩阵
zeros(m,n);
>> zeros(4,5)
ans =
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0     0
  • 元素全为1:元素全为1的n阶矩阵
ones(n);
>> ones(4)
ans =
     1     1     1     1
     1     1     1     1
     1     1     1     1
     1     1     1     1

元素全为1的mxn阶矩阵

ones(m,n);
>> ones(4,5)
ans =
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1
     1     1     1     1     1

引用矩阵元素

MATLAB中,矩阵的单个元素或者整列都能够被引用

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

可以用A(m,n)选出第m行第n列的元素:

>> A(2,3)
ans =
     6

A(:,i)引用第i列的全部元素:

>> A(:,2)

ans =

     2
     5
     8

使用A(:,i:j)选出从第i列到第j列的所有元素

>> A(:,2:3)
ans =
     2     3
     5     6
     8     9

也可以选出矩阵特定的一小块:

>> A(2:3,1:2)
ans =
     4     5
     7     8

也可以通过引用改变矩阵的值,例如把第一行第一列的值改为-8

>> A(1,1) = -8
A =
    -8     2     3
     4     5     6
     7     8     9

要在MATLAB中创建空数组,只需在方括号里留空即可,它可以用来删除行或者列。
删除矩阵的第二行:

>>  A(2,:) = []
A =
    -8     2     3
     7     8     9

通过复制矩阵中的元素来创建新的矩阵:
复制矩阵的第一行四次来创建一个新的矩阵:

A =
    -8     2     3
     7     8     9

>> E = A([1,1,1,1],:)

E =

    -8     2     3
    -8     2     3
    -8     2     3
    -8     2     3

又如,引用两次A的第一行创建新的矩阵:

>> A = [-8, 2, 3;7, 8, 9];
>> F = A([1,2,1],:)

F =

    -8     2     3
     7     8     9
    -8     2     3

行列式与线性方程组求解

用系数矩阵左除向量矩阵(方程右边的值组成的矩阵)

要计算矩阵A的行列式的值,只需用命令det(A),如:
2X2矩阵的行列式:

>> A = [1 3;4 5];
>> det(A)
ans =
    -7

4X4矩阵的行列式:

>> B = [3 -1 2 4; 0 2 1 8; -9 17 11 3; 1 2 3 -3];
>> det(B)
ans =
 -533.0000

考虑下面的方程组:

5x + 2y -9z = -18
-9x - 2y + 2z  = -7
6x + 7y + 3z = 29

解这样的方程组需要两步:
首先求系数矩阵A的行列式,在本例中:

>> A = [5 2 -9; -9 -2 2; 6 7 3];
>> A

A =

     5     2    -9
    -9    -2     2
     6     7     3

>> det(A)

ans =

   437

如果行列式不为0,说明有解,解是列向量:

 X = [x;y;z]

使用左除就可以得到解,不过要先创建由方程右边组成的向量:

b = [-18;-7;29]
b =
   -18
    -7
    29

解为:

>> A\b
ans =
    1.0000
    2.0000
    3.0000
发布了84 篇原创文章 · 获赞 18 · 访问量 5805

猜你喜欢

转载自blog.csdn.net/qq_44486550/article/details/105077469