VC_与MATLAB的混合编程研究.pdf

上传人:asd****56 文档编号:70330833 上传时间:2023-01-19 格式:PDF 页数:4 大小:273.12KB
返回 下载 相关 举报
VC_与MATLAB的混合编程研究.pdf_第1页
第1页 / 共4页
VC_与MATLAB的混合编程研究.pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《VC_与MATLAB的混合编程研究.pdf》由会员分享,可在线阅读,更多相关《VC_与MATLAB的混合编程研究.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、*2008-04-24 收到,2008-08-07 改回*基金项目:国家自然科学基金资助项目(60574007)。*黄金明,男,1974年生,硕士,研究方向:计算机应用。文章编号:1003-5850(2008)10-0038-04VC+与MATLAB 的混合编程研究A Research of Mixed Programming between VC+and Matlab黄金明1武玉强1邢西深2(1曲阜师范大学电气信息与自动化学院日照276826)(2中央电化教育馆北京100031)【摘要】应用VC+与Matlab 的混合编程方法可以充分发挥VC+和Matlab 的各自优势,提高仿真和开发效率。

2、着重探讨了VC+与Matlab 的混合编程方法,并阐述了混合编程的基本步骤、编程过程中遇到的关键问题及其解决方案;最后,分析了各种方法的优缺点和适用场合。【关键词】混合编程,VC,Matlab,COM中图分类号:TP391.9文献标识码:AABSTRACTThe Mixed Programming for VC+and Matlab can unit their advantages to increase the efficiency in simulation anddevelopment.This paper focuses on discussing mixed programming

3、 between VC+and Matlab.Therefore,the related protocols,implementation steps,pivotal problems in the course of programming and the corresponding strategies are presented;Finally,theadvantages and disadvantages of various methods and their application are proposed.KEYWORDSmixed programming,VC,Matlab,C

4、OMMatlab 是一种面向工程实践和科学运算的交互式仿真软件,它集科学计算、信号处理、系统仿真与图形可视化于一体,具有极高的编程效率,非常有利于工程技术人员方便地解决各种问题;然而由于Matlab 是一种解释性语言开发平台,这就决定了它的代码执行效率比较低。VC+是Windows 平台主要的应用程序开发环境之一,它既具有C+语言的灵活性、高效性,又具有可视化编程的便利性、界面友好的特点,但在矩阵运算、数值分析、工程计算等实现功能稍嫌不足。因此,将两者结合运用,进行混合编程,实现优势互补,将大大提高工作效率,从而达到能够在代码执行速度和编程效率上找到一个最佳平衡点。目前,常用的VC+与Matl

5、ab 混合编程的方法主要有以下几种:使用Matlab 提供的mcc 编译器。利用ActiveX 自动化技术,调用Matlab 的服务引擎库。使用第三方软件Matcom 来实现。使用MatlabVisual Studio Add-in 工具。基于COM 组件技术。其他方法。其中,文献 1对方法 作了部分阐述;文献2对 中的变量文件中介法、C 语言mex 程序以及mat 文件操作法进行了简要介绍,文献3则对方法 实现了应用。本文在此基础上进一步介绍VC+和Matlab 混合编程的详细实现方法,特别是无缝集成方法 ,并用具体应用阐明在不同实现机制下的操作过程,最后对各种实现方法的特点和适用领域作了比

6、较。1混合编程方法介绍1.1使用Matlab 提供的mcc 编译器1用Matlab 的mcc 编译器将Matlab 的源程序文件(*.m)转变为 VC+能够识别的程序文件(*.cpp),然后添加到VC+的工程中一起编译,也可以用 mcc 编译器将 Matlab 源文件(*.m)直接编译为stand-alone 程序,在附带必 要的函数库后能 脱离Matlab 环境独立运行。利用这种方法,转换后的C/C+文件代码冗余度 大、可读性不强,执行速度也比传统C/C+代码慢,但是在提高开发效率上还是一种不错的选择。1.2利用ActiveX,调用Matlab 服务引擎库ActiveX 控件技术是OLE 技

7、术的延伸,也是COM组件的重要组成,它代表了一种应用程序的开发策略。Matlab 引擎(engine),是指一组 Matlab 接口函数,通过这些接口函数,用户可以在其它编程环境中实现对Matlab 的控制调用。要在 VC+中成功调用Matlab 引擎程序,必须在相应的 VC+工程文 件中包含引擎头 文件engine.h,并对库文件进行设置,具体的实现步骤如下:新建一个MFCexe 类型基于对话框的工程,选择菜单 Tools-Options-Directories-IncludeFiles,添加D:MATLAB6p5p1 extern include。其中38(总 796)VC+与MATLAB

8、的混合编程研究2008 年D:MATLAB6p5p1 为MATLAB的安装路径。在下拉菜 单中选择 Library Files,添加 D:MATLAB6p5p1 extern lib win32 microsoft msvc60。依次选择Project-Settings-Link-Input,在Object/librarymodules中 添 加libmx.lib、libmat.lib、libeng.lib 库文件;若使用的是旧版本的Matlab,且没有自带上述所需的库文件,则需要将include 目录下的 libeng.def、libmat.def、libmx.def利用lib.exe 生成

9、相应的库文件。在调用处添加代码。VC+与Matlab 引擎之间的数据交换是通过一种特殊的对象类型 Matlab 数组-mxArray 来完成的,例如:在 VC 中计算函数值y=sin(x),然后调用Matlab 绘制图形。double x 128;for(int i=0;i Customize-Add-ins and Macro Files-Browse,改变文件类型为Add-ins(.dll),选择 C:matcom45bin mvcide.dll 文件,其中 C:matcom45 为 Matcom的安装路径,确定。在出现的对话框中选中 VisualMatcom Add-in,关闭对话框,这

10、时在 VC+的开发环境中看到一个Visual Matcom 工具栏,表明安装成功。添加代码。在VC 中新建一个MFCexe 类型基于对话框的工程,利用 Matcom Add-in 将 example.m文件加入工程;添加相应控件并在需要调用M 文件的首 部分 别 包 含头 文 件:#include matlib.h;#include example.h;在调用代码开始处添加初始化语句initM(MATCOMVERSION);调用结束处添加退出语句exitM(),编程过程中可以直接在VC+中修改M 源文件实现重新编译。Mediva 的缺点是 VC+与 Matlab 混合编写的应用软件必须携带必要

11、的DLL,从而增大了软件的体积,同时也不能对所有的Matlab 函数提供支持,例如采用类库设计的部分函数。但是由于具有使用方便、生成的代码可读性好、支持 M 文件嵌套编译等优点,Mediva 仍不失为一个好的工具。1.4使用Matlab Visual Studio Add-in 工具Matlab Visual Studio Add-in 提供了一种 VC+和Matlab 直接集成的途径。它有一些新的特征:快39第21 卷第10 期电 脑 开 发 与 应 用(总797)速集成M 文件到VC+工程中,创建独立的 C/C+应用程序或C MEX DLL;通过M 文件创建共享库或MEX 文件;内含Vis

12、ual Matrix Viewer,调试过程中可以查看矩阵变量的值;直接修改M 源文件而不是修改生成的C/C+文件;方便快捷地打包应用程序等。具体使用方法如下:安装 Matlab Visual Studio Add-in 工具。在Matlab 命令提示符下运行命令mex-setup,并通过选择Microsoft Visual C/C+version 6.0 设置C/C+编译器,然后,运行mbuild-setup,同样选择Microsoft Visual C/C+version 6.0 编译器,系统将自动进行配置并安装MATLAB Visual Studio Add-in 工具。安装完成后,选择

13、菜单Tools-Customize-Add-ins and Macro Files-MATLAB Add-in 调出工具栏,共包括四个按钮,分别为:向当前工程添加M 文件、Matrix Viewer、Add-in Package、Add-in 帮助文件;以后每次启动 VC+时将自动加载 MATLABAdd-in 组件。添加代码。安装MATLAT Add-in 后将在VC的 新 建工 程 窗 口 中新 增 一 项 MATLAB ProjectWizard,可以引导开发人员建立五种与Matlab 交互的VC 工程,并对可工程模式、是否生成Main 函数、是否需要支持图形等进行选择;在VC中选择Fi

14、le-New-MATLABProject Wizard-example(工程名)-C+,其余保留默认设置,生成新工程后会出现一个对话框要求选择添加到工程的M 文件,选择M 文件后,VC 自动调用mcc 编译生成一个混合M 文件和C+文件的工程。调试运行。直接在VC 中编译运行整个工程即可实现对Matlab 的交互,可以通过在 M 文件中设置断点,使用Matrix Viewer 观察Matlab 变量的值。对M文 件的修改则可以直接在 VC 中完成,无需返回Matlab。VC 中的 Matlab 工程向导为二者的混合编程提供了方便,它使得 VC 和Matlab 的编程变得更加简单。不足之处在于M

15、 文件只能是函数形式的文件,不能是Matlab 脚本文件,同时对部分函数的支持不够好。1.5利用COM 组件技术COM 是Component Object Module 的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用组件。Matlab 的COM Builder 能够帮助用户把Matlab 编写的M 程序文件快速地做成COM 组件,供使用其他语言的客户端调用。该方法几乎可以调用Matlab 的任何函数,而且实现简单,通用性强,程序间无需环境切换,代码执行速度快,因此可获得较高的执行效率,也是Matlab 推荐的混合编程方法。创建 COM 组件。首先,确保安装了 Ma

16、tlabCOM Builder 组件,其次,使用mbuild-setup 命令设置了编译环境。COM 组件的创建过程如下:a.启动Matlab COM Builder。在Matlab 中输入命令comtool或者单击 Start-Matlab-Matlab COM builder,运行COM Builder 所需的编译环境。b.选择File-NewProject,输入COM 组件名并修改类名(比如:comtest和mydemo),如果调用了Matlab 绘图操作,则需要选中Use Handle Graphics Library以便让Matlab 配置C/C+图形函数库。c.选择Project-

17、Add File,添加生成 COM 组件的函数形式的 M 文件。d.单击Build按钮,编译完成后在Matlab 工作目录下的工程目录中生成以COM 组件命名(comtest)的目录,里面包含两个文件夹:distrib 目录中是以动态链接库形式存在的COM 组件,src 目录中则是 COM 组件的源代码。在VC中调用COM 组件。在VC中调用COM 组件的方法主要有两种:一种方法是将src 目录中生成的.h 和.cpp 文件复制并添加到工程、添加头文件并编写调用代码;另一种方法更加简单,通过 DLL 来调用COM 组件。后者的详细步骤为:a.在VC 中新建一个MFC(exe)类型基于对话框的工

18、程并添加相应控件;b.打 开 ClassWizard-Add class-From a typelibrary class,选中在(1)中生成的DLL 的COM 组件(comtest10.dll),按照提示完成后,系统会自动生成comtest1 0.h 和comtest10.cpp 文件,并增加了一个新类(Imydemo 类)。c.在需要调用COM 组件函数的首部添加头文件#include comtest10.h,并在调用处添加代码,例如:Imydemo test;/定义类实例AfxOleInit();/初始化OLE的动态连接库DLLif(test.CreateDispatch(T(comte

19、st.mydemo)/创建接口并连接test.mytest();/调用M 文件的函数功能test.ReleaseDispatch();/释放接口elseAfxMessageBox(CreatDispatch Failure!);这种方法通过ClassWizard 利用类型库生成包装类,前提是COM 组件的接口必须是派生自 IDispatch;也可以参考MSDN 使用其他的VC 中调用COM 组件方法。40(总 798)VC+与MATLAB的混合编程研究2008 年 发布COM 组件。MATLAB COM Builder 提供了COM 打包程序,在MATLAB COM Builder 中,使用菜

