内容简介
本书分三个层次进行内容组织:计算基础、使用MATLAB解决日常生活问题、深入研究和扩展。计算基础部分除了介绍MATLAB的基础知识,还包含计算历史和编程语言的简要介绍,以及良好的编程实践。这部分内容凝练了大学中常开设的“计算机基础”和“计算机科学导论”等课程的精华。第二部分主要涉及线性代数方程求解、数值求导、求根算法等内容,利用高等数学和线性代数等课程的基本知识,简单快速地解决日常生活中的常见问题。*后一部分是关于MATLAB的深入研究和扩展,介绍了随机过程、蒙特卡洛仿真、优化问题和离散傅里叶变换等内容,当你深入到实际科学研究和工程项目时都会用到这方面的内容。
目录
出版者的话
译者序
前言
第一部分计算基础
第1章计算机与编程语言简介2
1.1早期计算史2
1.2现代计算机3
1.3什么是编程3
1.4编程语言概述4
1.5计算机中的数字表示及其潜在问题5
1.5.1离散化——计算机的主要弱点5
1.5.2二进制表示6
1.5.3浮点数表示6
1.5.4结论7
1.6自学7
第2章MATLAB基础9
2.1MATLAB的图形用户界面9
2.2功能强大的MATLAB计算器11
2.2.1MATLAB的变量类型11
2.2.2内置函数和运算符12
2.2.3运算符的优先级13
2.2.4注释14
2.3高效编辑14
2.4使用帮助文档15
2.5矩阵16
2.5.1创建和访问矩阵元素16
2.5.2基本矩阵运算17
2.5.3字符串矩阵20
2.6冒号运算符20
2.7绘图21
2.8自学23
第3章布尔代数、条件语句和循环24
3.1布尔代数24
3.1.1MATLAB中布尔运算符的优先级25
3.1.2MATLAB布尔逻辑运算举例25
3.2比较运算符26
3.2.1向量比较26
3.2.2矩阵比较27
3.3条件语句27
3.3.1if-else-end语句27
3.3.2if语句的简短形式28
3.4等于语句的常见错误28
3.5循环28
3.5.1while循环28
3.5.2特殊命令——break和continue29
3.5.3for循环30
3.6自学31
第4章函数、脚本和良好的编程实践32
4.1动机引例32
4.1.1银行利率问题32
4.1.2飞行时间问题32
4.2脚本33
4.3函数35
4.4良好的编程实践37
4.4.1简化代码37
4.4.2试着预见非预期行为37
4.4.3运行测试用例38
4.4.4检查并清理输入参数39
4.4.5判断解是否符合实际40
4.4.6良好的编程实践总结40
4.5递归函数和匿名函数40
4.5.1递归函数40
4.5.2匿名函数41
4.6自学42
第二部分使用MATLAB求解日常问题
第5章线性代数方程组求解46
5.1风铃问题46
5.2MATLAB内置求解器48
5.2.1逆矩阵法48
5.2.2无逆矩阵计算的方法48
5.2.3选用哪种方法48
5.3用MATLAB求解风铃问题49
5.4示例:惠斯通电桥问题50
5.5自学52
第6章数据约简与拟合53
6.1数据约简与拟合的必要性53
6.2拟合的正式定义53
6.3数据拟合示例54
6.4参数不确定性估计56
6.5拟合结果评估56
6.6如何得到最优拟合58
6.6.1数据绘图60
6.6.2选择拟合模型60
6.6.3拟合参数的初始猜测61
6.6.4基于初始猜测的数据和模型绘制61
6.6.5拟合数据62
6.6.6拟合参数的不确定性评估63
6.7自学65
第7章数值导数67
7.1通过前向差分估计导数67
7.2数值导数的算法误差估计68
7.3通过中心差分估计导数69
7.4自学70
第8章求根算法71
8.1求根问题71
8.2试错法71
8.3二分法72
8.3.1二分法示例和测试用例74
8.3.2二分法代码的可能改进76
8.4算法收敛76
8.5试位法77
8.6割线法78
8.7牛顿拉弗森法79
8.7.1使用牛顿拉弗森法进行解析求导80
8.7.2使用牛顿拉弗森法进行数值求导81
8.8Ridders法81
8.9求根算法的陷阱82
8.10求根算法总结83
8.11MATLAB内置求根命令84
8.12自学84
第9章数值积分方法86
9.1积分问题描述86
9.2矩形法86
9.3梯形法89
9.4辛普森法90
9.5广义积分公式90
9.6蒙特卡罗积分91
9.6.1示例:计算池塘面积91
9.6.2朴素蒙特卡罗积分91
9.6.3蒙特卡罗积分推导91
9.6.4蒙特卡罗方法的算法误差92
9.7多维积分92
9.8蒙特卡罗多维积分94
9.9数值积分陷阱94
9.9.1使用大量的数据点94
9.9.2使用过少的数据点95
9.10MATLAB的积分函数95
9.11自学96
第10章数据插值98
10.1最近邻插值98
10.2线性插值99
10.3多项式插值101
10.4好的插值程序的准则102
10.5三次样条插值102
10.6MATLAB内置的插值方法104
10.7外推法104
10.8插值的非常规应用104
10.9自学105
第三部分深入研究并扩展科学家的工具箱
第11章随机数生成器和随机过程108
11.1统计和概率简介108
11.1.1离散事件的概率108
11.1.2概率密度函数108
11.2均匀随机分布109
11.3随机数生成器和计算机110
11.3.1线性同余生成器110
11.3.2随机数生成器周期111
11.4如何检验随机数生成器111
11.5MATLAB的内置随机数生成器113
11.6自学114
第12章蒙特卡罗仿真115
12.1钉板实验115
12.2抛硬币游戏117
12.3传染病传播118
12.4自学123
第13章优化问题125
13.1优化问题简介125
13.2一维优化126
13.2.1黄金分割最优搜索算法126
13.2.2一维最优MATLAB
前言/序言
目标读者
本书适合任何想学习MATLAB编程的读者。如果你正在寻求关于编程、MATLAB和数值方法的简明易懂的教程,那本书正好适合你。我们希望读者能在这里找到处理日常计算和程序设计问题的必要知识。即使是经验丰富的读者也能从书中得到对常见方法的有用见解,找到可能遇到的困惑问题的解释。
我们从简单的概念开始,帮你逐步掌握建模、模拟和分析真实系统的技能。此外,还概述了成功的科学或工程工作所必需的数值方法。本书帮你熟悉计算的“学问”,这样当你决定学习高级技术时,会知道该学习什么。
本书是根据“科学家的实用计算”(Practical Computing for Scientists)课程材料编写的,该课程为威廉与玛丽学院开设的一学期课程,教学对象为尚未确定主修学科的学生,以及物理、神经科学、生物学、计算机科学、应用数学和统计学或化学等专业的学生。成功学习这门课的学生水平也不相同,有的是大一新生,有的是大四毕业生,有的介于两者之间。
为什么选择MATLAB
我们选择MATLAB作为编程语言,是因为MATLAB对一些已实现的功能有很好的平衡,这些功能对科学家来说非常重要又易于学习。MATLAB为用户隐藏了许多底层细节,你不需要考虑变量类型、编译过程等。MATLAB使用起来就是这么便利,它可以在不跟踪每个元素的情况下对整个数组进行计算,这正是MATLAB的核心。
从教师的角度来说,你不必为学生安装MATLAB而担心。软件安装过程很简单,学生都能独立完成。更重要的是,MATLAB在Windows、Mac和Linux等操作系统中的界面和工作方式都一样,在不同计算机上产生的结果完全相同。
从学生的角度来说,MATLAB可能是从事工程或科学研究工作最常用的编程语言。因此,如果你现在学习MATLAB,或许就不需要再强迫自己学习其他行业标准编程语言了。
MATLAB的主要缺点是价格昂贵,如果学校或单位不能提供,就得高价购买了。但这不是一个大问题,你可以选择免费的替代软件GNU Octave。本书所有章节的练习,除了数据拟合外都可以通过Octave完成。Octave中的数据拟合使用了一套不同的命令,其他部分和MATLAB的工作方式相同(对于一些高级选项可能需要稍作调整)。
本书不包含哪些内容
本书没有广泛介绍MATLAB命令,因为MATLAB已经有一个很好的手册,我们没有必要再编写一本,也无须重做一个在线教程。
本书也不能代替讲解数值方法的来龙去脉的书。我们尽可能讨论可以用数值方法完成的有趣的事情,而不必关心最有效的实现方法。然而,这本书的开头是个例外——通过数值算法的实现解释了一些编程基础知识,这些算法大多是MATLAB的内置函数。
如何阅读本书
如果你不是编程新手,可以跳过第一部分的大部分内容,但是要确保熟悉其中的元素操作、数组操作与数组元素操作之间的区别以及数组切片等内容。
如果你是科学家,那么绘图和数据拟合是必须掌握的。请务必阅读第6章。如果需要学习关于数据分析的重要内容,也需要学习这一章。
第三部分在某种程度上可作为自选内容,尽管我们十分推荐优化问题一章(即第13章)。令人惊讶的是有很多问题本质上都属于优化问题,可以用第13章提出的方法来解决。可能在本科高年级的课堂上才会用到这部分内容。
随着编程水平的提高,请重新阅读44节,并尝试从中学习更多技术。
数据文件和代码链接
本书所有MATLAB代码及数据文件可在网站http://physics.wm.edu/programming_with_MATLAB_book下载。本书英文电子版中直接给出了相关文件的链接地址。
关于本书教辅资源,只有使用本书作为教材的教师才可以申请,需要的教师可到原出版社网站注册下载,若有问题,请与泰勒·弗朗西斯集团北京代表处联系。——编辑注




















