内容简介
《精通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与CC++混合程序设计(第4版) 电子书 下载 mobi epub pdf txt