Matlab Mex文件 - 创建一个常量数组

时间:2012-05-25 00:03:12

标签: c matlab matrix mex

我正在尝试创建一个C mex文件,它将输入Nx1矩阵乘以常量Nx1矩阵。我想创建一个矩阵,并为每个mex函数调用赋予它总是相同的值。我一直在寻找教程,但我能找到的只是人们创建矩阵并将它们绑定到输入或输出。我的矩阵应完全独立于此。

我正在尝试做的伪代码:

mxArray *input, *constant_matrix, *output;
input = mxDuplicateArray(prhs[0]);
constant_matrix = [10 15 20 73];            //<---- this is what I can't do.
for i = 1 to 4
    output += input[i]*constant_matrix[i];
return output;

提前谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想在堆栈上创建它,只需执行

const double constant_matrix[]={10,15,20,73};

..或者如果矩阵有点大,或者你在编译时不知道它的大小,你想要堆分配。在mex文件中使用...

double* constant_matrix = (double*)mxCalloc(n, sizeof(double));

..然后在循环中填充它(其中n是元素的数量)。如果使用第二种方法,请不要忘记释放动态分配的内存。

答案 1 :(得分:0)

如果你还在寻找,这是一个简单的实现(没有参数检查):

example.cpp

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    plhs[0] = mxDuplicateArray(prhs[0]);
    const double myArray[4] = {10,15,20,73};
    double *in = mxGetPr(prhs[0]), *out = mxGetPr(plhs[0]);
    for(int i=0; i<4; i++) {
        out[i] += in[i]*myArray[i];
    }
}

编译完成后,我们可以对其进行测试:

>> example(1:10)
ans =
    11    32    63   296     5     6     7     8     9    10