Python科学计算(原书第2版)
作者 : [英] 约翰·M. 斯图尔特(John M. Stewart) 著
译者 : 江红 余青松 译
丛书名 : 计算机科学丛书
出版日期 : 2019-08-07
ISBN : 978-7-111-63390-7
定价 : 89.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 230
开本 : 16
原书名 : Python for Scientists, Second Edition
原出版社: Cambridge University Press
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

【网店勿用!此为申报选题所填信息,网店请调用最终版】对于科学家而言,有了本书,你再也不用去购买那些昂贵的Python软件包。书中包含大量可下载的代码片段,囊括你需要知道的一切。跟随作者的讲解,你将发现实现和测试非平凡的数学算法是多么容易,并将通过许多免费的附加模块进一步动手实践。这些实例来自众多不同的研究领域,它们展示了Python的强大魅力。此外,作者还介绍了如何在Python环境中使用遗留代码,从而免去掌握原始代码的麻烦。相较于第1版,新版本重写了几个章节以反映IPython笔记本风格,扩充了索引,并包含讨论SymPy的新章节,还新增了大量代码片段。通过阅读本书,研究人员和学生将迅速掌握有效使用Python所需的所有技能。

图书特色

活学活用Python科学计算软件包,动手实现复杂的算法,解决不同科研领域的问题

图书前言

第2版前言
Python for Scientists, Second Edition
第1版的前言中包含了本书的写作动机,以及对众多协助编写本书的工作人员的致谢。在此,我还要感谢许多读者,他们提供了建设性的批评意见,其中大部分已经被纳入第2版中。我还想进一步解释一下为什么要出版第2版。从表面上看,除了新增讨论SymPy(Python本身的计算机代数系统)的第7章之外,似乎没有什么大的变化。
然而,新版本中的大部分内容都渗透着一种根本性的变化。在准备第1版时,使用增强解释器IPython的可靠方法是通过传统的“终端模式”。那时正在开发增强的“笔记本模式”,该模式与Mathematica笔记本概念类似,区别在于其显示在计算机的默认Web浏览器中。该项目现在已经演变为Jupyter笔记本,该笔记本允许人们构建和发布包含计算机代码(支持40多种语言)、数学公式、说明文本、图形图像和可视化内容的文档。由于这也许是初学者获得Python经验的最简单的软件应用程序,因此本书的大部分内容已经为笔记本用户重写了教学内容。特别是第2版的附录A中还包含了一个关于如何使用笔记本的启发式教程,并且已经扩展式地重写了第2章的内容以展示其特性。书中的所有内容现在都给出了适当的应用实例。例如,允许SymPy生成其他计算机代数系统无法比拟的代数表达式。
这种变化也影响了交互式图形和视觉动画领域。之所以有这种变化的需求,是因为标准Python的二维图形包Matplotlib难以生成与平台无关的结果。实际上,由于“改进”的软件升级,第1版中用于即时屏幕动画的代码不再有效。然而,笔记本的概念则提供了一个微妙的解决方案来破解这一僵局。回想一下,笔记本窗口是浏览器窗口,它使用现代HTML图形。第6章介绍了笔记本概念所带来的益处。
最后一处改进是,除了本书中列出的最普通的代码片段之外,所有代码片段现在都以电子文档形式提供(当然采用笔记本文件格式),而网站中则同时包括HTML和PDF版本,具体参见1.2节。电子文档中不包括代码前后的说明文本。为了读取代码说明文本,读者必须阅读本书(无论是纸质版还是电子格式)!
编者按:John在第2版完成后不久就不幸去世了,他的同事、朋友和家人都非常想念他,尤其是他的“Python寡妇”。



