
本书以MATLAB R2020b为蓝本,对MATLAB编程中涉及的主要知识进行了系统讲解,并对代码规范化、内容人文化等进行了探索,力图使理工科教材中融入文学的基因。全书共分8章,内容包括MATLAB基础,矩阵运算,字符数组、cell与struct,数据绘图,符号运算,函数文件,面向对象编程,MATLAB在生物数学模型中的应用,每章在详细的讲解之后,都给出了规范化的示例代码。 本书充分考虑了学习编程读者的特点,以详细的内容、规范化的代码、富含文学气息的例子,加上探索性的讲解形式,对每个知识点进行了分析,力图使读者在体验中学习知识,在感受中提高技能,做到既解决问题又掌握知识。
MATLAB是一种兼具代码编程和鼠标操作实现基本功能的计算机语言。众多的模块使得它既可以进行面向过程的编程,又可以支持用户用鼠标选定、打开App;既可以实现基本的数据展示与分析,又可以进行面向对象编程,以加快大型软件的开发与实现。 当前,介绍MATLAB各种应用的图书林林总总、层出不穷,但多数都是专门针对特定应用领域的,例如,有专门针对MATLAB数值分析的,有专门介绍MATLAB图像处理功能的,还有各类指南、宝典、入门、速成等视频教程。这些教程针对性强,拿来即用,很好地适应了技术人员快速学习的一些要求,但是若作为本科生的教材,却有它们的不足。为此,我们借鉴它们的“针对性”,并克服这些教程中的不足,为初次接触MATLAB语言的学生、技术人员等,编写了这本教材。综合起来,本教材具有以下特点: (1)紧跟软件升级。 一个计算机语言有没有旺盛的生命力,从它的“新陈代谢”上就可以看出来。MATLAB自推出以来,近些年每年推出两个版本,上半年推出a版,下半年推出b版,并不断地引入新命令、废止过时的命令。本书以2020年发布的R2020b为蓝本,全面介绍其中的常用命令,并对新版本中才出现的命令进行了特别说明,如readcell、writecell等已完全替代前几年的xlsread、xlswrite等,符号变量的symvar已完全更改了优选原则,废弃了MUPAD,将GUI设计被App设计完全取代等。 (2)建立规范性。 编程,除了要编写代码实现必须完成的基本任务(如计算、绘图、模拟等)之外,还要搞好周边服务。所谓周边服务,就是对代码进行各种规范性处理。例如对于函数的处理,许多教材都讲述了编写函数的过程,也给出了具体实现,但是,很少讨论代码的规范性问题。我们认为,编写好的外围辅助(帮助说明文件等)与实现代码的基本功能同等重要,可以说,规范性的代码,不仅能最大限度地减少错误,还能极大地减少重复工作、提高维护效率,可以说,“规范就是效率”在这里得到了充分体现。因此,本书在编写完整的函数时,都要给出规范化的解释说明,并刻意引导读者做好这方面“服务工作”。 (3)兼具文学性。 许多人认为理工类的教材或著作尤其对于编程类书籍,无须考虑其文学性。然而,在当前社会发展与工作中,人文社交也是一种能力,文学修养也有助于提高理工学生自身的素质,即使是面向理工科学生的编程教材,也有必要引入文学艺术性基因。为此,在不影响介绍语法知识的前提下,本书刻意加入一些文学性内容,例如,在讲授字符串处理命令时,对选入的字符串进行了筛选,使用了有积极意义的格言警句作为示例,这样安排既实现了字符串的语法说明,又让读者无形中读起来感到赏心悦目。本书中凡是涉及字符串的语法内容,尽可能选择了一些读来琅琅上口的名言、对联、诗句、古文等作为例句,让读者在文学氛围中实现MATLAB的学习。 (4)增强体验感。 对知识点的介绍,可以采用不同的方式:既可以采取平铺直叙的方式,直接告诉读者是什么,也可以通过探索的过程让读者亲自挖掘出这个知识点。这两种不同的教学方式,会给读者留下不同的印象。本书针对当代年轻读者,更注重体验与参与的特点,在解释知识点时,尽可能采用探索式的讲解方式,让读者在挖掘知识点的过程中,逐渐加深理解,达到掌握。因为知其然,总不如知其所以然更让人印象深刻,参与挖掘知识点,总比旁观更有体验感。 (5)坚持详细性。 任何计算机语言,要想正确使用,就必须充分理解命令的使用条件和参数使用格式。我也读过许多介绍编程语言的书,偶尔会有一种“想看的没看到,不想看的一大堆”的感觉。仔细想来,就是因为那些书对命令并未给出详细周全的解释。因此,在学习MATLAB语言时,我更倾向于这样的观点:即每学习一个函数命令,就完整地学习它的各种使用方法,通过对多个常用函数的详细学习,让读者在完整掌握基本使用方法的同时,还养成一个很好的学习习惯,即全面掌握每一个知识点。因此,书中在介绍函数命令时,都会极其详细地介绍它们的用法。 在本书编写过程中,河北大学生命科学学院管越强副院长一直关心书稿出版事宜,并给予许多支持与帮助。电子工业出版社的编辑对本书的出版付出了辛勤的工作,对于他们的支持与帮助,表示衷心的感谢。本书的出版,得到了“生物学基本建设项目(521100302002)”的资助,在此表示深深的感谢。 在书稿付梓之际,虽然校读多次,以图使内容完美无缺,但我们知道,囿于水平,其中错误在所难免,敬请读者批评指正。
第1章 MATLAB基础 1 1.1 MATLAB简介 1 1.1.1 MATLAB的历史 1 1.1.2 MATLAB的版本 1 1.1.3 MATLAB的特点 2 1.2 MATLAB的主要界面 4 1.2.1 菜单工具栏 4 1.2.2 窗口 6 1.3 命令行窗口及操作 7 1.3.1 MATLAB的简单使用 7 1.3.2 MATLAB数值的显示 10 1.3.3 命令行窗口的常用控制 10 1.4 日志命令与命令历史记录 14 1.4.1 diary 14 1.4.2 命令历史记录与快捷设置 16 1.5 当前目录窗口 18 1.5.1 概况 18 1.5.2 设置用户目录和工作目录 19 1.6 MATLAB的工作区 21 1.6.1 工作空间中的变量 21 1.6.2 数据应用分析 22 1.6.3 常用的工作空间管理命令 24 1.7 标点符号与运算符 28 1.7.1 标点符号 28 1.7.2 运算符 31 1.8 变量与表达式 33 1.8.1 数值的表达 33 1.8.2 MATLAB的默认值 34 1.8.3 变量的命名 36 1.8.4 复数 38 1.9 脚本编辑器 40 1.9.1 纯代码编辑器 41 1.9.2 实时编辑器 46 1.10 帮助文件的使用 49 1.10.1 帮助命令 49 1.10.2 帮助浏览器 51 1.10.3 MathWorks官方网站 51 第2章 矩阵运算 53 2.1 创建矩阵 53 2.1.1 一维矩阵 53 2.1.2 二维矩阵 56 2.1.3 三维及以上矩阵 60 2.2 矩阵的一般操作 65 2.2.1 矩阵维数与大小 65 2.2.2 矩阵元素寻址 66 2.2.3 矩阵的常规操作 68 2.3 矩阵的基本运算 74 2.3.1 矩阵转置/加法/乘法/逆 74 2.3.2 矩阵内积/外积/范数 75 2.3.3 矩阵指数/对数/开方 79 2.3.4 向量之间的关系 81 2.3.5 矩阵的本质特征 83 2.3.6 矩阵直和与张量积 84 2.4 特殊矩阵 86 2.4.1 带状稀疏矩阵 86 2.4.2 Vandermonde矩阵 88 2.4.3 Hankel矩阵 89 2.4.4 Toeplitz矩阵 89 2.5 矩阵变换与分解 90 2.5.1 Cholesky分解 90 2.5.2 LU分解 93 2.5.3 QR分解 94 2.5.4 SVD分解 94 第3章 字符数组、cell与struct 96 3.1 字符串与字符数组 96 3.1.1 字符串基本属性 96 3.1.2 复杂字符数组的创建 99 3.1.3 字符串转换函数 100 3.1.4 将字符串转换为数据的函数 102 3.1.5 字符串操作函数 107 3.2 cell数组 115 3.2.1 cell数组的创建、寻址与显示 116 3.2.2 cell数组的基本操作 122 3.2.3 cell数组操作函数简介 126 3.2.4 string与char的区别 129 3.3 结构数组 130 3.3.1 结构数组的创建 131 3.3.2 结构数组的访问 133 3.3.3 结构数组的其他操作 135 3.3.4 结构数组的转换 139 第4章 数据绘图 143 4.1 绘图及其属性 143 4.1.1 初识绘图 143 4.1.2 图像的基本属性 145 4.2 plot函数 146 4.2.1 plot函数默认格式 146 4.2.2 plot函数属性应用 148 4.2.3 其他几种格式 150 4.3 颜色的使用 153 4.3.1 颜色的RGB表示 154 4.3.2 颜色图 156 4.3.3 查看颜色图 157 4.3.4 颜色图函数 157 4.3.5 颜色图的创建与使用 159 4.4 坐标轴设置与图形标识符 162 4.4.1 坐标轴的设置 162 4.4.2 标注文字 165 4.5 两个绘图布局函数 174 4.5.1 subplot函数 174 4.5.2 tiledlayout函数 176 4.6 几种常用的二维绘图函数 179 4.6.1 面积填充图 179 4.6.2 统计图 181 4.6.3 绘制矢量场 191 4.6.4 时间序列数据 195 4.6.5 等值线绘图 199 4.6.6 极坐标绘图 201 4.6.7 双坐标绘图 203 4.6.8 对数形式绘图 206 4.6.9 遗传信息绘图 207 4.7 三维绘图 209 4.7.1 三维版本的绘图函数 209 4.7.2 绘制多峰函数曲面 212 4.7.3 绘制球柱锥体 215 4.7.4 三维绘图中的一些问题 217 4.8 修改绘图对象属性 220 4.8.1 绘图的返回对象 220 4.8.2 使用对象属性 221 4.8.3 获取对象 223 4.9 绘制动画图片 227 4.9.1 getframe函数 228 4.9.2 frame2im函数 228 4.9.3 rgb2ind函数 228 4.9.4 imwrite函数 228 第5章 符号运算 230 5.1 符号对象的定义 230 5.1.1 声明符号变量函数sym 230 5.1.2 声明符号变量快捷函数syms 232 5.1.3 设置假定函数assumptions 234 5.1.4 设置与去除假定函数assume 235 5.1.5 添加设置假定函数assumeAlso 236 5.1.6 分段条件函数piecewise 236 5.2 符号运算基本操作 237 5.2.1 识别符号变量 237 5.2.2 多项式操作 241 5.2.3 符号替换 246 5.2.4 高等数学中的几个函数 250 5.2.5 解方程 257 5.2.6 符号矩阵的运算 263 5.3 符号运算结果的可视化 265 5.3.1 简洁绘图函数 265 5.3.2 符号运算结果的数值绘图 269 第6章 函数文件 270 6.1 MATLAB语言编程的基本理念 270 6.2 MATLAB函数概况 270 6.2.1 初识MATLAB函数 270 6.2.2 函数模板 272 6.3 MATLAB中的函数分类 272 6.3.1 MATLAB脚本文件 272 6.3.2 主函数与子函数 273 6.3.3 子函数的定义 274 6.3.4 匿名函数 275 6.4 MATLAB中的局部变量和全局变量 276 6.4.1 局部变量 276 6.4.2 全局变量 277 6.5 MATLAB函数文件中的控制语句 278 6.5.1 if-end语句 278 6.5.2 switch-case选择控制结构 281 6.5.3 for-end循环 284 6.5.4 while-end循环 287 6.5.5 try-catch-end纠错机制 289 6.5.6 其他控制函数 290 6.5.7 递归 298 6.6 函数句柄 299 6.6.1 函数句柄的创建 299 6.6.2 函数句柄的基本用法 300 6.7 泛函命令 302 6.7.1 eval函数 302 6.7.2 feval函数 303 6.8 读写文件 305 6.8.1 文本数据读取 305 6.8.2 读取Excel文件 308 6.8.3 读取三角矩阵数据 313 6.8.4 写入文本文件 313 6.8.5 写入Excel文件 314 6.8.6 写入Word文件 315 6.9 一些矩阵操作函数的实现案例 321 6.9.1 对称矩阵 321 6.9.2 置换矩阵 322 6.9.3 矩阵变换 328 6.10 两个绘图函数的实现案例 330 6.10.1 雷达图 330 6.10.2 星座图 330 6.11 符号运算的一个实例 331 第7章 面向对象编程 336 7.1 面向过程与面向对象 336 7.2 类的组织结构 337 7.2.1 初识类 337 7.2.2 类的定义 338 7.2.3 类的特性 340 7.2.4 类定义的组织与存放 342 7.2.5 文件柜 343 7.3 类的属性 347 7.3.1 声明与初始化 347 7.3.2 访问控制 349 7.3.3 其他特性 351 7.4 类的方法 353 7.4.1 普通方法与访问特性 353 7.4.2 构造函数 356 7.4.3 静态方法 358 7.5 类的继承与派生 360 7.5.1 继承与派生的基本概念 361 7.5.2 派生类构造函数 363 7.6 MATLAB类的基本类型 379 7.6.1 参数的传递机制 379 7.6.2 两种基本类型 380 7.6.3 handle型类 384 7.7 对象的析构、保存和加载 392 7.7.1 析构函数 392 7.7.2 保存和加载 396 7.8 多态性与抽象 402 7.8.1 函数重载 402 7.8.2 运算符重载 403 7.8.3 抽象类 406 7.9 事件与响应 407 7.9.1 概念与定义 407 7.9.2 理解事件与响应的作用机制 409 7.9.3 创建监听的event方式 411 7.9.4 发布通知中附加消息 412 7.9.5 预定义事件的监听 413 7.10 对象数组 414 7.10.1 同类型对象数组 414 7.10.2 同基类对象数组 416 7.10.3 多类型对象数组 417 7.11 Meta Class 420 7.11.1 查询类的基本信息 420 7.11.2 查找特定设置的对象和类成员 421 7.12 类的应用实例:App设计 422 7.12.1 App Designer的开发环境 422 7.12.2 双线设计与类函数 423 7.12.3 App设计步骤 425 7.12.4 各种组件的使用方法 427 7.12.5 使用函数创建组件 435 7.13 再议创建MATLAB函数模板 439 第8章 MATLAB在生物数学模型中的应用 442 8.1 图模型 442 8.1.1 图的基本概念与数据结构 442 8.1.2 无向赋权图的最短路径Dijkstra算法 445 8.1.3 评估生态模型架构 445 8.2 种群模型 446 8.2.1 原理与分类 446 8.2.2 离散单种群模型 448 8.2.3 Logistic离散模型的渐近性态模拟 448 8.2.4 连续模型 450 8.3 时序分析模型 456 8.3.1 平稳时间序列模型的几个概念 457 8.3.2 平稳时间序列 458 8.3.3 ARMA模型的构建及预报 460 8.3.4 时间序列分析的MATLAB命令与实例 462 8.3.5 ARIMA模型 465 8.3.6 GARCH模型 471 8.4 多元分析模型 476 8.4.1 主成分分析 476 8.4.2 因子分析模型 479 8.4.3 对应分析模型 485 8.4.4 典型相关模型 491 8.4.5 多维标度模型 498