我最近一直在使用Armadillo编写c ++ mex文件来加速一些Matlab代码。到目前为止,我实际上只使用了'立方体'和'矩阵'数据存储类型和简单的操作。
我对计算SVD犰狳功能很感兴趣。但是,当我调用svd函数时,Matlab报告'警告:svd():分解失败'。
此外,命令窗口将报告“英特尔MKL错误:输入DGESDD时参数12不正确”。 DGESDD来自Lapack库并执行SVD,这使我相信我在连接Armadillo和Lapack库时出错了。
有谁知道如何纠正这个问题?
在Matlab中,我将函数初始化为: mex -v testFunction.cpp -larmadillo -lblas -llapack
在mex文件中,我目前正在使用Armadillo网站上的确切示例:
#include <armadillo>
#include "armaMex.hpp"
#include <omp.h>
#include <lapacke.h>
... general mex function calls ...
mat X = randu<mat>(5,5);
mat U;
vec s;
mat V;
svd(U,s,V,X);