0
疑似逆行列計算でも可逆行列は必ずしも必要ではありませんが、私は非特異行列を使ってテストしています。私がアルマジロだけを使うと、答えはエラーなく返されます。matlabで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;
}
このコードは(このために感謝する@クレス・ローレン)をmexでするようになった:私は、次のコードを使用しています失敗しました。行列が非単数であっても、なぜこれが起こるのかを誰かが助けることができます。上記のコードは、inv()のpinv()を変更するときに機能しますが、私のアプリケーションではpinv()で動作する必要があります。エラーなしMATLABに
あなたのコードを 'inv()'と 'pinv()'の両方で試してみました。私はArmadillo 6.7、Visual Studio 2015、Matlab 2016aをWindows10で使用しています。 –
@ClaesRolen私はここでUbuntu 16を使用しています。私はmatlabのフォーラムで同様の質問を発見し、問題なくコードを実行できるようになりました。 matlabを実行する前にシステム変数を設定するだけでした。もう一度、答えをありがとう! –