基于COM接口的VC 与MATLAB混合编程(1)
2016-10-29 01:01
导读:计算机应用论文论文,基于COM接口的VC 与MATLAB混合编程(1)论文样本,在线游览或下载,科教论文网海量论文供你参考:摘 要 介绍了VC 与Matlab混合编程的各种方法,并分析了各种方法的优缺点。以
摘 要 介绍了VC 与Matlab混合编程的各种方法,并分析了各种方法的优缺点。以FFT算法为例,给出了基于COM接口的VC 与Matlab混合编程的步骤。 关键词 VC;COM;Matlab;FFT;混合编程0 引言 目前,Matlab广泛的应用于自动控制、数学运算、信号分析、图像处理、财务分析等各行各业。MATLAB也存在着某些缺点:Matlab是一种解释性语言,其特点是以矩阵为基本数据结构,导致其执行效率相对C或C 语言要低很多;因为Matlab程序不能脱离其环境运行,故不能直接用于商用软件的开发。与此相反,VC 由于其丰富得人机界面,高效的执行效率已经成为基于Windows平台下开发商业软件的必备工具。然而,VC 对于复杂的数值运算就有点“力不从心”了。所以将VC 与Matlab完美的结合,发挥各自的优势具有现实意义。自Matlab6.5版本开始,新推出来的Combuilder支持把用Matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,成为VC与Matlab混合编程最有效的方法。1 VC与Matlab混合编程的方法1.1 通过Matlab Engine方式 Matlab Engine是指一组Matlab提供的接口函数,支持C语言, Matlab Engine采用C/S(客户机/服务器)模式,Matlab作为后台服务器,而C程序作为前台客户机,通过Windows的动态控件与服务器通信,向Matlab Engine传递命令和数据信息,从Matlab Engine接受数据信息。用户可以在前台应用程序中调用这些接口函数,实现对Matlab Engine的控制。采用这种方法几乎能利用Matlab全部功能,但是需要在机器上安装Matlab软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,这种模式只适合个人使用或做演示。 1.2 直接调用Matlab的C/C 数学函数库 Matlab中提供了可以供C/C 语言调用的C/C 数学函数库,其中包含了大量用C/C 语言重新编写的Matlab数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在VC中可以直接使用这些函数,通过这些函数可以在VC中方便的实现在Matlab中矩阵运算功能。用这种方法可以很灵活的调用Matlab来编写应用程序,但要求读者对C/C 语言非常熟悉,并且这种模式不能包括所有的Matlab函数,尤其是无法充分使用Matlab提供的详尽的绘图函数。1.3 用Matlab自带的Matlab Compiler Matlab Compiler的作用是将m文件转化成C/C 代码(也就是通常所用的mcc命令),这种源代码需要用C/C 编译器编译连接成独立应用程序,在将m文件转成独立应用程序的过程中生成的C/C 文件,原则上是可以被其它的C/C 代码调用的,编译器可以通过设置mcc命令的选项,将m文件编译成动态链接库文件、C/C 文件、可执行文件等一系列文件。到matlab R21.1为止,Matlab Compiler的m程序转换成C/C 代码功能有很多限制: ⑴不能转换脚本m文件,只能转换m函数; ⑵不能使用matlab对象; ⑶不能用input或者eval操作matlab空间变量; ⑷不能动态地命名变量,然后用load或者save命令来操作; ⑸不能处理具有嵌套调用其他m文件的m文件; ⑹不能使用MATLAB内联函数; 1.4 使用matcom工具 这是第三方控件,很小(8M多),原本属于mathtool公司,后来被Mathworks公司合并了,使用该工具可以将m脚本文件和m函数转化成相同功能的C/C 文件,相比其它方法使用matcom具有如下优点: ⑴转换过程简单(由matcom工具自动实现),容易实现; ⑵可以方便的生成动态链接库文件(dll)和可执行文件(exe); ⑶不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件; ⑷设置环境后,可以使用Matlab的工具箱函数; 但matcom也有以下不足: ⑴对struct等类的支持有缺陷,对class数据类型; ⑵部分绘图语句无法实现或得不到准确图象,尤其是三维图象; ⑶当涉及到的复杂函数调用时嵌套的文件数量很多。 因此在不涉及到三维做图以及m文件不大的情况下推荐使用。1.5 使用Matlab的Combuilde工具 COM是component object module的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。Matlab6.5新推出来的Combuilder就是把用Matlab编写的程序做成com组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用Matlab的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件),因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是Matlab公司推荐的使用方法。2 基于COM接口的Matlab与VC混合编程实现FFT转换2.1 创建Matlab源文件 在Matlab中实现FFT转换只需要一个函数即可。 (1) 新建M文件,在M文件中输入以下两条语句: Function FFT(X,Y) %实现FFT转换。函数名为FFT,x为输入参数,y为输出参数 Y=fft(X);