【发布时间】:2014-11-06 08:28:00
【问题描述】:
我编写了一个 C++ 程序,其唯一目的是调用 Matlab 代码。我有一个主程序,它
将文件(高维90000*24的矩阵)中的数据读入C++ 结构
将这些结构传递给 Matlab 代码
使用参数中的这些结构启动 Matlab 例程
从 Matlab 获取输出数据并将它们存储在 C++ 结构中
在 2/ 中,矩阵是 Matlab 结构中的字段。该结构,比如MATLAB_STRUCT,有几个矩阵字段,MATLAB_STRUCT.Z1,MATLAB_STRUCT.Z2,...和一些浮点字段MATLAB_STRUCT.flt1,...
将 C++ 矩阵 (double**) 设置为 Matlab 结构的字段的正确方法是什么?到目前为止,我想出了这个,使用engine.h
mxArray* labcoeffs_array = convertVectorToMxArray(labcoeffs,
coeff_nrows, coeff_ncols);
const std::string lab_coeff_name = "MATLAB_STRUCT.labCoef";
engPutVariable(ep, lab_coeff_name.c_str(), labcoeffs_array);
convertVectorToMxArray 是我写的一个助手,用于将double** 转换为mxArray,
inline mxArray *convertVectorToMxArray(double** mat,
const int nb_rows, const int nb_cols)
{
mxArray *outputMxArray = mxCreateDoubleMatrix(
(int) nb_rows,
(int) nb_cols,
mxREAL);
double *data = (double*) mxGetData(outputMxArray);
for (int r = 0; r < nb_rows; r++)
for (int c = 0; c < nb_cols; c++)
data[r + c*nb_rows] = (double)mat[r][c];
return outputMxArray;
};
但我已经看到了一些其他技术,用于在 Cpp 代码中为 Matlab 结构分配值(虽然是浮点值,而不是矩阵),模仿 C++ 字符串中的命令行语法:
std::string setStruct = "MATLAB_STRUCT" + "." + "nB" + " = " + str->nB + ";";
matlabExecute(ep, setStruct);
ep 是一个指向 Matlab 引擎的指针。
是否可以通过命令行调整这种方法来为 Matlab 结构的矩阵类型字段赋值?
为 Matlab 结构的矩阵类型字段赋值的最佳方法是什么?
【问题讨论】:
标签: c++ matlab matrix mex matlab-engine