Evaluate expression in string
C Syntax
#include "engine.h"
int engEvalString(Engine *ep, const char *string);
Arguments
ep
Engine pointer.
string
String to execute.
Description
engEvalString evaluates the expression contained in string for the MATLAB engine session, ep, previously started by engOpen. It returns a nonzero value if the MATLAB session is no longer running, and zero otherwise.
On UNIX systems, engEvalString sends commands to MATLAB by writing down a pipe connected to MATLAB's stdin. Any output resulting from the command that ordinarily appears on the screen is read back from stdout into the buffer defined by engOutputBuffer.
Under Windows on a PC, engEvalString communicates with MATLAB via ActiveX.
Examples
Send a simple mxArray to the engine, compute its eigenvalues, get back the vector containing the eigenvalues, and print the second one:
For UNIX:
/* engtest1.c */
#include <stdio.h>
#include "engine.h"
static double Areal[6] = {1,2,3,4,5,6};
void main()
{
Engine *ep;
Matrix *a, *d;
double *Dreal, *Dimag;
a = mxCreateDoubleMatrix(3,2,mxREAL);
memcpy(mxGetPr(a),Areal,6*sizeof(double));
mxSetName(a,"A");
if (!(ep = engOpen(""))) {
fprintf(stderr,"\nCan't start MATLAB engine");
exit(EXIT_FAILURE);
}
engPutArray(ep,a);
engEvalString(ep,"d = eig(A*A')");
d = engGetArray(ep,"d")
engClose(ep);
Dreal = mxGetPr(d);
Dimag = mxGetPi(d);
if (Dimag) {
printf("Eigenval 2: %g+%gi",Dreal[1],Dimag[1]);
} else {
printf("Eigenval 2: %g\n",Dreal[1]);
}
mxFree(a);
mxFree(d);
}
For Windows:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
static double Areal[6] = { 1, 2, 3, 4, 5, 6 };
int WINAPI WinMain (HANDLE hInstance,
HANDLE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
Engine *ep;
Matrix *a, *d;
double *Dreal, *Dimag;
char buff[256];
a = mxCreateDoubleMatrix(3, 2, mxREAL);
memcpy((char *) mxGetPr(a),(char *) Areal, 6*sizeof(double));
mxSetName(a, "A");
if (!(ep = engOpen(NULL))) {
MessageBox ((HWND)NULL,
(LPSTR)"Can't start MATLAB engine",
(LPSTR) "Engtest1.c", MB_OK);
} else {
mxfree(a);
return(TRUE);
engPutArray(ep, a);
engEvalString(ep, "d = eig(A*A')");
d = engGetArray(ep, "d");
engClose(ep);
Dreal = mxGetPr(d);
Dimag = mxGetPi(d);
if (Dimag){
sprintf(buff,"Eigenval 2: %g+%gi",
Dreal[1],Dimag[1]);
} else {
sprintf(buff,"Eigenval 2: %g",Dreal[1]);
MessageBox((HWND)NULL, (LPSTR)buff,
(LPSTR)"Engtest1.c", MB_OK);
}
mxFree(d);
}
mxFree(a);
return (TRUE);
}
See engdemo.c in the eng_mat subdirectory of the examples directory for a sample program that illustrates how to call the MATLAB engine functions from a C program.
[ Previous | Help Desk | Next ]