Python物理建模初学者指南

今天这一本图书,是全网第一本Python物理建模书。
他是一本用Python解决科学问题的实践指南!
他就是《Python物理建模初学者指南》


试读: www.epubit.com.cn/book/detail…

他有多牛,众多世界知名大学教授推荐阅读!

作者更像是耐心的潜水教练,手把手地从零开始教授编程新手,帮助他们克服学习中的障碍,回避各种陷阱。在阅读完本书后,读者应该能具有专业人士般的自信,驾驭Python解决数据分析、建模和可视化中的科学问题。本书适于作为任何场景下科学编程的教程。当然我也会使用它。

——Garnet Kin-Lic Chan,普林斯顿大学

作者以友好和简明的方式编写了这本使用Python进行科学编程的入门指南,但内容却出人意料的全面。本书不仅适用于计算科学家,也适用于那些需要绘制并分析实验数据、求解方程数值或学习编程基础的读者。即便是有编程经验的读者,也会对书中那些激发思考的练习和指南产生兴趣,从而更大程度地发挥Python的作用。

——Vinothan N. Moanharan,哈佛大学

对于刚刚起步做科学计算的物理研究人员而言,这是一本量身定制的Python教程。与我曾读过的其他编程类图书相比,我从这本书中更能感受到作者是诚心诚意地期望解决读者可能会遇到的困惑和问题。本书对读者给出了细致有效的指导,引导读者实现形式化计算问题并求解的目标。

——Justin Bois,加州理工学院

作者针对如何使用Python进行科学编程而编写了这本引人入胜的指南,内容细致透彻,侧重于实用的问题。书中所使用的例子是经深思熟虑的,取自于日常的科研实践,展示了每个计算科学家工具箱中应具备的核心概念和技术。本书内容构思精妙,有助于学生迈出最重要的一步,即朝着正确的方向开始编程。

——Cornelis Storm,埃因霍温理工大学

本书全面覆盖了Python编程语言的基础知识,侧重于物理建模。对于本科生和以前从未接触过编程的人而言,本书提供了非常有用的Python入门。

——Želijko Ivezič,华盛顿大学

本书为那些几乎没有编程经验的人提供了非常优秀的入门指南。两位作者采用一种清晰精确的方式,覆盖了使用Python做科学计算的所有重要方面。本书通过解释如何最好地执行科学计算中特定的通用任务,为读者提供了学习指南。书中的例子和练习也是经过精心选取的。

——Quentin Caudron,普林斯顿大学

如果你符合如下特点,一定要读它!

Python 初学者

想要用Python 进行科学计算和物理建模的读者。

阅读前须知,本书提供免费的示例代码
Python是一种迅速得到科学界广泛认可的计算机编程语言。本书的目的在于为Python学习者提供帮助,使他们可以通过自学掌握足以开展物理建模工作的编程技能,包括设置开源Python的编程环境,以及使用Python完成一些常见的科学运算任务,例如数据的导入和导出、数据的可视化、数值分析和模拟等。本书无需读者具备任何的编程经验。

本书侧重于基础性内容,并介绍了一些广泛适用的技术,包括:

● Python编程基础与脚本;

● 数值数组;

● 二维和三维绘图;

● 蒙特卡洛模拟;

● 数值方法,包括常微分方程求解;

● 图像处理;

● 动画。

为了清晰地阐述新的知识点,本书提供了丰富的代码例子和练习,并给出了相应的解答。本书的示例代码和数据集,可以从www.epubit.com.cn下载。

为什么要自学Python?为什么要用本书的方法自学?

学习计算机编程可改变你的思维。一开始你会感到步履维艰,三三两两地随处收集编程技巧,但是假以时日,你会发现自己能让计算机近乎无所不能。你可以添加常被物理学教授说成是可忽略不计的摩擦力和空气阻力的影响,你可以模拟出自己的捕食者—猎物生态去研究种群模型,你可以创建出自己的分形,你可以发现股票市场中的关联关系,不胜枚举。

要与计算机进行交流,你必须先学会一门计算机可以理解的语言。Python就是一个优秀的选择,它易于入门,结构非常自然,至少相比于其他的计算机语言是这样的。不久,你将发现大量时间不必再花费在如何向计算机解释你的计算方法,而是用于思考如何解决问题。无论你是出于什么动机学习Python,你都会想到这样的一个问题:是否确有必要费力读完本书中的所有内容。请相信我们!作为工作在一线的科学家,为了使读者能开始独自探索和学习,我们用自身经验准备好了尽量高效的方法。如果你能按本书推荐的顺序花费一些时间尝试书中推荐的所有内容,从长远看会节省学习Python的时间。在一开始写书时,我们就去除了所有读者不需要的内容,书中保留下来的是一组基本知识和技能。总有一天,你会发现这些内容的确有用。

如何使用本书?

对于如何使用本书自学Python,下面给出一些建议:

可在epubit.com.cn获取本书中提供的一些代码例子、勘误、更新、数据集,还有更多的内容。

在读完前面的几页后,需要读者手边有一台能运行Python的计算机(不用担心,本书会教你如何设置该计算机)。可能书中会要求在该计算机上打开一个名为code_samples.txt的文本文档,该文档同样可从上面给出的Web地址获取。

最好将本书的纸质版放在计算机旁,其他可看电子书的设备,例如平板电脑也可。当然也可用运行Python的同一台电脑查看电子书。

本书将频繁地要求读者去尝试操作。其中的一些操作涉及文本形式的代码段。读者可以从code_samples.txt文件中复制并粘贴代码到自己的Python会话中,查看输出,并更改和操作代码。

读者也可交互地访问代码段。上面给出的Web站点还提供了访问每个代码例子的链接。可从Web页面复制和粘贴代码到Python中。

部分章节标注了这样的标识。该标识用于指示更高级的内容,在首次阅读时可以跳过。

那好,我们现在开始吧!

