我正在做一个项目,我需要检查布尔数组“向量”是否与“矩阵”的列线性无关。在 MATLAB 中,可以通过使用命令 rank(gf([matrix vector])) 找到增广矩阵 [matrix vector] 的秩来完成。'gf' 因为矩阵是布尔值。但是如何在 C++ 中做到这一点。这是我尝试过的:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#define BUFSIZE 256
int main()
{
Engine *ep;
mxArray *M = NULL, *V = NULL, *result = NULL;
bool matrix[4][4]={1,1,1,0,0,1,1,0,0,1,0,0}, vector[4][1]={1,1,1,1};
double *rank;
if (!(ep = engOpen("\0"))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
V = mxCreateDoubleMatrix(4, 1, mxREAL);
M = mxCreateDoubleMatrix(4, 4, mxREAL);
memcpy((void *)mxGetPr(V), (void *)vector, sizeof(vector));
memcpy((void *)mxGetPr(M), (void *)matrix, sizeof(matrix));
engPutVariable(ep, "V", V);
engPutVariable(ep, "M", M);
engEvalString(ep, "R = rank(gf([M V]));");
result = engGetVariable(ep, "R");
engClose(ep);
rank = mxGetPr(result);
printf("%f", *rank);
printf("Done with LI\n");
mxDestroyArray(M);
mxDestroyArray(V);
mxDestroyArray(result);
engEvalString(ep, "close;");
}
上面的代码有效,我得到了想要的结果。但它运行得很慢。任何人都可以建议我一种让它快速的方法吗?或者建议一些其他方法来查找布尔矩阵的等级。一些库在那里,但它们似乎只具有用于 int 或 double 矩阵的功能。