0
의사 역행렬 계산에도 반드시 역전 행렬이 필요하지는 않습니다. 테스트하기 위해 비특이적 행렬을 사용하고 있습니다. armadillo 만 사용하면 대답은 오류없이 반환됩니다. 이전 매트릭스 테스트 할 때matvab에서 mex + armadillo를 사용할 때 pinv return svd가 실패했습니다.
#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- 반환 :이 코드는 적응했다
#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;
}
(이 주셔서 감사합니다 @ CLAES - 롤렌)를 MEX하기 : 나는 다음 코드를 사용하고 있습니다 실패한. 매트릭스가 비특이적이라 할지라도 누군가가 이런 일이 일어나는 이유를 도울 수 있습니다. 위의 코드는 inv()에 대해 pinv()를 변경할 때 작동하지만 내 응용 프로그램에서는 pinv()로 작동해야합니다. MATLAB을 실행
export BLAS_VERSION="/usr/lib/libblas.so"
export LAPACK_VERSION="/usr/lib/liblapack.so"
및 MEX 코드를 컴파일 : : 다음 변수를 설정, 명령 줄에서
:
mex prog.cpp -larmadillo -llapack -lblas
을
코드를'inv()'와'pinv()'모두 시도해 보았지만 정상적으로 작동했습니다. 나는 Windows10에서 Armadillo 6.7, Visual Studio 2015 및 Matlab 2016a를 사용합니다. –
@ClaesRolen 여기에서 우분투 16을 사용하고 있습니다. 나는 matlab의 포럼에서 비슷한 질문을 발견했다. 이제 문제없이 코드를 실행할 수있다. 그냥 matlab을 실행하기 전에 몇 가지 시스템 변수를 설정했다. 한 번 더 대답 해줘서 고마워! –