第1版前言
Python for Scientists, Second Edition
我借助计算机从事科学研究已有40多年了。在这期间,计算机硬件越来越便宜、越来越快速,并且越来越强大。然而,与科技工作者相关的软件则变得越来越复杂。我最喜欢的关于Fortran90和C++的教科书分别是1200页和1600页。同时我们还需要阅读关于数学库和图形包的文档。对于想沿着这条路走下去的新手,将不得不投入大量的时间和精力,以便写出有用的程序。这导致了“科学计算软件包”的出现,比如Matlab?或Mathematica?,它们避免了编译语言、独立数学库和图形包的复杂性。我一直在使用这些科学计算软件包,发现它们可以非常方便地用于执行开发人员所设想的任务。然而,我也发现它们很难再扩展,因此我需要寻找其他方法。
若干年前,一位计算机科学领域的同事建议我研究一下Python。那时,Python就已经具有很大的潜力了,但其实现却非常脆弱。然而,正因为其免费且开源,所以一直吸引着一支非常有效的开发队伍。最近,他们努力的成果得到了协调和统一,从而形成了一个强大的软件包,该软件包由一种小型的核心语言和许多外围附加库或者模块组成。其中一组可以而且确实复制了传统科学计算包的功能。更重要的是,如果能够熟练并睿智地使用Python及其模块,就完全可以实现通常由Fortran、C等专业程序员胜任的大项目。虽然运行速度略有损失,但可以由大大缩短的开发时间来超额补偿。本书的目的就是向科技工作者介绍如何利用这种相对未知的资源。
大多数科学家对计算机都有一定的熟悉程度和编程意识(尽管不一定熟悉Python),我将充分考虑这种因素。因此,与大多数旨在“教”一门语言的书籍不同,本书不仅仅是讨论参考手册中的内容。Python具有很多强大但不为人知的方面,相对于那些广为人知的内容,这些方面需要更多的解释。特别是,如果在本书中遇到“初学者”或者“粗心大意”的词句,那么表示在说明文档中没有明确指出的关键点,至少作者本人在该点上犯了错误。
本书的前七章以及附录A,涵盖了科技工作者为开始有效地使用Python而需要知道的几乎所有知识。本书的编辑和一些评阅专家建议我在后半部分专注于讨论某一领域的问题。但这可能会导致一系列书籍的产生,“面向生物化学家的Python”“面向晶体学家的Python”等,而且所有这些教科书的前半部分内容都相同。我选择只涉及三个主题,但是本书的内容也适用于许多更广泛的领域。第8章涵盖四种截然不同的常微分方程,并且展示了如何使用各种相关的“黑盒”,这些“黑盒”通常是那些实际使用且可信的Fortran代码的Python封装。第9章虽然表面上讲的是关于演化偏微分方程的伪谱方法,但实际上涵盖了一个对许多科学家都非常有用的主题,即如何在不理解Fortran语言的情况下,在Python语言中以类似Fortran的速度来重用那些通常用Fortran77编写的遗留代码。最后一章讨论通过多重网格求解非常大的线性系统,这也是如何在科学环境中有意义地使用面向对象程序设计的案例。如果读者仔细并且批判性地看待这些章节,那么应该可以获得处理自己领域问题的实用专业知识。
感谢许多Python开发人员,他们创造了一个非常有用的工具并编写了非常好的文档,同时也感谢许多在Web上发布代码片段的开发人员,这为很多人(比如本书作者)提供了巨大的帮助。我的许多同事提供了宝贵的意见:Des Higham慷慨地同意我在第8章的最后一节借用他的观点。特别感谢Oliver Rinne,他仔细地审阅了本书的草稿。在剑桥大学出版社,我的项目编辑Jessica Murphy和文字编辑Anne Rix展示了他们卓越的专业素养。最后但也十分重要的是,感谢剑桥大学应用数学和理论物理系在我退休后继续给我提供办公空间,这大大促进了本书的完成。
写一本严肃的书绝不是一件容易的事情,因此我非常感激Mary(我的“Python寡妇”)近乎无穷的耐心,这使本书成为可能!

上架指导

计算机\程序设计

封底文字

相对于传统的Matlab和Mathematica等昂贵的商业软件包,Python科学计算软件包以其开源、免费、库资源丰富的特点,赢得了广大科技工作者和理工科学生的青睐。本书讲解如何使用Python科学计算软件包来实现和测试复杂的数学算法,第2版针对Jupyter笔记本用户更新了部分代码,并新增了讲解SymPy的章节。
书中首先简要介绍Python相关知识,涵盖IPython、NumPy和SymPy,以及二维和多维图形的绘制。这些知识旨在为读者提供必要的基础,而非呈现Python语言的所有细节。之后,书中讨论了三个不同领域的应用实例,涉及常微分方程、偏微分方程和多重网格,并展示了处理Fortran遗留代码的方法。读者可以在这些实例的基础上举一反三,尝试采用合适的附加模块来解决自己所在领域的实际问题。
此外,书中所有代码均可免费获取,请访问www.cambridge.org/PfS2下载。

作者简介
约翰·M. 斯图尔特(John M. Stewart) 剑桥大学应用数学和理论物理系荣誉退休教授,国王学院终身研究员,于2016年逝世。40多年来,他一直是相对论与引力小组的核心成员,引领着关于相对论动力学理论、宇宙微扰理论和数值相对论的研究工作。他的著作包括《Non-equilibrium Relativistic Kinetic Theory》(1971)和《Advanced General Relativity》(1991)。

译者简介
江红 华东师范大学副教授、博士,曾荣获上海市教学成果一等奖、华东师范大学教学成果一等奖、华东师范大学优秀任课教师奖等荣誉。
余青松 华东师范大学高级工程师,编著计算机相关教材30余本,在国内外学术期刊和学术会议上发表科技论文近百篇。

作者简介

[英] 约翰·M. 斯图尔特(John M. Stewart) 著:---作者简介---
约翰·M. 斯图尔特(John M. Stewart) 剑桥大学应用数学和理论物理系荣誉退休教授,国王学院终身研究员,于2016年逝世。40多年来,他一直是相对论与引力小组的核心成员,引领着关于相对论动力学理论、宇宙微扰理论和数值相对论的研究工作。他的著作包括《Non-equilibrium Relativistic Kinetic Theory》(1971)和《Advanced General Relativity》(1991)。

---译者简介---
江红 华东师范大学副教授,博士。1994年毕业于复旦大学计算机系。曾荣获上海市教学成果一等奖、华东师范大学教学成果一等奖、华东师范大学优秀任课教师奖等荣誉。

余青松 华东师范大学高级工程师。1990年毕业于华东师范大学并留校任教。编著计算机相关教材30余本,在国内外学术期刊和学术会议上发表科技论文近百篇。

译者简介

江红 余青松 译:暂无简介

译者序

本书是面向理工科学生和科技工作者的Python程序设计教程。广大的理工科学生、科技工作者和科学家需要使用计算机科学计算软件包辅助日常学习和科学研究工作。相对于传统的商业软件包(如Matlab和Mathematica),以Python为代表的开源软件计算包具有免费、开源、广泛的库支持等特点,是昂贵的专有软件包的重要开源替代品,已经成为科技工作者的首选科学计算软件包。
本书通过丰富的、可下载的、实用的以及可适应不同平台的代码片段,从最基础的环节开始指导科技工作者学习Python的所有相关知识。读者将会发现,实现和测试复杂的数学算法是一件非常容易的事。本书提供了一系列与许多不同领域相关的示例,充分展示了Python语言的魅力,并且引导读者使用众多免费的附加模块。同时,作者还展示了如何在Python环境中使用遗留代码(通常是Fortran77语言),从而避免学习和掌握原始代码的麻烦。
本书的前半部分(以及附录)涵盖了科技工作者使用Python科学计算软件包所需要的几乎所有知识。本书的后半部分则使用Python科学计算软件包来解决三个具体科研领域的问题:第8章涵盖四种截然不同的常微分方程,并且展示了如何使用各种相关的“黑盒”,这些“黑盒”通常是那些实际使用且可信的Fortran代码的Python封装;第9章虽然表面上讲的是关于演化偏微分方程的伪谱方法,但实际上涵盖了一个对许多科学家都非常有用的主题,即如何在不理解Fortran语言的情况下,在Python语言中以类似Fortran的速度来重用那些通常用Fortran77编写的遗留代码;最后一章讨论通过多重网格求解非常大的线性系统,这也是如何在科学环境中有意义地使用面向对象程序设计的案例。科技工作者可以在这些知识的基础上举一反三,使用Python科学计算软件包来解决自己所在领域(如生物化学、晶体学等)的实际问题。
本书作者是英国剑桥大学应用数学和理论物理系的约翰·M.斯图尔特教授,他是《非平衡相对论动力学理论》(1971年)和《高级广义相对论》(1991年)的作者,并且还翻译和编辑了汉斯·斯蒂芬尼的《广义相对论》(1990年)。作者基于自己借助计算机从事科学研究超过40年的经验,阐述了使用Python科学计算软件包处理科研领域问题的方法,以帮助科研工作者有效地解决自己专业领域中的问题。
本书由华东师范大学江红和余青松共同翻译。衷心感谢本书的编辑曲熠老师和张志铭老师,积极帮我们筹划翻译事宜并认真审阅翻译稿件。翻译也是一种再创造,同样需要艰辛的付出,感谢朋友、家人以及同事的理解和支持。在本书翻译的过程中我们力求忠于原著,但由于时间和学识有限,且本书涉及多个领域的专业知识,不足之处在所难免,敬请诸位同行、专家和读者指正。

