VisualC++与Matlab混合编程方法的对比

点赞:8488 浏览:32612 近期更新时间:2024-01-20 作者:网友分享原创网站原创

摘 要:VisualC++具有应用程序界面开发能力强和程序执行效率高的特点,Matlab则具有强大的图形显示和数据处理功能.这两种软件的混合编程可以综合它们的优点,大大提高编程效率和程序的可靠性.在此通过VisualC++和Matlab混合编程方法的对比分析,便于程序开发人员在不同的应用背景下选择合适的编程方法.首先简要介绍了Matlab引擎、MCC编译器、Mat程序、Matlab数学函数库、动态链接库、COM组件和MEX文件等7种混合编程方法,并对这些方法进行了详细的对比分析.然后根据其分析结果,归纳总结出每种方法的优缺点,提出了这些方法的应用范围.

关 键 词:混合编程;对比分析;VisualC++;Matlab

中图分类号:TN91934;TP312文献标识码:A文章编号:1004373X(2013)20004704

0引言

Matlab是由美国MathWorks公司开发,主要面对科学计算、可视化以及交互式程序设计的高科技计算环境[1].它包含有大量开源算法,所使用的算法普遍都是科研和工程计算中的最新研究成果,而且经过了优化和容错处理.它拥有强大的图形、图像处理能力和高速、精确的计算机数据处理能力,被广泛应用到科学研究及工程计算的众多领域.

VisualC++是Microsoft公司推出的一个基于Windows平台的可视化的集成开发环境.它包括了Microsoft的代码优化技术、强大的GUI功能以及复杂的资源编辑器,极大提高了应用程序的设计效率,开发的系统执行速度快、实时性好,而且具有接口友好、易维护和可升级等优点[2].它已成为操作系统、设备驱动程序和系统级平台类软件的最佳开发工具.但缺乏对大量数据处理和分析、数据可视化分析方面的能力.

综上可知,Matlab与VisualC++有着各自的不同特点,将两者进行混合编程能更有效地提升它们的优势,提高软件开发效率.

目前,两者混合编程的研究大多停留在如何具体实现上[39],对这些方法进行对比分析研究相对甚少,程序开发人员对混合编程方法的选择较为盲目.

因此,本文针对这些问题,详细对比分析了VisualC++与Matlab混合编程常用的七种方法,归纳总结出了每种方法的优缺点,并提出了这此方法的应用范围.

1混合编程方法概述

VisualC++与Matlab混合编程主要有Matlab引擎、MCC编译器、Mat程序、Matlab数学函数库、动态链接库、COM组件和MEX文件等方法[39],如图1所示.在对比分析这些方法特性之前,下面简要概述一下这些实现方法.

(1)Matlab引擎(MatlabEngine)

是指一组由Matlab所提供的接口函数,采用客户机/怎么写作器的计算方式,并且支持VisualC++调用.

(2)Matlab数学函数库

是由Matlab提供的包含矩阵计算的数学函数库,VisualC++通过调用Matlab数学函数库中的函数来实现混合编程.

(3)MCC编译器(MatlabCompiler)

是将Matlab中的m文件转化成C代码、可执行文件和动态链接库文件的程序,其生成的代码可在VisualC++中和应用程序源代码一起编译连接成独立的应用程序.

(4)动态链接库(DynamicLinkLibrary,DLL)

是由Matlab编译器或其他编译器将m文件或m脚本文件编译成动态链接库,VisualC++通过调用动态链接库中的函数来完成与Matlab的通信.

(5)COM(ComponentObjectModel)组件

是以组件为单元的对象模型,按照一定的接口标准形成的一套接口函数,可重复利用和开发不同的应用软件.

(6)Mat

是将Matlab的m文件译成同等功能的C++源代码的软件,程序开发人员可以直接使用这些C++源代码在VisualC++中编译链接成应用程序.

(7)MEX(MatlabExecutable)

文件是按照Matlab定义函数的接口标准编写C++源文件,通过Matlab中的专用工具将C++源文件转换而来,其可在Matlab环境下直接被调用.

2VisualC++和Matlab混合编程方式的对比分析

2.1七种混合编程方法总体对比

七种混合编程方法以不同的方式实现了VisualC++与Matlab的编程交互.为了便于程序开发人员能快速有效地选择适合的混合编程方法,明确每种混合编程方法的优缺点及其应用场合则显得十分重要.下面首先从三个角度对这几种方法作了纵向的对比分析,具体如表1所示.

(1)在软件集成度方面

即是否独立于Matlab运行.Matlab引擎集成度最低,因为其要有后台运行的Matlab的支持才能发挥作用,且运行效率不高.而MEX文件是Matlab中调用C++语言源代码,直接在Matlab环境下运行,因此不能脱离Matlab.另外5种方法集成度都高,其中Matlab数学函数库可直接被VisualC++调用,而Mat和MCC则是通过转换m文件为cpp文件的方法来实现通信,动态链接库和COM组件通过调用DLL文件的方法来实现混合编程,运用这五种方法编写的应用程序都可以脱离Matlab单独运行.

(2)在支持三维图形方面

