Ich muss eine MEX-Funktion verwenden, die eine Matrix zuweisen und füllen soll (z. B. eine Identitätsmatrix erstellen). Hier ist ein Codebeispiel:MEX-Funktion initialisiert den linken Wert nicht
#include <stdlib.h>
#include "mex.h"
void sample(int n, double** T)
{
(*T) = (double*)malloc(n*n*sizeof(double));
int i, j;
if ((*T) == NULL)
{
return;
}
else
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i != j)
(*T)[i*n + j] = 0;
else
(*T)[i*n + j] = 1;
}
}
}
}
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
mwSize n = *(mwSize*)mxGetData(prhs[0]);
double *T;
plhs[0] = mxCreateDoubleMatrix(1, (size_t)n*(size_t)n, mxREAL);
T = mxGetPr(plhs[0]);
sample(n, &T);
}
ich es wie folgt verwendet werden:
n = 5;
T = [];
T = sample(5, T);
Dieser Aufruf gibt eine 1-by-0 leere Matrix. Daher weist es keine n-mal-n-Matrix zu und füllt sie nicht.