Умножение матриц с помощью Mex-файла

#c #matlab #mex

#c #matlab #mex

Вопрос:

У меня возникли проблемы с умножением двух матриц с использованием mex-файлов в Matlab с помощью C. Я компилирую следующий код, но когда я вызываю функцию, Matlab отключается:

 #include "mex.h"

void Multipl(double **a, double **b, double **res, mwSize n)
{
 mwSize i;
 mwSize j;
 mwSize k;

 for (i=0; i<n; i  ) {
    for (j=0; j<n; j  ){
        res[i][j]=0;
        for(k=0;k<n;k  ){
            res[i][j] =a[i][k]*b[k][j];;
        }
    }
   }
  }
void mexFunction( int nlhs, mxArray *plhs[],
              int nrhs, const mxArray *prhs[])
{
size_t ncols;                   /* size of matrix */
mxArray *mx, *my;
double *pr, *qr;
int *sr;
mx = mxCreateDoubleMatrix(2,3,mxREAL);
pr = mxGetPr(mx); // pointer to first double element of mx
qr = (double *)mxGetData(mx); // pointer to first double element of mx
my = mxCreateNumericMatrix(2,3,mxINT32_CLASS,mxREAL);
sr = (int *)mxGetData(my); // pointer to first int element of my
ncols = mxGetN(prhs[1]);
plhs[0] = mxCreateDoubleMatrix(1,(mwSize)ncols,mxREAL);
int* outMatrix         = (int *)mxGetData(plhs[0]);
/* call the computational routine */
Multipl(mx,my,outMatrix,(mwSize)ncols);
 

}

Что я должен изменить в этом коде??

Любая помощь приветствуется.

Комментарии:

1. Разве mx и мои обе матрицы не 2×3? И выходной буфер равен 1x??

2. Так много проблем с вашим кодом … приведение int * к double **, приведение mxArray * к double **, использование неинициализированной памяти, использование матрицы 1xn, как если бы это было nxn, … Включите предупреждения при компиляции, затем исправьте свой код, пока у вас не будет 0 предупреждений. Это должно исправить, по крайней мере, неправильное приведение указателя.

3. Также вы не можете взять простой указатель на данные и начать использовать с ним синтаксис [ ][ ] . Для использования этого синтаксиса требуется несколько дополнительных шагов. Смотрите Здесь пример кода: mathworks.com/matlabcentral/answers /…