C Matlab Mex文件-创建常量数组

C Matlab Mex文件-创建常量数组,c,matlab,matrix,mex,C,Matlab,Matrix,Mex,我试图创建一个cmex文件,它将输入Nx1矩阵乘以常数Nx1矩阵。我想创建一个矩阵,并为它分配值,这些值对于mex函数的每次调用都是相同的。我一直在看教程,但我能找到的只是创建矩阵并将其与输入或输出绑定的人。我的矩阵应该完全独立于此 我要做的事情的伪代码: mxArray *input, *constant_matrix, *output; input = mxDuplicateArray(prhs[0]); constant_matrix = [10 15 20 73];

我试图创建一个cmex文件,它将输入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;
mxArray*输入,*常数矩阵,*输出;
输入=mxDuplicateArray(prhs[0]);

常数_矩阵=[10 15 20 73]// 如果要在堆栈上创建它,只需执行以下操作

const double constant_matrix[]={10,15,20,73};
..或者,如果矩阵稍微大一点,或者在编译时您不知道它的大小,那么您希望进行堆分配。在mex文件中使用

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

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

如果您仍在寻找,下面是一个简单的实现(无需检查参数):

example.cpp
啊,这是有道理的。所有这些特定于matlab的额外函数和数据类型都把我搞糊涂了。谢谢
#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