#include "engine.h" intengEvalString(ep,string)
Engine *ep;
char *string;
integer*4 function engEvalString(ep,string)
integer*4 ep
character*(
*) string
ep
string
engEvalString
causes the MATLAB engine process ep
to execute the statement or expression contained in string
. It returns zero if successful, and a nonzero value if an error occurs.
On UNIX system 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
.
On VMS system engEvalString
sends commands to MATLAB by writing to an input mailbox.Any output resulting from the command that ordinarily appears on the screen is read back from an output mailbox into the buffer defined by engOutputBuffer
.
Under MS-Windows on a PC, engEvalString
communicates with MATLAB via DDE.
For UNIX and VMS:
/*The Fortran version is inengtest1.c
*/
#include <stdio.h> #include "engine.h" static double Areal[6] = {1,2,3,4,5,6}; main() { Engine *ep;
Matrix *a,
*d;
double *Dreal,
*Dimag;
a = mxCreateFull(3,2,REAL); memcpy(mxGetPr(a),Areal,6*sizeof(double));
mxSetName(a,"A"); if (!(ep = engOpen("matlab4 "))) { fprintf(stderr,"\nCan't start MATLAB engine"); exit(-1); } engPutMatrix(ep,a); engEvalString(ep,"d = eig(A*A')");
d = engGetMatrix(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]); } mxFreeMatrix(a); mxFreeMatrix(d); }
engtest1.f
.For MS-Windows on a PC:
#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 = mxCreateFull(3, 2, 0); memcpy((char *) mxGetPr(a),(char *) Areal, 6*sizeof( double)); mxSetName(a, "A"); engWinInit (hInstance); if (!(ep = engOpen(lpszCmdLine))) { MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine", (LPSTR) "Engtest1.c", MB_OK); } else { mxfreeMatrix(a); return(TRUE); engPutMatrix(ep, a); engEvalString(ep, "d = eig(A*A')"); d = engGetMatrix(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); } mxFreeMatrix(d); } mxFreeMatrix(a); return (TRUE);}
(c) Copyright 1994 by The MathWorks, Inc.