MATLAB工程计算(原书第3版)
作者 : [美] 大卫·M.史密斯(David M. Smith) 著
译者 : 卓金武 周英 译
丛书名 : 计算机科学丛书
出版日期 : 2018-09-10
ISBN : 978-7-111-60792-2
定价 : 89.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 311
开本 : 16
原书名 : Engineering Computation with MATLAB,Third Edition
原出版社: Pearson Education Asia
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书基于Matlab平台介绍了工程计算的相关概念、原理、方法和计算的实现过程。书中重要的知识点后都有相关的工程实例,这些案例更直观地描述了工程计算的应用场景和用法,同时加深了对基础概念的理解;每个案例都给出了相应的Matlab代码,使读者掌握一般的实现方法。

图书特色

图书前言

本书向之前没有或有很少计算经验的工科专业新生介绍计算的强大和乐趣。它是佐治亚理工学院向工程师介绍计算的入门读本。然而,它的内容已被大大地扩充了,以满足想了解编程的广大学生和教育者的需要。在本书中,为了理解计算,我们使用了MATLAB的基本语法和功能,这是一种用户友好的语言,正在成为工程学中最流行的计算语言之一。
第3版的新增内容
很多工程学科使用图的概念来表达一些具体含义。所以,这版我们增加了一章,从工程的角度讨论图处理的内容(第17章),着重介绍如何寻找最小生成树和寻找两点之间的最佳路径(分别介绍了精确方法和近似方法)。我们还介绍了MATLAB的一些新功能,学习编程入门课程的学生应该会比较感兴趣。例如,用户可以通过调整和保存值来操作绘图数据。虽然这些功能很有趣,但是通过编辑原始数据和重复绘图可以获得相同的结果,并且可跟踪性和可重复性更好。
在更新第16章中的排序算法时,出现了一个有趣的现象。使用老版MATLAB(R2008之前)时,归并排序和快速排序的递归实现没有达到预期的效果。我们推断的原因是:数据在输入和输出函数时,必须在工作空间和调用函数之间进行复制。但是,使用R2011时,同样的代码却运行得非常出色,这表明早期低效的参数传递机制已经得到了显著的改进。
教学方法
计算不是一门“旁观”的课程。学习计算的方法是使用计算系统来解决问题。本书不仅介绍了计算的概念及其MATLAB实现,还为学生提供了很多练习。本书使用工程领域的实例阐明了各种知识,提出了很多要点,还展示了学生可能遇到的一些案例。每一章都包含一些超出入门级基本内容的知识点。教师可以在两个学期慢慢地、充分地讲解本书的知识。同时,本书也为高年级学生提供了丰富的自学材料。
本书讲解各个知识点的方式如下:
1)全面解释一个计算的概念。
2)讨论其MATLAB实现。
3)提供一些让学生理解这个概念的练习。
为了帮助学生理解概念及其实现,本书使用了两种方法:通用模板和MATLAB清单。通用模板能让学生从整体上理解概念,可以应用于任何编程语言。MATLAB清单显示了如何在MATLAB中实现概念,清单后面还有对这些代码的详细解释。
本书的特点
练习:让学生“自己动手”,通过使用刚刚学到的知识来熟悉概念。每个知识点都有相应的练习。
样式要点:建议学生编写易于理解、调试和重用的高质量代码。
提示:加深学生对知识点的理解。在学生可能从中受益的内容间穿插了提示。
工程实例:提供稳健的模型,并将其应用于现实世界中的问题。每一章的最后都给出了不同工程学科的实例。
特殊字符、保留字和函数:为各章讨论的关键的MATLAB原理提供快速参考。
自我测验:帮助学生检查对各章内容的理解程度。
编程:提供各种大型项目,学生可以通过这些项目来巩固自己的技能。
各章概述
第1章讨论计算机架构的历史及其与当今计算系统的关系。该章概述了计算机的硬件和软件,以及程序如何运行。
第2章讨论计算的一些基本概念,然后介绍MATLAB用户界面的基本操作。该章还描述了如何通过脚本的形式来获得简单的MATLAB程序。
第3章介绍MATLAB区别于其他编程语言的基本机制—它能对同质集合执行数学和逻辑运算。
第4章描述控制代码块执行的常用技术—条件运算和迭代。
第5章描述如何通过定义可重用代码块来实现过程抽象。
第6章讨论MATLAB如何处理包含文本的变量。
第7章讨论按索引和按名称访问的两种异构数据集合。
第8章描述MATLAB读写数据文件的三个层次的能力—保存工作空间,读写特定数据文件的专用工具,处理任何类型文件的通用工具。
第9章讨论并演示一种重复执行代码的替代方法。
第10章介绍帮助学生解决新问题的思路,避免“一片空白”—如何开始一个程序。
第11章将学生从二维基本绘图引入绘制三维物体的高级工具中,利用这些工具能绘制出平滑的阴影效果和多种发光效果。
第12章描述实现矩阵计算的MATLAB能力。
第13章讨论如何使用向量和数组计算来处理彩色图像。
第14章演示如何对声音文件进行分析、合成和操作。
第15章介绍工程中几种常见的数值技术:插值、曲线拟合、积分和微分。
第16章给出排序数据的五种算法(插入排序、冒泡排序、快速排序、归并排序和基数排序),同时介绍这些算法特定的适用环境,然后比较它们应用于大量数据时的性能。
第17章讨论如何表示一般的图形,然后讨论如何解决两个重要的工程问题—寻找最小生成树、寻找图上两个节点之间的最优路径。
附录总结本书用到的MATLAB的特殊字符、保留字、函数,介绍ASCII字符集和计算机内部的数字表示,给出判断题和填空题的答案。
本书的阅读顺序
不是所有涵盖编程和MATLAB的课程都使用相同的教学大纲。本书旨在提供适用于不同风格、不同进度课程的教学内容。例如,第3~5章讨论MATLAB的数组操作、迭代和函数编写。引入这些概念的方法有三种。第一种方法是首先介绍数组的结构,然后引入更“传统”的迭代概念;第二种方法是先讲解迭代,然后介绍MATLAB特有的数组操作;第三种方法是先探讨函数。为了适应特定的教学风格,我们选择按照第一种方法来编写本书。但是,如果你更喜欢迭代或函数,可以按照自己的顺序来使用第3~5章。多年来,我们的课程在实践中已经变成了第三种方法,这样我们就可以使用函数接口来分隔学生的代码,以便自动进行代码分级。第6~9章应该按顺序讲解—各章之间存在依赖关系,改变顺序会变得很难理解。第10章是一个很难列入课程体系的重要章节,它在书中的位置还算比较合理。但是,在每个学期的那个时候,学生还没有准备好去思考更大的问题,所以我通常会在每学期结束时以复习的方式来讨论这些材料。第11章介绍了基本的绘图能力,是其余章节所需的。第12~17章实际上是独立的,可以按任何顺序进行教学,但是应该放在第2~9章和第11章之后。
补充材料
本书的各种补充材料可以从配套网站www.pearsonhighered.com/smith获取。所有读者均可查阅以下内容:
一些编程项目的解决方案。
一些彩色图。
所有MATLAB清单的源代码。
更多章节,包括面向对象编程、链表、N叉树和图、计算成本。
此外,通过访问www.pearsonhighered.com/irc或发送电子邮件到computing@aw.com,Addison-Wesley教师资源中心的教师可以得到更多补充材料:
所有编程项目的解决方案。
PowerPoint幻灯片。
致谢
本书的基本理念和形成其框架的材料来源于Russell Shackelford教授1996年左右的工作。Melody Moore博士是佐治亚理工学院交互式计算系的副教授,他帮忙创建了许多教学材料(并被制作成幻灯片),这门课第一次使用的就是这些教学材料。非常感谢佐治亚理工学院航空航天工程系的James Craig教授,他和我一起教了CS1的第一个工程版本,还告诉我很多关于MATLAB的知识,我们一起开创了这门课,从最初的35名学生发展到现在的每学期超过1000名学生。这门课成了一个向学生介绍MATLAB语言的平台。
我要感谢以下审稿人在本书编写期间给予的帮助和意见:
Kenneth Rouse,奥本大学
Suparna Datta,东北大学
Gerardine G. Botte,俄亥俄大学
Mica Grujicic,克莱姆森大学
Kuldip S. Rattan,莱特州立大学
Y. J. Lin,阿克伦大学
Mark Nagurka,马凯特大学
Michael Peshkin,西北大学
Howard Silver,菲尔莱狄更斯大学
Steve Swinnea,德克萨斯大学奥斯汀分校
本书材料来自佐治亚理工学院每一位教CS1的助教、研究生、讲师和教授(人员太多,无法一一列举)的努力。特别是那些富有创造力的助教,他们为书中的例子提出了很多想法,极大地丰富了它的内容。Aaron Bobick教授说的一段话对本书做出了重要贡献。这段话将这门课从MATLAB编程课的边缘拉回到以CS概念为基础的课程。2004年秋,Bobick教授和我一起教CS1。学期初,他提出了一个非常简单的要求:如果每一堂课中明确地表达出计算概念,而不是让他和学生从教材中梳理出这些概念,那么会更容易讲授这门课程。
我无法充分地表达我对Addison-Wesley团队的感激之情,他们为本书的出版做了很多 “幕后”工作,他们是:Michael Hirsch、Emma Snider、Yez Alayan、Kayla Smith-Tarbox、Pat Brown和Jeff Holcomb。我也真的很感谢Kailash Jadli和他的团队在设计和维护第3版时所做的工作。
最重要的是,我要感谢其他两个人的贡献,没有他们就没有这本书的存在。在写这本书的过程中,我的妻子和我最好的朋友Julie一直给我力量和鼓励。Bill Leahy是我1998年春天教的第一个CS1班的学生,他还继续攻读了计算机科学硕士学位,现在是计算机学院的讲师。除了要感谢他对本书无数的技术贡献之外,我还要感谢他的友谊、鼓励和睿智的判断,在我编写本书的过程中,这些都给了我很大的启发。

上架指导

计算机\Matlab

封底文字

本书基于美国佐治亚理工学院自1996年开始面向工科学生介绍工程计算的入门课程编写而成。本书的目标是向面向零基础的学生介绍工程计算的概念和基本原理、方法,并基于常用的MATLAB工具介绍实现过程,使学生学会使用计算系统来解决实际问题。

本书特色:
知识体系全面:本书涵盖工程计算中需要的所有基础知识,包括基本概念、原理、方法和具体实现计算的过程。
工程案例丰富:本书在重要的知识点后,都安排了相关的工程实例,比如航天器发射中的工程计算、土壤体积的计算等。这些案例能够让学生更直观地理解工程计算的应用场景和用法,同时加深对基础概念的理念
详细的MATLAB代码:MATLAB是工程计算中广泛使用的工具,本书的案例都基于MATLAB实现。读者不仅可以熟悉常见的工具,并且可以直接借鉴这些常见问题的代码,将为未来的实际的工程工作带来很大的帮助。

译者序

实现这些工程需要无数人才,要花费无数金钱和时间。可以说,科学的前沿往往离不开工程的身影,希格斯玻色子的发现就是欧洲的大型对撞机这一超级科学工程推动的。可见,工程与科学同等重要,甚至工程更重要,因为工程的推进会引导科学的发展方向,近代计算数学的发展明显强于理论数学的发展就是一个很好的证明。
工程的一个重要基础是计算,相比科学计算,工程计算更侧重应用,而科学计算更侧重计算背后的理论。另一方面,现在的工程(比如生产一辆汽车或制作一个机器人)都涉及复杂的工程计算,这些计算是设计和量产的基础。对于未来的工程师,学习工程计算是非常必要的,而且非常重要,这也是国外高校重视工程计算的原因,如本书的作者很早就在美国佐治亚理工学院开设这样的课程,而且大受欢迎,因为这样的课程比理论更生动、更具体、更实用。
本书的作者也是一位有着多年实际工程计算经验的工程师,所以本书的内容整体上比较接地气。具体说来,本书具有以下三方面的特色:
1)知识体系全面。本书涵盖了工程计算中所需的基础知识,包括基本的概念、原理、方法和具体实现计算的过程。
2)工程实例丰富。书中重要的知识点后基本都有相关的工程实例,比如航天器发射中的工程计算、土壤体积的计算等,这些实例直观地描述了工程计算的应用场景和用法,可以加深读者对基础概念的理解。
3)详细的MATLAB代码。MATLAB是工程计算中功能最强大也是应用最广的工具,全书的实例都用MATLAB代码作为实现过程,代码可以直接借鉴,对实际的工程计算会有很大的帮助。
此外,本书还包含了测试习题及答案等内容,对读者的自我检测很有帮助。
我们大学毕业后,从事的工作基本都涉及工程计算,深知工程计算对实际工程的重要性,尤其在MathWorks工作后,经常接触不同行业的工程计算问题。作为本书的译者,我们倍感荣幸,翻译的过程让我们有机会重新梳理工程中用到的计算方法,受益匪浅。所以希望读者能从本书中学习到一些实际的工程计算方法,相信你也一定会因曾经读过这样的一本书而感到幸运。一个小建议是要重视实践环节,本书中包含了很多生动的代码实例,不妨自己尝试运行一下,或者按照自己的理解重新修改一下,体验不同方法、不同代码的运行结果,相信这些尝试式的实践过程会让你加深对工程计算的理解,同时提升你的MATLAB功力。
本书的翻译过程中得到了机械工业出版社朱劼老师的指导和帮助,在此致以诚挚的感谢!
限于我们的知识储备,译文中难免有不当之处,烦请读者予以批评指正。

卓金武 周英
2018年5月

图书目录

出版者的话
译者序
前 言
第1章 计算机和程序开发导论1
1.1 背景1
1.2 计算机架构的历史1
1.2.1 巴贝奇差分机2
1.2.2 巨人计算机2
1.2.3 冯·诺依曼架构2
1.3 现代计算系统3
1.3.1 计算机硬件3
1.3.2 计算机存储器3
1.3.3 计算机软件5
1.3.4 运行计算机程序7
1.4 解释型程序的运行7
1.5 预期结果8
1.5.1 MATLAB简介8
1.5.2 学习编程概念8
1.5.3 解题技巧8
本章小结9
自我测验9
第2章 入门11
2.1 编程语言的背景11
2.1.1 抽象12
2.1.2 算法12
2.1.3 编程范式12
2.2 基本的数据处理13
2.2.1 启动和退出MATLAB13
2.2.2 变量赋值13
2.2.3 数据类型14
2.2.4 类和对象15
2.3 MATLAB用户界面16
2.3.1 命令行窗口16
2.3.2 命令历史窗口17
2.3.3 工作空间窗口18
2.3.4 当前目录窗口21
2.3.5 变量编辑器21
2.3.6 图形窗口21
2.3.7 编辑器窗口22
2.4 脚本23
2.4.1 文本文件23
2.4.2 创建脚本23
2.4.3 当前目录24
2.4.4 运行脚本24
2.4.5 脚本中的标点24
2.4.6 调试脚本25
2.5 工程实例—航天器发射25
本章小结27
特殊字符、保留字和函数28
自我测验28
编程29
第3章 向量和数组31
3.1 概念:使用内置函数31
3.2 概念:数据集合31
3.2.1 数据抽象31
3.2.2 同质集合31
3.3 向量32
3.3.1 创建向量32
3.3.2 向量大小33
3.3.3 索引向量33
3.3.4 缩短向量34
3.3.5 向量运算35
3.4 工程实例—力和力矩41
3.5 数组41
3.5.1 数组的属性42
3.5.2 创建数组42
3.5.3 访问数组的元素43
3.5.4 删除数组的元素44
3.5.5 数组运算44
3.6 工程实例—计算土壤体积50
本章小结52
特殊字符、保留字和函数52
自我测验54
编程54
第4章 执行控制57
4.1 概念:代码块57
4.2 条件语句的一般形式57
4.3 if语句58
4.3.1 通用模板58
4.3.2 MATLAB实现59
4.3.3 重要的概念60
4.4 switch语句61
4.4.1 通用模板61
4.4.2 MATLAB实现62
4.5 迭代的一般形式63
4.6 for循环63
4.6.1 通用模板63
4.6.2 MATLAB实现64
4.6.3 索引实现方式65
4.6.4 退出for循环65
4.7 while循环66
4.7.1 通用模板66
4.7.2 MATLAB实现66
4.7.3 loop-and-a-half的实现67
4.7.4 退出while循环68
4.8 工程实例—计算液体的体积68
本章小结69
特殊字符、保留字和函数70
自我测验70
编程71
第5章 函数74
5.1 概念:抽象和封装74
5.2 函数的黑盒视图74
5.3 MATLAB实现75
5.3.1 通用模板75
5.3.2 定义函数75
5.3.3 函数的保存和使用76
5.3.4 函数的调用76
5.3.5 可变数量的参数77
5.3.6 返回多个结果77
5.3.7 辅助函数78
5.3.8 MATLAB函数中的封装78
5.3.9 全局变量79
5.4 工程实例—测量固体79
本章小结81
特殊字符、保留字和函数81
自我测验81
编程81
第6章 字符串85
6.1 概念:映射、类型转换、分词、分隔85
6.2 MATLAB实现86
6.2.1 字符串的切片与连接87
6.2.2 算术运算和逻辑运算87
6.2.3 函数87
6.3 类型转换函数88
6.3.1 将数字转换为字符串88
6.3.2 将字符串转换为数字88
6.4 字符串的运算90
6.4.1 简单的数据输出:disp(…)函数90
6.4.2 复杂的数据输出90
6.4.3 字符串的比较91
6.5 字符串数组92
6.6 工程实例—加密93
本章小结95
特殊字符、保留字和函数95
自我测验96
编程96
第7章 元胞数组和结构体99
7.1 概念:异构集合99
7.2 元胞数组99
7.2.1 元胞数组的创建99
7.2.2 元胞数组的访问100
7.2.3 元胞数组的使用101
7.2.4 元胞数组的处理102
7.3 结构体103
7.3.1 结构体的构造和访问103
7.3.2 构造函数104
7.4 结构体数组106
7.4.1 构建结构体数组106
7.4.2 访问结构体的元素107
7.4.3 操作结构体109
7.5 工程实例—建造一个建筑物111
本章小结114
特殊字符、保留字和函数114
自我测验114
编程115
第8章 文件的输入和输出118
8.1 概念:串行I/O118
8.2 工作空间I/O119
8.3 高级I/O函数119
8.3.1 探索120
8.3.2 电子表格120
8.3.3 带分隔符的文本文件121
8.4 低级文件I/O122
8.4.1 文件的打开与关闭123
8.4.2 文本文件的读取123
8.4.3 读取文本文件的例子123
8.4.4 文本文件的写入124
8.5 工程实例—电子表格数据125
本章小结126
特殊字符、保留字和函数127
自我测验127
编程127
第9章 递归130
9.1 概念:活动栈130
9.1.1 栈130
9.1.2 活动栈130
9.1.3 函数实例131
9.2 递归的定义131
9.3 递归函数的实现132
9.4 异常133
9.4.1 早期的方法133
9.4.2 异常处理的通用方法134
9.4.3 MATLAB实现134
9.5 封装函数136
9.6 递归的例子137
9.6.1 检测回文138
9.6.2 斐波那契数列138
9.6.3 函数零点140
9.7 工程实例—机器人手臂运动141
本章小结144
特殊字符、保留字和函数144
自我测验144
编程145
第10章 解决问题的原则147
10.1 解决简单问题147
10.2 解题步骤148
10.3 运算概述148
10.3.1 基本算术运算148
10.3.2 集合的插入148
10.3.3 集合的遍历149
10.3.4 集合的创建150
10.3.5 集合的映射150
10.3.6 集合的过滤151
10.3.7 集合的汇总151
10.3.8 集合的搜索151
10.3.9 集合的排序152
10.4 解决更大的问题152
10.5 工程实例—处理地缘政治数据152
本章小结156
自我测验157
编程157
第11章 绘图159
11.1 基本绘图159
11.1.1 窗口—图形的“容器”159
11.1.2 调整图形的简单函数159
11.1.3 一个窗口中的多个图形—子图160
11.1.4 手动编辑图形162
11.2 二维绘图162
11.2.1 简单图形162
11.2.2 绘图选项163
11.2.3 参数图163
11.2.4 其他二维绘图功能164
11.3 三维绘图164
11.3.1 线性三维图165
11.3.2 三维线性参数图166
11.3.3 其他三维绘图功能167
11.4 曲面图167
11.4.1 基本功能167
11.4.2 简单的练习168
11.4.3 三维参数曲面171
11.4.4 旋转体172
11.4.5 其他三维曲面绘图功能175
11.4.6 组合曲面176
11.5 操作绘图数据176
11.6 工程实例—地理数据的可视化176
11.6.1 数据的分析176
11.6.2 数据的显示177
本章小结178
特殊字符、保留字和函数179
自我测验180
编程181
第12章 矩阵183
12.1 概念:行为抽象183
12.2 矩阵运算183
12.2.1 矩阵乘法183
12.2.2 矩阵除法185
12.2.3 矩阵求幂185
12.3 实现185
12.3.1 矩阵乘法185
12.3.2 矩阵除法186
12.4 旋转坐标系188
12.4.1 二维旋转188
12.4.2 三维旋转190
12.5 联立线性方程组的求解192
12.6 工程实例194
12.6.1 陶瓷的成分194
12.6.2 电路分析195
本章小结196
特殊字符、保留字和函数196
自我测验196
编程196
第13章 图像198
13.1 图像的性质198
13.2 图像类型199
13.2.1 真彩色图像199
13.2.2 灰度图像199
13.2.3 颜色映射图像199
13.2.4 更好的图像格式200
13.3 读取、显示、编写图像200
13.4 图像处理200
13.4.1 缩放图像201
13.4.2 图像掩模201
13.4.3 创建万花筒205
13.4.4 曲面图片206
13.5 工程实例—边缘检测208
本章小结210
特殊字符、保留字和函数210
自我测验211
编程211
第14章 声音的处理213
14.1 声音的物理原理213
14.2 记录和回放213
14.3 实现214
14.4 时域操作214
14.4.1 切割和连接声音214
14.4.2 音乐的背景216
14.4.3 音频的修改217
14.5 快速傅里叶变换219
14.5.1 背景219
14.5.2 实现220
14.5.3 简单的频谱分析221
14.6 频域操作223
14.7 工程实例—音乐合成器225
本章小结226
特殊字符、保留字和函数227
自我测验227
编程227
第15章 数值方法229
15.1 插值229
15.1.1 线性插值229
15.1.2 三次样条插值231
15.1.3 外推232
15.2 曲线拟合233
15.2.1 线性回归233
15.2.2 多项式回归235
15.2.3 应用236
15.3 数值积分237
15.3.1 完全积分的计算238
15.3.2 连续函数的积分239
15.4 数值微分240
15.5 解析式的运算242
15.5.1 解析式的积分242
15.5.2 解析式的微分242
15.6 实现242
15.7 工程实例—调整合成器的音符243
本章小结244
特殊字符、保留字和函数245
自我测验245
编程245
第16章 排序248
16.1 衡量算法成本248
16.1.1 具体的大O的例子248
16.1.2 分析复杂的算法250
16.2 数据排序算法250
16.2.1 插入排序250
16.2.2 冒泡排序251
16.2.3 快速排序253
16.2.4 归并排序254
16.2.5 基数排序256
16.3 性能分析256
16.4 排序算法的应用258
16.4.1 使用sort(…)258
16.4.2 插入排序258
16.4.3 冒泡排序258
16.4.4 快速排序258
16.4.5 归并排序259
16.4.6 基数排序259
本章小结259
自我测验259
第17章 图论的处理260
17.1 队列260
17.1.1 队列的性质260
17.1.2 队列的实现260
17.1.3 优先队列261
17.1.4 队列的测试263
17.2 图265
17.2.1 图的例子265
17.2.2 图的处理265
17.2.3 图的创建266
17.2.4 图的遍历268
17.2.5 图的搜索270
17.3 最小生成树270
17.4 图的路径搜索272
17.4.1 精确算法272
17.4.2 广度优先搜索算法272
17.4.3 Dijkstra算法273
17.4.4 近似算法275
17.4.5 图搜索算法的测试276
17.5 工程应用277
17.5.1 简单的应用277
17.5.2 复杂的应用278
本章小结278
编程278
附录A MATLAB的特殊字符、保留字和函数279
附录B ASCII字符集287
附录C 内部数字表示288
附录D 判断题和填空题答案290

教学资源推荐
参考读物推荐
作者: 崔明辉 侯海燕 编著
作者: 王玉甲 张忠林 刘晓白
作者: (美) Louis Gary Lamit