MATLAB 混合编程

简介

我是从1995年开始接触MATLAB的, 从一开始我就非常喜欢MATLAB。在实际的使用中也积累了一些经验。十年以前,我积极参与 Simwe 论坛 MATLAB 板块上的各种关于 MATLAB 的讨论。很显然,这种参与提升了我对自己在 MATLAB 使用技术上的自信,从而在论坛组织出版一套 MATLAB 系列丛书的时候,我竟然接受了挑战,决定编写一本和matlab混合编程有关的工具书,以填补 matlab 在线手册没有提及的内容。于是有了这本书。书名为《深入浅出 MATLAB 7.x 混合编程》

以下内容包含作者自序,以及前言,分别摘自原书,仅供参考。

 


 

作者自序

工欲善其事,必先利其器——《论语》

MATLAB 是美国 MathWorks 公司研制开发的软件产品,它是当今世界上使用最为广泛的科学计算软件之一。MATLAB 具有强大、丰富的内置函数,以及高度灵活的可编程性,所以特别适合数据处理以及结果的图形化显示。另外,MATLAB 包含多种根据应用领域划分的工具箱,这些工具箱极大地扩展了 MATLAB 在这些领域的实用功能,其中应用最为广泛的工具箱包括数字信号处理、图像处理等。现在,无论是在学术界还是在工业界, MATLAB 逐渐成为大多数科研人员的首选计算语言,而 MATLAB 本身也逐渐成为一种工业界通用的计算语言。一些工业产品的研究与开发已开始完全使用 MATLAB,比如日本丰田汽车公司的引擎控制单元(ECU)系统的研发等。在 MathWorks 公司的网站上可以看到更多关于MATLAB的工业应用的实例。

尽管 MATLAB 在科学研究以及工业技术开发方面有着极为广泛的应用,但这并不意味着在解决实际问题时,MATLAB 总是无往不利。事实上,在某些情况下,完全使用 MATLAB 作为开发工具虽然能够完成任务,但它并不是最佳手段。这里“最佳”的意义包括高效的程序开发过程、高效的程序执行速度,以及简单易行的程序部署方法等。

幸运的是,MATLAB 提供了灵活而又强大的接口技术,使用者可以在 MATLAB 程序里调用其他语言编写的功能,比如可以把一些繁重的计算模块以 C/C++ 或者 FORTRAN 编写,然后利用 MEX 接口在 MATLAB 调用这些模块,从而提高整个程序的执行效率。另外也可以利用其他语言如 C/C++ 和操作系统的密切联系,使得 MATLAB 能够调用操作系统提供的一些功能或者实现与硬件系统之间的通信,从而扩展 MATLAB 程序的功能。

MATLAB 的另外一种接口则是如何在其他编程语言中调用 MATLAB 的数值计算和图形功能,从而加强应用程序的功能。这种应用在工业界的使用比较广泛。MATLAB 提供C/C++编译器,可以方便地把M方程编译连接成可以在其他编程语言或者应用程序中使用的库函数。

总之,MATLAB 的接口技术可以让使用者不只是局限于一种计算工具,这些接口技术使得人们可以更好地利用手中的工具,结合多个工具的长处,更好地解决实际问题。如果使用者能够灵活、正确地使用各种接口技术,将会有助于他们找到针对实际问题的优秀的解决方案。

但是现在市场上综合介绍 MATLAB 接口技术的专业书籍并不多。MATLAB 的帮助文件非常详细,但它们只能作为使用参考,并不适合初学者学习使用。虽然Internet上零星流传一些教程类的信息,但大多数只是针对早期版本的 MATLAB,而且有些信息并不准确,这给初学者带来迷惑,可能让他们白白浪费时间和精力。另外,新版的 MATLAB 不但加强了它的接口技术,同时在使用方面也有了一些变化。所以市场上急需一本能够全面详细地阐述最新 MATLAB 接口技术及其使用的参考书。本书将以实际应用为主要目的,以简明、准确的原理阐述,再辅以多种具实际使用意义的实例,给读者展现各种接口技术的使用方法。

写书的想法缘自 Simwe 论坛发起的编写 MATLAB 系列丛书的活动。后来该活动因故搁浅,不过一来我本人对相关主题有浓厚的兴趣,在科研实践中积累了一些经验;二来承蒙编辑朱英彪先生的支持。这两个因素促使我决定接受挑战,编写这本有关 MATLAB 接口编程的参考书。

