calling matlab from c++
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi
I am trying to print values obtained from matlab function which is called in c++ program. This is the code, I am not sure how can I print values.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
int main()
{
Engine *ep;
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
int const SIZE=1;
int const SIZE2=1;
double x[SIZE][SIZE2];
x[1][1] = 1.0;
mxArray *A=NULL;
A=mxCreateDoubleMatrix(SIZE2, SIZE, mxREAL);
memcpy((void *)mxGetPr(A), (void *)x, sizeof(double)*SIZE*SIZE2);
engPutVariable(ep, "Data", A);
engEvalString(ep, "newData = test_matlab(Data)");
double *cresult;
mxArray *mresult;
mresult = engGetVariable(ep,"newData");
cresult = mxGetPr(mresult);
mxDestroyArray(A);
mxDestroyArray(mresult);
engClose(ep);
return EXIT_SUCCESS;
}
댓글 수: 0
채택된 답변
James Tursa
2015년 10월 12일
편집: James Tursa
2015년 10월 12일
Use regular output functions. E.g., ( after you assign the value of cresult but before you destroy the mxArray mresult ):
printf( "The result is %g\n", *cresult );
But note that you will need to pause your program at the end in order to see this output on the screen (otherwise the window will close immediately after printing and you will not see it).
SIDE NOTE:
All of this code:
int const SIZE=1;
int const SIZE2=1;
double x[SIZE][SIZE2];
x[1][1] = 1.0;
mxArray *A=NULL;
A=mxCreateDoubleMatrix(SIZE2, SIZE, mxREAL);
memcpy((void *)mxGetPr(A), (void *)x, sizeof(double)*SIZE*SIZE2);
can be simplified to this:
mxArray *A=NULL;
A = mxCreateDoubleScalar(1.0);
Also, you should be getting in the habit of checking your pointers before using them. E.g., A, mresult, and cresult should all be checked to see that they are not NULL before you try to dereference them.
댓글 수: 0
추가 답변 (1개)
HANS
2018년 3월 19일
Hi to all,
I have name.mex function and many .cpp and .h files related to it. name.mex takes only 1xinf vector which is a complex double values inside and output is the same size vector.
I want to call this name.mex within C++. As I know I have to use "int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[], const char *command_name);"
Please could you give a usage example in C++ ? I guess I have to use "ifstream" to load the data vector before I use the function but do I have to define via "mxArray" or ??
Thx, WR
댓글 수: 1
James Tursa
2018년 3월 19일
Please open up a new Question on this topic, and if possible post the relevant code so we can advise you.
참고 항목
카테고리
Help Center 및 File Exchange에서 C Shared Library Integration에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!