新建一个win32应用程序。
环境配置
代码编写
// matlab.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#pragma comment( lib, "libeng.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
int main(int argc, _TCHAR* argv[])
{
/*
启用MATLAB计算引擎
如果需要远程调用MATLAB计算引擎,将\0换做主机的名字
*/
Engine *ep;
if (!(ep = engOpen("\0")))
{
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
int Nsample = 50;
const double PI = 3.1415926;
double *t = new double[Nsample] ;
for(int i = 0; i < Nsample; i++)
{
t[i] = i * 2 * PI / Nsample;
}
/*
创建数据变量
*/
mxArray *T = NULL, *result = NULL;
T = mxCreateDoubleMatrix(1, Nsample, mxREAL);
memcpy((void *)mxGetPr(T), (void *)t, Nsample*sizeof(t[0]));
/*
将变量T输入MATLAB workspace
*/
engPutVariable(ep, "T", T);
/*
绘制结果图
*/
engEvalString(ep, "Y=sin(T);");
engEvalString(ep, "plot(T,Y);");
engEvalString(ep, "title('y=sin(t)');");
engEvalString(ep, "xlabel('t');");
engEvalString(ep, "ylabel('y');");
/*
使用fgetc()函数以确保暂停足够长时间,
我们可以看到绘制的结果图
*/
printf("Hit return to continue\n\n");
fgetc(stdin);
/*
释放内存,关闭MATLAB引擎。
*/
mxDestroyArray(T);
engEvalString(ep, "close;");
engClose(ep);
return EXIT_SUCCESS;
}