您的位置:首页 > 编程语言 > MATLAB

利用VS2015实现C++与matlab混合编程:

2018-01-24 00:33 579 查看
鉴于Matlab对于一些科学运算以及数据分析等十分方便,又鉴于很多人习惯于编写C++代码,因此C++和matlab混合编程成为了我们的需求。

一种非常方便的方法是用C++调用matlab引擎,以直接调用matlab进行编程,具体步骤如下:

1) 在VS2015中配置项目包含目录

2) 在VS2015中配置项目库目录

3) 安装matlab2016b,安装路径为D:\Program Files\MATLAB\R2016b

4) 添加D:\Program Files\MATLAB\R2016b\bin\win64和D:\ProgramFiles\MATLAB\R2016b\bin\win32到path环境变量
5) 打开matlab2016b,在命令窗口中依次运行以下命令:
mex -setup
mbuild -setup
(不要直接复制粘贴,否则可能会因字符编码问题而运行出错。)
6) 完成上述步骤后,我们就可以写C++代码了。调用matlab的库函数简介如下:

引擎函数
功能描述
engOpen
启动Matlab计算引擎
engGetArray
从Matlab引擎获得一个Matlab矩阵,用于数据交换
engPutArray
从应用程序向Matlab引擎发送一个Matlab矩阵,用于数据交换
engEvalString
执行一Matlab命令,如engEvalString(ep, "plot(T,Y);");其中ep为Engine指针
engOutputBuffer
创建字符缓冲区,以获得Matlab文本输出
engOpenSingleUse
打开一个单独的非共享的Matlab计算引擎
engClose
关闭Matlab引擎
engSetVisible
设置Matlab引擎
engGetVisible
返回Matlab显示状体
engGetVariable
从Matlab工作区(Workspace)获得一个变量
engPutVariable
将指定名称的Matlab变量存入Matlab工作区
例子:

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include"engine.h"
// 添加matlab引擎库的头文件

// 导入相关lib库
#pragmacomment(
lib, "libeng.lib")
#pragmacomment(
lib, "libmx.lib")
#pragmacomment(
lib, "libmat.lib")

int main()
{
Engine *ep;
//
启动引擎
if (!(ep = engOpen("\0")))
{
fprintf(stderr,
"\n打开Matlab引擎失败!\n");
returnEXIT_FAILURE;
}
//
执行:
int Nsample = 50;
constdouble PI = 3.1415926;
double *t =
newdouble[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]));
engPutVariable(ep,"X", T);
// 把变量T存入Matlab工作区
//
执行Matlab命令
engEvalString(ep,"Y=cos(X);");
engEvalString(ep,"plot(X,Y);");
engEvalString(ep,"title('y=cos(x)');");
engEvalString(ep,"xlabel('x');");
engEvalString(ep,"ylabel('y');");
fgetc(stdin);
//
清除对象,不能漏!
mxDestroyArray(T);
engEvalString(ep,"close;");
//
关闭引擎,不能漏!
engClose(ep);
returnEXIT_SUCCESS;
}

运行效果如下图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C Matlab 混合编程