9.5 Transferring data fromMatlabto the C++ domain 309
/* --------
Use matlab to compute the eigenvalues
and eigenvectors of a matrix
-----------*/#include <iostream>
#include <iomanip>
#include "engine.h"using namespace std;int main()
{//--- Define a matrix in C++:const shortN=4;//size of the data matrixdouble x[N][N] ={{1.0, 2.0, 3.0, 4.0},
{-4.0,-3.0, 5.0, 6.0},
{8.0,-5.0, 5.0,-6.0},
{-0.8,-3.0,-5.0, 6.0},
};//--- Start an engine session:Engine * bouboulina = engOpen("matlab -nojvm -nosplash");//--- Establish a buffer:const int BSZ=1024;
char BuFFer[BSZ];
engOutputBuffer(bouboulina, BuFFer, BSZ);//--- Transfer x to matlab as xm:mxArray * xmat = mxCreateDoubleMatrix(N, N, mxREAL);
memcpy(mxGetPr(xmat), x, sizeof(x));
engPutVariable(bouboulina, "matrix", xmat);//--- Compute the eigenvalues:engEvalString(bouboulina, "[V,D]=eig(matrix)");//--- Display the eigenvalues:cout << BuFFer;//--- Retrieve the eigenvector matrix: