How to call Matlab functions from C S functions

Hi,
Is it possible to call matlab functions from C S functions? I would need to call fzero and I do not wish to create another C function with the algorithm.
Thanks. Remus.

 채택된 답변

Kaustubha Govind
Kaustubha Govind 2012년 7월 16일

1 개 추천

You can use mexCallMATLAB, but will need to create/destroy mxArrays as needed.

댓글 수: 3

Hi. Thanks for your answer. I need to fix some data types in order to call mexCallMATLAB. I get some errors at the moment. Please help :)
My X_A_T, X_B_T and X_C_T are real_T type. So I need to make an mxArray out of it.
mwSize dims[] = {1,3}; // 1x3 array
mxArray *prhs = NULL;
mxArray *lhs[1];
prhs = mxCreateNumericArray(2, dims, mxDOUBLE_CLASS, mxREAL);
prhs[0] = X_A_T; // error C2036: 'mxArray *' : unknown size
// error C2440: '=' : cannot convert from 'real_T' to 'mxArray'
prhs[1] = X_B_T;
prhs[2] = X_C_T;
mexCallMATLAB(1, lhs, 3, &prhs, 'compute_lt_pH');
Q: How do you convert from real_T to mxArray?
Please run the following command to see an example of how you can the copy the data from your real_T arrays into mxArrays:
edit([matlabroot '/extern/examples/refbook/arrayFillGetPr.c']);
It works! Here's an example for a one input, one output matlab function:
mxArray *in[1];
mxArray *out[1];
double *pointer;
in[0] = mxCreateNumericMatrix(3, 1, mxDOUBLE_CLASS, mxREAL);
pointer = mxGetPr(in[0]);
pointer[0] = A_T;
pointer[1] = B_T;
pointer[2] = C_T;
mexCallMATLAB(1, out, 1, in, "myMatlabFun");
pointer = mxGetPr(out[0]);
return *pointer;

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

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 External Language Interfaces에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by