MATLAB面向对象和C/C++编程
中国电子科技集团公司智能感知技术重点实验室高级工程师凌云,MATLAB编程基础教学一代宗师张志涌教授,强强联合,打造全面掌握MATLAB面向对象编程与C/C++混合编程的必备经典!
·全书70多个示例,经典、可靠,凡是认真看过、用过的人,都会不吝赞叹示例从选取到设计的缜密、精致!
·即《精通MATLAB》和《MATLAB教程》之后,又一本可以信赖的诚意之作!
·历时三年,数易其稿,唯愿以师者之心,奉献精品,对每一位读者负责。
MATLAB面向对象和C/C++编程
本书正文由两篇组成:A篇“MATLAB面向对象编程”和B篇“MATLAB面向C/C++编程”。每篇各5章,各篇内容按照由浅入深的原则编排,篇中各章内容的设计,既有联系,又相对独立,以适应读者系统阅读和随时翻阅的不同需求。A篇的内容包括:MATLAB的类定义和基本操作、类对象数组、类方法的重载与覆盖、类的继承与组合,以及事件与响应。B篇的内容包括:MATLAB外部应用的数据接口、MATLAB对C/C++程序的调用、C/C++程序对MATLAB的MAT函数库的调用、C/C++程序对MATLAB引擎函数库的调用、MATLAB编译器和独立应用程序的开发。
全书包含70多个示例。所有示例都由作者围绕叙述内容精心设计而成。示例的背景知识适于理工类高校任何专业的师生,适于理工类软件开发的各类专业从业人员。所有示例表述清晰、完整,关键程序代码都附有注释,便于读者阅读和理解;示例中的运行结果,都可被读者重现,以帮助读者建立学习信心。
此外,本书每个示例的运行代码或程序都保证准确、完整。读者亲自实践本书示例时所需的代码,既可以直接循书本代码键入而得,也可以扫描二维码或按出版社提供的下载地址下载。
本书既可以作为理工类高校各专业师生的学习、教学用书,也可以用作科研院所各类研发人员的自学用书和参考手册。
凌云,高级工程师。在中国电子科技集团公司智能感知技术重点实验室奉职的十余年间,长期从事算法优化、加速及大型系统软件等的MATLAB和C/C++的联合开发和研究,主持完成雷达、目标、环境一体化仿真平台的论证和软件设计实现,并在此图形化可现场建模的仿真平台基础上完成多型雷达的仿真。
张志涌 籍贯无锡,教授,享受国务院专项津贴;先后受教育于清华大学、上海交通大学、荷兰王国Eindhoven技术大学;先后从事系统辨识、故障诊断、系统仿真、智能计算和控制、无线信道盲辨识及盲均衡、仿真机器人足球和多智能体、科学计算及软件等方面的研究和教学。对科学计算及软件尤感兴趣,先后使用过Maple、Mathematica、Mathcad、SCILAB、MuPAD等计算软件。1989年接触使用MATLAB;1992年对MATLAB3.0进行汉化,并编写讲义;1997年出版《掌握和精通MATLAB》;2000年出版《精通MATLAB》,至今3次改版累计30多印次;2001年出版《MATLAB教程》,至今8次改版累计80多印次;2015年编译具有MATLAB之父、数值分析和科学计算之父双重身份的Cleve B. Moler经典著作《Numerical Computing with MATLAB》的中文版《MATLAB数值计算》;2018年与凌云合著《MATLAB面向对象和C++编程》。
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月于南京
这本书的封面设计着实抓人眼球,那种深沉的蓝与充满科技感的线条交织在一起,立刻让人联想到严谨的工程计算和底层的代码逻辑。我是在一次偶然的机会接触到这本书的,当时我正在为我的一个需要与硬件进行深度交互的项目寻找可靠的参考资料。最初,我对它抱着一种审慎的态度,毕竟市面上关于MATLAB的书籍汗牛充栋,但真正能深入浅出讲解高级特性的却凤毛麟角。翻开第一章,作者并没有急于抛出复杂的语法结构,而是用一种近乎叙事的方式,引导读者进入面向对象编程(OOP)的世界观。他巧妙地将OOP的核心概念——封装、继承、多态——与MATLAB特有的矩阵运算环境相结合,使得那些抽象的理论变得触手可及。我尤其欣赏作者在讲解类定义时,那种对细节的执着,比如如何恰当地使用`properties`和`methods`,以及在GUI设计中如何利用OOP的思想来构建可维护性极高的图形界面组件。读完前几章,我感觉自己对MATLAB的理解不再停留在脚本层面的“会用”,而是上升到了“精通”的高度,能够构建出结构清晰、复用性强的代码库,这对于我后续的大型仿真项目而言,无疑是一个巨大的提升。
评分这本书的实在厚度就足以让人肃然起敬,沉甸甸的手感让人知道这绝非泛泛之作。我购买这本书的初衷,是希望能够彻底解决我在跨语言编程中遇到的性能瓶颈问题。在过去的实践中,我发现MATLAB在处理某些计算密集型任务时效率不高,而我手里又有一批成熟的C++库,如何高效地“嫁接”两者,一直是我的痛点。这本书的中间部分,简直就是为我量身定做的救星。作者对MATLAB与C/C++之间的接口机制讲解得极其透彻,从最基础的MEX文件编写,到调用外部动态链接库(DLL/SO),每一步都辅以详尽的命令行和代码示例。我记得有一章专门讲解了数据类型在两种语言间的安全转换问题,那一段的逻辑推导严密得如同数学证明,帮助我成功避免了之前经常遇到的内存越界和数据错位等棘手Bug。通过这本书的指导,我成功地将原本需要耗费数小时的批处理任务缩短到了几分钟,这种实实在在的效率提升,是任何纸上谈兵的教程都无法比拟的。
评分这本书的语言风格冷峻而精确,几乎没有冗余的形容词或空洞的赞美,每一个句子都旨在传递信息或建立逻辑联系。我个人特别欣赏作者在讲解面向对象设计模式时,如何巧妙地将其嵌入到实际的信号处理流程中。例如,如何使用工厂模式来动态创建不同滤波器对象,或者如何利用观察者模式来实现实时数据流的异步通知。这些模式在MATLAB环境下的具体实现细节,往往是其他教材一带而过的内容。书中提供的代码片段,风格统一,结构清晰,每一个类文件都维护得井井有条,仿佛是工业级软件的源码范例。对我而言,这本书的价值不仅在于教授了技术,更在于塑造了一种高质量的工程思维——即便是脚本语言,也应以面向对象和健壮性为最高准则进行开发。它为我提供了一个升级自己代码库架构的蓝图,让我对未来复杂系统的构建充满了信心。
评分坦白说,这本书的入门门槛确实不低,如果读者对MATLAB的基础语法和C/C++的指针概念一无所知,那么阅读起来会感到吃力,甚至有些挫败。但对于已经有一定编程基础,渴望突破当前技术瓶颈的进阶用户而言,这本书的价值是无可估量的。我特别关注了书中关于对象生命周期管理的章节。在处理大型仿真模型时,内存泄漏和对象析构顺序不当常常是导致系统不稳定的隐形杀手。作者通过深入分析MATLAB的垃圾回收机制与C++析构函数的相互作用,提供了一套行之有效的内存管理策略。这种对底层机制的挖掘,远超出了普通应用层编程书籍的范畴。阅读过程中,我时常需要对照官方文档进行交叉验证,但不得不说,这本书提供的上下文解释和实际工程案例,极大地加速了我的理解进程。它迫使你不仅要知道“怎么做”,更要明白“为什么这样做”。
评分这本书的排版和插图风格极其保守,几乎没有花哨的色彩,通篇都是黑白灰的经典组合,这反而营造出一种非常专注的学习氛围。对于一个沉浸在复杂算法世界中的工程师来说,这种清晰、不分散注意力的设计语言是极其友好的。我个人对书中对于错误处理和调试技巧的描述印象深刻。作者没有停留在“如果出错就用`try-catch`”这种初级建议上,而是深入探讨了在MEX调用中,如何捕获C/C++层的异常并将其优雅地反馈给MATLAB环境,确保程序在出现底层崩溃时,用户界面仍能保持稳定。这种“健壮性”的强调,体现了作者深厚的工程经验。此外,书中对版本兼容性的讨论也十分到位,毕竟科学计算领域软件更新迭代很快,如何确保十年前编写的MEX函数在新版MATLAB中依然能顺畅运行,书中给出的最佳实践方案极具参考价值。它更像是一本工具手册,而不是一本简单的教材。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有