1. 编写背景
经30多年的实践检验、市场筛选和时间凝炼,MATLAB已经成为国际上广泛认可和普遍使用的数学分析和数值计算软件,也是教学、科研、工程界极可信赖的科学计算环境、标准仿真平台和十分可靠的数学资源库。
近年来,随着深度学习、大数据分析、人工智能的突破和迅速市场化,学术界、工程界、科研部门和开发机构所面临的软件建模和程序开发问题越来越复杂。它们或输入来源多种,或输出任务多样,或输入输出间关系错综复杂,或被处理数据规模庞大,或离散事件随机多发,或数学计算和多界面操控高度交叉。面对这类综合性问题,既不再能单凭一连串数学公式的“MATLAB面向过程”编程所能解决,也不再可单凭“C/C++面向对象”编程所能应对。于是,“MATLAB面向对象”和“MATLAB面向C/C++”编程的应用需求强烈凸显。这也促使高校本科和研究生的MATLAB教学必须向高层次方向发展。
另一方面,从书籍出版角度看,迄今可见的千余种MATLAB书籍,绝大多数只涉及数学计算、建模及“面向过程”的编程,论及“面向对象”或“面向C/C++”的书籍则屈指可数。
科技发展的需求和书籍出版的现实,驱使我们决心编写一本以理工共通知识为素材、以系统阐述及具体示例为经纬、面向对象和面向C/C++的MATLAB用书。我们希望此书能帮助已经学习和使用MATLAB的高校学生、科研人员较快地理解和掌握“面向对象”编程和“面向C/C++”编程。同时,我们也希望,具有C/C++编程基础的高校学生及科研开发人员能借助本书理解和掌握“C/C++与MATLAB”的联合编程。
2. 编写宗旨与特点
本书两位作者基于自身的长期教学和程序开发经验,对本书的内容组织和程序设计遵循如下宗旨:
? 在保持内容系统完整的前提下,充分体现MATLAB的特征。
◇ 凡使用MATLAB进行过数值和科学计算的读者,都定会被MATLAB特有的高效便捷灵活的魅力所吸引。MATLAB面向对象编程的概念、语法、结构和函数也同样展现其一贯的简洁友善的特性。这是因为MATLAB语言本身是由C/C++、JAVA 等原生型面向对象编程语言构建的。本书的内容组织将让读者充分体会MATLAB的这些优点,以较短的时间掌握面向对象编程的精髓。
◇ 基于MATLAB数学计算以数组形式实施的本质,本书在面向对象编程的内容组织中,特别强调了类属性取值数组时类方法编写的注意事项,以及类对象数组的创建和应用。
◇ 基于MATLAB各类数据都采用同一种阵列形式组织的基础性特征,本书在面向C/C++编程的内容组织中,对专司MATLAB和C/C++间数据交换的mxArray
和mwArray阵列结构给予特别阐述。
? 在保证示例典范性的前提下,尽量使示例内容贴近大部分MATLAB 用户的专业知识。
◇ 本书示例都是作者围绕演示目的精心设计的。所涉知识都由MATLAB各类专业用户通识的复数、极坐标、向量、加减法等构成。
◇ 读者学习和实践本书示例时,一方面可免受专业隔阂的心理影响,另一方面可从通识要素的应用中得到向其专业拓展的启示。
? 在保证内容系统性的前提下,尽量保证示例的独立性。
◇ 全书章节内容按其自身逻辑和认知过程编排,保证内容的连贯性、系统性,以利读者系统阅读学习。
◇ 各章节示例设计遵循三个原则:一,示例内容和代码围绕所在章节内容设计;二,对可能生疏的非本章节命令或函数,给予简明注释;三,保证示例程序代码的可运行性、可验证性。在非系统学习的情况,读者可根据需要挑选示例在电脑上进行实际的演练体验。读者还可根据本书示例结果是否被重现,而修整自己可能的失误,建立起理解和掌握本书内容的自信。
? 全书A、B两篇的章节内容,按各自内在关系由浅入深编排。
◇ 本书每篇最前的一两个示例,都较简单而不失综合性。初学读者,通过这些示例就可感受或触摸到该篇内容的轮廓特点。
◇ 几乎每章的最后,都安排了较为综合的示例,以向读者提供进一步的联想和启示。
3. 全书结构梗概
全书由正文、附录和参考文献组成。
? A 篇 MATLAB面向对象编程
“第1章:类的定义和基本操作”的内容是全篇的基础。它包括:类和对象概念;类定义的基本框架;属性及其秉质;方法及其秉质;构造函数编写准则及典型结构等。通过本章的学习,读者就可初步具备以“面向对象”的思维解题编程的能力。
“第2章 对象数组”的内容包括:对象数组的创建;对象数组的编址及寻访;特殊对象数组生成;对象数组的常用操作。由于MATLAB自身的各种运算是建立在数组基础上的,所以,相较于C/C++等而言,本章内容在MATLAB面向对象编程中具有特殊意义。
“第3章 重载与覆盖”的主要内容有:重载与覆盖在类设计中的意义;算符与对应的后台控制函数;改变对象显示的重载和覆盖技术。
“第4章 类的继承与组合”系统介绍:类继承定义和子父类关系;继承的多态性;抽象类概念及应用;属性包含型类组合。此外,本章最后,以示例形式展现很常用的“界面类+算法类”程序设计模式。
“第5章 事件与响应”的内容有:事件/响应机制;响应函数的型式;事件发布方/响应函数之间的数据传递与侦听件。该章最后采用综合示例形式介绍事件和响应在客户端/服务器2 MATLAB面向对象和C/C++编程(C/S)架构软件设计与开发中的应用。
? B篇 MATLAB面向C/C++编程
“第6章 数据接口”集中叙述MATLAB与C/C++等交换信息所依赖的mxArray、mwArray等两种阵列结构的创建、读取、赋值和删除等函数的具体调用格式,并着重阐述指针、引用、堆内存管理在相关函数设计和具体调用中的作用。本章内容具有较强的查阅功能。
“第7章 MATLAB调用C/C++程序”围绕在MATLAB中调用由C/C++源文件编译而来的MEX文件展开。具体内容有:MEX文件的定义;源文件的构成和格式;MEX 文件的生成;MEX文件执行流程;MEX函数库。该章最后叙述在Visual Studio环境中编译、调试MEX文件。
“第8章 C/C++程序调用MAT 函数库”的内容为:MATLAB的MAT 函数库,以及在MATLAB环境和Visual Studio环境内编译调用MAT函数库的C/C++程序。
“第9章 C/C++程序调用MATLAB引擎”系统阐述:MATLAB引擎概念和功用;引擎函数库;在MATLAB环境和Visual Studio环境内编译调用引擎函数库的C/C++程序。
该章最后以综合示例形式介绍“C/C++程序+MATLAB引擎”联合开发模式的在线调试方法。
“第10章 MATLAB编译器”专述:如何将MATLAB函数编译生成可独立运行的程序或动态链接库;MATLAB编译器的外部C/C++编译器配置;生成外用文件的mcc命令和应用编译器。该章最后以综合示例展示:MFC应用程序框架及其综合应用。
? 附录
附录A 基础准备与入门包含两节。“A.1:MATLAB 的配置及入门”和“A.2:VisualStudio集成开发环境入门”。A.1节为不熟悉MATLAB的读者而设,用于简介:MATLAB的安装启动;在Windows中对MATLAB的设置;MATLAB桌面和编辑器的使用入门。A.2节为不熟悉C/C++的读者而设。简介Visual Studio 2010的安装启动;简介Visual Studio集成开发环境的使用入门。
“附录B 索引”汇集了本书所涉及的所有MATLAB和C/C++函数及命令。所有函数及命令按英文字母的次序排列,并列出与之对应的章节序号。该索引可为读者提供另一条据英文关键词检索本书内容的途径。
? “参考文献”
列出了本书成文的文献基础。读者如有疑惑或想寻根问源,这部分资料十分有用。
4. 读者对象和使用建议
本书的编写动机和本书的内容组织,决定了本书的读者对象为:理工类高校的本科生、研究生;科研机构中从事数学仿真或应用开发的科技人员。为帮助读者阅读、使用,本书作者提出如下建议。
? A 篇的内容组织和阅读建议:
◇ A 篇适于循章节次序,由浅入深,循序渐进,但也不必拘泥于连续通读、一气到底。
◇ 实际上,在A 篇第1章仔细阅读并实践示例后,读者就不难理解“面向对象”编程的思维模式,而顺利跨入“面向对象”编程的大门。
前 言 3
◇ 其余章节,读者完全可以根据自己需要挑选阅读。本书的内容组织及示例命令后的注释说明,都能有力地帮助读者克服理解困难。
? B篇的内容组织和阅读建议:
◇ 第6章数据接口的内容主要用于各种函数的调用格式介绍。该章内容是为读者查阅使用方便而编写的,因此不必系统阅读。读者只要浏览几节,能理解mxArray和mwArray阵列结构在MATLAB和C/C++之间交换数据中的作用便可。
◇ 其余各章内容之间没有前后关联,相互独立。因此,读者可以根据需要,分章学习。
本书作者建议读者,认真阅读各示例的相关说明和命令后的注解,并静下心来在机器上对示例进行操作实践。这样,定能事半功倍地掌握MATLAB与C/C++的联合编程。
5. 致 谢
本书成稿历经3年。在这期间,周围朋友、同事及相关部门领导的期盼、鼓励,帮助作者克服了困惑、犹豫和疲怠。在这不短的成稿期间,作者之所以能有独立的空间、专心静思的时间、无扰的环境从事本书的写作和试验,那都因为背后有着家人的理解、支持、帮助、鼓励和默默的付出。值此本书出版之际,作者向他们一并表示诚挚的感谢。
最后,还要感谢北京航空航天大学出版社对我们完稿时间一再后延的宽容和理解,并感谢他们为本书出版所做的一切。
本书虽历时3年,几经易稿,示例几经修改和验证,并最终在MATLAB R2017b和VisualStudio 2010环境下定稿,但仍难免缺陷,或发生因版本变更引起的不适性错误。对此,我们恳请各相关方面专家和广大读者不吝指正,以便再次印刷时加以修正。联系的电子邮箱为:ly00519@126.com;zyzh@njupt.edu.cn。
凌 云 张志涌
2018年1月于南京