Programming and Graphics

(Kiana) #1

9.4 Transferring data to theMatlabdomain 295


where the literalmxTYPEcan bemxREALfor an array with real elements
ormxCOMPLEXfor an array with complex elements consisting of a real and
an imaginary part.


  • Second, we evaluate themxArrayusing the command:


memcpy(mxGetPr(arrayname), xp, sizeof(x));

wherexpis a pointer to the C++ arrayx.


  • Third, we transfer themxArrayinto theMatlab-workspace using an
    engine function:


engPutVariable(ep, "name", arrayname);

whereepis the declared engine session pointer name, andnameis the
name of the array in theMatlabdomain.

The following code contained in the filemtrans.ccdefines a numerical
variable, introduces its pointer, transfers the variable in theMatlabdomain,
and prints the variable:


#include <iostream>
#include "engine.h"
using namespace std;

int main()
{
double a = 5.0;
double * ap = &a;

//--- Start a session:

Engine * lva = engOpen("matlab12 -nojvm -nosplash");

//--- Define a character buffer:

const int BUFSIZE=256;
char buffer[BUFSIZE];
engOutputBuffer(lva, buffer, BUFSIZE);

/*--- Reserve the array ‘‘mxa’’
Copy into memory
Transfer the data */

mxArray * mxa = mxCreateDoubleMatrix(1, 1, mxREAL);
memcpy(mxGetPr(mxa), ap, sizeof(a));
engPutVariable(lva, "b", mxa);
Free download pdf