dynamically allocated c++ array covert-convert to mxArray

Hello every one, i am new to matlab. So what i am trying to do is solve a problem like: Ax=B
I get a nXn matrix from my c++ code and i want to pass its values to mxArray. Specifically i do something like:
double **Ac = NULL;
Ac = new double*[size];
for(i = 0; i < size; i++){
Ac[i] = new double[size];
}
mxArray *Am = NULL;
Am = mxCreateDoubleMatrix (size, size, mxREAL);
memcpy( ( void* )mxGetPr(Am), ( void* )Ac, size*size*sizeof(double));
engPutVariable(ep, "Am",Am);
engEvalString(ep, "plot(Am);");
It shows a plot but not the correct one. Any directions?
Thank you all

 채택된 답변

Jan
Jan 2013년 7월 31일
Ac is not an array which contains the double values, but an array of pointers to vectors, which contain the values. If you prefer this nested kind of data storage for any good reasons, you need to copy the data vector by vector also:
double *Am_p;
Am_p = mxGetPr(Am);
for (i = 0; i < size; i++) {
memcpy(Amp, Ac[i], size * sizeof(double));
Amp += size;
}

댓글 수: 2

Yes this seems right but i did it in a different way:
Ac = new double*[size];
Ac[0] = new double[size*size];
for (i=1; i < size ; i++){
Ac[i] = Ac[i-1] + size;
}
mxArray *Am = NULL;
Am = mxCreateDoubleMatrix (size, size, mxREAL);
memcpy( ( void* )mxGetPr(Am), ( void* )Ac[0], size*size*sizeof(double));
and it worked fine. Thanks a lot!
I prefer storing matrices in one contiguous block also.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 C Shared Library Integration에 대해 자세히 알아보기

질문:

2013년 7월 31일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by