《Python编程与数值方法》[89M]百度网盘|pdf下载|亲测有效
《Python编程与数值方法》[89M]百度网盘|pdf下载|亲测有效

Python编程与数值方法 pdf下载

出版社 机械工业出版社京东自营官方旗舰店
出版年 2023-02
页数 390页
装帧 精装
评分 9.4(豆瓣)
8.99¥ 10.99¥

内容简介

本篇主要提供Python编程与数值方法电子书的pdf版本下载,本电子书下载方式为百度网盘方式,点击以上按钮下单完成后即会通过邮件和网页的方式发货,有问题请联系邮箱ebook666@outlook.com

内容简介

本书面向工程和科学专业的学生,介绍编程工具和数值方法,旨在帮助学生掌握计算问题求解技巧。书中第 一部分介绍基本的Python编程概念,使用简单的例子快速将新的概念付诸实践;第二部分涵盖算法和数值分析的基础知识,帮助学生在实际设置中快速应用结果。

目录

译者序<br />前言<br />致谢<br />第一部分 Python编程简介<br />第1章 Python基础 2<br />1.1 开始使用Python 2<br />1.1.1 设置工作环境 2<br />1.1.2 运行Python代码的<br />三种方法 5<br />1.2 Python作为计算器 7<br />1.3 包管理 11<br />1.3.1 使用包管理器管理包 11<br />1.3.2 从源代码中安装包 13<br />1.4 Jupyter Notebook简介 13<br />1.4.1 启动Jupyter Notebook 14<br />1.4.2 笔记本 15<br />1.4.3 如何关闭笔记本 15<br />1.4.4 关闭Jupyter Notebook<br />服务器 15<br />1.5 逻辑表达式和运算符 16<br />1.6 总结和习题 18<br />1.6.1 总结 18<br />1.6.2 习题 18<br />第2章 变量和基本数据结构 20<br />2.1 变量和赋值 20<br />2.2 数据结构—字符串 22<br />2.3 数据结构—列表 26<br />2.4 数据结构—元组 28<br />2.5 数据结构—集合 30<br />2.6 数据结构—字典 31<br />2.7 numpy数组 33<br />2.8 总结和习题 40<br />2.8.1 总结 40<br />2.8.2 习题 40<br />第3章 函数 42<br />3.1 函数基础 42<br />3.1.1 Python 内置函数 42<br />3.1.2 定义自己的函数 42<br />3.2 局部变量和全局变量 49<br />3.3 嵌套函数 52<br />3.4 lambda函数 53<br />3.5 函数作为函数的参数 54<br />3.6 总结和习题 55<br />3.6.1 总结 55<br />3.6.2 习题 55<br />第4章 分支语句 59<br />4.1 if-else语句 59<br />4.2 三元运算符 65<br />4.3 总结和习题 65<br />4.3.1 总结 65<br />4.3.2 习题 65<br />第5章 迭代 69<br />5.1 for循环 69<br />5.2 while循环 74<br />5.3 推导式 76<br />5.3.1 列表推导式 76<br />5.3.2 字典推导式 77<br />5.4 总结和习题 77<br />5.4.1 总结 77<br />5.4.2 习题 77<br />第6章 递归 81<br />6.1 递归函数 81<br />6.2 分而治之 85<br />6.2.1 汉诺塔问题 85<br />6.2.2 快速排序 87<br />6.3 总结和习题 88<br />6.3.1 总结 88<br />6.3.2 习题 89<br />第7章 面向对象编程 94<br />7.1 面向对象编程简介 94<br />7.2 类和对象 95<br />7.2.1 类 95<br />7.2.2 对象 97<br />7.2.3 类属性与实例属性 98<br />7.3 继承、封装和多态 99<br />7.3.1 继承 99<br />7.3.2 封装 102<br />7.3.3 多态 103<br />7.4 总结和习题 103<br />7.4.1 总结 103<br />7.4.2 习题 103<br />第8章 复杂度 105<br />8.1 复杂度和大O表示法 105<br />8.2 复杂度问题 107<br />8.3 分析器 108<br />8.3.1 使用魔术命令 108<br />8.3.2 使用Python分析器 109<br />8.3.3 使用line分析器 110<br />8.4 总结和习题 111<br />8.4.1 总结 111<br />8.4.2 习题 111<br />第9章 数字的表示 113<br />9.1 baseN和二进制 113<br />9.2 浮点数 114<br />9.3 舍入误差 118<br />9.3.1 表示误差 118<br />9.3.2 浮点运算导致的舍入误差 118<br />9.3.3 舍入误差的累积 119<br />9.4 总结和习题 120<br />9.4.1 总结 120<br />9.4.2 习题 120<br />第10章 错误、良好的编程实践<br />和调试 123<br />10.1 错误类型 123<br />10.2 避免错误 125<br />10.2.1 规划你的程序 125<br />10.2.2 经常进行测试 126<br />10.2.3 保持代码整洁 126<br />10.3 异常 128<br />10.4 类型检查 130<br />10.5 调试 132<br />10.5.1 在遇到异常时激活<br />调试器 132<br />10.5.2 在运行代码前激活<br />调试器 134<br />10.5.3 添加断点 135<br />10.6 总结和习题 136<br />10.6.1 总结 136<br />10.6.2 习题 136<br />第11章 读写数据 137<br />11.1 文本文件 137<br />11.1.1 写入文件 137<br />11.1.2 附加文件 138<br />11.1.3 读取文件 138<br />11.1.4 处理数字和数组 139<br />11.2 CSV文件 140<br />11.2.1 写入和打开CSV文件 141<br />11.2.2 读取CSV文件 142<br />11.2.3 numpy之外 142<br />11.3 pickle文件 142<br />11.3.1 写入pickle文件 142<br />11.3.2 读取pickle文件 143<br />11.3.3 读取Python 2的pickle<br />文件 143<br />11.4 JSON文件 143<br />11.4.1 JSON格式 143<br />11.4.2 写入JSON文件 144<br />11.4.3 读取JSON文件 144<br />11.5 HDF5文件 145<br />11.5.1 读取HDF5文件 146<br />11.6 总结和习题 147<br />11.6.1 总结 147<br />11.6.2 习题 147<br />第12章 可视化和绘图 148<br />12.1 二维绘图 148<br />12.2 三维绘图 156<br />12.3 使用地图 161<br />12.4 动画和电影 165<br />12.5 总结和习题 167<br />12.5.1 总结 167<br />12.5.2 习题 167<br />第13章 Python并行化 173<br />13.1 并行计算基础知识 173<br />13.1.1 进程和线程 174<br />13.1.2 Python的GIL问题 174<br />13.1.3 使用并行计算的缺点 174<br />13.2 多进程 174<br />13.2.1 可视化执行时间 176<br />13.3 使用joblib包 177<br />13.4 总结和习题 178<br />13.4.1 总结 178<br />13.4.2 习题 178<br />第二部分 数值方法简介<br />第14章 线性代数和线性方程组 180<br />14.1 线性代数基础知识 180<br />14.1.1 集合 180<br />14.1.2 向量 181<br />14.1.3 矩阵 183<br />14.2 线性变换 187<br />14.3 线性方程组 188<br />14.4 线性方程组的解 189<br />14.4.1 高斯消元法 190<br />14.4.2 高斯–若尔当消元法 192<br />14.4.3 LU分解法 194<br />14.4.4 迭代法—高斯–<br />赛德尔法 196<br />14.5 用Python求解线性方程组 198<br />14.6 矩阵求逆 199<br />14.7 总结和习题 202<br />14.7.1 总结 202<br />14.7.2 习题 202<br />第15章 特征值和特征向量 205<br />15.1 特征值和特征向量<br />问题陈述 205<br />15.1.1 特征值和特征向量 205<br />15.1.2 特征值和特征向量的作用 205<br />15.1.3 特征方程 207<br />15.2 幂法 208<br />15.2.1 寻找优选特征值 208<br />15.2.2 逆幂法 211<br />15.2.3 移位幂法 211<br />15.3 QR方法 212<br />15.4 Python中特征值和特征<br />向量的求法 213<br />15.5 总结和习题 214<br />15.5.1 总结 214<br />15.5.2 习题 214<br />第16章 最小二乘回归 216<br />16.1 最小二乘回归问题陈述 216<br />16.2 最小二乘回归推导<br />(线性代数) 216<br />16.3 最小二乘回归推导(多元<br />微积分) 217<br />16.4 Python中的最小二乘回归 219<br />16.4.1 使用直接求逆法 219<br />16.4.2 使用伪逆法 220<br />16.4.3 使用numpy.linalg.<br />lstsq 221<br />16.4.4 使用scipy中的optimize.<br />curve_fit 221<br />16.5 非线性函数的最小二乘回归 221<br />16.5.1 指数函数的对数技巧 221<br />16.5.2 幂函数的对数技巧 223<br />16.5.3 多项式回归 223<br />16.5.4 使用scipy中的optimize.<br />curve_fit 224<br />16.6 总结和习题 225<br />16.6.1 总结 225<br />16.6.2 习题 225<br />第17章 插值 228<br />17.1 插值问题陈述 228<br />17.2 线性插值 228<br />17.3 三次样条插值 229<br />17.4 拉格朗日多项式插值 233<br />17.4.1 使用scipy中的<br />lagrange函数 235<br />17.5 牛顿多项式插值 236<br />17.6 总结和习题 239<br />17.6.1 总结 239<br />17.6.2 习题 239<br />第18章 泰勒级数 243<br />18.1 使用泰勒级数表达函数 243<br />18.2 使用泰勒级数的近似值 244<br />18.3 关于误差的讨论 246<br />18.3.1 泰勒级数的截断误差 246<br />18.3.2 估计截断误差 247<br />18.3.3 泰勒级数的舍入误差 248<br />18.4 总结和习题 249<br />18.4.1 总结 249<br />18.4.2 习题 249<br />第19章 寻根问题 250<br />19.1 寻根问题陈述 250<br />19.2 公差 251<br />19.3 二分法 251<br />19.4 牛顿–拉夫森算法 254<br />19.5 使用Python求解寻根问题 256<br />19.6 总结和习题 256<br />19.6.1 总结 256<br />19.6.2 习题 256<br />第20章 数值微分 259<br />20.1 数值微分问题陈述 259<br />20.2 使用有限差分近似求导 259<br />20.2.1 使用有限差分近似<br />泰勒级数的导数 260<br />20.3 高阶导数的近似 265<br />20.4 带噪声的数值微分 266<br />20.5 总结和习题 268<br />20.5.1 总结 268<br />20.5.2 习题 268<br />第21章 数值积分 272<br />21.1 数值积分问题陈述 272<br />21.2 黎曼积分 272<br />21.3 梯形法则 275<br />21.4 辛普森法则 277<br />21.5 在Python中计算积分 280<br />21.6 总结和习题 282<br />21.6.1 总结 282<br />21.6.2 习题 282<br />第22章 常微分方程初值问题 286<br />22.1 常微分方程初值问题陈述 286<br />22.2 降阶 288<br />22.3 欧拉方法 289<br />22.4 数值误差和不稳定性 294<br />22.5 预测–校正法和龙格–<br />库塔法 295<br />22.5.1 预测–校正法 295<br />22.5.2 龙格–库塔法 296<br />22.6 Python ODE求解器 298<br />22.7 进阶专题 301<br />22.7.1 多步法 301<br />22.7.2 刚性常微分方程 302<br />22.8 总结和习题 302<br />22.8.1 总结 302<br />22.8.2 习题 302<br />第23章 常微分方程边值问题 310<br />23.1 常微分方程边值问题陈述 310<br />23.2 打靶法 311<br />23.3 有限差分法 315<br />23.4 数值误差和不稳定性 319<br />23.5 总结和习题 320<br />23.5.1 总结 320<br />23.5.2 习题 320<br />第24章 傅里叶变换 322<br />24.1 波的基本原理 322<br />24.1.1 使用数学工具对波建模 322<br />24.1.2 波的特性 323<br />24.2 离散傅里叶变换简介 326<br />24.2.1 离散傅里叶变换 327<br />24.2.2 逆离散傅里叶变换 331<br />24.2.3 离散傅里叶变换的极限 331<br />24.3 快速傅里叶变换 332<br />24.3.1 离散傅里叶变换的<br />对称性 332<br />24.3.2 快速傅里叶变换的技巧 332<br />24.4 Python中的快速傅里叶<br />变换函数 336<br />24.4.1 numpy中的快速傅里叶<br />变换函数 336<br />24.4.2 scipy中的快速傅里叶<br />变换函数 337<br />24.4.3 更多例子 338<br />24.5 总结和习题 342<br />24.5.1 总结 342<br />24.5.2 习题 343<br />附录A 在Windows中使用<br />Python 345

前言/序言


由于编程已经成为工程、科学、医学、媒体、商业、金融和许多其他领域的重要组成部分,因此对于科学家和工程师来说,掌握基本的计算机编程基础是能够提升自身竞争力的。这本书向拥有不同背景的学生介绍编程,并提供编程和数学工具,这些工具将为他们的职业生涯提供非常大的帮助。
本书的大部分内容借鉴了加州大学伯克利分校E7课程“面向科学家和工程师的计算机编程导论”的标准教学资料。这门课是工程学院的大多数理工科新生以及其他学科(包括物理、生物、地球和认知科学)本科生的选修课。该课程最初是用Matlab讲授的,但随着最近伯克利数据科学运动的趋势,数据科学部同意并支持将该课程转变为面向Python的课程,以便为来自不同领域的学生提供进一步学习数据科学课程的预备知识。本课程有两个基本目标:
向没有接触过编程的理工科学生介绍Python编程;
介绍各种用于解决科学和工程问题的数值分析工具。
这两个目标反映在本书的两个部分中:
Python编程简介;
数值方法简介。
本书是根据Timmy Siauw和Alexandre M. Bayen撰写的《面向工程师的MATLAB编程和数值方法导论》一书编写的。本书最初是出于交互目的而在Jupyter Notebook中编写的,然后转换为LaTeX。书中的大多数代码来自Jupyter Notebook代码单元,可以直接在笔记本单元中运行。所有Jupyter Notebook代码都可以在pythonnumericalmethods.berkeley.edu中找到。
因为本书涵盖的主题颇为广泛,所以没有把每一个主题讲得很深入。即使用整个学期来讲本书,每章也最多占用两个课时。这本书旨在为学生提供广泛的编程知识和数学词汇,以供学生进行扩展,而非深入学习。
我们相信,就像学习一门新的外语一样,学习编程也可以很有趣,而且很有启发性。我们希望你在学习本书的过程中会赞同我们的看法。
背景知识
本书旨在向那些几乎没有计算机编程经验的学生介绍编程和数值方法。我们希望这一宗旨能反映在本书的节奏、基调和内容上。为了达到编程的目的,我们假设读者具备以下背景知识:
了解计算机显示器和键盘、鼠标等输入设备;
了解在大多数操作系统中用于存储文件的文件夹结构。
对于本书的第二部分,我们假设读者具备以下背景知识:
高中代数和三角学;
入门级大学微积分。
就是这样了!本书中若出现超出上述背景知识的内容,那必定是我们的问题。如果因概念不明确而产生了知识上的混淆,我们事先表示歉意。
章节组织
第一部分介绍编程的基本概念。第1章介绍Python和Jupyter Notebook。第2~7章介绍编程的基础知识,熟练掌握这些章节的内容可以获得足够的背景知识,从而几乎可以对任何想象的东西进行编程。第8章介绍如何基于计算机程序运行速度来描述程序的复杂度。第9章介绍计算机如何表示数字及其对算术运算的影响。第10章介绍养成良好编程习惯的有用技巧,掌握这些技巧可以减少代码中的错误,并且易于查找错误。第11章介绍如何长期存储数据以及如何使Python的结果在Python之外(即其他程序中)有用。第12章介绍Python的绘图功能,可生成图形和图表,这对于工程师和科学家可视化结果非常有用。第13章介绍Python并行编程的基础知识,并行编程可利用当今计算机的多核
设计。
第二部分概述对工程师有帮助的各种数值方法。第14章简要介绍线性代数。尽管线性代数本质上是理论性的,但它是理解许多高级工程主题的关键。第15章讨论特征值和特征向量(它们是工程学和科学中的重要工具),以及如何利用它们。第16章是关于最小二乘回归的,这是一个数学术语,是将理论模型拟合到观测数据的一种方法。第17章是关于推断数据点之间的函数值的,会介绍一种称为“插值”的框架。第18章介绍用多项式近似函数的思想,这对于简化复杂函数很有用。第19章讲了两种算法,用于求函数的根,即求f(x)=0中的x,其中f是一个函数。第20章和第21章分别介绍近似函数的导数和积分的方法。第22章和第23章介绍一种数学模型,称为常微分方程,这两章着重于不同的问题,分别是初值问题和边值问题,并介绍了几种求解方法。第24章介绍离散傅里叶变换和快速傅里叶变换的概念及其在数字信号处理中的使用。
如何阅读此书
学习编程就是练习,练习,再练习。就像学习一门新语言一样,如果不将其内化并不断加以利用,就无法真正掌握。
我们建议在阅读本书时,打开Jupyter Notebook或交互式网站,并运行书中提供的所有示例。相比于像读小说一样“通读”全文,花时间去理解每个例子中Python所做的事情,将会获得更大的回报。
就本书而言,应该首先阅读并理解第1章至第5章,因为它们涵盖编程的基础知识。第6章到第11章可以按任何顺序阅读。如果你想提高解决问题的能力,则有关绘图和并行编程的第12章和第13章是必读章节。在第二部分中,应该首先阅读第14章,因为后续各章都依赖于线性代数的概念。其余章节可以按任何顺序阅读,我们建议先阅读第17章和第18章,再阅读第19章和第20章。
在整本书中都有用黑体标出的文字,当你遇到这些文字时,需要花时间记忆它们并根据上下文理解其含义。
为了使书中内容更加清晰,我们设计了不同的文本块。这些文本块具有不同的功能,示例如下。
尝试一下!这是书中最常见的块,其中通常会简短地描述问题或操作。我们强烈建议你在Python中“尝试”这些内容。
提示!该块提供了一些建议,我们相信这些建议能使编程更容易。请注意,这些块不包含理解书中关键概念所需的新知识。
示例:这些块是新概念的具体示例,旨在帮助你思考新概念,但不一定需要进行试验。
警告!在编程时可能会遇到很多陷阱,这些块将帮助你避免混乱、养成不良习惯或误解关键概念。
发生了什么?这些块深入细节,以帮助你理解Python执行程序时发生的事情。
结构:在编程中保留了一些标准的架构,用于执行常见和重要的任务。这些块概述这些架构并介绍如何使用它们。
每章末尾都有两个部分。总结部分列出当前章的要点,这些内容能帮助你直观地了解刚刚所学的内容。习题部分提供的练习将帮助你强化所学的概念。
最后一点,在Python中有很多方法可以做同样的事情。乍看这似乎是一个有用的特性,但当任务很简单时,它可能会让学习Python变得困惑,或者因给编程新手提供过多的可能性而让他们不知所措。本书对于要执行的任务只提供一种方法,这样可确保初学者少走弯路,同时也不会被无关紧要的信息所淹没。对于某个任务,你可能会发现不同于本书所给方法的解决方案,而且两者解决问题的效果相同,甚至你的方案效果更好!我们鼓励你找到这些替代方法,并根据我们提供的工具,自己判断哪种方法更好。
希望你喜欢这本书!
为什么选择Python
Python是一种高级通用计算机语言,适用于许多应用程序。它对初学者很友好,希望你会发现它简单易学,并且很有趣。该语言本身非常灵活,这意味着在构建功能方面没有硬性规定,你会发现有多种方法可以解决相同的问题。也许它的强大之处在于拥有一个强大的用户社区,有很多软件包可以直接插入而且只需投入很少的精力。随着持续流行的趋势,Python适合当今数据科学的目标。Python是免费的(开放源代码),并且大多数软件包也是免费使用的。开源编程语言的思想使学习曲线产生了巨大的变化。你不仅可以免费使用这些软件包,还可以从其他用户开发的这些软件包的源代码中学习许多高级技能。我们希望你能喜欢这里介绍的Python知识,并在工作和生活中使用它。
Python和软件包版本
本书是使用Python 3编写的。下面列出了本书中使用的软件包及各自的版本。随着这些软件包的不断开发,你可能会添加、删除或更改软件包的某些功能:
jupyter,1.0.0
ipython,7.5.0
numpy,1.16.4
scipy,1.2.1
h5py,2.9.0
matplotlib,3.1.0
cartopy,0.17.0
joblib,0.13.2

