求逆矩阵与伪逆矩阵
矩阵A
的逆矩阵用
表示,并且满足下面的关系:
看下面的矩阵方程:
如果A
的逆矩阵存在,那么解可以写成:
在MATLAB
输入下面的命令就可以计算矩阵A
的逆矩阵
但是逆矩阵并不一定存在,所以我们可以用矩阵的行列式来判断逆矩阵是否存在,如果
那么逆矩阵不存在,这时我们说此矩阵是一个奇异矩阵。
下面是一个2x2
矩阵的例子
首先检查矩阵的行列式:
>> A = [2 3; 4 5];
>> det(A)
ans =
-2
由于行列式不等于0,此矩阵的逆矩阵存在,下面进行逆矩阵的求解:
>> inv(A)
ans =
-2.5000 1.5000
2.0000 -1.0000
又如:
>> S = [1 0 -1 2; 4 -2 -3 1;0 2 -1 1;0 0 9 8];
>> det(S)
ans =
-108
行列式不等于0,逆矩阵T存在:
>> T = inv(S)
T =
-0.9259 0.4815 0.4815 0.1111
-0.6296 0.1574 0.6574 0.0556
-0.5926 0.1481 0.1481 0.1111
0.6667 -0.1667 -0.1667 0
检验一下:
>> S * T
ans =
1.0000 0 0 0
0.0000 1.0000 -0.0000 0
0.0000 -0.0000 1.0000 0
0 0 0 1.0000
来自于四舍五入误差,用另一种方式检查可以避免错误:
>> T * S
ans =
1.0000 0 0 0
0 1.0000 0 0.0000
0 0 1.0000 0
0 0 0.0000 1.0000
用逆矩阵求解方程
考虑方程:
系数矩阵是:
>> A =[3 -2; 6 -2]
A =
3 -2
6 -2
Ax= b
中的向量b
是:
>> b = [5;2]
b =
5
2
我们来检查A
的行列式来确保A
的逆矩阵存在:
>> det(A)
ans =
6
解为:
>> x = inv(A) * b
x =
-1.0000
-4.0000
解的特殊情况
如果方程组的个数比未知数的个数少,此时方程组称为欠定。
这意味着方程组有无数解,因此此时方程组只有一些未知数能能够确定下来,不能确定的可以赋予任意值,因此可以得到无限组解。
我们举个简单例子
稍微处理可以得到:
在这个方程组中,我们可以为两个变量找到值(x
和z
),第三个变量y
是不确定的。我们可以为y
选择自己喜欢的值,此时方程组就有解了。
另一种方程组存在无限解的情况是当det(A) = 0
时,此时我们引入伪逆矩阵(属于广义矩阵)的概念
解的办法是为未知数给出最小范数实数解,即是说,解向量x
具有最小范数且元素都为实数,我们拿一个线性方程组来举例:
很明显,这个方程具有无限解,我们输入数据:
>> A = [3 2 -1;0 4 1];
>> b = [7;2];
>> C = [A b];
现在计算秩:
>> rank(A)
ans =
2
>> rank(C)
ans =
2
由于这些秩相等,解存在,可以使用左除产生一组解:
>> x = A\b
x =
2.0000
0.5000
0
MATLAB
通过把其中一个变量设为0来产生一组解。
此时的矩阵A
不是一个方阵,不能算行列式,所以可以使用伪逆矩阵来解这个方程组。输入以下内容:
>> x = pinv(A) * b
x =
1.6667
0.6667
-0.6667
MATLAB
使用穆尔-彭罗斯法计算pinv