簡體   English   中英

在Matlab中使用mex + armadillo時pinv return svd失敗

[英]pinv return svd failed when use mex + armadillo in matlab

即使是偽逆矩陣計算也不一定需要可逆矩陣,我正在使用非奇異矩陣進行測試。 當我只使用犰狳時,返回的答案沒有錯誤。 我正在使用下一個代碼:

#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(為此,感謝@ claes-rolen):

#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()一起使用。

要在matlab上使用pinv()而不出現錯誤,請執行以下步驟:

在命令行中,設置以下變量:

export BLAS_VERSION="/usr/lib/libblas.so"
export LAPACK_VERSION="/usr/lib/liblapack.so"

執行matlab並編譯mex代碼:

mex prog.cpp -larmadillo -llapack -lblas

這適用於Ubuntu 16。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM