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.

 Accepted Answer

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

3 Comments

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;

Sign in to comment.

More Answers (0)

Categories

Products

Tags

Community Treasure Hunt

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

Start Hunting!