簡體   English   中英

在Octave / Matlab中pinv([inf])= NaN的方法

[英]Ways around pinv([inf])=NaN in Octave/Matlab

我正在使用類似Matlab的程序Octave 3.8.1。 我想將1/x推廣到x可能是標量或矩陣的情況。 inv(x)pinv(x)替換1/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,以使其正常工作? 還是我錯過了什么? 謝謝!

Matore和octave的pinv的基礎是Moore-Penrose偽逆 ,它是通過與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

如果運行上面的代碼,您將看到與pinv(A3)返回的結果相比, A3inv結果略有不同。 但是,兩者都是有效的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM