加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MATLAB应用程序接口介绍

(2010-03-21 16:06:33)
标签:

杂谈

1.7  MATLAB应用程序接口介绍

MATLAB与外部的数据和程序交互是很有意义的。通过与其他编程的交互,可以扩充MATLBA强大的数值计算和图形显示功能,并且避开其执行效率较低的缺点。

具体地说,MATLAB接口包含以下功能:

1. MATLAB Compiler

MATLAB Compiler是MATLAB自带的编译工具,可以将其M文件转换成C/C++等不同类型的源代码文件,并在此基础上生成必要的 MEX 文件(.dll文件),再通过Visual C++编译器生成可独立执行的应用程序(.exe文件),这种方式可以直接调用其中的库函数,生成并发布不依赖MATLAB的可执行文件,从而大大提高代码的执行效率。尤其是可独立执行的应用程序文件,不需要MATLAB环境的支持,大大扩展了程序的应用范围。一方面,编译器对M文件编译后,运行速度有大幅提高,另一方面又隐藏了程序算法,也相应提高了程序的保密性。当然,并不是所有的M文件MATLAB编译器都能够将它们编译为可执行程序,在某些情况下,编译器的作用是有限的。为此,MATLAB 提供了运行时服务器(Run time Server),利用它可以很好地弥补编译器的不足。

2. MATLAB引擎

MATLAB引擎是用于和外部程序结合使用的一组函数和程序库,用户在自己的C或Fortran等语言编写的应用程序中用它们来调用MATLAB。这时将MATLAB作为一个计算引擎,在后台运行。MATLAB引擎函数是采用C或者Fortran语言编写的,在UNIX系统中通过通道来和一个独立的MATLAB进程通信,而在 Windows操作系统中则通过组件对象模型(COM)接口来通信,从而在用户程序与MATLAB进程之间起到了桥梁作用。MATLAB提供了一个函数库,用它们启动和终止MATLAB进程、传输数据并传递要在MATLAB中处理的命令。总之,MATLAB引擎功能非常强大,而且使用方便,因此经常在应用程序中使用。

3. MAT数据文件共享数据

MAT文件是MATLAB自己存储数据的标准格式,为了使C/C++等程序设计语言能对MAT文件进行操作,MATLAB 提供了一些专门操作MAT数据文件的API函数,因此,MATLAB可以与其他语言平台通过MAT文件实现数据共享,从而有助于减轻其他平台的计算负担。

4. 通过 ActiveX

ActiveX是一类自动化技术的总称。MATLAB支持组件自动化,对于传统的 DDE 和ActiveX自动化,MATLAB也提供了全面的支持。通过ActiveX,可以在MATLAB和其他软件平台建立客户机服务器体系结构,方便彼此的交互。

5. Mideva/Matcom

Mideva是由MathTools公司推出的MATLAB替代编译环境,提供了将MATLAB的M文件转换为C、CPP源代码以及DLL和EXE文件的功能。相对于MATLAB自带的编译器,用Matcom转化代码要简单和方便得多。但是Mideva在很多方面也有限制,比如,对struct等类的支持有缺陷,部分绘图语句无法实现或得不到准确图像,尤其是三维图像。

6. MATLAB<LIB>数学库

MATLAB中提供了大量用C/C++重新编写的MATLAB库函数,包括初等数学函数、线性代数函数、矩阵操作函数、数值计算函数、特殊数学函数、插值函数等,可以直接供C/C++语言调用。因此,利用MATLAB的数学库,可以在Visual C++中充分发挥MATLAB的数值计算功能,并且可以不依赖MATLAB软件运行环境。

7. MATLAB COM Builder

MATLAB COM Builder是MATLAB提供的COM生成器。COM(Component Object Model,组件对象模型)是一项比较复杂的技术。COM 生成器提供了实现MATLAB独立应用程序的一种新途径。它是把MATLAB开发的算法转换、编译成组件,这些组件作为独立的、方便使用的COM对象,可以直接在Visual C++、Visual Basic、Delphi或其他支持COM的语言中直接引用这些组件对象。MATLAB COM Builder几乎支持MATLAB所有的函数,特别适合在M文件较大、使用Matcom、调用MATLAB数学库或使用MATLAB Compiler等无法实现时使用。但MATLAB COM Builde在编译生成COM组件时需要借助外部的编译器,而且不是所有的编译器都能生成和 Microsoft 相兼容的COM 组件。

