并分析了各种方法的优缺点。 FFT 以 摘 要 介绍了 VC++与 Matlab 混合编程的各种方法, 算法为例,给出了基于 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 等类的支持有缺陷