Matlab Engine是一组Matlab提供的接口函数,支持C/C++语言,Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C/C++程序作为前台客户机,向Matlab Engine传递执行命令和数据信息,从Matlab Engine接收执行结果。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,缺点是执行效率较低。下面简单介绍下这种方式的实现步骤:
先来介绍一组Matlab提供的引擎API接口:(仅作简单功能介绍,详细参数说明请参考Matlab帮助)
Engine* engOpen(const char* startcmd)启动Matlab引擎
int engClose(Engine* ep) 关闭Matlab引擎
int engSetVisible(Engine* ep,bool value) 显示或隐匿窗口
int engEvalString(Engine* ep, const char* string)执行Matlab表达式
mxArray* engGetArray(Engine* ep, const char* name)获取一个变量数组的值
int engPutArray(engine* ep, const mxArray* mp)设置一个变量数组的值
int engPutVariable(Engine *ep, const char *name, const mxArray *pm)同上
mxArray *engGetVariable(Engine *ep, const char *name)获取一个变量
int engOutputBuffer(Engine* eP,char* p,int n)获取输出字符串
2 按照之前的配置好matlab和VS2010,编程如下:
#include
/*********************************
引擎调用
*******************************/
#include"engine.h"
// link matlab sys lib
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmat.lib")
int main(int argc, _TCHAR* argv[])
{
Engine* pEng=NULL;
if(!(pEng=engOpen(NULL)))
{
printf("Open matlab engine fail!\n");
return 0;
}
else
printf("Open Engine Sucess!\n");
engSetVisible(pEng,0);//隐藏matlab窗口
mxArray *A=NULL;
double init=2;
A=mxCreateDoubleMatrix(1,1,mxREAL);
memcpy((void*)mxGetPr(A),(void*)&init,sizeof(double));
engPutVariable(pEng,"A",A);
init = 1;
memcpy((void*)mxGetPr(A),(void*)&init,sizeof(double));
engPutVariable(pEng,"B",A);
mxDestroyArray(A);
//Sleep(3*60*1000);
printf("start to create the fig\n");
engEvalString(pEng,"t=0:0.2:7;plot(t,sin(t));");
engEvalString(pEng,"figure;");
engEvalString(pEng,"plot(t,A*cos(t)+B);");
printf("Engine will be closed\n");
system("pause");
if(NULL!=pEng)
engClose(pEng);
printf("Engine is closed");
return 0;
}
程序运行结果如下:
<精通matlab混合编程>
http://www.cnblogs.com/xpvincent/archive/2013/02/05/2893046.html
http://blog.sina.com.cn/s/blog_7e2e98ad0101hef2.html(MAIN)