我使用的倍频3.8.1,一个Matlab样的程序。 我想概括1/x
的地方的情况下x
可以是标量或矩阵。 替换1/x
与inv(x)
或pinv(x)
适用于大多数x
,除了:
octave:1> 1/inf
ans = 0
octave:2> pinv([inf])
ans = NaN
octave:3> inv([inf])
warning: inverse: matrix singular to machine precision, rcond = 0
ans = Inf
我应该转换为NaN 0事后得到这个工作? 还是我错过了什么? 谢谢!
在摩尔-彭罗斯伪逆 ,这是Matab和倍频的基础pinv
,通过完全不同的算法比实施inv
功能。 更具体地说, 奇异值分解使用 ,这需要的有限值矩阵(它们也不能是sparse
)。 你没有说,如果你的矩阵是正方形或没有。 真正使用的pinv
是解决非方形系统( 过或欠定 )。
但是,你不应该使用pinv
或inv
为您的应用程序,无论你的矩阵的尺寸。 相反,你应该使用mldivide
( 八度 , Matlab的 ),即反斜线操作, \
。 这是更有效和数值鲁棒性。
A1 = 3;
A2 = [1 2 1;2 4 6;1 1 3];
A1inv = A1\1
A2inv = A2\eye(size(A2))
该mldivide
函数处理矩形矩阵太多,但你会得到比欠定系统不同的答案pinv
因为这两个用不同的方法来选择的解决方案。
A3 = [1 2 1;2 4 6]; % Underdetermined
A4 = [1 2;2 4;1 1]; % Overdetermined
A3inv = A3\eye(min(size(A3))) % Compare to pinv(A3), different answer
A4inv = A4\eye(max(size(A4))) % Compare to pinv(A4), same answer
如果你运行上面的代码,你会发现你会得到一个稍微不同的结果为A3inv
相比,什么是返回pinv(A3)
然而,这两种都是有效的解决方案。