本书目录
第1 章 Python入门 1
1.1 算法与算法思想 1
1.1.1 算法思想 2
1.1.2 状态 3
1.1.3 “a=a+1”是什么意思 4
1.1.4 符号和数字的对比 5
1.2 启动Python 6
1.2.1 IPython 控制台 7
1.2.2 错误信息 13
1.2.3 如何获取帮助 13
1.2.4 好的做法:记录日志 15
1.3 Python 模块 15
1.3.1 import 15
1.3.2 from...import 16
1.3.3 NumPy和PyPlot模块 17
1.4 Python 表达式 18
1.4.1 数字 18
1.4.2 算术操作和预定义函数 19
1.4.3 好的做法:变量命名 21
1.4.4 更多的函数相关信息 22
第2 章 数据结构与程序控制 24
2.1 对象和方法 24
2.2 列表、元组和数组 27
2.2.1 创建列表和元组 28
2.2.2 NumPy数组 28
2.2.3 为数组填充值 30
2.2.4 数组的连接 32
2.2.5 访问数组元素 33
2.2.6 数组和赋值 34
2.2.7 数组切片 35
2.2.8 数组展平 37
2.2.9 更改数组形状 38
2.2.10 以列表和数组为索引 38
2.3 字符串 39
2.3.1 使用format 方法格式化字符串 41
2.3.2 使用“%”格式化字符串 43
2.4 循环 43
2.4.1 for 循环 44
2.4.2 while 循环 46
2.4.3 循环长时间运行 46
2.4.4 死循环 47
2.5 数组操作 47
2.5.1 矢量化数学 48
2.5.2 数组化简 50
2.6 脚本 51
2.6.1 Editor 窗格 52
2.6.2 其他编辑器 53
2.6.3 调试的第一步 54
2.6.4 好的做法:做注释 57
2.6.5 好的做法:使用命名参数 61
2.6.6 好的做法:注意单位问题 62
2.7 或有行为:分支 63
2.7.1 if 语句 64
2.7.2 真值的处理 65
2.8 嵌套 65
第3 章 数据输入、结果输出 67
3.1 导入数据 68
3.1.1 获取数据 68
3.1.2 将数据导入Python 70
3.2 导出数据 73
3.2.1 脚本 73
3.2.2 数据文件 74
3.3 数据可视化 77
3.3.1 plot 及相关命令 77
3.3.2 绘图的调整与装饰 81
3.3.3 误差条 83
3.3.4 3D图形 84
3.3.5 多重绘图 85
3.3.6 子绘图 87
3.3.7 保存图形 87
3.3.8 在其他应用中使用图形 88
第4 章 首次上机实验 90
4.1 艾滋病病毒载量模型 90
4.1.1 探究模型 91
4.1.2 匹配实验数据 92
4.2 细菌实验 93
4.2.1 探究模型 93
4.2.2 匹配实验数据 94
第5 章 Python进阶 96
5.1 自定义函数 97
5.1.1 定义Python函数 97
5.1.2 更新函数 100
5.1.3 参数、关键字和缺省值 101
5.1.4 返回值 102
5.1.5 函数式编程 103
5.2 随机数和模拟 105
5.2.1 模拟抛硬币 105
5.2.2 生成轨迹线 106
5.3 直方图和条形图 107
5.4 等势线绘图和曲面 109
5.4.1 生成绘图点网格 109
5.4.2 等势线绘图 110
5.4.3 曲面绘图 111
5.5 非线性方程的数学求解 111
5.5.1 一般实函数 112
5.5.2 多项式的复数根 113
5.6 求解线性等式 114
5.7 数值积分 115
5.7.1 对预定义函数积分 116
5.7.2 对自定义函数积分 117
5.7.3 对震荡函数积分 117
5.7.4 参数依赖性 118
5.8 微分方程的数值解 118
5.8.1 问题重构 119
5.8.2 ODE求解 120
5.8.3 参数依赖 122
5.9 向量场和流线图 123
5.9.1 向量场 123
5.9.2 流型 124
第6 章 第二次上机实验 126
6.1 生成和绘制轨迹 126
6.2 绘制位移分布 127
6.3 少见事件 129
6.3.1 泊松分布 129
6.3.2 等待时间 131
第7 章 更多的技术 133
7.1 图像处理 133
7.1.1 图像和数字数组 134
7.1.2 操作图像 135
7.2 动画 135
7.2.1 创建动画 136
7.2.2 保存动画 137
7.3 分析计算 141
7.3.1 SymPy软件包 141
7.3.2 Wolfram Alpha 142
第8 章 第三次上机实验 145
8.1 卷积 146
8.1.1 Python 的图像处理工具 146
8.1.2 图像平均 148
8.1.3 使用高斯滤波器做平滑 149
8.2 图像去噪 149
8.3 特征强调 150
继续努力 152
附录A 安装Python 154
A.1 安装Python 和Spyder 154
A.1.1 图形界面安装 155
A.1.2 命令行安装 156
A.2 设置Spyder 159
A.2.1 工作目录 159
A.2.2 交互图形 159
A.2.3 脚本模块 159
A.2.4 重启 160
A.3 加速 160
A.4 保持版本最新 161
A.5 安装FFmpeg 161
附录B 错误和错误消息 164
B.1 Python错误概述 165
B.2 一些常见的错误 166

附录C 比较Python 2与Python 3 170
C.1 除法 171
C.2 用户输入 171
C.3 打印命令 172
C.4 更多帮助 173
附录D 深入学习 174
D.1 赋值语句 174
D.2 内存管理 177
D.3 函数 177
D.4 作用域 178
D.4.1 命名冲突 180
D.4.2 作为参数传递变量 181
D.5 总结 182
附录E 练习的解答 183
致谢 189
参考文献 190
第一章试读
分析机编织代数模式,就像提花织机在编织花和叶。

——埃达·洛夫莱斯伯爵夫人,1815-1853

1.1 算法与算法思想

