00_目录及前言

《基于Python的建模和仿真》

3.4.3版

作者:Allen B. Downey

翻译:南开大学智能医学工程专业2018级、2019级学生

校订:刘畅

内容

  1. 前言
  2. 建模
  3. 共享单车
  4. 迭代建模
  5. 参数扫描
  6. 世界人口
  7. 增长建模
  8. 二次增长
  9. 预测
  10. 分析
  11. 案例学习
  12. 流行病学
  13. 优化
  14. 双参数扫描
  15. 分析
  16. 加热
  17. 混合
  18. 药物动力学
  19. 葡萄糖模型
  20. 案例学习
  21. 抛物体
  22. 空气阻力
  23. 2D中的抛物体
  24. 优化
  25. 旋转
  26. 转矩
  27. 案例学习

0 前言

0.1 建模可以教授吗?

建模的基本技巧和能力包括抽象、分析、仿真、校正;这些技巧和能力在工程学、自然科学、社会科学、医学等领域有着重要的作用。学生通常潜默移化学习这些技巧,不过在大多数学校,这些技巧并没有显性地教授,而且学生也没有得到必要的练习。这正是本书所希望解决的问题。

我们使用本书作为Olin学院(作者的大学)所有大学新生第一学期《建模和仿真》课程的教材。教学团队包括我的同事John Geddes、Mark Somerville,课程开始于2009年。

这是基于我们认为建模应当在所有课程中被显性地(明确地)早早地进行教学;这同样基于我们认为计算(编程)是该过程重要的组成部分

如果学生只通过手算的数学分析,他们将只能进行少量简单物理系统分析,例如真空中抛物运动或者无摩擦滑块运动。

如果学生只是使用简单的模型,但这些模型并不能满足实际需求。例如在几乎所有的机械系统中,空气阻力和摩擦都是重要的因素;如果忽略它们,预测将是错误的,设计也无法工作。

在大多数大一新生的物理课程中,学生并没有进行模型使用的决定;有时候他们甚至没有意识到正在使用模型。我们的目的是教授完整的建模过程,并且提供学生必要练习的机会

0.2 我需要多少编程的知识?

即使读者从未进行过编程,您也完全有能力阅读和理解本书,并且做相关的练习。我们将尽量解释清楚所需了解的概念,并且谨慎选择所介绍的术语(在初次使用时,明细定义)。如果您发现有术语没有定义,请让我得知。

如果您曾经进行过编程,您将很容易上手,不过可能会在一些地方感到不习惯;因为在本书中,我们采用了您可能没有遇到的方式介绍编程。

大部分编程的课程往往有两个问题:

  1. 自下而上的方式,从编程语言的基本特点开始,而后逐渐增添强大的工具。因此,学生通常从简单的任务(转换华氏摄氏温度)到真正有趣的工作,往往花费很长的时间。
  2. 通常没有主题上下文。学生并没有明确的目标学习编程,因此练习仅仅是不同专题的集合,学生对练习没有主动性。

在本书中,您将有一个明确的目标在头脑中进行编程:对真实(物理)系统进行仿真模拟;而且我们采用自上而下 的方式,也就是说我们将直接采用职业强度的数据结构和编程语言特点。具体而言,我们将使用以下Python库和工具:

这些工具将帮您很快进行有趣的编程,但同时它们有一些缺点:它们可能很难使用,而且跟踪哪些库正在使用、以及它们之间如何交互,也很有难度。

为了缓解上述问题,我们创建提供一个数据库——modsim,它将方便上述工具的上手使用,并且提供一下额外的功能。

ModSim数据库一些功能就如同“辅助轮”;到一定程度后,您可能不再使用它,而直接使用相关的库;而有些功能您可能发现一直很有用,您将在全书练习中并在今后使用。

我们鼓励您阅读ModSim数据库代码,它们大部分并不复杂,而且可读性强。特别是如果您有一定的编程经验,您将在回顾我们的设计中得到一些收获。

0.3 我所需要的数学和科学知识?

我们假设您懂得微分和积分的基本概念,但并不需要掌握和记忆所有微积分的变换公式。如果您能够计算的x^2 的微分以及2xdx 的积分,这便足够了。更重要的是,您需要理解诸如算术平均之类的概念;如果不完全理解,也没有关系,本书将会帮助您理解掌握相关概念。

您不需要了解微分方程的相关知识。

在科学方面,我们的课题涵盖不同的领域,包括人口统计学、流行病学、医学、热动力学、力学等。在大多数情况下,我们假设您并不了解熟悉这些领域。实际上建模的能力之一便是,学习一个新的领域足够的知识,开发模型并进行仿真

具体在力学方面,我们假设您理解位移、速度、加速度之间的关系,熟悉牛顿运动定律,特别是第二定律F = ma

以上便是我认为您所需的一切,如果您发现我们有任何遗漏,请告知我们。

0.4 开始

为了运行本书的列子和练习,您需要:

  1. 在您的电脑上安装Python以及相关的库。
  2. 将我们的文件拷贝在您的电脑。
  3. 运行Jupyter,加载含有代码和文档的notebook文件。

下面三部分将详细介绍以上三步的具体细节。我希望有更加容易的方式开始;很抱歉在您写第一个程序前,需要做很多工作;然而,磨刀不费砍柴功,请努力坚持!

0.5 安装Python

您的电脑上可能已经安装了Python,不过可能并不是最新的版本。使用本书中的代码,您需要Python3.6或以上的版本。即使您使用的是最新的版本,您也可能并不完全拥有我们所需的所有库。

