方阵求逆
奇异矩阵:行列式为0的矩阵
非奇异矩阵:行列式不为0的矩阵,即可逆矩阵
对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆
非方阵
如果不是方阵的话,会有个广义逆矩阵(伪逆),matlab里面用pinv()实现。
基本语法为X=pinv(A),X=pinv(A,tol),其中tol为误差,pinv为pseudo-inverse的缩写:max(size(A))*norm(A)*eps。函数返回一个与A的转置矩阵A’ 同型的矩阵X,并且满足:AXA=A,XAX=X.此时,称矩阵X为矩阵A的伪逆,也称为广义逆矩阵。
>> A=rand(2,3)
A =
0.9572 0.8003 0.4218
0.4854 0.1419 0.9157
>> B=pinv(A)
B =
0.5985 -0.0838
0.7633 -0.5430
-0.4355 1.2206
>> A*B*A
ans =
0.9572 0.8003 0.4218
0.4854 0.1419 0.9157
接近奇异的矩阵求逆
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =
1.925555e-20.
矩阵中的元素有的很接近,可能这样导致了矩阵接近奇异矩阵,出现上述警告。但是从数学上说该矩阵并非奇异矩阵,想求出准确的逆矩阵
总结一下,就是首先给矩阵乘以一个常数,目的是使矩阵的行列式不至于太小,而后再用12楼的方法,用sym转化后计算。
12楼的方法:
现在的matla的符号计算能力不错!我的2013版。 可以开始时,转化为符号。 如 a=inv(sym([1e-29 1e-17;1e-16
1e-3])); a =[ 1000000000000000000000000000000/9, -10000000000000000/9] [
-100000000000000000/9, 10000/9]
奇异矩阵的判断
奇异矩阵一般可以通过求秩(rank)来判断
奇异矩阵不是满秩