posts - 112, comments - 215, trackbacks - 0, articles - 34
  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

vc/matlab混合编程方法介绍

Posted on 2006-11-30 11:06 济公 阅读(785) 评论(0)  编辑 收藏 引用 所属分类: VCMatlab

VC 调用 Matlab 的方法有多种,为了对混合编程有一个大概认识,将常用的几种方法中介绍一下:

一、通过 Matlab Engine 方式

   Matlab Engine 是指一组 Matlab 提供的接口函数 , 支持 C 语言 , Matlab Engine 采用 C/S( 客户机 / 服务器 ) 模式 ,Matlab 作为后台服务器 , C 程序作为前台客户机 , 通过 Windows 的动态控件与服务器通信 , Matlab Engine 传递命令和数据信息 , Matlab Engine 接受数据信息。用户可以在前台应用程序中调用这些接口函数 , 实现对 Matlab Engine 的控制。采用这种方法几乎能利用 Matlab 全部功能,但是需要在机器上安装 Matlab 软件,而且执行效率低,因此在实际应用中不采用这种方法,在软件开发中也不可行,我认为适合个人使用或做演示用,因此不打算介绍。

二、直接调用 Matlab C/C++ 数学函数库

   Matlab 中提供了可以供 C/C++ 语言调用的 C/C++ 数学函数库,其中包含了大量用 C\C++ 语言重新编写的 Matlab 数学函数,这些函数涉及到线形代数、数值分析、傅立叶变换、多项式计算、解微分方程等,并且函数库中提供了大量各种矩阵操作函数,在 VC 中可以直接使用这些函数,通过这些函数可以在 VC 中方便的实现在 Matlab 中矩阵运算功能。可以看出用这种方法可以很灵活的调用 Matlab 来编写应用程序,但要求读者对 C\C++ 语言比较熟悉,可以看出使用这种方法调用 Matlab 的工具箱函数有很大困难。适合对 C\C++ 语言比较熟悉的用户使用,

三、用 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++ 代码功能有很多限制:

1.    不能转换脚本 m 文件,只能转换 m 函数;

2.    不能使用 matlab 对象;

3.    不能用 input 或者 eval 操作 matlab 空间变量;

4.    不能动态地命名变量,然后用 load 或者 save 命令来操作;

5.    不能处理具有嵌套调用其他 m 文件的 m 文件;

6.    不能使用 MATLAB 内联函数;

四、使用 matlab combuilder 工具

   COM component object module 的简称,它是一种通用的对象接口,任何语言只要按照这种接口标准,就可以实现调用它。 matlab6.5 新推出来的 combuilder 就是把用 matlab 编写的程序做成 com 组件,供其他语言调用。该方法实现简单,通用性强,而且几乎可以使用 Matlab 的任何函数 ( 注意:不支持脚本文件,脚本文件使用时要改为函数文件 ) ,因此在程序较大、调用工具箱函数或调用函数较多时推荐使用,这也是 Matlab 公司 (Matlab 公司就是 Mathworks 公司 ) 推荐的使用方法。

五、使用 matcom 工具。

  这是个第三方控件,很小 (8M ), 原本属于 mathtool 公司,后来被 Mathworks 公司合并了,使用该工具可以将 m 脚本文件和 m 函数转化成相同功能的 C\C++ 文件,相比其它方法使用 matcom 具有如下优点:

1.    转换过程简单 ( matcom 工具自动实现 ) ,容易实现;

2.    可以方便的生成动态链接库文件 (dll) 和可执行文件 (exe)

3.    不仅可以转换独立的脚本文件,也可以转换嵌套脚本文件;

4.    设置环境后,可以使用 Matlab 的工具箱函数;

matcom 也有以下不足:

1.    struct 等类的支持有缺陷,对 class 数据类型;

2.    部分绘图语句无法实现或得不到准确图象,尤其是三维图象;

因此在不涉及到三维做图以及 m 文件不大的情况下推荐使用。

  以上几种方法可以单独使用,也可以混合使用。这里简单的介绍了 VC matlab 接口的几种方法,读者可以根据需要选择适合自己的方法。需要说明的是上以上几种方法并不是相互独立的,而是有相互联系的,比如使用 C/C++ 函数库与使用编译器,对于实现相同功能的程序,直接调用函数库与使用编译器最终生成的代码可能相差不大,只不过一个是直接在 VC 中写 C/C++ 代码,一个是在 Matlab 中写好 m 代码,然后通过编译器将 m 代码转化成相同功能的 C/C++ 代码,而在转化的过程中也需要调用相应的 C/C++ 函数库文件。在后面的文章中将从第二种方法开始进行介绍。

只有注册用户登录后才能发表评论。