致  谢
Python Programming and Numerical Methods
编写本书初稿的时候,加州大学伯克利分校工程学教授的标准通用语言是Matlab,它的起源可以追溯到2005年左右。那之后便迎来了当前的数据科学、机器学习时代, Python作为一种普遍使用的语言出现在整个工程行业。因此,初稿是作为加州大学伯克利分校E7课程的一部分编写的,该课程向学生介绍编程和数值分析。
如果没有同事、研究生导师团队(GSI)、评分员和行政人员的帮助,这本书就永远不会写出来,他们帮助我们完成了每学期向数百名学生讲授E7课程的艰巨过程。此外,如果没有耐心阅读本书并给出反馈的学生的帮助,本书也将永远无法完成。在多次教授E7课程的过程中,我们与数千名学生、数十个研究生导师团队和评分员以及十几名同事和管理人员进行了互动,鉴于涉及的人数较多,对于那些可能遗漏的人,我们深表
歉意。
我们非常感谢同事Panos Papadopoulos、Roberto Horowitz、Michael Frenklach、Andy Packard、Tad Patzek、Jamie Rector、Raja Sengupta、Mike Cassidy和Samer Madanat教授的指导。尤其感谢Roberto Horowitz、Andy Packard、Sanjay Govindjee和Tad Patzek教授分享了他们在课堂上使用的内容,这些内容对本书的编写做出了贡献。我们还要感谢Rob Harley和Sanjay Govindjee教授在教授E7课程时使用了本书的初稿,并向我们提供了有助于改进的反馈。课程的顺利进行,让作者有了编写本书的时间和精力。众多行政人员承担了大量后勤工作,使课程的管理井井有条。我们特别感谢Joan Chamberlain、Shelley Okimoto、Jenna Tower和Donna Craig。
特别值得一提的是,土木与环境工程系副主任Bill Nazaroff在2011年指定第二作者授课。如果没有这项任务,这本书的几位作者就没有机会一起工作并撰写本书。众所周知,E7课程是加州大学伯克利分校工程学院最难教的课程。然而,在我们教授这门课的多个学期里,课程一直顺利进行,这主要归功于我们有幸与才华横溢的研究生导师团队合作。这几年在授课的过程中,一系列具有传奇色彩的研究生导师团队负责人为塑造课程做出了贡献,并为学生提供了有意义的体验。特别是Scott Payne、James Lew、Claire Saint-Pierre、Kristen Paris