具体描述
内容简介
《精通MATLAB与CC++混合程序设计(第4版)》结合大量实例,系统全面地介绍了MATLAB与C/C++进行混合程序设计的方法和技巧。全书共分六部分22章。第一部分重点介绍MATLAB与C/C++混合程序设计基础。第二部分重点介绍MATLAB中调用C/C++程序的方法。第三部分重点介绍MATLAB与C/C++语言之间的数据和函数接口。第四部分重点介绍MATLAB编译器的工作原理、发展历程和应用技巧等。第五部分重点介绍C/C++程序中调用MATLAB程序的方法。第六部分重点介绍与MATLAB关系密切的数学库的使用方法。
本书涵盖了MATLAB与C/C++混合程序设计的各个方面,内容由浅入深,并辅以大量实战型的实例程序,可供大中专院校学生作为教材使用,也可供相关领域工程师与科学家参考。 前言/序言
在此之前,本书先后出版了第1版、第2版和第3版。笔者通过邮件、电话、面谈和网上论坛与前3版的读者进行了广泛的交流,从与读者交流的情况来看,MATLAB取得了广泛的应用,MATLAB与C/C++混合程序设计已经应用到了科学研究和工程开发的各个领域。
有一个通俗的比喻,如果程序设计语言是车,那么C语言就是全能手,C++语言是加强版的C语言,MATLAB是科学家用来完成特殊任务的工具。作为使用MATLAB的科学家和工程师,通过混合程序设计,就可以借用C/C++语言这两个全能手增强MATLAB的功能;作为使用C/C++语言开发的开发者,也可以通过混合程序设计来使用MATLAB强大的科学计算与数据可视化功能。
长期以来,MATLAB与C/C++语言的混合编程架构非常不稳定,经常出现高版本不能兼容低版本的情况,这给开发者带来了很大的麻烦。值得庆幸的是,自MATLAB 7.0以来,这一现象已经发生了改变。从MATLAB 7.0至MATLAB 2013,MathWorks保持了MATLAB编译器基本架构的稳定,而且混合编程的向下兼容性越来越好,这对用户来说是一个福音。即便如此,由于涉及不同的语言以及不同的开发和调试环境,MATLAB与C/C++混合程序设计仍然具有一定的复杂度。一方面,虽然MATLAB混合编程架构的兼容性有了很大的提高,但是高版本与低版本之间仍然存在一些不兼容的现象。同时,MATLAB混合编程架构和Visual C++的开发平台均发生了较大变化,使得混合编程开发和调试环境发生了一些变化。此外,又涌现出包括.NET配件和MATLAB Coder在内的一些新的混合编程方法。因此,本书第3版中的部分内容已经不能适应MATLAB 2013和Visual C++ 2010开发环境的变化,部分实例在新的平台和开发环境中已不能正确运行。为此,对《精通MATLAB与C/C++混合程序设计》(第3版)进行了大幅度的补充和修正,从而形成了本书的内容。
在本书编写过程中,笔者力图做到以下两点。一是对全书的布局进行全面优化,努力提升MATLAB与C/C++混合程序设计内容的系统性。二是使方法描述与实例说明并重,期望在读者阅读后既能掌握相关方法的原理和技巧,又能结合书中内容快速完成实际的工作任务。全书内容围绕三个重点展开,即在MATLAB中调用C/C++程序、在C/C++程序中调用MATLAB程序、MATLAB与C/C++语言之间的数据交换。全书共分六部分,包括MATLAB与C/C++混合程序设计基础、在MATLAB中调用C/C++程序、MATLAB与C/C++语言的数据和函数接口、MATLAB编译器、在C/C++程序中调用MATLAB程序以及与MATLAB相关的数学库。
第一部分重点介绍MATLAB与C/C++混合程序设计基础,内容包括MATLAB M语言程序设计基础、C语言和C++语言程序设计基础、MATLAB与C/C++语言对照、动态链接库基础、开发与调试环境等。第一部分有助于读者掌握完成MATLAB与C/C++语言混合程序设计必备的基础知识,深入理解MATLAB与C/C++语言的特点,从而帮助读者选择合适的混合程序设计方法以及开发与调试环境。
第二部分重点介绍在MATLAB中调用C/C++程序的方法,内容包括通过MEX文件、动态链接库、可执行文件和ActiveX调用C/C++程序的方法等。第二部分的主要应用是利用C/C++语言来扩展MATLAB程序的能力。除此之外, MATLAB环境还可以集成C/C++编译器的功能,且具备完备的数据可视化功能;还可以将MATLAB环境看做是C/C++语言程序的调试环境,利用MATLAB的"粘合"能力快速调试C/C++语言程序,并显示C/C++数值计算程序的数据处理结果,或者以MATLAB为参照对C/C++数值计算程序进行性能评价。
第三部分重点介绍MATLAB与C/C++语言之间的数据和函数接口,内容包括混合程序设计常用的数据类型、操作MATLAB阵列的函数与方法、MEX文件中的专用API函数、操作MAT文件的函数等。MATLAB提供mxArray和mwArray等数据结构用于在C/C++语言中操作MATLAB阵列,除此之外,MATLAB还提供了一系列API函数用于操作MATLAB阵列、配置MEX文件的环境及读/写MAT文件。熟练掌握这些数据结构和API函数是完成MATLAB与C/C++混合程序设计的关键。
第四部分重点介绍了MATLAB编译器的工作原理、发展历程和应用技巧等。MATLAB编译器是将MATLAB M程序转换为C/C++语言可调用元素(如动态链接库、COM组件等)的利器。掌握MATLAB编译器对在C/C++语言中调用MATLAB M程序等应用至关重要。
第五部分重点介绍了在C/C++程序中调用MATLAB程序的方法,内容包括生成可独立运行的MATLAB程序、通过MATLAB引擎和动态链接库调用MATLAB程序、通过COM组件调用MATLAB程序、通过.NET配件调用MATLAB程序、将MATLAB M程序转换为C/C++程序等。其中,前四项内容有一个共性,即使用MATLAB编译器将MATLAB程序编译为C/C++语言可调用的元素,然后在C/C++程序中调用;而第五项内容则是将MATLAB M程序直接转换为C/C++代码。前者的特点是通用,但是均依赖MCR(Matlab Compiler Runtime)来执行;后者的优势显而易见,实现了MATLAB程序与C/C++程序的无缝连接,但用户开发M程序时需要遵循诸多限制才能实现从M程序到C语言程序的转换。
第六部分重点介绍了与MATLAB关系密切的数学库的使用方法,包括MATCOM矩阵库和MATLAB C++数学库。MATCOM矩阵库是第三方库,MATLAB C++数学库是MATLAB 6.5提供的数学库。两者均不是当下流行的混合程序设计技术,但出于完整性考虑,书中保留了这部分内容。
对于第四部分和第五部分,在进行MATLAB与C/C++混合程序设计时,需要特别注意MCR的作用。基于MCR 架构的混合程序设计具有以下特点:
MATLAB程序在MCR环境下与在MATLAB环境下的执行效率是相同的,因此通过编译MATLAB程序不会提高MATLAB程序的效率。
MCR的启动时间与MATLAB程序的启动时间相同,在混合程序设计中应考虑到这一点。
在C/C++程序中无论采用哪种调用方式调用MATLAB程序,其最终结果都是由MCR来执行MATLAB程序。
由于MATLAB编译器只生成MATLAB接口文件,而MCR接口一般会采用兼容设计,因此与MATLAB 6.5及其以前版本相比,用户进行C/C++混合程序设计的复杂度降低了,可继承性提高了。
由于是采用MCR执行MATLAB程序,而不是将MATLAB程序编译为C/C++程序,因此,在MATLAB函数和工具箱中可编译的部分大大增加,从而为用户进行混合程序设计提供了便利条件。
MATLAB与C/C++混合程序设计的实践性和技巧性较强,因此书中坚持实例第一的写作风格,提供了大量应用实例供读者学习。这些应用实例均是在考虑实际应用的基础上进行设计的,具有很强的实用价值。程序是程序员的通用语言,实例学习和训练是快速掌握MATLAB与C/C++混合程序设计方法的不二法宝。本书所有的源代码均附在随书光盘中。其中,第21章和第22章的开发和编译环境均为Visual C++ 6.0和MATLAB 6.5.1;其他各章除特别说明外,开发和编译环境均为Visual C++ 2010和MATLAB 2013。由于编译器和MATLAB软件的安装路径和版本等可能存在差异,因此,用户在学习书中实例时若不能直接运行,请以光盘中的实例代码为参考,按照书中的步骤重新创建工程、设置路径并编译即可。
针对本书,北京航空航天大学出版社和MATLAB 中文论坛特别提供了读者与作者在线交流的平台,笔者希望借助此平台实现与广大读者面对面的交流,解决大家在阅读此书过程中遇到的问题,分享彼此的学习经验,从而达到共同进步目的。
在本书编写过程中有幸得到北京航空航天大学出版社老师和编辑们的支持和帮助,在此表示衷心感谢。同时感谢网络上提供MATLAB与C/C++混合程序设计资料的网友们,在进行MATLAB与C/C++混合程序设计的过程中,这些资料使笔者受益匪浅。由于作者业务水平和精力有限,书中难免存在不足之处,恳请广大读者和同行批评指正。
刘维
2014年10月3日
精通MATLAB与C/C++混合程序设计(第4版) 内容简介 《精通MATLAB与C/C++混合程序设计(第4版)》是一本面向广大科研人员、工程师、高校师生以及对MATLAB与C/C++混合编程有深入学习需求的读者的专业书籍。本书旨在系统地介绍如何将MATLAB强大的数值计算、数据分析、可视化以及算法开发能力与C/C++高效的系统编程、底层控制和高性能计算能力有机结合,以应对日益复杂的工程计算与软件开发挑战。 本书在前几版的基础上,结合最新的MATLAB和C/C++版本特性以及行业发展趋势,进行了全面更新和深化。第四版不仅保留了原有的核心内容,更在实践应用、性能优化、现代开发模式等方面进行了大幅度的扩展和补充,力求为读者提供一套全面、实用且与时俱进的混合编程解决方案。 本书核心内容概览: 第一部分:MATLAB与C/C++混合编程基础 MATLAB 基础回顾与核心优势剖析: 本部分将快速回顾MATLAB的关键特性,重点阐述其在科学计算、数据可视化、算法原型设计等方面的独特优势。通过实例展示MATLAB如何快速实现复杂的数学运算和工程分析,为后续的混合编程打下坚实基础。 C/C++ 基础回顾与性能优势分析: 同样,本部分也将对C/C++的核心语法、数据结构、面向对象编程等进行梳理,并深入分析C/C++在内存管理、系统调用、嵌入式开发以及执行效率方面的突出表现。理解C/C++的强大之处,是认识混合编程必要性的前提。 混合编程的必要性与应用场景: 详细分析在哪些实际场景下,单纯使用MATLAB或C/C++难以高效或灵活地解决问题。例如,当需要开发高性能的算法库供MATLAB调用,或者需要将MATLAB的算法集成到独立的C/C++应用程序中,甚至是在嵌入式系统中部署MATLAB生成的代码时,混合编程就显得尤为重要。本书将通过丰富的案例,揭示混合编程的广泛应用前景,涵盖科学计算、信号处理、图像识别、机器人控制、金融建模、生物信息学等多个领域。 MATLAB 与 C/C++ 交互机制概览: 引入MATLAB与C/C++进行交互的几种主要机制,包括MATLAB Compiler (MCC)、MATLAB Engine API、MEX 文件、MATCOM(已过时但作为历史介绍)、以及通过文件I/O等方式进行数据交换。对这些机制的优劣势进行初步的对比分析,帮助读者建立宏观认识。 第二部分:核心混合编程技术详解 MEX 文件开发: MEX 文件原理与创建流程: 深入讲解MEX文件的原理,它是MATLAB调用C/C++函数的最常用方式。详细介绍MEX文件的创建流程,包括编写C/C++源文件、使用mex命令编译、以及MEX文件的链接和加载过程。 MATLAB 与 C/C++ 数据类型转换: 这是MEX编程的关键。本书将详尽介绍MATLAB的各种数据类型(如double、int、logical、char、cell、struct、string等)与C/C++中的对应数据类型之间的转换方法,包括使用`mxArray`接口函数(如`mxCreateDoubleMatrix`、`mxGetPr`、`mxGetString`、`mxSetField`等)进行矩阵、字符串、结构体、单元格数组等复杂数据的读写和创建。 MEX 函数编写实践: 通过大量的实例,演示如何编写不同类型的MEX函数,包括处理标量、向量、矩阵运算,实现复杂的数值算法,调用外部C/C++库,以及处理错误和异常。 MEX 文件性能优化: 探讨提高MEX文件执行效率的策略,包括优化C/C++代码、避免不必要的数据拷贝、使用高效的内存管理技术、以及选择合适的MATLAB数据结构。 高级MEX 应用: 介绍一些高级MEX文件的使用技巧,如创建MEX-functions、MEX-gateways、以及如何处理MATLAB的运行时错误。 MATLAB Compiler (MCC) 应用: MCC 工作原理与打包流程: 详细讲解MATLAB Compiler如何将MATLAB代码“打包”成独立的C/C++共享库(DLL、.so)或可执行文件,使得没有MATLAB环境的用户也能运行MATLAB开发的应用程序。 将MATLAB 函数打包成 C/C++ 共享库: 演示如何使用MCC将一个或多个MATLAB函数打包成C/C++动态链接库,以及如何生成相应的C/C++头文件和接口函数。 在 C/C++ 程序中调用打包后的 MATLAB 函数: 详细指导读者如何在C/C++应用程序中包含生成的头文件,并调用打包后的MATLAB函数,进行数据传递和结果获取。 MCC 在嵌入式系统开发中的应用: 探讨MCC如何支持将MATLAB算法部署到嵌入式硬件平台,并介绍相关的配置和优化技巧。 MATLAB Compiler SDK 的使用(可选): 介绍MATLAB Compiler SDK如何生成更多种类的部署目标,如Java、Python、.NET等,进一步扩展MATLAB代码的复用性。 MATLAB Engine API 应用: Engine API 介绍与环境配置: 讲解MATLAB Engine API是如何在C/C++应用程序中启动并控制MATLAB引擎,允许直接在C/C++代码中执行MATLAB命令和函数。详细介绍Engine API的安装和配置过程。 Engine API 核心函数: 深入介绍Engine API提供的核心函数,如`engOpen`、`engClose`、`engEvalString`、`engPutVariable`、`engGetVariable`、`mxArray`的创建与操作等,用于在C/C++程序和MATLAB引擎之间进行数据交换和命令执行。 在 C/C++ 程序中执行 MATLAB 命令: 通过实例演示如何使用Engine API在C/C++程序中执行MATLAB脚本、调用MATLAB函数,并获取执行结果。 复杂数据类型在 Engine API 中的处理: 讲解如何使用`mxArray`在C/C++与MATLAB引擎之间传递复杂的MATLAB数据结构,如矩阵、结构体、单元格数组等。 Engine API 的性能考量与应用场景: 分析Engine API的性能特点,并指出其适用的场景,如需要频繁与MATLAB进行交互、动态生成MATLAB代码、或需要利用MATLAB的GUI功能等。 第三部分:混合编程实践与高级主题 混合编程中的数据管理与交换策略: 高效数据传输技术: 深入探讨不同数据量和类型下,MEX、MCC、Engine API等不同交互机制的数据传输效率,并提出优化建议。 内存管理与共享: 讲解如何在C/C++和MATLAB之间进行高效的内存管理,避免不必要的内存拷贝和泄漏。介绍共享内存、内存映射等高级技术在混合编程中的应用。 文件 I/O 作为数据交换桥梁: 探讨使用文件(如`.mat`文件、CSV、二进制文件等)作为MATLAB和C/C++之间数据交换的辅助手段,特别是在处理大数据量或需要异步通信时。 性能优化与调试技巧: C/C++ 代码的性能调优: 结合混合编程的特点,讲解C/C++代码编写时的性能考量,如算法选择、循环优化、并行计算(OpenMP, MPI)、SIMD指令的使用等。 MATLAB 代码的性能优化: 回顾MATLAB代码的性能优化方法,如向量化、JIT编译、预分配内存等,并探讨这些优化对混合编程的影响。 混合程序的调试策略: 介绍MEX文件、Engine API应用程序以及MCC生成的C/C++代码的常用调试方法和工具,包括使用IDE调试器、MATLAB的调试器、以及打印日志等。 性能分析工具的应用: 介绍如何使用MATLAB的 Profiler、C/C++的性能分析工具(如gprof, VTune)来定位混合程序的性能瓶颈。 现代软件工程与混合编程: 版本控制与代码管理: 强调在混合编程项目中,如何有效利用Git等版本控制工具管理MATLAB和C/C++代码。 构建系统与自动化编译: 介绍如何使用CMake、Make等构建系统来自动化MEX文件的编译、C/C++应用程序的构建,以及MCC项目的打包过程。 单元测试与集成测试: 探讨如何为MATLAB代码、C/C++代码以及混合调用的模块编写有效的测试用例,确保程序的健壮性和可靠性。 持续集成/持续部署 (CI/CD) 在混合编程中的应用: 介绍如何将混合编程项目集成到CI/CD流程中,实现代码的自动构建、测试和部署。 典型应用案例深度解析: 高性能数值计算库开发: 以实际项目为例,演示如何将核心计算算法用C/C++实现,并打包成MATLAB可以高效调用的MEX函数或共享库,显著提升计算速度。 MATLAB 算法集成到桌面应用程序: 展示如何使用MCC将MATLAB开发的GUI界面或算法模块打包成独立的C/C++应用程序,无需安装MATLAB即可运行。 嵌入式系统中的信号处理与控制算法部署: 讲解如何利用MATLAB进行算法设计和原型验证,然后通过MCC或MATLAB Coder(与MCC类似但侧重点不同)将其部署到嵌入式硬件平台。 实时数据采集与分析系统: 结合Engine API或MEX文件,构建一个能够实时采集数据(可能通过C/C++硬件接口),并在MATLAB环境中进行实时分析和可视化的混合系统。 与其他语言的互操作性(可选): 简要介绍如何通过MEX文件或Engine API,间接实现MATLAB与Python、Java等其他语言的混合调用。 本书特点: 内容全面且深入: 覆盖了MATLAB与C/C++混合编程的各种主流技术,并对核心概念和实现细节进行了深入剖析。 实践导向: 大量结合实际工程问题,提供了丰富实用的代码示例和操作流程,帮助读者快速上手。 更新迭代: 本版充分考虑了MATLAB和C/C++新版本的特性和发展趋势,确保内容的时效性和前瞻性。 结构清晰,易于理解: 本书按照由浅入深、循序渐进的原则组织内容,即使是初学者也能逐步掌握混合编程的精髓。 面向读者广泛: 无论是希望提升MATLAB应用性能的研究人员,还是需要集成MATLAB算法的软件工程师,亦或是希望系统学习混合编程的学生,本书都能提供有价值的指导。 通过阅读《精通MATLAB与C/C++混合程序设计(第4版)》,读者将能够深刻理解MATLAB和C/C++各自的优势,掌握将两者有效结合的各种技术手段,从而在复杂的工程计算和软件开发项目中,设计出更高效、更灵活、更具竞争力的解决方案。本书将是您在数值计算、算法开发、嵌入式系统设计等领域攻坚克难的得力助手。