Matlab引擎支持性最好,因为其图形的相关计算都是在Matlab环境下进行,与直接在Matlab下显示的三维图形并没有多大的区别.而Matlab数学函数库主要包含了数学计算类的函数,三维图形显示类函数较少,因此其支持性差.另外Mat和MCC在三维图形的显示上也较差,因为并不是所有的三维图形函数能被转换成cpp文件,此外三维图形函数的转换会影响算法的效率,图形显示效果较差[8].而动态链接库和COM组件在支持三维图方面还是不错的,但不管从支持图形显示的函数上还是显示的效果,都比不上Matlab引擎.

(3)在灵活性方面

Matlab引擎是通过ActiceX与Matlab进行通信,几乎能够应用Matlab中的所有功能,从操作角度和应用层面上来考虑灵活性很好,大多应用于算法调试与仿真等对集成度要求不高的场合[57].而MEX方式只要编写好mexFunction、MainWndProc和DrawData这三个函数并编译生成MEX文件,就可供Matlab调用C语言代码,这种方式的灵活性也是很好的.Mat和MCC两种方法都是基于代码转换的原理来完成混合编程的需要,代码更新和操作基本相同,但不能调用包含内联函数的程序,在功能实现上受到一定的限制,应用会受到一定的约束.同样,动态链接库和使用COM组件的方法在灵活性方面并没有太大差异,较Matlab引擎和MEX方式差一些.

VisualC++与Matlab混合编程方法的对比参考属性评定
有关论文范文主题研究: 可靠性相关论文范文 大学生适用: 电大论文、高校大学论文
相关参考文献下载数量: 81 写作解决问题: 怎么写
毕业论文开题报告: 论文模板、论文题目 职称论文适用: 论文发表、职称评初级
所属大学生专业类别: 怎么写 论文题目推荐度: 优质选题

除了以上三个方面的分析结果,还有值得注意的一点是,MEX方式是惟一能在Matlab中调用VisualC++代码的方法.使用这种方法,可以使程序开发人员能在Matlab中充分发挥C/C++的优越性能,加速程序的运行速度,扩展程序的功能[9].当程序中对数学计算较多时,就会考虑使用Matlab数学函数库方法,这种方法可以很灵活的调用Matlab来编写应用数学计算类的程序.在表1中Mat与MCC、动态链接库与COM组件这两组方法的区别不是很明显,下面详细对比分析这两组方法,找出它们之间的差距,使程序员能更好地利用这些方法进行程序开发.

2.2Mat与MCC的对比分析

图2为Mat与MCC实现原理图,从图中可以看出Mat软件是将m脚本或m函数文件转换为cpp文件或DLL文件;而MCC只能将m函数文件转换为c文件、cpp文件或MEX源文件.Mat必须要安装VisualC++编译器,安装完成后就可直接在VisualC++下转换m文件,其转换过程简单,执行效率高,容易实现,适合于需要大量计算方面的应用[911].

在对三维类图形的支持上,由于MCC是MATLAB自带的编译器,它的函数功能和执行效果明显优于Mat[13],虽然转换的C代码冗余度大,可读性不强,但可提高开发效率和可靠性.在使用这两种方法时还值得注意的是:在对数据类型的支持上Mat对struct等类的支持有缺陷.MCC编译器不能使用Matlab对象,也不能用input或者eval来操作Matlab空间变量,同样也不能动态地命名变量;在函数的使用上,由于Matlab的内置函数没有给出C/C++接口,MCC还没有转换Matlab内联函数的能力.

2.3动态链接库与COM组件的比较

图3为动态链接库与COM组件实现原理图.从图中可以看出动态链接库通过MCC编译器或MatlabAddin工具,将m脚本或m函数文件转化为DLL文件;而COM组件只能由COMBuilder将m函数文件转化为COM组件.这两种方法具有很多共同的优点,如方法实现简单,通用性很强,可以供多个应用程序调用,实现代码共享等.动态链接库还具有算法和数据的保密优点,孟虎等人利用这种方法完成了雷达信号与系统的分析[1314];但它对配置环境要求较高,存在着函数重名以及路径问题.COM组件则克服了动态链接库中的不足,通过制定复杂的COM组件协议,COM本身的机制改变了重用的方法,并以一种新的方法来重新利用动态链接库,该方法执行效率高,集成度高,易于移植,多在软件系统中应用,是解决信息和图像处理编程的一种有效途径[1517].


3结论

本文对比分析了VisualC++与Matlab混合编程的方法,这些方法各有特点,其实用性与应用范围也不尽相同,程序开发人员可以根据需要选择最佳的解决方案.Matlab引擎无法脱离Matlab,运行效率不高但几乎能实现Matlab中所有的功能,因而适用于除运算速度和集成度要求较高的软件应用开发以外的所有应用,如算法调试与仿真.

MEX是惟一在Matlab中调用C程序的方法,可以充分利用C语言算法资源,提高数据计算和分析的能力和效率.利用Mat方式有效地解决了执行效率等问题,适合于需要大量计算的应用领域,但对绘制三维图形的函数支持性不强.

MCC转换的C代码冗余度大,可读性不强,但其可换来高开发效率和可靠性,相对于Mat而言对三维图像的支持较好,可适用于小型系统开发和算法研究.动态链接库有利于算法和数据的保密,实现代码共享,但对配置环境要求较高.COM组件方式虽然操作较为复杂,但其执行效率高,支持相对较多的Matlab函数,易于移植,是解决信息和图像处理编程的一种有效途径,适用于软件的开发和应用.