本书的目的在于让读者运用计算机语言Python开始计算科学之旅。Python是一种开源软件,读者可自行下载、安装并使用它。现在好的Python入门教程不胜枚举,并且每年还在推陈出新。与这些内容相比,本书的独到之处在于侧重能解决物理建模问题的有用技能。

对物理系统建模或许会是一项十分复杂的任务。下面让我们了解一下功能强大的计算机处理器是如何为此提供帮助的。

1.1.1 算法思想

假设你需要指导一位朋友完成倒车入位操作。当时是一个紧急情况,必须由你这位从未开过车的朋友完成操作,开始操作前,你们之间只能通过电话联系。

你需要将操作分解为可被你的朋友能理解的小步骤,这些小步骤应是明确的,依次执行即可完成任务。例如,你可给出如下一系列指令:

1 将车钥匙插入点火器。2 转动钥匙直至启动,然后松开钥匙。3 按下变速杆上的按钮,将变速挂入“倒车”标识的档位。4 ……

遗憾的是,即使你的朋友理解了每条指令,该“代码”对一些车辆并不起作用。这个过程有“程序故障”。在做第3步指令前,不少车辆需要驾驶者:

踩下左脚踏板。

此外,变速器上的倒车档可能是用“R”标记的,而非“倒车”。创建这样的操作指令时,难以做到一开始就习惯操作所需的高精确度。

因为指令是预先给出的(假定你的朋友没有手机),所以好的做法是允许存在意外情况:

在听到了吱嘎声后,踩下左踏板……

这就是算法思想的开端,将长的操作步骤分解为小的、清晰的子步骤,以及预期中的意外情况。

如果你的朋友见过别人驾车,并已有了大量的经验,那么上述指令足以适用。但是对于另外一些没有任何经验的朋友,甚至是机器人,需要提供更多的细节。例如,最初两步指令可能需要进行如下扩展:

握住钥匙的大头端。将钥匙的另一端插入位于驾驶杆右下方的钥匙孔内。按顺时针方向扭动钥匙(从钥匙的大头端向对端的角度看)。……

低层计算机程序使用计算机可理解的语言形式提供类似的指令[1] 。而高层系统可以理解很多通用任务,因而编程方式更为简明扼要,就像在上面例子中第一次所给出的指令。Python就是一种高层语言,它具有进行数学计算、文本处理、文件操作的通用操作命令。此外,Python还可以访问很多标准程序库。作为程序的集合,这些程序库可以执行数据可视化、图像处理等高级功能。

Python也提供命令行接口,即一个执行在其中输入的Python命令的程序。这样在Python中,你可以输入命令并立刻执行。与之形成对比的是,用C、C++、Fortran等很多科学计算中使用的其他语言所编写的程序,在执行前需要进行编译。这时要先由一个称为编译器的独立程序将你的代码转译为低级语言,然后你才能运行生成的编译程序去执行(实现)你的算法。使用Python,相对容易实现程序的快速编写、运行和调试(虽然依然需要耐心和实践)。

命令行解释器,连同标准函数库和你自己编写的程序,一起提供了便利的、强大的科学计算平台。

1.1.2 状态

也许以前你在上几何课时,就已经学过了如何做多步数学证明。这种证明方法的目标在于通过依次诉诸已知的信息和形式化系统去证实一个期望结论的真实性。这样,虽然孤立看来每个语句的真实性不明显,综合考虑前面的语句,就可以明确地判定期望的真实性。在通读证明过程中,读者的“状态”(已知为真的命题列表)会发生改变,最终给出了一个如何从公理和假设引出结果的完整逻辑推导链条。

每个算法都具有各自的目标。可以将算法看成是一个指令链,其中的每条指令都描述了一个基本操作,这些操作共同实现了一个复杂的任务。指令链中可能包括不少重复的操作,因此你不会想要去对执行中的每一步进行管理。替代的做法是,你预先制订了所有步骤,然后观看你的电子助理是如何快速执行的。其中可能存在一些预料之外的事件(例如听到汽车吱嘎作响……)。