在结构方面,本书基本上分为两个部分,第一部分讲述如何在 MATLAB 里调用其他编程语言;第二部分讲述如何从其他编程语言调用 MATLAB。在每个部分,将以具体的编程语言作为不同章节。而在每个章节的安排上,将首先讲述基础知识,以及使用中需要注意的事项包括一些命令和参数的使用说明,然后将辅以多种实例来展现具体应用。

在内容上,本书争取给读者比较全面的信息。内容不仅包括一般的接口技术如 C-MEX,FORTRAN-MEX,MATLAB 计算引擎以及MATLAB的编译器等,同时还会涉及许多新技术,比如在 MATLAB 中使用普通DLL文件以及 COM 编译器等。全书配有大量浅显易懂的实例以说明一些值得注意或者容易让初学者感到困惑的问题,对有些应用还从 Windows 和 Linux 等操作平台分别进行讨论。这种内容安排,相信将能够满足广大读者的需求。

董维国


前言

本书共有8章,第1章介绍 MATLAB 7.x版本的新特性,第2章~第8章分别介绍了在 MATLAB 中调用其他语言,以及从其他语言调用 MATLAB 的相关问题。每章的内容相互独立,阅读时可以根据实际需要,随意调整阅读顺序。

第1章简要介绍了 MATLAB 的发展历史以及 MATLAB 扩展接口在实际应用中的优点,还介绍了 MATLAB 7.x版本在接口技术方面的一些主要更新。

第2章介绍如何在 MATLAB 中以文件方式导入、导出数据。主要介绍了3种常用的数据文件:文本文件、二进制文件,以及 MAT 文件。本章以实例详细地介绍了各种 MATLAB 文件操作命令。重点讲解了在 MATLAB 7.x才被引入的新命令 textscan,以及内存映射方式的文件读写。另外也以一个C++面向对象的例子介绍了如何在C++程序中不使用 MATLAB 库函数来读取 MAT 文件中的数据。

第3章介绍如何在 Windows 和 Linux 开发 C/C++ 语言的 MEX 文件。本章以实例讲    解了如何在 MEX 文件中使用包括MATLAB函数句柄在内的各种数据类型。该章也介绍  了包括 MinGW gcc 在内的多种编译器的配置,以及如何在 Visual C++ 7.1、Eclipse 3.0.2 和 Editplus 2.12中以不同的方式开发 MEX 文件。

第4章介绍如何在 Windows 和 Linux 开发 FORTRAN 语言的 MEX 文件。本章讲解了如何利用 gnumex 在Windows 上配置使用 MinGW g77 编译器,也介绍了如何在 Windows 和 Linux 上配置使用g95开发FORTRAN 90/95 语言的MEX文件。

第5章介绍另外一种在 MATLAB 调用其他语言的方式,那就是在 MATLAB 中使用动态连接库文件。这是在MATLAB 6.5中被引入的功能。MATLAB 7.0.4也支持在Linux上调用动态连接库文件。这章以实例介绍了如何调用系统函数替换MATLAB的Figure窗口的图标,以及如何在MATLAB中调用著名文件管理软件Total Commander的WCX插件。

第6章介绍如何在C/C++语言中调用MATLAB计算引擎。本章以实例讲解了如何在Visual C++ 7.1集成开发环境中开发调用MATLAB引擎的Win32控制台或者MFC图形界面程序。另外,该章也以实例介绍了如何利用wxWidgets在Windows和Linux上开发跨平台的调用MATLAB引擎的图形界面函数。

第7章介绍如何使用MATLAB编译器,以及如何在C/C++程序中使用mcc编译的库函数。该章以大量的实例讲解了如何在命令行程序、MFC程序,以及wxWidgets程序中调用mcc产生的库文件。本章也介绍了3种在Win32图形界面程序中嵌入MATLAB的Figure窗口的技术,其中一种技术是以wxWidgets实现,所以也适用于Linux平台。

第8章介绍如何在C++程序中使用MATLAB的COM编译器产生的COM组件。这章以大量的实例讲解了如何在Win32控制台以及MFC图形界面程序中调用这种COM组件。这些例子包括如何在MFC程序中使用MATLAB产生的COM组件中的事件(Event)实现COM组件和程序之间的交互,以及如何使用COM组件中的复数数据等。

书中实例的源程序放于http://www.cmpbook.com/jk_xz.asp供读者下载,有问题可发邮件到zhuyingbiao@126.com进行交流。