8. Excel Link

Excel Link 将MATLAB的数学和图形处理能力与 Microsoft Excel的电子表格软件能力结合在一起,使MATLAB成为Excel的数学计算引擎,使得Excel在具有高质量的图形功能的同时,还可以明显降低复杂应用程序的执行时间。Excel Link 允许在 Excel 工作空间和MATLAB工作区之间进行数据交换,在两个功能强大的数学处理、分析与表示平台之间建立连接。

9. MATLAB Builder for Excel

MATLAB还提供了一个被称为Excel生成器的工具。利用该工具,可以生成DLL组件或者VBA代码。利用DLL组件,可以进行与 COM 生成器组件相似的操作。VBA代码则可以在Excel的Visual Basic编辑器中直接使用。

实现MATLAB与其他编程语言混合编程的方法很多。通常在混合编程时根据是否需要MATLAB运行,可以分为两大类:MATLAB 在后台运行和可以脱离MATLAB环境运行。事实上,这些方法各有优缺点,具体使用时需要结合开发者的具体情况。无论是用哪种方法,运行环境的设置以及MATLAB的数据结构和语法都是关键内容。

1.8  常见的混合编程方法简介

常见的MATLAB混合编程方法有以下几种。

1.使用MATLAB自带的MATLAB Compiler

MATLAB 5.3以后的版本都自带了C语言的编译器。MATLAB Compiler是MATLAB混合编程的基础。生成的C/C++源代码需要用C/C++编译器编译链接成独立应用程序。在将M文件转成独立应用程序的过程中生成C/C++文件,原则上它是可以被其他C/C++代码调用的,编译器可以通过设置mcc命令的选项,将M文件编译成动态链接库文件、C/C++文件、可执行文件等一系列文件。

MATLAB有许多混合编程的方式,实际上都是通过MATLAB Compiler实现的,例如后面介绍的MATLAB Add-in和MATLAB Builder for COM等。

最新的MATLAB Compiler 版本将M程序转换成C/C++代码功能仍有很多限制,体现在以下几个方面:

●     只能把M函数转换为C/C++代码,而不能对脚本M文件进行转换;

●     在代码中不能使用MATLAB对象;

●     不能用input或者eval命令来操作MATLAB空间变量;

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

●     不能处理具有嵌套调用其他M文件的M文件;

●     代码中不能使用MATLAB内联函数。

2.利用MATLAB引擎(Engine)

MATLAB引擎函数库是MATLAB提供的一组接口函数,它允许用户在自己的应用程序中对MATLAB函数进行调用。因此,可将MATLAB作为一个计算引擎使用,让其在后台运行,这样可以简化前台用户程序的设计任务。

当用户使用MATLAB引擎时,采用 C/S(客户机/服务器)模式,相当于在后台启动了一个MATLAB进程。MATLAB引擎函数库在用户程序与MATLAB进程之间搭起了交换数据的桥梁,完成二者的数据交换和命令的传送。在Windows系统中通过ActiceX完成。

MATLAB引擎有以下典型的功能应用:

(1) 调用MATLAB特有的强大数值计算和分析等函数进行运算

数值计算,特别是矩阵运算,是MATLAB的强项,通过MATLAB计算引擎可以轻松地实现矩阵运算、图形显示等复杂度高的计算操作。

(2) 可以为一个特定的任务构建一个完整的系统

前台客户机可以采用诸如Visual C++之类的通用编程平台,通过Windows的动态控件与服务器MATLAB通信,向MATLAB Engine 传递命令和数据信息,并从MATLAB Engine 接收数据信息。此时,MATLAB完成较复杂的数值计算、分析和可视化任务。因此,MATLAB Engine可以简化应用程序的开发,取得事半功倍的效果。