20、单选项Component-Package Component,这个命令将在distrib 文件夹下生成一个自解压的exe 安装文件,本例中生成了comtest.exe。将该文件复制到没有安装Matlab 的机器上执行,输入解压目录并设置系统搜索路径后,系统会自动注册该COM 组件和所需的mwcomutil.dll 通用组件,从而能够实现完全脱离Matlab 环境执行。利用COM 组件能够发挥VC和Matlab 两种语言的长处,同时具有操作简单、代码高效的特点;除了COM 组件的部分限制外(例如:不支持Object 变量),近乎是一种VC和Matlab 混合编程的完美选择。1.6其他混合编程技术

21、除了以上介绍的混合编程方法外,还有许多其他的编程方法,主要有:MEX 文件法利用MEX 把C 格式的源代码变成Matlab 能直接调用的MEX 文件5。MAT 文件法以 mat 格式文件为中介,完成VC 和Matlab 直接的数据交换。2结论本文阐明了VC+与Matlab 混合编程的主要方法及其解决方案,合理利用它们可以极大地提高执行效率、增加灵活性、缩短程序的开发周期,用户可以根据具体的应用和要求来选择合适的方法。各种方法的比较如表1 所示。表1各种混合编程方法特性比较比较项目实现方法是否可脱离Matlab环境操作复杂度代码执行效率局限性使用mcc 编译器是复杂一般不支持部分图形函数和多文件

