1、inv 与 pinv
原文地址:点击打开链接
对于方阵A,如果为非奇异方阵,则存在逆矩阵inv(A)
对于奇异矩阵或者非方阵,并不存在逆矩阵,但可以使用pinv(A)求其伪逆
B*inv(A) 实际上可以写成B/A
这样比求逆之后带入精度要高
pinv是求广义逆
先搞清楚什么是伪逆。
对于方阵A,若有方阵B,使得:A·B=B·A=I,则称B为A的逆矩阵。
如果矩阵A不是一个方阵,或者A是一个非满秩的方阵时,矩阵A没有逆矩阵,但可以找到一个与A的转置矩阵A'同型的矩阵B,使得:
A·B·A=A
B·A·B=B
此时称矩阵B为矩阵A的伪逆,也称为广义逆矩阵。因此伪逆阵与原阵相乘不一定是单位阵。
当A可逆时,B就是A的逆矩阵,否则就是广义逆。满足上面关系的A,B矩阵,有很多和逆矩阵相似的性质。
如果A为非奇异矩阵的话,虽然计算结果相同,但是pinv会消耗大量的计算时间。
在其他情况下,pinv具有inv的部分特性,但是不完全相同。
(3)\ 运算符
原文地址:点击打开链接
使用各类优化算法求逆都得不到好的结果,结果一个“\”运算居然很快就得到了很精确的解。这是个很奇妙的事情。因此,追求“\”的运算原理是很必要的。
matlab的help中写道:
\ Backslash or left matrix divide.
A\B is the matrix division of A into B, which is roughly the
same as INV(A)*B , except it is computed in a different way.
If A is an N-by-N matrix and B is a column vector with N
components, or a matrix with several such columns, then
X = A\B is the solution to the equation A*X = B. A warning
message is printed if A is badly scaled or nearly singular.
A\EYE(SIZE(A)) produces the inverse of A.
If A is an M-by-N matrix with M < or > N and B is a column
vector with M components, or a matrix with several such columns,
then X = A\B is the solution in the least squares sense to the
under- or overdetermined system of equations A*X = B. The
effective rank, K, of A is determined from the QR decomposition
with pivoting. A solution X is computed which has at most K
nonzero components per column. If K < N this will usually not
be the same solution as PINV(A)*B. A\EYE(SIZE(A)) produces a
generalized inverse of A.
C = mldivide(A,B) is called for the syntax 'A \ B' when A or B is an
object.
inv:Y=inv(X)返回方阵X的逆矩阵,如果X病态或者高度奇异,则会显示警告信息。实际上,很少需要真的把矩阵的逆求出来,常见的使用失误主要出现在求解线性方程组AX=b。一种求解方法为x=inv(A)*b,但如要达到更快,更稳定,就得用X=A\b。这个算法使用高斯消去法,因此不产生逆矩阵。
“\”:反斜线符号,矩阵左除。如果A是方阵,A\B近似等于inv(A)*B,只是他们的算法不一样。如果A是n*n的方阵,B是n*1的列向量,或n*?的矩阵,那么X=A\B是AX=B的解。如果A很病态或者很奇异,很会显示警告信息。A\EYE(SIZE(A))计算A的逆,参见mldivide可得到更多信息。如果A是m*n的矩阵,m!=n,B是m*1或m*?的列向量,那么X=A\B就是线性方程组AX=B(超定或者欠定)的最小二乘解。A的有效秩(effective rank)k有选主元的QR分解决定。Asolution X is computed that has at most k nonzero componentspercolumn。如果K,结果通常和pinv(A)*B不一样,后者是最小范数解。A\EYE(SIZE(A))用来求解A的广义逆。
mldivide(A,B):等价于A\B,A和B必须有一样多的行,除非A是个标量(这时就等于.\)。如果A是个方阵,A\B近似等于inv(A)*B,只是两者算法不一样。如果A是m*n的矩阵,那么X=A\B求解AX=B(超定或欠定)的最小二乘解,即(AX-B)的范数极小。