写作背景
记得2009年笔者还在攻读硕士学位时,一天同年级的一个同学让笔者帮他求解一个最优化问题。当时笔者对最优化计算还是一知半解,于是到学校图书馆借了一本MATLAB最优化计算的图书,照着书上的求解步骤用MATLAB帮他解决了问题。从那时起,笔者就对最优化计算产生了浓厚的兴趣,并开始学习最优化计算的基本原理。时至今日,笔者仍然对最优化计算的理论和实践有着浓厚的兴趣。可以说,是最优化计算吸引笔者走进了科学计算的世界。
后来笔者想开发自己的软件,又学习了C、C++和C#等编程语言,这为笔者后续学习其他语言奠定了一定的基础。现在回想起来,当初之所以没有继续深入学习C和C++语言,是因为对于笔者这样的非计算机专业学生而言,这两种语言无论是学习难度还是使用成本都过高,C#语言虽然简单一些,但是在跨平台方面不具备优势。一次偶然的机会,笔者接触了Python语言,因为有C和C++语言基础,所以学习起来比较容易。自此以后,笔者便一发不可收拾,一用Python就是11年之久。在笔者看来,Python是理工科非计算机专业学生的首选编程语言,因为他们毕业后所从事的工作大多会涉及科学计算,而Python非常适合做科学计算。
尽管市面上的Python图书已经汗牛充栋,但关于科学计算方面的图书却寥寥无几,而且这些图书需要读者有一定的Python编程基础才能阅读,这无疑增加了读者的学习负担。虽然Python很强大,可以胜任各领域的开发工作,但是科学计算并不要求读者全面掌握Python编程,读者也无须为了做科学计算而专门花大把时间精研Python编程。比较理想的做法是,用一本书带领读者掌握Python科学计算。于是,笔者萌生了一个想法:编写一本书,将Python编程的基础知识和科学计算结合起来讲解,让读者更加有针对性地学习,从而快速入门Python科学计算。
写作经历
笔者曾经作为第一作者参与编写了《Python与有限元》一书,介绍如何用Python开发一个有限元分析框架,历经一年,其中,前八个月编写有限元分析框架程序,后四个月完成图书的写作。后来笔者又编写了《从零开始自己动手写区块链》一书,介绍区块链的原理与底层编程知识,历经八个月,前四个月编写区块链模拟器程序,后四个月完成图书的写作。这两本书都有一个共同点:先写好完整的程序,然后将编程的过程用文字描述出来,写作的难点在于程序的实现。本书是笔者参与编写的第三本书,也是写作时间最长的一本书,历时一年零八个月。本书与前两本书有所不同,书中介绍的程序对于笔者来说实现起来很容易,其难点在于如何将Python编程的相关知识与科学计算巧妙地结合起来,让读者能够轻松地走进Python科学计算的世界。为此,本书尝试采用一种新的写作风格:书中的章节划分以科学计算实例为依据,在解决科学计算问题的过程中穿插介绍需要学习的Python编程知识。于是,本书的写作难点成了经典实例的选择问题,因为实例的选择要具有代表性,是读者熟知和感兴趣的例子,还要能够将Python编程知识穿插其中。这无疑是一件极具挑战性的事,本书中的每一个例子都经过了“选择→构思→推翻→重新选择→重新构思→采纳”的复杂过程,这对于笔者这样有选择困难症的人来说,可谓劳心费神。所幸经过大量的遴选,笔者最终选出了较为满意的实例。
本书特色
* 提供了长达10小时的配套教学视频,帮助读者更加高效、直观地学习本书内容。
* 将Python基础知识和科学计算结合起来讲解,让没有任何Python编程基础的读者快速入门。
* 精心挑选了大量的典型实例,带领读者从实践中学习Python科学计算。
* 穿插了大量的延伸阅读内容,帮助读者更加全面和深入地掌握相关知识点。
* 每章都提供了习题,帮助读者巩固和提高所学知识。
* 每章都设置了“老裴的科学世界”学习专栏作为补充学习内容,帮助读者拓宽视野,提高解决实际问题的能力。
* 提供教学PPT,方便读者学习和相关老师教学使用。
本书内容
第1章围绕简单公式程序化的主题展开,介绍了如何使用Python将科学计算中的简单公式程序化,涵盖Python的安装和运行、编程的基本概念、基本语法、运算符和数字数据类型等,还重点介绍了Python中函数的定义。
第2章围绕复杂公式程序化的主题展开,重点介绍了Python中的流程控制,包括条件分支语句和循环语句,另外还介绍了与流程控制相关的内置容器型数据类型,如列表、元组、集合和字典。
第3章围绕公式对象化的主题展开,主要介绍了Python面向对象程序设计,包括类和实例,属性和方法,类的继承和方法的重载等,另外还循序渐进地介绍了如何打包并发布自己编写的库。
第4章围绕公式向量化的主题展开,结合数组运算可视化,全方位地介绍了Python的科学计算库NumPy。
第5章围绕公式可视化的主题展开,详细介绍了Python的高质量二维绘图库Matplotlib的相关绘图功能。
第6章介绍了Python中随机数的生成方法,并配合多个典型实例综合应用前面章节所学的知识。
关于专栏
本书在每章的最后设置了一个专栏——老裴的科学世界,主要介绍一些综合性案例。这些案例有的是对本章所讲知识的综合应用,有的是对下一章所做的铺垫,有的穿插介绍Python的其他功能,如GUI开发、Web开发和动画制作等。开设这个专栏的目的是综合应用所学知识解决实际问题,并拓宽读者的视野,提高读者解决实际问题的能力。与正文相比,专栏对理论和程序的细节介绍较少,用到了GUI和Web开发等领域的一些工具,如果读者有疑问,可以和笔者私下交流。
读者对象
本书面向的读者对象较为广泛,主要有以下几类:
* 没有Python基础的科学计算入门人员;
* 从事科学计算研究的人员;
* 从事科学计算工作的工程技术人员;
* Python科学计算爱好者;
* 高等院校理工科相关专业的学生;
* 相关培训机构的学员。
配书资源获取
本书提供以下配书资源:
* 配套教学视频;
* 源代码文件;
* 教学PPT。
这些资源需要读者自行下载。请在华章公司的网站(www.hzbook.com)上搜索到本书,然后单击“资料下载”按钮,即可在本书页面上找到下载链接。
后续计划
起初,笔者计划将本书的写作分两步:第一步介绍科学计算入门知识,第二步结合科学计算库讲解实践。但是因为科学计算的内容较为庞杂,当完成第一步时,书稿篇幅已较大,超过了原来的计划。在与编辑商量后决定将入门部分单独作为一本书,后续再编写《Python最优化算法实战》及《Python科学计算实例详解》两本书作为实践用书。
致谢
本书在出版的过程中得到了湖北工业大学博士启动基金项目(BSQD14042)的资助,在此表示感谢!
感谢湖北工业大学土木建筑与环境学院的领导与同事!他们的支持、帮助和鼓励,让笔者在面对挑战时能勇往直前。
编写这样的一本书对笔者而言是一个巨大的工程,为了不耽搁进度,笔者邀请了李丽华、陈智和肖衡林三位同行一起完成这件事,在此对他们表示感谢!
感谢欧振旭和姚志娟编辑!本书从宏观把握到细节处理都凝聚了他们的大量心血。
感谢家人在长达一年零八个月的写作时间中对笔者的无私奉献和大力支持!
勘误与支持
因本书涉及的内容比较繁杂,加之作者水平所限,书中可能还存在一些疏漏和错误之处,敬请各位读者批评和指正。读者在阅读本书时若有疑问,可以发送电子邮件到
[email protected]或
[email protected]以获得帮助,也可以加入本书QQ群(群号:966908831)和其他读者交流。期待您的反馈意见,您的支持是笔者前进的动力。
裴尧尧
于湖北工业大学