编辑推荐
适读人群 :本科生、研究生 海报:
内容简介
《MATLAB 数值计算》(2013修订版) 经 MATLAB、 数值分析和科学计算之父 Cleve Moler 本人正式授权, 是 Numerical Computation with MATLAB 2008/2013 修订版的中译本。 该书不以深奥的数值分析理论为内容, 而以易于理解的数学思维和便于掌握的数学计算编程技术为教学素材。 该书摒弃以往数值分析教材中常见的程式性定理、 定理证明、 收敛性理论和冗长公式推演。该书数值算法原理的表述, 言简意骇、 层次丰富、 见解独到、 专业精辟; 数学计算软件的教学内容易学易懂, 构思巧妙而循循善诱。
《MATLAB 数值计算》正文共 11 章, 包括: MATLAB 入门、 线性方程组、 插值、 零点和根、 最小二乘、定积分、 常微分方程、 随机数、 傅立叶分析、 特征值和奇异值、 偏微分方程。 每章后都配置了大量习题。与《MATLAB 数值计算》正文及习题匹配的 70 多个 M 文件都由 Cleve Moler 本人编写, 并被其本人赞为最引以自傲的软件作品。
为读者学习、 查阅需要, 本书还编有 4 个附录: MATLAB功用释要、 MATLAB 命令及示教文件名索引 、 中文关键词索引和 Cleve Moler 获 2012 年度计算机先驱奖的简短资料。 该书所有代码都适配于 MATLAB R2014a。该书是 Cleve Moler 专为高校研究生、 本科生编写的数值计算、 MATLAB 教材。 该书也是所有 MATLAB 用户理解 MATLAB 算法原理的很好指南, 也是广大科技人员自学、 精读或随时查阅的最可信赖的参考书。
作者简介
Cleve B.Moler,是MathWorks公司的董事长和首席科学家。Moler先后在密歇根大学、斯坦福大学、新墨西哥大学担任数学和计算机科学教授达20余年。1989年全职加入MathWorks公司之前,他曾在Intel Hypercube和Ardent Computer这两个计算机硬件生产公司工作了五年。Cleve先后就读于加州理工和斯坦福大学并获斯坦福大学博士学位。
作为MATLAB的创始人,Cleve同时也是LINPACK和EISPACK科学子程序库的作者之一。他与别人合作出版了三本关于数值方法的书,同时也独立编写了Numerical Computing with MATLAB 和 Experiments with MATLAB。
Cleve长期服务于美国工业与应用数学学会,并于2007-2008任主席。Cleve于1997年当选美国国家工程院院士,并获多项荣誉,包括瑞典林学平大学荣誉学位,加拿大滑铁卢大学荣誉数学博士学位,丹麦科技大学荣誉博士等。Cleve还获得IEEE计算机学会的2012年计算机先驱奖。
目录
第1 章MATLAB 入门
1.1 黄金分割比
1.2 斐波那契数
1.3 分形蕨
1.4 魔方矩阵.
1.5 密码技术.
1.6 数论问题3n+1 序列.
1.7 浮点运算.
1.8 更多阅读.
习题.
第2 章线性方程
2.1 解线性方程组
2.2 MATLAB 反斜杠矩阵左除算符
2.3 3 3 方程组算例.
2.4 排列矩阵和三角矩阵
2.5 LU 分解
2.6 选主元的必要性.
2.7 示教M 文件lutx、bslashtx、lugui .
2.8 舍入误差的影响.
2.9 范数和条件数
2.10 稀疏矩阵和带状矩阵
2.11 PageRank 和马尔可夫链.
2.12 更多阅读.
习题.
第3 章插值
3.1 插值多项式
3.2 分段线性插值
3.3 分段三次埃尔米特插值.
3.4 保形分段三次插值
3.5 三次样条.
ii 目录
3.6 示教M 文件pchiptx, splinetx
3.7 插值计算交互界面interpgui .
习题.
第4 章零点和根
4.1 二分法
4.2 牛顿法
4.3 牛顿法失常算例.
4.4 弦截法
4.5 逆二次插值
4.6 Zeroin 算法
4.7 示教M 文件fzerotx .
4.8 fzerogui
4.9 值的解算和反插值
4.10 最优化和示教M 文件fmintx
习题.
第5 章最小二乘
5.1 模型和曲线拟合.
5.2 范数
5.3 人口模型交互界面censusgui
5.4 豪斯霍尔德反射.
5.5 QR 分解
5.6 伪逆
5.7 秩亏
5.8 可分离最小二乘.
5.9 更多阅读.
习题.
第6 章定积分
6.1 自适应定积分算法
6.2 定积分的基本法则
6.3 示教M 文件quadtx 和quadgui .
6.4 被积函数的表述.
6.5 性能
6.6 积分离散数据
6.7 更多阅读.
习题.
第7 章常微分方程
7.1 微分方程的积分.
7.2 微分方程组
7.3 线性化的微分方程
7.4 单步法
7.5 BS23 算法
7.6 示教M 文件ode23tx .
7.7 两个简单示例
7.8 洛伦茨吸引子
7.9 刚性
7.10 事件
7.11 多步法
7.12 MATLAB 的ODE 解算命令
7.13 误差
7.14 性能
7.15 更多阅读.
习题.
第8 章傅里叶分析
8.1 按键拨号.
8.2 有限傅里叶变换.
8.3 交互界面fftgui
8.4 太阳黑子.
8.5 周期时间序列
8.6 快速有限傅里叶变换
8.7 示教M 文件ffttx .
8.8 fftmatrix 绘制傅里叶矩阵的图.
8.9 其他傅里叶变换与级数.
8.10 更多阅读.
习题.
第9 章随机数
9.1 伪随机数.
9.2 均匀分布.
9.3 正态分布.
9.4 示教M 文件randtx 和randntx .
9.5 Twister 算法.
iv 目录
习题.
第10 章特征值和奇异值
10.1 特征值与奇异值分解
10.2 小规模矩阵分解示例
10.3 分解演示界面eigshow
10.4 特征多项式
10.5 对称矩阵和埃尔米特矩阵
10.6 特征值的灵敏度和精度.
10.7 奇异值的灵敏度和精度.
10.8 约当型和舒尔型.
10.9 QR 算法
10.10 QR 算法演示界面eigsvdgui
10.11 主成分分析.
10.12 成圆算法
10.13 更多阅读
习题.
第11 章偏微分方程
11.1 模型问题.
11.2 有限差分法
11.3 离散拉普拉斯算子矩阵.
11.4 数值稳定性
11.5 L 形薄膜波动.
习题.
参考文献
附录A MATLAB 功用释要
A.1 MATLAB 工作界面简介
A.1.1 MATLAB 的启动和工作界面简介
A.1.2 MATLAB 的工作机理.
A.1.3 NCM 文件的两种使用方案.
A.1.4 如何设置当前文件夹
A.1.5 如何设置搜索路径.
A.2 如何获取帮助信息
A.2.1 如何利用help 命令求助法.
A.2.2 如何利用帮助浏览器求助.
目录v
A.3 入门要旨.
A.3.1 如何在命令窗中输入命令.
A.3.2 如何输入数值和定义变量名
A.3.3 如何控制双精度浮点数的显示格式
A.3.4 如何正确地表述复数
A.3.5 如何正确地理解复数运算结果.
A.3.6 如何清空窗口、内存和恢复默认设置.
A.4 数组及其运算
A.4.1 数组结构和元素标识
A.4.2 数组运算通则
A.4.3 哪类标量循环应被数组运算替代.
A.5 矩阵及其运算
A.5.1 矩阵和数组的异同.
A.5.2 矩阵算符和矩阵函数
A.5.3 矩阵运算为何应摒弃标量循环.
A.6 M 泛函和函数句柄
A.6.1 M 泛函及常见命令.
A.6.2 含参泛函和无参泛函
A.6.3 具名函数和匿名函数的句柄
A.6.4 泛函与含参目标函数间参数传递的各种组合.
A.6.5 如何编写含参泛函中的目标函数.
A.6.6 如何编写无参泛函中的目标函数.
A.6.7 如何利用嵌套函数实现无参泛函中的参数传递.
A.7 符号计算.
A.7.1 为何及如何定义符号对象.
A.7.2 如何用M 码符号对象精准表述含数字数学解析式
A.7.3 自由符号变量的辨认和指定
A.7.4 限定性假设的设置.
A.7.5 限定性假设的观察和撤销.
A.7.6 限定性假设对符号计算的影响.
附录B MATLAB 命令及示教文件名索引
附录C 中文关键词索引
附录D 2012 年度计算机先驱奖颁奖典礼视频整理译文
精彩书摘
2012年仲秋,我作为Moler十年前访华晤面过的熟人,再次受MathWorks中国公司的邀请,出席CleveMoler的访华欢迎会。在欢迎午餐席间,Moler表达了希望在中国见到由他本人授权的著作中译本的强烈意愿。我欣然允诺翻译,随即Moler把NumericalComputingwithMATLAB的翻译工作委托于我,并将出版权授予北京航空航天大学出版社。对此,我深感荣幸,因为从MathWorks网站首次出现此书电子版起的这些年里,我一直持有翻译此书的强烈冲动和期盼译著在中国出版发行的迫切愿望。
我喜欢此书,因为NumericalComputingwithMATLAB一书,既能让读者初读时感受易学易懂之愉悦,又能让读者细读时领受渗透于字里码间的睿智点化;既能使读者从MATLAB中获得前所未有的数值解算能力,又可使读者欣赏到浮点计算之数学优雅。
我推崇此书,因为NumericalComputingwithMATLAB的作者是CleveMoler,一个始终怀揣那朴实的、“让学生学数学更轻松”理念的大学教授,一个始终怀揣那“让他人最放心、最方便使用高质量数学计算软件”平常心的科学家1。正是这济世理念驱使他成为了“高性能数值计算测试标准的LINPACK、EISPACK软件”的主要贡献者,驱使他发明了“对世界工程教学和科研领域产生不可估量深远影响的MATLAB”2,使他成为了世界公认的现代数值分析和科学计算的一位创始人、给计算世界打下深深烙印的数学奇才3。他是美国工业和应用数学学会SIAM前主席、美国工程院院士、2012年IEEE计算机先驱奖获得者。然而,他喜欢自称“最爱编程的地地道道骇客(hacker)”,趣喻自己是“围绕数学家和计算机科学家双核作Lorenz混沌运动”的人1。
我赞赏此书,因为NumericalComputingwithMATLAB一书是CleveMoler从其前20年教学生涯和后20年专事MATLAB经验中升华而成的原创珍品,是凝聚其对数学应用本质性独特见解、展示未来教学方向的数值计算教材之圭臬。该书物化地展现了,CleveMoler对数值分析和科学计算教学的如下卓识真见1:?在科学和技术计算中,存在一个既不被数学覆盖、也不被计算机学科和其它应用学科覆盖的共同知识体系。它是涉及数值分析、科学编程、计算机图形和数据库管理等内容的独立知识体系。
对于科技领域的非数学从业人员而言,他们所需要解决的具体问题,往往不是单一的数学问题,而是更大更复杂的综合性问题。这些问题的解决需要多种数学知识和数值计算方法。在此境况下,他们不可能、也不需要知道每种数值方法的微妙细节和具体公式,而只需要知道如何调用各种计算软件去解决面前不可回避的数学问题,以腾出更多的时间和精力,专注于那综合性的具体设计目标。就像在一个具体问题中遇到需要计算的正弦、余弦函数值时,人们并不会对近似计算正弦、余弦函数值的具体公式和执行细节刻意刨根问底,而只是径直调用它们的计算命令。
NumericalComputingwithMATLAB由美国工业和应用数学学会SIAM于2004年出第一版,2008年出修订版。此书在2013年经CleveMole再次修订,且在其亲自授权后于不久前由北京航空航天大学出版社出版。该书的章节标题不仅涵盖常见数值分析教材的所有章节标题,而且包含“随机数”和“偏微分方程”两章。NumericalComputingwithMATLAB的特别之处在于:该书是由具有数值分析、科学计算之父和MATLAB之父双重身份的CleveMoler写成的。该书不以深奥的数值分析理论为内容,而以向读者提供易于理解的数学思维、易于掌握的数学编程技术为宗旨。因此,在该书中,没有某些数值分析教材中那定理和定理证明的重峦叠嶂,没有那冗长公式和满纸推演的浓雾密云,也没有浮点误差理论的浓墨重彩。在书中,能见到的是那信手拈来的博引旁证、高屋建瓴的评价结论,能见到的是脉络清晰的引导、使人顿悟的简明示例,能见到的是由MATLAB代码一步一步指引的、读者完全可以自己在计算机上重现的各种算法演绎和实验,能见到的是能准确掌控计算误差和提供性能改善选项的MATLAB命令。
NumericalComputingwithMATLAB英文原版正文和习题中的MATLAB代码、随书NCM汇集中的M文件,都在MATLABR2013a版下由Moler进行过适配性修改。这些代码和文件设计之精心、运用之巧妙、可读性之强,都达到了Moler自认的前所未有的满意程度,并被Moler引以自傲1。
《MATLAB数值计算》(2013修订版)是据2014英文版NumericalComputingwithMATLAB翻译的。本书正文及习题翻译忠于原著、原意。在翻译时,为保证读者能重现英文原版所列之计算结果,也为帮助读者准确理解原文编码的奥妙,在个别段落中补写了些许M码,在个别M码后增补了一点解释。此外,为适应我国学术和教学环境,把英文原版中实施“对应元素间运算”的“Matrix、Vector”词汇,翻译成“数组、行(或列)数组”。中译版《MATLAB数值计算》中的MATLAB代码、随书NCM汇集中的M文件,由译者在MATLABR2014a版下进行过适配性修订。
《MATLAB数值计算》(2013修订版)除正文外,增添四个附录:“附录A.MATLAB功用释要”,是对正文提及的MATLAB要素,从用法角度出发,给予简明系统地要旨介绍或补充,减少读者阅读困难和查阅其他帮助材料的麻烦。“附录B.MATLAB命令和示教文件名索引”,供读者据命令名、文件名检索书中示例。“附录C.中文关键词索引”,供读者据中文术语对照英文词汇检索正文表述。“附录D.2012年度计算机先驱奖颁奖典礼视频整理稿”,供读者全面了解Moler的杰出贡献和人文精神,进而更好领悟Moler原著所体现的科学计算思想。
《MATLAB数值计算》(2013修订版)的编译由张志涌、张子燕、杨祖樱三人协同完成。全书经通译、M码运作、附录编写、通校、文字修饰等几阶段后完稿,前后历时18个月。在通译和M码运作及附录编写期间,我们就正文叙述、M代码、GUI表现及附录内容等,多次向原作者请教、咨询及建议。对此,原作者都及时地给予详尽回复和认真处理。这使我们亲身感受到CleveMoler对所有议题了然于胸的从容和一丝不苟的严谨,领受到CleveMoler对MATLAB命令设计原由的透彻解读和出神入化的功力。在本译作完稿之际,我们全体译者向MathWorks公司首席科学家CleveMoler表示最真诚的深深谢意。
在译稿出版之际,我们还要向北京航空航天大学出版社的陈守平、蔡喆、赵延永等表达最真挚的感谢,感谢他们为我们编译所提供的各种宝贵资料和信息,感谢他们为保证本书高质量出版所作出的一切努力。
《MATLAB数值计算》(2013修订版)译作虽经我们多人反复修正校对,但限于我们知识的局限,误译、错译、片面理解及其他疏漏仍难以杜绝。在此,恳请各方面专家和广大读者不吝指教。
张志涌、张子燕、杨祖樱
2014年10月21日
……
前言/序言
本书是为讲授数值方法、MATLAB 及工程计算而编写的入门性教材,着重强调数学软件的灵活应用。我们希望你通过本书能充分理解MATLAB 数学计算函数及命令的内涵,充分辨析其局限性,正确使用它们,并能根据你自己的需要对它们加以修改。
本书包含以下章节:
MATLAB 入门
线性方程组
插值
零点和根
最小二乘
定积分
常微分方程
随机数
傅里叶分析
特征值和奇异值
偏微分方程
20 世纪60 年代后期,George Forsythe 首先在美国斯坦福大学开创了基于软件的数值方法课程。Forsythe、Malcolm 和Moler 三人合写的教材[20],及其后由Kahaner、Moler 和Nash 合写的教材[34],都是由斯坦福大学的那门课程演化产生的,且它们都建筑在Fortran 子程序库基础上。本书以MATLAB 为基础。含70 多个M-文件的NCM 汇集是本书的重要组成部分。本书200 多道习题中的许多习题都涉及对NCM 程序的修改及扩展。本书还广泛使用计算机图示的功能,其中包括对各种数值算法的交互式图形展示。
选修本课程或阅读本书的前提条件是:
学过微积分;
对常微分方程有所了解;
对矩阵有所了解;
有些计算机编程经验。
假如你此前从未用过MATLAB,那么第1章将帮助你跨入大门。假如你已经熟悉MATLAB,那么你可以快速浏览第1 章的大部分内容。但是,每位读者都不应跳过第1 章关于浮点算法的那节内容。对于一学季或一学期的课程而言,本书内容可能偏多。建议讲授前7章的全部内容,而在后4 章中有选择地讲授学生感兴趣的部分内容。在你阅读本书时,应确定你所在计算机网或个人电脑上已经安装了NCM 程序汇集。NCM 汇集可从如下的本书英文原版网站[47] 上免费获得。http://www.mathworks.cn/moler
NCM 汇集中的文件有三类:
gui 文件,交互式图形演示文件;
tx 文件,MATLAB 内建文件的示教性简略版;
其他:各种配用文件,主要与习题有关。
在自己机器上安装了NCM 汇集后,你在MATLAB 中运行命令ncmgui便产生一个如下页所示的综合性图形用户界面。该综合界面上的每个缩略小图,实际上都是引出相应GUI 图形用户界面的按钮。
离开MathWorks 和SIAM 的同仁,本书不可能完成。这两个团队中的人员都很专业、富具创造力和融洽合作。他们对本书给予了巨大的支持。在众多做出特殊贡献的朋友和同仁中,我特别要提到其中五位。Kathryn Ann Moler 多次在斯坦福大学的课程中使用本书的早期书稿,并成为给予我最中肯批评的智者。TimDavis 和Charlie Van Loan 给出了特别有益的审阅意见。Lisl Urban 为本书做了完美无瑕的编辑工作。我妻子Patsy 始终陪伴身旁,包容、照料我的工作习惯和笔记本电脑,她深爱着我的一切。我感谢所有的人!
本书2008 修订重印版的更改内容有:为改进无出链网页的处理,对GooglePageRank 那节所作的修订;在随机数那章新增一小节内容;删除了关于inline 和feval 命令的内容;校正了几十处小的印刷疏误。
2013 年9 月对本书进行了60 多处重要的更新修订。其中大多数修订是中国南京邮电大学的张志涌教授所提议的。那时,他正在为北京航空航天大学出版社准备本书的中译本。本书第5.3 节美国人口普查算例纳入了2010 年的人口数据。format long 格式下的计算结果显示16 位有效数字。涉及符号工具包的应用现已反映MuPAD 引擎所引起的变化。非常感谢张教授。
Cleve Moler
2013 年9 月16 日
MATLAB数值计算(2013修订版·中译本):深入探索算法与实现 本书旨在为读者提供一个全面而深入的MATLAB数值计算视角,覆盖从基础概念到高级应用的广泛主题。我们将不仅仅局限于罗列MATLAB函数,而是深入剖析其背后所蕴含的数值计算原理,以及如何利用MATLAB强大的工具箱高效地实现这些算法。本书适用于具有一定编程基础(最好是MATLAB入门)并对数值计算领域感兴趣的工程师、科研人员、学生以及任何希望提升计算能力的用户。 第一部分:数值计算基础与MATLAB入门 我们将从数值计算的基石开始,介绍计算机如何表示和处理数字,以及由此产生的数值误差。这包括浮点数表示、截断误差和舍入误差等概念,并展示这些误差如何在实际计算中累积并影响结果的准确性。在此基础上,我们将引入MATLAB作为强大的数值计算平台。读者将学习MATLAB的基本语法、数据类型、矩阵操作以及常用的函数库。重点将放在如何利用MATLAB进行向量化计算,理解其相对于传统循环的效率优势。 数字的计算机表示与误差分析: 深入讲解二进制浮点数表示,理解精度限制。分析截断误差和舍入误差的来源,并学习如何量化和控制这些误差。 MATLAB基础: 变量、数据类型(标量、向量、矩阵、多维数组)、运算符、控制流(if-else, for, while)、函数定义与调用。 矩阵运算的魅力: 深入理解MATLAB强大的矩阵运算能力,从基本的加减乘除到更复杂的矩阵分解。学习如何利用索引、切片、逻辑索引等高效地访问和操作矩阵元素。 向量化编程: 强调MATLAB的向量化特性,教授如何避免显式循环,利用内置函数实现高效计算,从而显著提升程序运行速度。 第二部分:线性方程组的求解 线性方程组的求解是数值计算中最核心和最常见的问题之一。本部分将系统介绍求解线性方程组的各种数值方法,并重点讲解如何利用MATLAB来实现这些方法。我们将区分直接法和迭代法,并分析它们的适用性和优缺点。 直接法: 高斯消元法及其改进: 深入理解高斯消元法的原理,包括行变换、主元选择(部分选主元、全选主元)等,以及这些策略对数值稳定性的影响。 LU分解: 详细讲解LU分解的原理,如何将其应用于求解线性方程组,以及其在计算矩阵逆和行列式中的应用。 Cholesky分解: 介绍Cholesky分解的条件(对称正定矩阵),以及其在求解此类特定线性方程组时的效率优势。 Crout分解与Doolittle分解: 比较不同LU分解形式的实现细节和计算复杂度。 迭代法: 雅可比迭代法: 详细讲解雅可比迭代法的算法步骤,分析其收敛条件。 高斯-赛德尔迭代法: 介绍高斯-赛德尔迭代法的改进,以及它与雅可比迭代法的收敛性比较。 逐次超松弛(SOR)迭代法: 讲解SOR方法中松弛因子(omega)的作用,如何选择合适的松弛因子以加速收敛。 共轭梯度法(CG): 重点介绍共轭梯度法,理解其作为一种优良的迭代法,尤其适用于大型稀疏对称正定线性方程组的求解。 MATLAB实现: 演示如何使用``运算符(左除)高效求解线性方程组,并深入分析其背后的算法实现。介绍`lu`、`chol`、`inv`等函数,并讨论何时使用它们,以及它们的局限性。 第三部分:特征值与特征向量的计算 特征值和特征向量在许多科学和工程领域都有着至关重要的应用,例如稳定性分析、降维(PCA)、模态分析等。本部分将深入探讨计算特征值和特征向量的数值方法。 幂法与反幂法: 介绍幂法用于计算最大特征值及其对应特征向量,以及反幂法用于计算最小特征值。 QR算法: 详细讲解QR算法的原理,包括Householder变换或Givens旋转,以及其如何通过迭代逼近上Hessenberg矩阵,最终收敛到对角矩阵(特征值)和累积变换矩阵(特征向量)。 雅可比方法: 介绍雅可比方法用于对称矩阵特征值问题的求解,其通过一系列的平面旋转来逐步消除矩阵的非对角元素。 MATLAB实现: 讲解`eig`函数的用法,并深入探讨其在不同类型矩阵(对称、非对称)下的计算策略。介绍`poly`、`roots`等函数在计算特征值中的辅助作用。 第四部分:插值与逼近 插值与逼近是在离散数据点之间找到一个连续函数描述其关系的关键技术。本部分将涵盖多种插值方法,并讨论数据逼近的思想。 多项式插值: 拉格朗日插值: 讲解拉格朗日插值多项式的构造,分析其优点和缺点(Runge现象)。 牛顿插值: 介绍牛顿插值多项式,理解其递推构造的便利性,以及其与拉格朗日插值之间的关系。 分段多项式插值(样条插值): 重点介绍三次样条插值,理解其在保持光滑性和连续性方面的优势,以及如何构造和使用三次样条。 有理函数插值: 介绍当数据表现出渐近行为时,有理函数插值可能更适合。 最小二乘逼近: 线性最小二乘: 讲解如何用最小二乘法拟合线性模型,找到最佳逼近直线或平面。 多项式最小二乘: 扩展到用多项式逼近更复杂的数据趋势。 MATLAB实现: 演示`polyfit`、`polyval`函数用于多项式拟合和插值。介绍`interp1`函数及其各种插值方法(线性、样条、分段三次等)。讲解`lsqcurvefit`等函数在非线性最小二乘拟合中的应用。 第五部分:数值积分与微分 数值积分和微分是解决积分方程、微分方程以及从离散数据估计导数和积分值的重要工具。 数值积分(求积): 牛顿-科茨公式: 介绍梯形法则、辛普森法则等,理解它们的原理和精度。 复合梯形法则与复合辛普森法则: 讲解如何通过分段使用基本公式来提高精度。 高斯求积: 介绍高斯求积方法,理解其通过选择最优的节点和权重来达到更高的精度。 数值微分: 有限差分法: 讲解前向差分、后向差分和中心差分,分析它们的精度。 高阶有限差分: 介绍如何构造更高阶的有限差分公式以提高精度。 MATLAB实现: 介绍`integral`函数(或`quad`系列在老版本中),讲解其多重积分和自适应求积能力。演示如何使用`diff`函数计算离散数据的差分(数值导数)。 第六部分:非线性方程的求解 求解非线性方程组是许多实际问题中的挑战。本部分将介绍几种常用的数值方法。 单变量非线性方程求解: 二分法(对分法): 介绍二分法的基本原理,分析其收敛速度和鲁棒性。 牛顿法: 详细讲解牛顿法的迭代公式,分析其二次收敛速度,并讨论其在实际应用中的注意事项(导数计算、初始值选择)。 割线法: 介绍割线法作为牛顿法的近似,无需计算导数。 不动点迭代法: 讲解如何将方程转化为不动点形式,并进行迭代求解。 多变量非线性方程组求解: 牛顿法(多元): 扩展牛顿法到多变量情形,需要计算雅可比矩阵。 拟牛顿法(BFGS、DFP等): 介绍拟牛顿法,它们通过迭代逼近雅可比矩阵的逆,在不计算精确导数的情况下获得较快的收敛速度。 MATLAB实现: 介绍`fzero`函数求解单变量非线性方程。演示`fsolve`函数求解多变量非线性方程组,并讨论其可以使用的求解算法选项。 第七部分:优化理论与方法 优化是寻找使某个目标函数达到最大值或最小值的问题。本部分将涵盖无约束和有约束优化问题。 无约束优化: 梯度下降法: 介绍最基本的梯度下降法,理解其沿着负梯度方向更新。 共轭梯度法(优化): 介绍用于优化的共轭梯度法,其通过搜索方向的共轭性来加速收敛。 牛顿法(优化): 介绍利用Hessian矩阵的牛顿法,具有二次收敛性。 拟牛顿法(优化): 介绍BFGS、DFP等拟牛顿法,它们迭代更新Hessian矩阵的近似。 有约束优化: 拉格朗日乘子法: 介绍处理等式约束的基本原理。 二次规划(QP): 介绍处理二次目标函数和线性约束的问题。 线性规划(LP): 介绍线性目标函数和线性约束的问题。 MATLAB实现: 介绍`fminunc`函数用于无约束优化,`fmincon`函数用于有约束优化。详细讲解`linprog`和`quadprog`函数在求解线性规划和二次规划问题中的应用。 第八部分:微分方程的数值解 常微分方程(ODE)和偏微分方程(PDE)的数值解是科学计算的核心内容。本部分将主要关注常微分方程的数值求解。 常微分方程(ODE)的数值方法: 欧拉法(前向、后向): 介绍最简单的欧拉法,分析其一阶精度。 改进欧拉法(中点法): 介绍提高欧拉法精度的改进方法。 Runge-Kutta方法(RK4): 重点讲解经典的四阶Runge-Kutta方法,分析其精度和应用。 多步法: 介绍Adams-Bashforth和Adams-Moulton等多步法,以及它们如何利用过去的点来计算当前点。 刚性方程的求解: 介绍隐式方法和BDF(Backward Differentiation Formulas)方法,以及如何处理具有不同时间尺度的刚性问题。 MATLAB实现: 详细讲解MATLAB ODE求解器家族,如`ode45`(Runge-Kutta)、`ode23`(Runge-Kutta)、`ode15s`(隐式BDF,用于刚性方程)等。演示如何定义ODE方程,设置求解参数,并分析求解结果。 第九部分:插值、拟合与数据平滑的进阶应用 在实际应用中,数据往往是带有噪声的,需要进行平滑处理或寻找更 robust 的拟合方法。 小波分析在数据降噪中的应用: 介绍小波变换的基本原理,以及如何利用小波阈值法去除信号中的噪声。 局部加权散点平滑(LOWESS/LOESS): 讲解LOWESS/LOESS如何通过在局部区域内进行加权线性回归来实现平滑。 Savitzky-Golay滤波器: 介绍Savitzky-Golay滤波器,它通过拟合数据段的多项式来计算平滑后的值和导数。 MATLAB实现: 演示`smoothdata`函数及其各种平滑算法。介绍小波工具箱(Wavelet Toolbox)中的相关函数。 第十部分:稀疏矩阵的处理与应用 在处理大型科学和工程问题时,常常会遇到稀疏矩阵(大部分元素为零的矩阵)。高效处理稀疏矩阵对于提升计算效率至关重要。 稀疏矩阵的表示: 介绍存储稀疏矩阵的不同方法,如坐标格式(COO)、压缩稀疏行(CSR)、压缩稀疏列(CSC)等。 稀疏矩阵的运算: 讲解稀疏矩阵的加法、乘法、转置等运算的特点和优化策略。 稀疏线性方程组的求解: 直接法(UMFPACK, CHOLMOD等): 介绍用于稀疏矩阵的直接求解器。 迭代法(GMRES, BiCGSTAB等): 介绍适用于稀疏矩阵的迭代求解器。 MATLAB实现: 讲解MATLAB对稀疏矩阵的原生支持,如何创建稀疏矩阵(`sparse`函数),以及如何利用其内置函数高效执行稀疏矩阵运算。 附录:MATLAB编程技巧与最佳实践 为了帮助读者更好地利用MATLAB进行数值计算,本部分将分享一些实用的编程技巧和最佳实践。 性能分析与优化: 使用`tic`和`toc`进行计时,`profile`工具进行性能分析,优化内存使用。 代码的可读性与维护性: 良好的注释、函数设计、变量命名规范。 错误处理与调试: 使用`try-catch`块,`keyboard`命令,断点调试。 并行计算基础: 简单介绍MATLAB的并行计算工具箱,以及如何利用多核处理器加速计算。 通过以上十个部分的深入探讨,本书将引导读者不仅掌握MATLAB的丰富数值计算函数,更能理解其背后的数学原理和算法思想,从而能够独立解决更复杂、更实际的数值计算问题。本书强调理论与实践相结合,通过大量的代码示例和对算法细节的深入剖析,帮助读者将理论知识转化为解决实际问题的能力。