江红 余青松
2019年4月

图书目录

出版者的话
译者序
第2版前言
第1版前言
第1章 导论1
1.1 科学计算软件1
1.2 本书的规划3
1.3 Python能与编译语言竞争吗7
1.4 本书的局限性8
1.5 安装Python和附加软件包8
第2章 IPython入门9
2.1 Tab键代码自动补全功能9
2.2 自省9
2.3 历史命令11
2.4 魔法命令11
2.5 IPython实践:扩展示例13
2.5.1 使用IPython终端的工作流程14
2.5.2 使用IPython笔记本的工作流程14
第3章 Python简明教程18
3.1 输入Python代码18
3.2 对象和标识符19
3.3 数值类型20
3.3.1 整型20
3.3.2 实数21
3.3.3 布尔值22
3.3.4 复数23
3.4 名称空间和模块23
3.5 容器对象25
3.5.1 列表25
3.5.2 列表索引26
3.5.3 列表切片26
3.5.4 列表的可变性27
3.5.5 元组28
3.5.6 字符串29
3.5.7 字典29
3.6 Python的if语句30
3.7 循环结构31
3.7.1 Python的for循环结构31
3.7.2 Python的continue语句32
3.7.3 Python的break语句33
3.7.4 列表解析33
3.7.5 Python的while循环34
3.8 函数35
3.8.1 语法和作用范围35
3.8.2 位置参数38
3.8.3 关键字参数38
3.8.4 可变数量的位置参数38
3.8.5 可变数量的关键字参数39
3.8.6 Python的输入/输出函数39
3.8.7 Python的print函数40
3.8.8 匿名函数42
3.9 Python类简介42
3.10 Python程序结构44
3.11 素数:实用示例45
第4章 NumPy49
4.1 一维数组50
4.1.1 初始构造函数51
4.1.2 “相似”构造函数52
4.1.3 向量的算术运算52
4.1.4 通用函数54
4.1.5 向量的逻辑运算符55
4.2 二维数组58
4.2.1 广播58
4.2.2 初始构造函数59
4.2.3 “相似”构造函数61
4.2.4 数组的运算和通用函数61
4.3 多维数组62
4.4 内部输入和输出62
4.4.1 分散的输出和输入62
4.4.2 NumPy文本文件的输出和输入64
4.4.3 NumPy二进制文件的输出和输入65
4.5 外部输入和输出65
4.5.1 小规模数据65
4.5.2 大规模数据66
4.6 其他通用函数66
4.6.1 最大值和最小值66
4.6.2 求和与乘积67
4.6.3 简单统计67
4.7 多项式67
4.7.1 根据数据求多项式系数68
4.7.2 根据多项式系数求数据68
4.7.3 系数形式的多项式运算68
4.8 线性代数68
4.8.1 矩阵的基本运算68
4.8.2 矩阵的特殊运算70
4.8.3 求解线性方程组71
4.9 有关NumPy的更多内容和进一步学习71
4.9.1 SciPy71
4.9.2 SciKits72
第5章 二维图形73
5.1 概述73
5.2 绘图入门:简单图形74
5.2.1 前端74
5.2.2 后端74
5.2.3 一个简单示例图形75
5.2.4 交互式操作77
5.3 面向对象的Matplotlib77
5.4 笛卡儿坐标绘图78
5.4.1 Matplotlib绘图函数78
5.4.2 曲线样式79
5.4.3 标记样式79
5.4.4 坐标轴、网格线、标签和标题80
5.4.5 一个稍复杂的示例:傅里叶级数的部分和81
5.5 极坐标绘图82
5.6 误差条83
5.7 文本与注释84
5.8 显示数学公式84
5.8.1 非LaTeX用户85
5.8.2 LaTeX用户86
5.8.3 LaTeX用户的替代方案86
5.9 等高线图87
5.10 复合图形89
5.10.1 多个图形89
5.10.2 多个绘图90
5.11 曼德尔布罗特集:实用示例91
第6章 多维图形96
6.1 概述96
6.2 降维到二维96
6.3 可视化软件97
6.4 可视化任务示例97
6.5 孤立波的可视化98
6.5.1 交互式操作任务98
6.5.2 动画任务100
6.5.3 电影任务101
6.6 三维对象的可视化102
6.7 三维曲线103
6.7.1 使用mplot3d可视化曲线103
6.7.2 使用mlab可视化曲线105
6.8 简单曲面106
6.8.1 使用mplot3d可视化简单曲面106
6.8.2 使用mlab可视化简单曲面108
6.9 参数化定义的曲面109
6.9.1 使用mplot3d可视化Enneper曲面109
6.9.2 使用mlab可视化Enneper曲面110
6.10 居里叶集的三维可视化111
第7章 SymPy:一个计算机代数系统113
7.1 计算机代数系统113
7.2 符号和函数114
7.3 Python和SymPy之间的转换116
7.4 矩阵和向量117
7.5 一些初等微积分118
7.5.1 微分118
7.5.2 积分118
7.5.3 级数与极限119
7.6 等式、符号等式和化简120
7.7 方程求解121
7.7.1 单变量方程122
7.7.2 具有多个自变量的线性方程组122
7.7.3 更一般的方程组124
7.8 常微分方程的求解125
7.9 在SymPy中绘图127
第8章 常微分方程132
8.1 初值问题132
8.2 基本思想132
8.3 odeint函数135
8.3.1 理论背景135
8.3.2 谐波振荡器136
8.3.3 范德波尔振荡器139
8.3.4 洛伦兹方程140
8.4 两点边值问题142
8.4.1 概述142
8.4.2 边值问题的公式化143
8.4.3 简单示例144
8.4.4 线性特征值问题145
8.4.5 非线性边值问题147
8.5 延迟微分方程151
8.5.1 模型方程151
8.5.2 更一般的方程及其数值解152
8.5.3 逻辑斯谛方程153
8.5.4 麦克-格拉斯方程155
8.6 随机微分方程157
8.6.1 维纳过程158
8.6.2 It?微积分158
8.6.3 It?与斯特拉托诺维奇随机积分162
8.6.4 随机微分方程的数值求解162
第9章 偏微分方程:伪谱方法169
9.1 初边值问题169
9.2 直线法170
9.3 有限差分空间导数170
9.4 周期问题的谱技术空间导数方法171
9.5 空间周期问题的IVP172
9.6 非周期问题的谱技术174
9.7 f2py概述176
9.7.1 使用标量参数的简单示例177
9.7.2 向量参数178
9.7.3 使用多维参数的简单示例179
9.7.4 f2py的其他特征180
9.8 f2py真实案例181
9.9 实用示例:伯格斯方程182
9.9.1 边界条件:传统方法183
9.9.2 边界条件:惩罚方法183
第10章 案例研究:多重网格187
10.1 一维情形188
10.1.1 线性椭圆型方程188
10.1.2 平滑众数和粗糙众数188
10.2 多重网格工具189
10.2.1 松弛法189
10.2.2 残差与误差191
10.2.3 延拓和限制192
10.3 多重网格算法193
10.3.1 双重网格算法194
10.3.2 V循环算法195
10.3.3 完全多重网格算法195
10.4 简单的Python多重网格实现196
10.4.1 实用函数197
10.4.2 平滑函数198
10.4.3 多重网格函数200
附录A 安装Python环境205
附录B 伪谱方法的Fortran77子程序213
参考文献218

教学资源推荐
作者: (美)H.M.Deitel, P.J.Deitel
作者: 朱鸣华 罗晓芳 董明 孟军 汪德刚 编著
作者: 谢满德 邵俊 编著
作者: (美)Robert W.Sebesta
参考读物推荐
作者: 范长春 著
作者: Donald Thompson;Rob S. Miles
作者: [英]佩蒂塔·史蒂文斯(Perdita Stevens) 著
作者: [印] 蒂拉克·米特拉(Tilak Mitra)著