在算法中,计算机的状态时常会发生改变。例如,一个计算机有多个内存单元,其中的内容会在操作过程中发生变化。你的目标可能是安排一到多个这样的单元,用于在完成复杂计算后保存一些运行的结果。你可能还希望能绘制出特定的图形图像。

1.1.3 “a=a+1”是什么意思

为使计算机执行你的算法,必须用计算机能理解的语言与计算机进行通信。一开始接触计算机编程时,你可能会对所使用的命令感到困惑,尤其是这些命令与标准数学用法有冲突的时候。例如,很多编程语言(其中包括Python)接受下面这样的声明:

1 a = 1002 a = a + 1

这在数学中是不合理的。第二行是一个永假断言,相应地也是一个无解的等式。但是对于Python而言,“=”并非是测试相等性,而是一个需要执行的指令。上面两行命令的大概意思为[2]:

1.命名整数对象a,并赋值100。

2.提取命名对象a的值,并与1做求和运算,然后将运算结果赋于a,并抛弃a所指代对象的原始值。

换句话说,等号“=”通知Python去更改变量自身的状态。相反,等号在数学概念中是用于创建一个结果为真或为假的命题。还应注意的是,Python对命令“x=y” 中等号两侧内容的处理不同,而在数学中等号两侧是对称的。例如,Python将对“b+1=a”这样的命令报错,因为赋值语句的左侧必须是一个变量名称,该变量可被赋值为右侧表达式的求值。

我们往往希望能确定一个变量是否具有特定的值。为避免赋值和等价测试间的模糊性,Python以及其他很多语言都对后者使用双等号“==”。例如:

1 a = 12 a == 03 b = (a == 1)

上面的代码再次设置了变量a,并对a赋了一个数值。然后将该数值与0进行比较。最后,创建了第二个变量b。在完成另一次比较运算后,将变量b赋予一个逻辑值(True或False)。该值可在或然代码中使用,我们将在本书的随后内容中介绍。

注意:不要在应该使用“==”(等价测试)的地方使用“=”(赋值)。

这是编程新手常犯的一个错误。因为“=”和“==”都是合法的Python语法,这个错误会产生无法预料的结果。但是无论在何种情况下,“=”和“==”两者中只会有一个是你所需要的。

1.1.4 符号和数字的对比

在不知道a值的情况下使用“假定b=a2-a”进行减法运算,这在数学上是完全合理的。该语句将会根据a定义b,无论a的值是什么。

如果我们启动Python并直接给出上面运算的一个等价语句“b= a**2-a”,这会报错[3] 。每次按下键之后,Python会尝试对每个赋值语句求值。如果变量尚未赋值,那么求值就会失败,Python就会报错。这样的输入可能会被其他的数学计算软件包接受,因为它们可以追踪符号的关系并随后求值,但是基本Python并不会这样做[4] 。

在数学中可理解的是,类似于“假定b=a2-a”这样的定义在整个问题讨论期间都不会发生改变。如果我们说“当a=1时”,那么读者就知道b等于0;如果随后我们说“当a=2时,……”,我们就不必再次定义b,读者知道b现在代表的值是22-2=2。

与此相对比,Python这样的数学系统在执行赋值语句“b=a**2-a”后,并不会记住b和a之间的关系,它所记住的只是赋给b的值。如果我们随后更改了a的值,b的值并不会发生变化[5]。

一般来说,在证明的过程中改变符号关系并非一个好做法。但是在Python中,如果我们说“b=a2-a”,我们稍后也可以说“b=2a”。第二次赋值会丢弃第一次赋值时计算的值,并替换为新计算的值,这样更新了Python的状态。

点击Python,查看更多python书单

延伸推荐

2017内核大会看点云集

你所不了解的Kafka
Kotlin最佳项目实战——欧瑞天气App
用Python实现“猜数字”游戏
10月| 异步新书人气王票选
点击关键词阅读更多新书:

Python|机器学习|Kotlin|Java|移动开发|机器人|有奖活动|Web前端|书单

点击阅读原文,购买《Python物理建模初学者指南》

你可能感兴趣的:(Python物理建模初学者指南)