Python物理建模初学者指南

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


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

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

做者更像是耐心的潜水教练,手把手地从零开始教授编程新手,帮助他们克服学习中的障碍,回避各类陷阱。在阅读完本书后,读者应该能具备专业人士般的自信,驾驭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物理建模初学者指南》