C或C++调用Matlab程序
更新时间:2023-10-02 22:54:01 阅读量: 综合文库 文档下载
1 调用方式
1. 将Matlab程序编译为独立可执行文件
可以脱离matlab运行exe程序,但需要MCR运行环境,对于有输入变量的函数而言,执行exe会出错,没什么实用价值 2. C/C++程序调用Matlab引擎
不能脱离matlab使用,实际上主要是用C/C++完成界面编写,通过接口函数调用matlab引擎,C/C++程序向matlab计算引擎传递命令和数据信息,并从matlab计算引擎接收数据信息,相当于在matlab中执行计算程序。 利用计算引擎的特点是:节省大量的系统资源,应用程序整体性能较好,但不能脱离matlab的环境运行,且运行速度较慢,在一些特别的引用(如需要进行三维图形显示)时可考虑使用。
3. C/C++程序调用Matlab程序编译后的动态链接库
可以完全脱离matlab使用,主要思想就是先编译m文件,将函数封装在库文件中,从而可以在C/C++程序中,通过调用DLL实现对matlab代码的调用。利用mcc编译器生成的DLL动态连接库文件,只需在C/C++编译环境中将其包含进来,调用导出函数即可实现原m文件的功能,极大的方便了用户的代码设计。
4. C/C++程序调用Matlab程序编译后的COM组件
C/C++调用COM组件和调用Matlab程序编译后的动态链接库和的执行效率是相同的,但调用动态链接库实现起来比较简单,调用COM组件实现起来比较复杂,很少使用。
2 C/C++调用m文件编译后的动态链接库
2.1 Matlab设置步骤
1. 命令窗口输入mbuild –setup和mex–setup命令,选择VC++6.0编译器
2. 编写m文件,如add.m(脚本文件和函数文件都可以) function [a,b]=add(x,y) a=2*x+y; b=3*y;
end
3. 生成dll文件
输入命令:mcc -B cpplib:addadd.m或者mcc -W cpplib:add -T link:libadd.m
4. 提取add.ctf,add.h,add.dll,add.lib 共4个文件(更高版本的matlab没有
ctf文件,只需另外3个就可以)
2.2 VC++6.0调用生成的dll文件
1. Tools—Options—Directories—Include files,添加matlab内的include目录,如:
D:\\Program Files\\MATLAB\\R2007b\\extern\\include
2. Tools—Options—Directories—Library files,添加matlab内的lib目录,如:
D:\\Program Files\\MATLAB\\R2007b\\extern\\lib\\win32\\microsoft
3. 新建控制台程序,命名add_test,将上述4个文件放到工程目录下; 4. Project—Settings—Link—Input—Object/library modules,添加:add.lib
mclmcrrt.lib mclmcr.lib。 或者在预处理中加入下面代码 #pragma comment(lib,\#pragma comment(lib,\#pragma comment(lib,\
或者将add.lib、mclmcrrt.lib、mclmcr.lib直接添加到工程中 以上三种方法都是在连接时,使用了相应库文件中的函数。 5. 新建cpp文件,命名为:add_test.cpp,代码如下 //#pragma comment(lib,\//#pragma comment(lib,\//#pragma comment(lib,\
#include
if(!addInitialize()) { }
mwArraya(1,1,mxDOUBLE_CLASS); mwArray b(1,1,mxDOUBLE_CLASS); a(1,1)=20; b(1,1)=30;
mwArray x(1,1,mxDOUBLE_CLASS); mwArray y(1,1,mxDOUBLE_CLASS); //输出参数个数,输出参数,输入参数 add(2,x,y,a,b); double *i=new double; double *j=new double; x.GetData(i,1); y.GetData(j,1);
cout<<\y=\getchar(); return 0;
cout<<\return -1;
3 VC++6.0调用matlab引擎
所谓matlab引擎,是指一组matlab提供的接口函数,支持C/C++、Fortran等语言,通过这些接口函数,用户可以在其它编程环境中实现对matlab的控制。主要功能有:打开/关闭一个matlab对话、向matlab环境发送命令字符串、从matlab环境中读取数据、向matlab环境中写入数据。与其他各种接口相比,引擎所提供的matlab功能支持是最全面的,通过引擎方式,应用程序会打开一个新的matlab进程,可以控制它完成任何计算和绘图操作,对所有的数据结构提供100%的支持。同时,引擎方式打开的matlab进程会在任务栏显示自己的图标,打开该窗口,可以观察主程序通过engine方式控制matlab运行的流程,并可在其中输入任何matlab命令。实际上,通过引擎方式建立的对话,是将matlab以ActiveX控件方式启动的。
3.1 配置VC6编译器
1. Tools—Options—Directories—Include files,添加matlab内的include目录,如:
D:\\Program Files\\MATLAB\\R2007b\\extern\\include
2. Tools—Options—Directories—Library files,添加matlab内的lib目录,如:
D:\\Program Files\\MATLAB\\R2007b\\extern\\lib\\win32\\microsoft
3. Project—Settings—Link—Input—Object/library modules,添加:libmx.lib
libmat.lib libeng.lib
或者在预处理中加入下面代码 #pragma comment(lib,\#pragma comment(lib,\#pragma comment(lib,\
3.2 程序实例
新建控制台工程,命名engine_example,新建cpp文件,命名engine_example.cpp,程序代码如下 //#pragma comment(lib,\//#pragma comment(lib,\//#pragma comment(lib,\
#include
constint N=50; double x[N],y[N]; int j=1;
for (inti=0;i Engine *ep; //定义matlab引擎指针 //测试是否启动matlab引擎成功 x[i]=i+1; y[i]=sin(x[i]+j*log(x[i])); j*=-1; if(!(ep=engOpen(NULL))) { } cout<<\exit(1); //定义mxArray类型的1行N列的实数数组 mxArray *xx=mxCreateDoubleMatrix(1,N,mxREAL); mxArray *yy=mxCreateDoubleMatrix(1,N,mxREAL); //将数组x复制到mxArray数组xx中,将数组y复制到mxArray数组yy中 memcpy(mxGetPr(xx),x,N*sizeof(double));memcpy(mxGetPr(yy),y,N*sizeof(double)); //将mxArray数组xx写入到matlab工作空间,命名为xx //将mxArray数组yy写入到matlab工作空间,命名为yy } engPutVariable(ep,\engPutVariable(ep,\engEvalString(ep,\ mxDestroyArray(xx); mxDestroyArray(yy); cout<<\cin.get(); engClose(ep); //关闭matlab引擎 //向matlab引擎发送画图命令 //撤销mxArray数组xx和yy
正在阅读:
C或C++调用Matlab程序10-02
2015年教师招聘考试地理备考习题之地表形态的塑造九03-19
描写爱情的现代诗歌03-30
小学数学课程标准解读(修改稿)04-30
2.1 砌体结构工程施工质量验收规范 GB50203-200206-06
公司副总经理2022年度个人述职报告范文03-25
学会保护自己作文800字06-16
一个房地产操盘手的十个瞬间-营销7日谈06-27
我有一个梦想主题班会11-01
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 调用
- 程序
- Matlab
- 青岛版三年级数学(上册)教学计划 - 图文
- 在各级领导和有关单位的大力支持下 - 图文
- 《诗经》分享之《鹿鸣》、《南有嘉鱼》笔记
- 监理工作自查报告
- 昆明滇池国家旅游度假区(大渔)项目调研报告 - 图文
- 数学定理
- 试题及参考答案-《路基路面工程》-路基工程部分
- 惠东高级中学2018届高三下学期开学考试试题(理综) - 图文
- 中小企业创新产品案例分析
- 计算机网络技术高职试卷A
- 年产10000吨饼干的工厂设计
- HACCP体系内部审核员试卷1
- 上外附小面试题
- 应交所得税和所得税费用
- 优秀教师先进事迹材料第三人称
- 浅论如何发挥宣传来发展红色旅游
- 全国2015年10月自学考试00320《领导科学》历年真题
- 《C语言程序设计》实验报告 15电气工程及其自动化2
- 值得一看的古代文学考题(2)(补充答案)
- 吊篮方案 - 图文