【发布时间】:2016-09-20 01:40:32
【问题描述】:
即使是伪逆矩阵计算也不一定需要可逆矩阵,我用的是非奇异矩阵来测试。当我只使用犰狳时,会返回没有错误的答案。我正在使用下一个代码:
#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-failed。有人可以帮助为什么会发生这种情况,即使矩阵不是奇异的。当我将 pinv() 更改为 inv() 时,上面的代码有效,但对于我的应用程序,我需要它与 pinv() 一起使用。
【问题讨论】:
-
尝试了
inv()和pinv()的代码,它运行良好。我在 Windows10 上使用 Armadillo 6.7、Visual Studio 2015 和 Matlab 2016a。 -
@ClaesRolen 我在这里使用的是 Ubuntu 16。我在 matlab 的论坛上发现了一个类似的问题,我现在可以毫无问题地运行代码。它只是在运行 matlab 之前设置了一些系统变量。再来一次,谢谢你的回答!
标签: matlab matrix linear-algebra mex armadillo