偽逆矩陣(moore-penrose pseudoinverse)a定義:
a+=vd+ut,其中,u,d和v是矩陣a奇異值分解後得到的矩陣。對角矩陣d的偽逆d+是非零元素取倒數之後再轉置得到的。
c++實現偽逆矩陣,程式**:
#include "funset.hpp"
#include #include #include #include #include #include #include "common.hpp"
int test_pseudoinverse()
, // ,
// };
//const int rows, cols;
std::vector> vec,
};const int rows, cols;
std::vectorvec_;
for (int i = 0; i < rows; ++i)
eigen::map> m(vec_.data(), rows, cols);
fprintf(stderr, "source matrix:\n");
std::cout << m << std::endl;
fprintf(stderr, "\neigen implement pseudoinverse:\n");
auto svd = m.jacobisvd(eigen::computefullu | eigen::computefullv);
const auto &singularvalues = svd.singularvalues();
eigen::matrixsingularvaluesinv(m.cols(), m.rows());
singularvaluesinv.setzero();
double pinvtoler = 1.e-6; // choose your tolerance wisely
for (unsigned int i = 0; i < singularvalues.size(); ++i)
eigen::matrixxf pinvmat = svd.matrixv() * singularvaluesinv * svd.matrixu().transpose();
std::cout << pinvmat << std::endl;
return 0;
}
執行結果: C 實現求解逆矩陣
利用c語言求解線性代數中求解逆矩陣的一類問題。最近在學線代,其中有乙個挺煩人的就是求解逆矩陣,雖然求逆矩陣不難,但我自己在解題的時候經常求錯,所以就想能不能用演算法來求解這一類的題目。求解逆矩陣一般可以用初等行變換或伴隨矩陣方法求解。這裡採用的是伴隨矩陣方法。思路很簡單,先求矩陣a對應的行列式 a ...
C 矩陣處理庫 Eigen初步使用
專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做 優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。首先考慮的是與matlab混合...
C 矩陣處理庫 Eigen初步使用
專案要進行比較多的矩陣操作,特別是二維矩陣。剛開始做實驗時,使用了動態二維陣列,於是寫了一堆matrix函式,作矩陣的乘除加減求逆求行列式。實驗做完了,開始做 優化,發現matrix.h檔案裡適用性太低,而且動態二維陣列的空間分配與釋放也影響效率,於是尋找其他解決方案。首先考慮的是與matlab混合...