0
即使是僞逆矩陣計算也不一定需要一個可逆矩陣,我正在使用一個非奇異矩陣來測試。當我只使用犰狳時,答案無誤地被返回。我用下面的代碼:pinv return svd在matlab中使用mex + armadillo時失敗
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
int main(int argc, char** argv)
{
mat A,B;
A << 1 << 2 << endr << 3 << 4 << endr;
A.print("A:");
B = pinv(A);
B.print("B:");
return 0;
}
此代碼是適應於MEX(感謝@克拉斯 - 羅倫此):
#include "armaMex.hpp"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mat A = conv_to<mat>::from(armaGetPr(prhs[0],true));
plhs[0] = armaCreateMxMatrix(A.n_rows,A.n_cols, mxDOUBLE_CLASS, mxREAL);
armaSetPr(plhs[0],conv_to<mat>::from(pinv(A)));
}
但與之前的矩陣測試,它返回SVD-失敗。有人可以幫助爲什麼會發生這種情況,即使矩陣非單一。上面的代碼在我爲inv()更改pinv()時起作用,但對於我的應用程序,我需要它與pinv()一起工作。
嘗試你的代碼'inv()'和'pinv()'並且它工作正常。我在Windows10上使用Armadillo 6.7,Visual Studio 2015和Matlab 2016a。 –
@ClaesRolen我在這裏使用Ubuntu 16。我在matlab的論壇上發現了一個類似的問題,我現在可以毫無問題地運行代碼。在運行matlab之前,它只是設置了一些系統變量。再一次,謝謝你的回答! –