22、编译调用Matlab 引擎否复杂低不能用于软件开发Matcom Add-in是简单高不支持类和部分绘图函数Matlab VisualAdd-in是简单一般不支持部分Matlab 函数COM 组件方式是一般高不支持Object 对象MEX 文件法否复杂高不能方便的实现与VC+集成从表中可以看出,COM 组件方法、Matlab VisualStudio Add-in 方法和Matcom 调用方法因为具有操作简便、代码效率高、集成性好以及可脱离 Matlab 环境等优点,而被广泛应用于VC+和 Matlab 的交互领域。文 中 所 用 实 例 均 在 Visual C+6.0 和Matlab6.5.

23、1 下调试通过;涉及Matlab 应用程序接口的很多概念和方法也同样适用于其他Matlab 版本。参 考 文 献 1郭虹,薄云飞,林冬.VC+与 MATLAB 混合编程技术研究 J.计算机工程,2002,28(9):269-271.2李天昀,葛临东.综述MATLAB 与VC+的交互编程J.计算机仿真,2004,21(9):193-196.3初秀琴,何蕾,李玉山.Matlab 外部接口的研究与实现J.计算机仿真,2002,19(1):107-109.4盛歆漪,须文波,边继东.Matlab、Matcom、VC+混合编程在FFT上的实现J.江南大学学报(自然科学版),2003(10):352-355

24、.5刘志俭,潘献飞,连军想.MATLAB 外部程序接口(6.x)M.北京:科学出版社,2002.(上接第33 页)5结论小波去噪的关键就是在小波域去除噪声的同时,又能保留有用图像高频信息。利用Matlab7.0.1 对含有不同高斯白噪声的两种图像进行去噪,实验表明,基于小波变换的图像去噪可以有效提高图像的去噪效果。参 考 文 献 1王大凯,彭进业.小波分析及其在信号处理中的应用M.北京:电子工业出版社,2006.2王登位,李炜.基于小波变换的图像去噪研究J.计算机与数字工程,2007,35(9):131-132.3刘杰平,余英林.基于小波变换的盲图像回复J.微电子学与计算机,2004,21(8

25、):73-79.4VidakoviecB,LozoyaCB.OnTime-dependentWaveletDe-noising J.IEEETransSignalProcessing,1998,46(9):2 549-2 551.5朱锡芳.一种基于连续小波阈值的图像去噪新算法J.微电子学与计算机,2007,24(11):181-185.(上接第37 页)辑和数据存储层应该分离,以便系统架构的发展和演化。使用OR-Mapping 框架的好处是应用程序能够直接使用面向对象以及处理对象的储存功能,并且能够分离各种不同的数据库。由此,OR-Mapping 框架作为一种新的数据存取架构,现已逐渐被使用。参 考 文 献 1Ian G著.袁兆山译.面向对象的方法原理与实践M.北京:电子工业出版社,2003.2李维.高效数据库程序设计M.北京:电子工业出版社,2006.41第21 卷第10 期电 脑 开 发 与 应 用(总799)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