矩阵相乘
基本操作
特殊类型矩阵
引用矩阵元素
行列式与线性方程组求解
如果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.\B
与E = 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
nxn
阶矩阵:zeros(n);
>> zeros(4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
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
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