在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
鉴于Matlab对于一些科学运算以及数据分析等十分方便,又鉴于很多人习惯于编写C++代码,因此C++和matlab混合编程成为了我们的需求。 一种非常方便的方法是用C++调用matlab引擎,以直接调用matlab进行编程,具体步骤如下: 1) 安装matlab2016b,安装路径为D:\Program Files\MATLAB\R2016b 2) 在VS2015的属性页-VC++目录中配置项目包含目录 D:\Program Files\MATLAB\R2016b\extern\include 3) 在VS2015的属性页-VC++目录中配置项目库目录 D:\Program Files\MATLAB\R2016b\extern\lib\win64\microsoft 4)在VS2015的属性页-链接器-输入-附加依赖项中添加 libmat.lib;libeng.lib;libmx.lib; 5) 添加D:\Program Files\MATLAB\R2016b\bin\win64和D:\ProgramFiles\MATLAB\R2016b\bin\win32到path环境变量 6) 打开matlab2016b,在命令窗口中依次运行以下命令: mex -setup C++ mbuild -setup (不要直接复制粘贴,否则可能会因字符编码问题而运行出错。) 6) 完成上述步骤后,我们就可以写C++代码了。调用matlab的库函数简介如下:
#include<stdlib.h> #include<stdio.h> #include<string.h> #include"engine.h" // 添加matlab引擎库的头文件 // 导入相关lib库 #pragma comment(lib, "libeng.lib") #pragma comment(lib, "libmx.lib") #pragma comment(lib, "libmat.lib") int main() { Engine *ep; // 启动引擎 if (!(ep = engOpen("\0"))) { fprintf(stderr, "\n打开Matlab引擎失败!\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工作区 engPutVariable(ep, "X", T); // 执行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); return EXIT_SUCCESS; }
运行效果如下图: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论