资源描述
VC++调用Matlab引擎
系统平台:win7 x64 + VC++2010 + Matlab2012b
操作流程:
1添加系统环境变量
Path变量中增加:C:\Program Files\MATLAB\R2012b\bin\win64;
重启电脑。
2在VS中新建一个编译平台
(1) 进入“配置管理器”
通过项目属性进入。
或者直接从工具栏平台的下拉箭头下进入:
(2)增加x64平台
确定,得到如下结果。
3添加头文件和库文件
项目属性——》VC++目录,如图:
包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include
库目录增加:C:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft
4例子程序代码
特别的,注意代码中红色的部分!
#include <iostream>
#include <math.h>
#include "engine.h"
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "libeng.lib")
using namespace std;
int main()
{
const int N = 50;
double x[N],y[N];
int j = 1;
for (int i=0; i<N; i++) //计算数组x和y
{
x[i] = (i+1);
y[i] = sin(x[i]) + j * log(x[i]); //产生-之间的随机数赋给xx[i];
j*= -1;
}
Engine *ep; //定义Matlab引擎指针。
if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
cout <<"Can't start Matlab engine!" <<endl;
exit(1);
}
//定义mxArray,为行,N列的实数数组。
mxArray *xx = mxCreateDoubleMatrix(1,N, mxREAL);
mxArray *yy = mxCreateDoubleMatrix(1,N, mxREAL); //同上。
memcpy(mxGetPr(xx), x, N*sizeof(double)); //将数组x复制到mxarray数组xx中。
memcpy(mxGetPr(yy), y, N*sizeof(double)); //将数组x复制到mxarray数组yy中。
engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx。
engPutVariable(ep, "yy",yy); //将mxArray数组yy写入到Matlab工作空间,命名为yy。
//向Matlab引擎发送画图命令。plot为Matlab的画图函数,参见Matlab相关文档。
engEvalString(ep, "plot(xx, yy); ");
mxDestroyArray(xx); //销毁mxArray数组xx和yy。
mxDestroyArray(yy);
cout <<"Press any key to exit!" <<endl;
cin.get();
engClose(ep); //关闭Matlab引擎。
}
5运行结果
6问题
无法调试。
展开阅读全文