MATLAB Engine几乎可利用MATLAB的全部功能,但是需要在计算机上安装MATLAB软件,并且执行效率低,因此这种方法的实用性较低,在商用的应用软件开发中不宜采用。

3.利用ActiveX控件

ActiveX 是一种支持组件集成的Microsoft Windows协议,通过ActiveX技术可以将不同环境下开发的组件集成到一个应用环境中。ActiveX同时是面对对象技术的一种,属于基于组件对象模型(COM)的子类。COM为所有的ActiveX对象定义了对象模型,每个 ActiveX 对象支持一定的接口,也就是不同的方法、属性和事件。

MATLAB支持两种ActiveX技术:ActiveX 控制器和ActiveX Automation。ActiveX控制器可以将不同的ActiveX控制集成在一个应用中,而ActiveX Automation是一种允许一个应用程序(客户端)去控制另一个应用程序(服务器端)的协议。因此,它允许MATLAB 控制其他ActiveX 组件或者被其他ActiveX控制。当MATLAB控制其他ActiveX组件时,MATLAB作为一个Automation Client;当MATLAB被其他 ActiveX 控件控制时,MATLAB作为一个Automation Server。

4.利用MAT文件

MATLAB与其他编程环境的数据交互是通过 MAT数据文件来实现的。MAT文件是MATLAB系统保存文件的默认文件格式,它把数据文件存储为二进制格式。这种格式为不同平台或不同应用程序间共享MATLAB数据提供了一种便利的机制。一般情况下,不需要了解 MAT文件的具体格式,因为MATLAB提供了一些 API 函数来简化MAT文件的读取与存储,而MATLAB API完全屏蔽MAT文件格式。因此,在某些情况下,可将计算复杂度高的操作交由MATLAB来处理,而在其他应用程序中通过共享MATLAB生成的 MAT 数据文件达到减轻编程负担的目的。

5.C-MEX

所谓MEX是MATLAB Executable 的缩写,即MATLAB的可执行程序,在 Windows 环境中,它是扩展名为 DLL 的动态链接库。 MEX 文件是MATLAB调用其他语言编写的程序或算法的接口。它符合MATLAB的调用格式,可以在M程序中直接调用。

与MATLAB引擎API一样,MATLAB也提供了一组用于MEX程序的应用程序接口。在MATLAB中,可以调用用户自己开发的C或Fortran子程序,通过MATLAB的API函数库将C或Fortran子程序编译成 MEX 文件,以便在MATLAB环境中直接调用或链接这些子程序,达到提高计算效率的目的。

MEX 文件具体应用如下:

●     对于某些已经存储的C或者Fortran子程序,可以通过MEX方式在MATLAB环境中直接调用,而不必重新编写相应的M文件。

●     对于影响MATLAB执行速度的for、 while等循环,可以编写相应的C、Fortran 子程序完成相同的功能,并编译成MEX文件,提高运行速度。

●     对于一些需要访问硬件的底层操作,如A/D、D/A 或中断等,可以通过MEX文件直接访问,克服MATLAB对硬件访问功能不足的缺点,从而增强MATLAB应用程序的功能。

当然,并不是所有的程序都适合用 MEX 实现。MATLAB编程效率极高,因此一般在MATLAB环境编程时尽量以MATLAB编程为主,只是对那些耗时或者MATLAB功能受限的部分采用 MEX 编程。

6.利用Mideva/Matcom

Mideva是MathTools公司推出的一种MATLAB编译开发软件平台,提供MATLAB程序文件(M文件)的解释执行和开发环境支持。该软件有为 Borland C++、 Visual C++ 和 Visual Basic等编程语言开发的不同版本。

Mideva是一个集成的调试编辑环境,提供了比MATLAB更强大的编辑、调试功能,如语法突出显示、批量注释等。而Matcom是Mideva的内核,它是一个基于C++矩阵函数库Matria的一个MATLAB的M文件与CPP文件的转换程序。

