围绕PINV方式([INF])在八度/ Matlab的= NaN的(Ways around pinv

2019-10-21 20:51发布

我使用的倍频3.8.1,一个Matlab样的程序。 我想概括1/x的地方的情况下x可以是标量或矩阵。 替换1/xinv(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事后得到这个工作? 还是我错过了什么? 谢谢!

Answer 1:

在摩尔-彭罗斯伪逆 ,这是Matab和倍频的基础pinv ,通过完全不同的算法比实施inv功能。 更具体地说, 奇异值分解使用 ,这需要的有限值矩阵(它们也不能是sparse )。 你没有说,如果你的矩阵是正方形或没有。 真正使用的pinv是解决非方形系统( 过或欠定 )。

但是,你不应该使用pinvinv为您的应用程序,无论你的矩阵的尺寸。 相反,你应该使用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) 然而,这两种都是有效的解决方案。



文章来源: Ways around pinv([inf])=NaN in Octave/Matlab