2017-08-16 47 views
1

我有很簡單的問題,但不幸的是我無法找到本徵文檔中回答徵:反轉的方形矩陣(最低標準溶液)

我有一個「胖」矩陣一個(行數少於數cols),我想找到矩陣的最小規範僞逆。

理想情況下,我想通過最低標準找到它QR分解如this幻燈片中所述。

根據幻燈片我可以用簡單直接的方法,通過使用這個公式

A.transpose() * (A * A.transpose()).inverse() 

要做到這一點,但我希望有在徵更優雅的解決方案

PS對不起,我的英語

+0

你需要實際的(僞)逆,或你只是想解方程嗎? – chtz

+0

@chtz我需要反向。這個矩陣的組成部分將在大的最小二乘問題中被進一步使用。 –

回答

2

如果A滿秩,那麼你的公式是正確的,你也可以從HouseholderQR分解得到A.transpose()

MatrixXd A(3,6); 
A.setRandom(); 
HouseholderQR<MatrixXd> qr(A.transpose()); 
MatrixXd pinv; 
pinv.setIdentity(A.cols(), A.rows()); 
pinv = qr.householderQ() * pinv; 
pinv = qr.matrixQR().topLeftCorner(A.rows(),A.rows()).triangularView<Upper>().transpose().solve<OnTheRight>(pinv); 

如果沒有,那麼你將不得不使用Eigen::CompleteOrthogonalDecomposition是更易於使用,因爲它的主要目的是爲了解決最小范數問題:

CompleteOrthogonalDecomposition<MatrixXd> cqr(A); 
pinv = cqr.pseudoInverse();