Mideva提供的功能相当强大,因为它包含了近千个MATLAB的基本功能函数,通过必要的设置就可以直接实现与C++的混合编程,也不必再依赖 MATLAB。同时,Mideva 还提供编译转换功能,能够将MATLAB函数或编写的MATLAB程序转换成C++形式的 DLL,从而实现脱离MATLAB环境对MATLAB函数和过程的有效调用,这样就有可能实现对MATLAB强大工具箱函数的利用。Mideva不仅可以转换独立的脚本文件,而且可以转换嵌套脚本文件。

Matcom的不足之处在于对struct等类的支持有缺陷,而且部分绘图语句无法实现或得不到准确图像,尤其是三维图像。因此它适合在不涉及三维绘图以及M文件不太大的情况下使用。

7.利用Matrix<LIB>实现混合编程

Mideva/Matcom提供一种实现混合编程的方法,它自动将M文件转换为C、CPP文件,然后将生成的C、CPP代码复制到Visual C++工程中,从而可降低开发难度。实际上, Matcom 的内核是一组称为 Matrix<LIB>的C++库。它是一个矩阵数学库,提供了一个双精度 Matrix 类型:M<double>。它可以是复数矩阵、实数矩阵、稀疏矩阵甚至N维矩阵。这个库共有500多个函数,涉及线性代数、多项式数学、信号处理、文件输入和输出、图像处理、绘图等方面。

其实我们在Visual C++工程中直接按照 Matrix<LIB>的语法编程,即可实现高效编程。这是因为Matrix<LIB>的函数是基于矩阵类型的,大多数函数原型类似于MATLAB函数。实际上,Matrix<LIB>是将一些很有用的MATLAB函数封装成C++的库文件。它适合于对C/C++ 语言比较熟悉的用户使用。

8.MATLAB COM Builder

COM是以组件为发布单元的对象模型。由于 COM 是建立在二进制级别上的规范,所以组件对象之间的交互规范不依赖于任何特定的开发语言。 COM 适合于不同语言之间的协作开发。其开发架构是以组件为基础的,因而可以把组件看作用于“搭建”软件的积木。

MATLAB提供了COM生成器。COM生成器成为实现MATLAB独立应用程序的一种新途径。它是把MATLAB开发的算法做成组件,这些组件作为独立的COM对象,可以直接被 Visual C++、Visual Basic、Delphi 或其他支持COM的语言所引用,可以生成不依赖MATLAB环境的独立程序,因此可获得最快的运行速度,并且不需要进行代码转换,使得编程风格一致,可读性好。

实际上,COM生成过程是通过MATLAB的C语言编译器mcc生成的。采用mcc和mbuild命令完全可以实现MATLAB COM Builder的全部功能,只不过MATLAB COM Builder为用户提供了一组更加友好的图形用户界面。

9.MATLAB和 Excel混合编程

Excel 和MATLAB在图形显示和数值计算上各有优势。因此,MATLAB提供了 Excel Link和MATLAB Builder for Excel两个工具实现二者的混合编程。

Excel Link是一个在Windows环境下实现MATLAB和Excel的工作区,利用Excel的宏编程工具,使用MATLAB的数据处理和图形处理功能进行相关操作,同时由Excel Link来保证两个工作环境数据的交换和同步更新。使用 Excel Link时,不必脱离Excel 环境,而是直接在 Excel 工作区或者宏操作中调用MATLAB函数。

MATLAB Builder for Excel 是MATLAB专门为Excel提供的生成器工具,它能轻易地将复杂的MATLAB算法转换为独立的 Excel 加载宏(插件)。使用者可以像使用其他 Excel加载宏一样使用MATLAB算法。MATLAB所建立的Excel加载宏函数依赖计算功能强大的MATLAB函数库,其运算速度可以比利用VBA所建立的Excel加载宏快很多。从MATLAB所建立的 Excel 加载宏函数也可以免费分享任何Excel应用程序。利用该工具,可以生成DLL组件或者VBA代码。利用DLL组件,可以进行与COM生成器组件相似的操作。VBA代码则可以在Excel的Visual Basic编辑器中直接使用。

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有