您可能需要更新Python并安装所需的库,然而我强烈不推荐这种方式。如果您选择使用Anaconda(一种Python发行版,并且几乎包括本书所需的所有库),您将发现更加方便。

Anaconda在不同操作系统Linux、macOs、Windows均可使用。默认安装时,它将所有的文件放置在您的home文件夹,因此您并需不要管理员权限进行安装,并且如果您已经有一个版本的Python,Anaconda并不会删除或者修改它。

下载网址https://www.anacoda.com/download,下载您操作系统所对应的安装器并运行。您并不需要管理员权限进行安装,因此我们建议您使用一般用户运行安装器,而不是使用管理员或root用户权限。

我们同样建议您接收默认推荐的设置。对于Windows用户,您可以选择安装Visual Studio Code,这是一种交互式编程环境。您在本书的学习中并不会使用,不过您在其他的项目中可能会使用它。

通过默认安装,Anaconda将安装您所需要的绝大部分库或安装包,但仍有少量还需要您进行安装。一旦Anaconda安装结束,请打开命令行窗口。在macOs或Linux系统,您使用终端;在Windows系统,使用Anaconda Prompt程序(系统开始菜单中)。

运行下面的命令(可以复制、粘贴,避免错误):

conda install jupyterlab pandas seaborn sympy
conda install beautifulsoup4 lxml html5lib pytables

其中一些包可能已经安装了。安装Pint:

conda install -c conda-forge pint

安装ModSim库,运行:

pip install modsimpy

以上便是您安装所需的一切。

0.6 拷贝我的文件

获得本书练习文件最简单的方法是直接下载Zip压缩文件,下载网址http://modsimpy.com/zip。您需要WinZip或gzip程序解压缩Zip文件,将解压缩文件放置于Jupyter notebook的文档目录下。

如果您能够下载Zip文件,您可以略去本部分的下面内容,下面将介绍如何使用Git。

本书的代码已经上传到Git库,网址https://github.com/AllenDowney/ModSimPy。Git是一种帮助您与其他开发者跟踪程序和完成项目的软件。在Git管理下一组文件称为存储库(repository/repo)。GitHub是提供Git储存库的存储和便捷的网页交互的服务器。

在您下载这些文件之前,我们建议您在GitHub上拷贝我的存储库,也就是分支(forking)。如果您还没有GitHub账号,您需要创建一个。

使用浏览器进入我存储库的主页https://github.com/AllenDowney/ModSimpy。您应该在右上角看到Fork灰色按钮,点击它,GitHub将创建一个属于您的我的储存库的拷贝。

目前下载文件最佳的方式是使用Git客户端(一种管理Git存储库的软件)。您可以在http://modsimpy.com/getgit网站上获得您对应系统的版本软件的安装说明。

对于Windows系统,我们建议您接受安装器推荐的设置,除了以下两个例外:

  • 默认编辑器,选择nano,而不是vim
  • 对于"Configuring line ending conversions",选择"Check out as is, commit as it"

对于macOS和Linux系统,我们建议您接收推荐设置。

一旦安装完成,打开命令行窗口。对于Windows,打开Git Bash;对于macOS或Linux,使用终端。

希望了解您的目录所在,输入pwd(打印工作目录)。对于Windows,目录类似于Users\yourusername;对于macOS或Linux,应该是您的家目录/home/yourusername。

下一步拷贝您GitHub上的存储库到您的电脑上,使用Git的语言就是,克隆(cloning)。命令如下:

git clone https://github.com/YourGitHubUserName/ModSimPy

请把YourGitHubUserName替换为您GitHub的用户名。克隆后,您将得到一个名为ModSimPy的工作目录。

0.7 运行Jupyter

每一章的代码和练习的起始代码,都在Jupyter notebook文件中。如果您以前没有使用过Jupyter,您可以在https://jupyter.org上学习使用。

对于macOS或者Linux系统,打开终端;对于Windows系统,打开Git Bash。使用cd命令修改工作目录到含有notebook文件的目录。如果您下载的Zip文件,可能是cd ModSimPy-maseter/notebooks

如果是通过Git克隆的目录,命令可能是cd ModSimPy/notebooks

然后登录Jupyter notebook服务器,运行jupyter notebook

Jupyter将通过浏览器打开一个窗口,而您将看到存储库中notebook的列表。点击第一个文件chap01.ipynb,按照介绍运行单元(cell)。首次运行可能会花费几秒钟启动,因为Python文件需要初始化,随后将会运行的比较快。

如果您有建议或更正,请邮件downey@allendowney.com;如果您是一名Git用户,您可以拉请求(a pull request)

本书的中文翻译由南开大学医学院智能医学工程专业2018级、2019级的师生完成,方便后续学生学习《Python仿真建模》课程。翻译人员(排名不分前后):薛淏源、金钰、张雯、张莹睿、赵子雨、李翀、慕振墺、许靖云、李文硕、尹瀛寰、沈纪辰、迪力木拉、樊旭波、商嘉文、赵旭、连煦、杨永新、樊一诺、刘志鑫、彭子豪、马碧婷、吴晓玲、常智星、陈俊帆、高胜寒、韩志恒、刘天翔、张艺潇、刘畅。

整理校订由刘畅完成,如果您发现有翻译不当或者错误,请邮件联系changliu@nankai.edu.cn

本书中文版不用于商业用途,供大家自由使用。

未经允许,请勿转载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容