目录
矩阵的秩
先看一下矩阵的秩的定义,摘自百度百科。
方阵(行数、列数相等的矩阵)的列秩和行秩总是相等的,因此它们可以简单地称作矩阵A的秩。通常表示为r(A),rk(A)或rank(A)。
m × n矩阵的秩最大为m和n中的较小者,表示为 min(m,n)。有尽可能大的秩的矩阵被称为有满秩;类似的,否则矩阵是秩不足(或称为“欠秩”)的。
定义1. 在m*n矩阵A中,任意决定α行和β列交叉点上的元素构成A的一个k阶子矩阵,此子矩阵的行列式,称为A的一个k阶子式。
例如,在阶梯形矩阵中,选定1,3行和3,4列,它们交叉点上的元素所组成的2阶子矩阵的行列式 就是矩阵A的一个2阶子式。
定义2. A=(aij)m×n的不为零的子式的最大阶数称为矩阵A的秩,记作rA,或rankA或R(A)。
特别规定零矩阵的秩为零。
即存在r阶子式不为0,任意r+1阶子式(若还有)必全为0。
显然rA≤min(m,n) 易得:
若A中至少有一个r阶子式不等于零,且在r<min(m,n)时,A中所有的r+1阶子式全为零,则A的秩为r。
由定义直接可得n阶可逆矩阵的秩为n,通常又将可逆矩阵称为满秩矩阵, det(A)≠0;不满秩矩阵就是奇异矩阵,det(A)=0。
由行列式的性质知,矩阵A的转置AT的秩与A的秩是一样的,即rank(A)=rank(AT)。
MATLAB求解矩阵的秩:
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> rank(A)
ans =
2
矩阵A与B的和与差
相加和相减。相同维数的矩阵可以相加或相减。对如下矩阵:
>> A=[2 3;4 5;6 7]
A =
2 3
4 5
6 7
>> B = [1 0;2 3;0 4]
B =
1 0
2 3
0 4
>> A+B
ans =
3 3
6 8
6 11
>> A-B
ans =
1 3
2 2
6 3
矩阵的数乘
>> A=[2 3;4 5;6 7]
A =
2 3
4 5
6 7
>> 5*A
ans =
10 15
20 25
30 35
矩阵A与B的乘积
进行矩阵的乘积运算,第一个矩阵中的列数与第二个矩阵中的行数必须相等。
注意:矩阵相乘不满足交换定理。
>> A=[2 3;4 5;6 7];
>> B=[1 0 2;3 0 4];
>> A*B
ans =
11 0 16
19 0 28
27 0 40
如果第一个矩阵中的列数与第二个矩阵中的行数不相等相等,那么矩阵A与B相乘会报错。
>> A=[2 3;4 5;6 7];
>> B = [1 0;2 3;0 4];
>> A*B
错误使用 *
用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中的行数匹配。要执行按元素相乘,请使用 '.*'。
MATLAB给出点乘的提示。矩阵的点乘满足交换律。
矩阵的点乘则必须满足:矩阵A点.*矩阵B,矩阵A和矩阵B的行数和列数必须相等(就是说矩阵A的行数等于矩阵B的行数,矩阵A的列数等于矩阵B的列数),方法是对应每个元素相乘,相乘得到的最终结果为和矩阵A和矩阵B相同维度的矩阵。
>> A=[2 3;4 5;6 7];
>> B = [1 0;2 3;0 4];
>> A.*B %即2=2*1,0=3*0,8=4*2
ans =
2 0
8 15
0 28
叉乘和点乘是两种不同的运算。
点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。
叉乘,也叫向量积。结果是一个和已有两个向量都垂直的向量。
(4 条消息) 点乘和叉乘的区别是什么? - 知乎 (zhihu.com)(4 条消息) 点乘和叉乘的区别是什么? - 知乎 (zhihu.com)
转置矩阵
A =
1 2 3
4 5 6
7 8 9
>> B=A'
B =
1 4 7
2 5 8
3 6 9
伴随矩阵
运用adjoint()函数,意为伴随。
A=[1 2;3 4]
A =
1 2
3 4
>> adjoint(A)
ans =
4.0000 -2.0000
-3.0000 1.0000
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> adjoint(A)
ans =
-3.0000 6.0000 -3.0000
6.0000 -12.0000 6.0000
-3.0000 6.0000 -3.0000
对于可逆矩阵或非奇异矩阵,可采用下面这种方法:
>> A=[1 3;1 2];
>> inv(A)*det(A)
ans =
2 -3
-1 1
可逆矩阵:
根据线性代数矩阵的一些重要性质:
那么可逆矩阵指的都是n阶方阵且行列式不等于0
>> A=[1 3;1 2];
>> inv(A)
ans =
-2 3
1 -1
>> A*ans
ans =
1 0
0 1
或者采用这种方法:
>> A=[1 3;1 2]
A =
1 3
1 2
>> A^-1
ans =
-2 3
1 -1
某些情况下会出现行列式为零,竟然可以求解逆矩阵?的情况,原因一般是inv()函数算法精度不够的问题;亦或者是行列式结果看起来为零未必真为零,可能只是很小的数值,比如在command window里默认只显示了几位小数,看起来结果是0.0000(MATLAB默认显示四位小数),但实际上并不一定为0。
inv是数值计算,会受到精度影响,尤其是比较大的矩阵
另外,matlab更推荐使用左除和右除来避免使用inv函数
>> a = [1,2;3 4];
b = [3,4;5,6];
>> a*inv(b)
ans =
2.0000 -1.0000
1.0000 0.0000
>> a/b %实际工程应用中一般选择这种方式,运算结果更加准确
ans =
2.0000 -1.0000
1.0000 -0.0000
简化行阶梯(行最简)矩阵
A =
1 2 3
4 5 6
7 8 9
>> B=rref(A)
B =
1 0 -1
0 1 2
0 0 0
对于非方阵也可以用rref()命令简化行阶梯矩阵;
>> A = magic(3);
A(:,4) = [1; 1; 1]
A =
8 1 6 1
3 5 7 1
4 9 2 1
>> R = rref(A)
R =
1.0000 0 0 0.0667
0 1.0000 0 0.0667
0 0 1.0000 0.0667
矩阵A的n次方
>> A=[0 0 0;2 0 0;1 3 0]
A =
0 0 0
2 0 0
1 3 0
>> A^2
ans =
0 0 0
0 0 0
6 0 0
>> A^3
ans =
0 0 0
0 0 0
0 0 0
我是小韩每天进步一点点,一名研0的研究生,刚开始写博客。希望和大家多多交流,一起进步!
求朋友点赞、收藏、关注哈,鼓励一下新人博主,或者提出建议!