新書推薦:
《
图解机械工程入门
》
售價:NT$
440.0
《
股市长线法宝(第6版)
》
售價:NT$
640.0
《
中文版SOLIDWORKS 2024机械设计从入门到精通(实战案例版)
》
售價:NT$
450.0
《
纯数学教程
》
售價:NT$
390.0
《
威尔士史:历史与身份的演进
》
售價:NT$
490.0
《
黄金、石油和牛油果:16件商品中的拉丁美洲发展历程
》
售價:NT$
395.0
《
母亲的选择:看不见的移民保姆与女性工作
》
售價:NT$
340.0
《
城邦政治与灵魂政治——柏拉图《理想国》中的政治哲学研究
》
售價:NT$
590.0
|
編輯推薦: |
本书旨在培养程序思维和使用计算技术进行问题求解的意识和能力。通过本书的学习,读者将会掌握除了传统的理论、实验两种方法之外的计算方法,使用计算机和计算技术辅助工作和生活中的问题求解将成为手边技能。本书使用语法简洁紧凑但功能强大的Python作为程序语言,同时弱化了语言的语法细节,从实际案例出发,带领读者逐步深入直到程序的编写和验证,将程序语言和编程仅仅作为问题求解的工具和手段。通过本书的学习,读者不仅能掌握一门程序设计语言,更重要的是能掌握一种思维方式和问题求解的能力。
|
內容簡介: |
本书通过数学和自然科学中的计算例子来讲授计算机程序设计。选择语法简单紧凑且功能强大的Python语言作为编程语言。本书关注于问题的计算求解过程,而不是程序语言细节,书中使用了大量的案例,并专注问题定义、分析和程序求解以及程序正确性验证。通过本书的学习,读者将能使用程序员的方式进行思考,并能写出正确优质的程序。
|
關於作者: |
张春元,国防科技大学计算机学院副院长,博士,教授,博士生导师,计算机体系结构专家,学术带头人,著有《计算机体系结构》等教材。 毛晓光,国防科技大学计算机学院计算机系副主任,博士,教授,博士生导师,著有《离散数学》等教材。
|
目錄:
|
目录
第1章公式的计算1
1.1编程计算: 第一个公式1
1.1.1用程序作计算器1
1.1.2程序和编程2
1.1.3编写程序的工具2
1.1.4第一个Python程序3
1.1.5输入程序文本时的警告3
1.1.6验证结果4
1.1.7变量4
1.1.8变量名4
1.1.9Python中的保留字5
1.1.10注释5
1.1.11指定文字和数字的输出格式6
1.2计算机专业术语9
1.3计算另一个公式: 摄氏度与华氏度的转换12
1.3.1容易被忽略的错误: 整数除法12
1.3.2Python中的对象13
1.3.3避免整数除法14
1.3.4算术运算符和优先级15
1.4求标准数学函数的值15
1.4.1示例: 使用平方根函数15
1.4.2示例: 计算sinh x17
1.4.3初窥舍入误差17
1.5交互式计算18
1.5.1使用Python shell18
1.5.2类型转换19
1.5.3IPython20
1.6复数23
1.6.1Python中的复数运算23
1.6.2Python中的复函数24
1.6.3实数函数与复数函数的统一处理25
1.7符号计算26
1.7.1基本的微分和积分26
1.7.2方程求解27
1.7.3泰勒级数和其他28
1.8本章小结28
1.8.1本章主题28
1.8.2示例: 球的轨迹31
1.8.3关于本书中的排版约定32
1.9习题33
第2章循环与列表41
2.1while循环41
2.1.1最直接的方法41
2.1.2while循环42
2.1.3布尔表达式43
2.1.4示例: 累加求和45
2.2列表46
2.2.1列表的基本操作46
2.2.2for循环48
2.3列表和循环的替代实现50
2.3.1用while循环实现for循环50
2.3.2Range结构50
2.3.3用for循环对列表索引进行迭代51
2.3.4修改列表元素52
2.3.5列表推导式53
2.3.6同时遍历多个列表53
2.4嵌套列表54
2.4.1表格: 行或列构成的列表54
2.4.2打印对象55
2.4.3提取子列表56
2.4.4遍历嵌套列表58
2.5元组60
2.6本章小结61
2.6.1本章主题61
2.6.2示例: 分析列表数据64
2.6.3如何找到更多的Python信息66
2.7习题67
第3章函数与分支74
3.1函数74
3.1.1数学函数作为Python函数74
3.1.2了解程序执行过程75
3.1.3局部变量和全局变量76
3.1.4多参数78
3.1.5使用函数参数还是全局变量79
3.1.6非数学函数79
3.1.7返回多个值80
3.1.8求和81
3.1.9无返回值82
3.1.10关键字参数84
3.1.11文档字符串85
3.1.12函数作为函数的参数87
3.1.13主程序89
3.1.14lambda函数89
3.2分支90
3.2.1ifelse语句90
3.2.2内嵌if语句92
3.3混合循环、分支、函数的生物信息学应用示例93
3.3.1DNA字符串中的字母计数93
3.3.2效率评估96
3.3.3验证实现98
3.4本章小结99
3.4.1本章主题99
3.4.2示例: 数值积分100
3.5习题104
第4章用户输入和错误管理120
4.1提出问题和读入应答120
4.2从命令行读取121
4.2.1在命令行上提供输入121
4.2.2可变数量的命令行参数122
4.2.3关于命令行参数的进一步理解123
4.3将用户文本转换为活跃对象123
4.3.1神奇的eval函数124
4.3.2神奇的exec函数127
4.3.3将字符串表达式转换为函数129
4.4命令行上的参数名值对130
4.4.1argparse模块的基本用法130
4.4.2将数学表达式作为值131
4.5从文件中读取数据133
4.5.1逐行读取文件134
4.5.2其他读取文件的方法135
4.5.3读取文本和数字的混合文件137
4.6将数据写入文件138
4.6.1示例: 将表格写入文件139
4.6.2标准输入和输出作为文件对象140
4.6.3文件到底是什么142
4.7错误处理144
4.7.1异常处理145
4.7.2产生异常148
4.8图形化的用户界面150
4.9制作模块151
4.9.1示例: 银行存款利息152
4.9.2将函数收集在模块文件中153
4.9.3测试块153
4.9.4验证模块代码155
4.9.5获取输入数据156
4.9.6模块中的文档字符串158
4.9.7使用模块158
4.9.8发布模块161
4.9.9使软件在互联网上可用161
4.10Python 2和Python 3的代码162
4.10.1Python 2和Python 3的基本差异162
4.10.2将Python 2代码转换为Python 3代码163
4.11本章小结165
4.11.1本章主题165
4.11.2示例: 二分查找168
4.12习题175
第5章数组计算和曲线绘图182
5.1向量182
5.1.1向量的概念182
5.1.2向量的数学运算183
5.1.3向量算术和向量函数184
5.2Python程序中的数组185
5.2.1用列表来收集函数数据185
5.2.2Numerical Python的数组基础186
5.2.3计算坐标和函数值187
5.2.4向量化188
5.3绘制函数曲线190
5.3.1用Matplotlib实现MATLAB风格的绘图190
5.3.2Matplotlib和Pyplot前缀194
5.3.3SciTools和Easyviz195
5.3.4制作动画200
5.3.5制作视频204
5.3.6用文本字符绘制曲线205
5.4绘制高难度函数206
5.4.1分段定义函数206
5.4.2快速变化函数208
5.5更高级的函数向量化209
5.5.1StringFunction对象向量化209
5.5.2Heaviside函数向量化210
5.5.3帽状函数向量化213
5.6Numerical Python数组深入剖析215
5.6.1复制数组215
5.6.2原地运算216
5.6.3数组分配217
5.6.4广义索引217
5.6.5数组类型检测218
5.6.6数组生成的紧凑语法219
5.6.7形状操作219
5.7数组的高性能计算219
5.7.1标量实现方式220
5.7.2向量化实现方式221
5.7.3节省内存的实现方式221
5.7.4内存使用分析222
5.7.5CPU时间分析223
5.8高维数组224
5.8.1矩阵与数组224
5.8.2Python的二维数值数组225
5.8.3数组计算228
5.8.4矩阵对象228
5.9一些常见的线性代数运算229
5.9.1逆、行列式和特征值229
5.9.2乘积230
5.9.3范数230
5.9.4和与极值230
5.9.5索引232
5.9.6转置和上/下三角部分232
5.9.7求解线性方程组233
5.9.8矩阵的行列操作233
5.9.9计算矩阵的秩234
5.9.10符号化线性代数235
5.10绘制标量和向量场237
5.10.1安装237
5.10.2曲面绘图238
5.10.3参数化曲线239
5.10.4等高线239
5.10.5梯度向量场240
5.11Matplotlib240
5.11.1曲面绘图241
5.11.2等高线绘图241
5.11.3向量场绘图243
5.12Mayavi243
5.12.1曲面绘图244
5.12.2等高线绘图245
5.12.3向量场绘图247
5.12.4一个3D标量场及其梯度场247
5.12.5动画249
5.13本章小结249
5.13.1本章主题249
5.13.2示例: 动画函数251
5.14习题254
第6章字典与字符串269
6.1字典269
6.1.1创建字典269
6.1.2字典操作270
6.1.3示例: 多项式作为字典271
6.1.4具有默认值和排序的字典273
6.1.5示例: 在字典中存储文件数据276
6.1.6示例: 在嵌套字典中存储文件数据277
6.1.7示例: 读取和绘制在特定日期记录的数据281
6.2字符串285
6.2.1字符串常见操作285
6.2.2示例: 读取数值对289
6.2.3示例: 读取坐标292
6.3从网页读取数据294
6.3.1关于网页294
6.3.2如何编程访问网页295
6.3.3示例: 读取纯文本文件296
6.3.4示例: 从HTML提取数据298
6.3.5处理非英文文本298
6.4读写电子表格文件301
6.4.1CSV文件301
6.4.2读取CSV文件302
6.4.3处理电子表格数据303
6.4.4写入CSV文件303
6.4.5用Numerical Python数组表示数值单元格304
6.4.6使用更高级的Numerical Python功能305
6.5分析DNA的示例306
6.5.1计算频率306
6.5.2分析频率矩阵313
6.5.3寻找碱基频率315
6.5.4将基因转换成蛋白质318
6.5.5有的人可以喝牛奶,而有的人则不能323
6.6编写兼容Python 2和Python 3的代码324
6.6.1Python 2和Python 3之间更多的差异324
6.6.2将Python 2代码转换成Python 3代码325
6.7本章小结325
6.7.1本章主题325
6.7.2示例: 文件数据库328
6.8习题331
第7章Python类简介337
7.1简单函数类337
7.1.1挑战: 带参数的函数337
7.1.2将函数表示为类339
7.1.3self 变量343
7.1.4另一个函数类的例子344
7.1.5另一种函数类的实现345
7.1.6无构造方法的类347
7.1.7闭包349
7.2更多关于类的例子350
7.2.1银行账户350
7.2.2电话簿352
7.2.3圆354
7.3特殊方法355
7.3.1call特殊方法355
7.3.2示例: Automagic差分356
7.3.3示例: Automagic积分360
7.3.4将实例转换为字符串362
7.3.5使用特殊方法的电话簿363
7.3.6支持加法的对象364
7.3.7示例: 多项式的类364
7.3.8多项式的精美打印367
7.3.9算术运算和其他特殊方法369
7.3.10字符串转换的特殊方法369
7.4示例: 平面中向量的类371
7.4.1对向量的一些数学运算371
7.4.2实现371
7.4.3用法373
7.5示例: 复数类374
7.5.1实现374
7.5.2非法操作376
7.5.3复数与实数混合运算376
7.5.4动态类型、静态类型、强类型、弱类型和Duck类型377
7.5.5应用于右操作数的特殊方法378
7.5.6检查实例379
7.6静态方法和属性380
7.7本章小结381
7.7.1本章主题381
7.7.2示例: 区间运算383
7.8习题387
第8章随机数和简单的游戏401
8.1生成随机数401
8.1.1种子401
8.1.2均匀分布的随机数402
8.1.3可视化分布情况402
8.1.4随机数生成的向量化403
8.1.5计算平均值和标准差404
8.1.6高斯或正态分布406
8.2生成整数407
8.2.1随机整数函数407
8.2.2示例: 投掷骰子408
8.2.3根据列表生成随机数410
8.2.4示例: 从整副牌中选牌411
8.2.5示例: 牌的类实现413
8.3计算概率416
8.3.1蒙特卡罗模拟的原理416
8.3.2示例: 投掷骰子416
8.3.3示例: 从帽子中取球419
8.3.4基因的随机变异421
8.3.5示例: 限制人口增长的政策426
8.4简单游戏428
8.4.1猜数字428
8.4.2掷两个骰子429
8.5蒙特卡罗积分432
8.5.1蒙特卡罗积分的推导432
8.5.2标准蒙特卡罗积分的实现433
8.5.3通过随机点来计算区域面积437
8.6单维度的随机游走438
8.6.1基本实现438
8.6.2可视化439
8.6.3以差分方程表示随机游走439
8.6.4计算粒子位置的统计量440
8.6.5向量化实现440
8.7两维度的随机游走442
8.7.1基本实现442
8.7.2向量化实现443
8.8本章小结444
8.8.1本章主题444
8.8.2示例: 随机增长446
8.9习题451
第9章面向对象编程463
9.1继承与类层次 463
9.1.1Line类463
9.1.2初试Parabola类464
9.1.3使用继承的Parabola类464
9.1.4检查类之类型466
9.1.5属性与继承: hasa与isa关系467
9.1.6将超类作为接口468
9.2数值微分类470
9.2.1计算微分的类470
9.2.2验证472
9.2.3构建灵活的主程序474
9.2.4扩展475
9.2.5基于函数的实现478
9.2.6基于函数式编程的实现478
9.2.7由单个类实现的数值微分方法479
9.3数值积分类481
9.3.1数值积分方法481
9.3.2用于积分的类481
9.3.3验证485
9.3.4使用类层次486
9.3.5关于面向对象编程488
9.4用于绘图的类489
9.4.1使用对象集合489
9.4.2几何对象的类的例子497
9.4.3通过递归增强功能501
9.4.4对图形进行缩放、平移和旋转504
9.5用于DNA分析的类506
9.5.1表示区域的类506
9.5.2表示Gene的类507
9.5.3子类512
9.6本章小结513
9.6.1本章主题513
9.6.2示例: 输入数据读取器514
9.7习题519
附录A数列和差分方程526
A.1用差分方程构建数学模型526
A.1.1利息计算527
A.1.2用差分方程处理阶乘问题529
A.1.3斐波那契数529
A.1.4生物群体的增长531
A.1.5逻辑增长531
A.1.6偿还贷款532
A.1.7使用差分方程来求积分533
A.1.8使用差分方程计算泰勒级数535
A.1.9投资与生活536
A.1.10牛顿迭代法537
A.1.11反函数539
A.2对声音编程541
A.2.1将声音写入文件542
A.2.2从文件读取声音542
A.2.3播放多个单音543
A.2.4数列产生的音乐544
A.3习题546
附录B离散微积分简介555
B.1离散函数555
B.1.1正弦函数555
B.1.2插值557
B.1.3求近似值557
B.1.4概括558
B.2用有限差分来实现微分559
B.2.1正弦函数微分559
B.2.2网格上的差分560
B.2.3归纳561
B.3用求和实现积分562
B.3.1子区间划分563
B.3.2子区间积分564
B.3.3子区间求和564
B.3.4归纳565
B.4泰勒级数567
B.4.1函数在某一点附近的近似值567
B.4.2指数函数近似567
B.4.3更高精度的展开567
B.4.4近似的精度569
B.4.5再论导数571
B.4.6更准确的差分近似572
B.4.7二阶导数574
B.5习题576
附录C微分方程计算简介579
C.1入门案例579
C.2指数增长581
C.3逻辑增长585
C.4单摆585
C.5疾病传播模型588
C.6习题589
附录D一个完整的微分方程工程591
D.1问题描述: 物理中的运动和力591
D.1.1物理问题591
D.1.2求解算法592
D.1.3数学模型推导592
D.1.4算法推导594
D.2程序编写及测试594
D.2.1算法实现594
D.2.2回调函数597
D.2.3制作模块599
D.2.4验证600
D.3可视化602
D.3.1同步计算及绘图602
D.3.2若干应用604
D.3.3关于t的选取606
D.3.4在子图中对若干量进行
比较606
D.3.5比较近似解与精确解607
D.3.6误差随t减小而变化的情况608
D.4习题610
附录E编程求解微分方程612
E.1标量常微分方程612
E.1.1右手边函数示例613
E.1.2前向欧拉方法613
E.1.3函数实现614
E.1.4验证实现615
E.1.5从离散解到连续解616
E.1.6转换数值方法617
E.1.7类实现方式617
E.1.8逻辑增长的函数方法实现621
E.1.9逻辑增长的类方法实现622
E.2常微分方程组624
E.2.1数学问题624
E.2.2常微分方程组示例625
E.2.3函数实现626
E.2.4类实现628
E.3ODESolver类层次结构629
E.3.1数值方法629
E.3.2求解器层次结构的构造630
E.3.3后向欧拉方法633
E.3.4验证635
E.3.5示例: 指数衰减636
E.3.6示例: 具有问题类和求解器类的Logistic方程638
E.3.7示例: 振荡系统645
E.3.8应用: 球的轨迹647
E.3.9ODESolver的进一步开发649
E.4习题649
附录F调试672
F.1使用调试器672
F.2如何调试675
F.2.1程序编写和调试的方法675
F.2.2应用实例677
F.2.3从代码分析器获取帮助688
附录G提高Python运行效率的技术690
G.1用Python编写蒙特卡罗模拟的代码690
G.1.1计算问题690
G.1.2Python实现的标量版本690
G.1.3Python实现的向量化版本691
G.2将标量Python代码移植到
Cython692
G.2.1最直接的Cython实现692
G.2.2改良的Cython实现695
G.3将PythonCython代码移植到
C代码中697
G.3.1编写C程序697
G.3.2通过f2py将循环移植到C代码中697
G.3.3通过Cython将循环移植到C代码中699
G.3.4效率比较699
附录H技术主题701
H.1获取Python701
H.1.1需要的软件701
H.1.2在MacOS X和Windows平台上安装软件702
H.1.3Anaconda与Spyder702
H.1.4VMWare Fusion虚拟机703
H.1.5Windows双重启动705
H.1.6Vagrant虚拟机705
H.2如何编写和运行Python程序706
H.2.1文本编辑器706
H.2.2终端窗口707
H.3Web服务: SageMathCloud与Wakari 708
H.3.1SageMathCloud简介708
H.3.2Wakari简介708
H.3.3安装自己的Python包708
H.4IPython Notebook的使用709
H.4.1启动IPython Notebook709
H.4.2混编文本、数学、代码和图形709
H.5运行Python程序的不同方式 710
H.5.1在IPython中运行Python程序711
H.5.2在UNIX中运行Python程序711
H.5.3在Windows中运行Python程序712
H.5.4在MacOS X中运行Python程序713
H.5.5制作完整的独立可执行文件713
H.6在Python中执行操作系统命令713
H.7可变数量的函数参数716
H.7.1可变数量的位置参数717
H.7.2可变数量的关键字参数719
H.8评估程序执行效率721
H.8.1测量时间721
H.8.2分析Python程序性能722
H.9软件测试723
H.9.1测试函数需要遵循的约定724
H.9.2编写测试函数及预先计算数据724
H.9.3编写测试函数以及获得精确数值解725
H.9.4测试函数鲁棒性726
H.9.5自动执行测试728
参考文献730s
|
內容試閱:
|
计算机程序设计就是编程。本书以数学和自然科学为背景,使用Python作为编程语言讲授编程。Python语言兼有强大的问题表现力及非常干净、简单和紧凑的语法;Python容易学习,非常适合作为编程的入门语言;Python与MATLAB很像,做数学计算很方便;把Python与科学计算常用的其他编程语言如FORTRAN、C和C结合起来也很容易。
本书中的例子将编程与数学、物理学、生物学和金融应用结合起来。其中和数学内容关联密切的部分,假设读者在高中阶段已经掌握了一元微积分。同时,学习大学微积分课程肯定会对本书的学习有所帮助,最好能够包含经典微积分和微积分数值计算两个方面的内容。另外,良好的高中物理学知识背景,可以加深读者对本书中许多例子的理解。
许多编程入门书籍的主要内容就是简单明了地列出编程语言的功能。然而,学习编程其实是学习程序员如何思考。本书主要侧重于思维过程训练: 因为编程是问题求解的技术,所以本书主要篇幅用在编程案例研究上,先把要求解的问题说清楚,然后研究如何写出求解的代码。新的句法结构和编程风格所谓理论也是通过实例引入的。本书特别关注了程序的校验和排错,这是数学计算软件非常麻烦的问题,因为其中往往混杂了不可避免的数值逼近误差和编程错误。
通过学习本书中的许多例子,作者希望读者能学会如何正确思考,从而以更快、更可靠的方式编写程序。记住,没有人可以只通过阅读来学会编程必须亲自做大量解决问题的习题。因此,本书包括各种习题类型: 现有例题的修改、全新的习题或调试给定的程序。
为配合本书的学习,作者建议使用Python 2.7。第5章到第9章以及附录A到附录E,需要用到Python的NumPy和Matplotlib两个包,最好还有IPython和SciTools两个包,附录G需要用Cython。本书中要用的其他软件包是nose和SymPy。H.1节提供了有关如何访问Python和相关软件包的更多信息。
本书的网页地址是http:hplgit.github.comsciproprimer,其中包含书上所有例子的程序以及在各种平台上安装软件的信息。
Python版本2还是3?
Python程序员中的一个常见问题是在Python 2或Python 3之间进行选择,编写本书时就是在2.7版本和3.5版本之间进行选择。通常建议使用Python 3,因为这是将来要进一步开发的版本。问题是很多有用的Python数学软件现在还没有移植到Python 3上。因此,Python 2.7是最受欢迎的用于科学计算的版本,所以本书选用了2.7版本。
对于用Python编程的软件开发人员,如果编写的程序有在两个版本上都能运行的需求,广泛使用的策略是开发Python 2和Python 3的通用版本。很容易首先编写一个面向Python 2.7的程序,然后通过运行futurize实现程序自动转换。在4.10节通过一个简单实例演示了这个过程。
本书的Python 2.7代码完全采用Python 3可移植的句法结构,使代码尽可能接近等效的Python 3代码。任何时候都可以运行futurize来查看这些Python 2.7版代码与对应的Python 3.5版本之间的差异。
本书主要内容
第1章是数学公式的计算,通过实例引入变量、对象、模块和文本格式。第2章介绍使用while和for循环来编程,引入列表和嵌套列表。第3章讨论编程中的两个基本概念: 函数和ifelse结构。
第4章研究程序如何输入数据并处理输入中的错误。第5章介绍数组和数组计算包括向量化,如何使用数组绘制y=fx曲线和制作曲线动画。前5章中的许多例子都是密切相关的。通常,第1章中的公式用于在第2章中生成数字表格,然后将公式封装在第3章的函数中。在第4章中从命令行获取函数的输入,并检查输入的有效性。第5章把公式显示为图形。学完第1章到第5章,读者应该已经有了足够的解决数学问题的编程知识,这就是所谓MATLAB风格编程。
第6章解释如何使用字典和字符串,特别是处理文件中的文本数据,将提取的信息存储在恰当的数据结构中。第7章介绍类编程,包括用于数学计算的用户定义类型重载运算符。第8章通过游戏应用和随机游走讨论随机数和统计计算。第9章的主题是面向对象编程,主要是类层次结构和继承,核心案例是构建一个工具包,用于数值微分、积分和图形学计算。
附录A通过数列和差分方程引入数学建模。附录A中只使用了第1章到第5章的编程概念,目的是巩固编程基础知识并将之用于数学问题求解。通过差分方程这种简单的方法引入了一些重要的数学专题: 牛顿迭代法、泰勒级数、反函数和动态系统。
附录B涉及函数的网格化离散化表示、数值微分和数值积分。附录C中提供常微分方程数值计算的入门知识。附录D介绍如何完整地处理一个物理项目,包括使用数学建模、数值方法和第1章到第5章的基本编程元素。该项目是计算科学中问题求解的一个好实例,需要综合运用物理学、数学、数值计算和计算机科学的知识。
附录E的主题是编写解常微分方程的软件,同时使用了基于函数和面向对象两种编程方法。附录E汇集了本书中很多物理应用和微分方程的内容。
科学计算基础编程Python版(第五版)
附录F专门讨论编程调试的技巧,调试就是广义的问题求解。附录G中Cython的例子是通过将代码迁移到C来加速Python中的数值计算。最后的附录H处理各种高级技术主题。
虽然本书的大部分例子和习题都很短,但是许多习题是相关的,并且一起形成更大的作业。例如,傅里叶级数习题3.21、习题4.21、习题4.22、习题5.41、习题5.42、数值积分习题3.11、习题3.12、习题5.49、习题5.50、习题A.12、泰勒级数习题3.37、习题5.32、习题5.39、习题A.14、习题A.15、习题7.23、分段常函数习题3.29~习题3.33、习题5.34、习题5.47、习题5.48、习题7.19~习题7.21、反函数习题E.17~习题E.20、物体下落习题E.8、习题E.9、习题E.38、习题E.39、人口增长的振荡习题A.19、习题A.21、习题A.22、习题A.23、流行病建模习题E.41~习题E.48、优化和财务习题A.24、习题8.42、习题8.43、统计和概率习题4.24、习题4.25、习题8.23、习题8.24、风险游戏习题8.8~习题8.14、随机漫步和统计物理习题8.32~习题8.40、噪声数据分析习题8.44~习题8.46、数值方法习题5.25~习题5.27、习题7.8、习题7.9、习题A.9、习题7.22、习题9.15~习题9.17、习题E.30~习题E.37、制作微积分计算器习题7.34、习题9.18、习题9.19以及创建一个模拟振动工程系统工具包习题E.50~习题E55。
第1~9章和附录A~E从2007年开始成为奥斯陆大学本科生第一学期科学编程课程INF1100,10学分的核心。
第5版与第4版的变化
第4版有实质性变化,第5版主要是调整巩固。改正了一些印刷错误,文字和习题也得到了改善。重点突出单元测试和测试功能,特别是在习题中比以前版本更强化。通过SymPy的支持,更大地扩展了符号计算的使用,并在全书中与数值计算进行了整合。现在所有的类都是新样式的,不再是以前版本的旧式经典的样式。Matplotlib上的示例不再使用pylab模块,但为了减小在Python和MATLAB之间转换的难度,pyplot模块和MATLAB风格的语法还继续使用。闭包的概念比在早期版本中更加明晰见第5版7.1.7节,闭包是一种快捷的流行结构,在Python的科学计算社区里广泛使用。第5版还讨论了Python 2和Python 3之间的差异,演示如何使用future模块编写在两个版本下均可运行的代码。
第5版中最重要的新内容在第5章的最后部分,关于高性能计算、线性代数和标量向量场的可视化。虽然这些内容在本书的其他部分没有使用,还是有许多读者为了以后的工作需要学习这些基本方法,包括从单个变量到两个变量或从向量到矩阵,或者在解决更高级问题时使用本书作为编程参考。第5章中的这些新内容是和yvind Ryan博士联合编写的。
致谢
本书源于我和同事Aslak Tveito有启发的讨论,他编写了本书的附录B和附录C。本书的立项和大学相关课程的建设都源于Aslak在2007年的热情投入,非常感谢Aslak对本书的持续支持,也给我注入了持续的动力。早期的另一个重要贡献者是Ilmar Wilbers,他在协助本书立项和建立奥斯陆大学INF1100课程上做了很多工作。我觉得如果没有Ilmar解决无数的技术问题,本书第1版可能永远不会付梓。特别感谢Johannes H. Ring,当初为了应付Python麻烦不断的绘图功能,Johannes开发了Easyviz图形工具,后来他又维护了与本书相关的软件。
Loyce Adams教授通读了全书,做了所有习题,发现了一些错误,并提出了许多改进建议,非常感谢她的贡献。Helmut Bch最近非常深入仔细地通读了第1章到第6章,测试了软件,发现了一些印刷错误,并提出了很多批评建议,使本书有了很多重大改进,非常感谢他在第4版筹备期间付出的努力和热情。第5版从Hakki Eres对第4版的仔细检查中获益良多,他发现了一些印刷错误和代码错误,其中一些错误甚至回溯到了第1版。
特别感谢Geir Kjetil Sandve,他是3.3节、6.5节、8.3.4节和9.5节中生物信息学计算示例的主要作者,此外还有Sveinung Gundersen、Ksenia Khelik、Halfdan Rydbeck和Kai Trengereid的贡献。感激yvind Ryan在第5章中完成的有关线性代数和标量向量场可视化的工作。
有几位同事对文字、习题和相关的软件的改进提出了建议。尤其要提到Ingrid Eide、Stle Zerener Haugnss、Kristian Hiorth、Timothy Keough、Arve Knudsen、Espen Kristensen、Tobias Vidarssnn Langhoff、Martin Vonheim Larsen、Kine Veronica Lund、Solveig Masvie、Hkon Mller、Rebekka Mrken、Mathias Nedreb、Marit Sandstad、Helene Norheim Semmerud、Lars Storjord、Fredrik Heffer Valdmanis和Torkil Vederhus。非常感谢Hakon Adler,他仔细阅读了早期的各种版本的手稿。非常感谢Fred Espen Bent教授、rnulf Borgan教授、Geir Dahl教授、Knut Mrken教授和Geir Pedersen教授,他们从各自的应用领域设计了一组精彩的习题。还要感谢好友Jan Olav Langseth给本书设计的封面。
奥斯陆大学有一个非常全面而成功的教学改革计划科学教育中的计算Computing in Science Education,CSE,本书及相关课程是其中的一部分。教学改革计划的目标是把本科所有使用数学模型的自然科学课程和计算机编程整合起来。本书为后续课程中应用计算机进行问题求解奠定了技术基础。与这些在后面推动这一改革的同事在一起工作是非常鼓舞人心的,尤其是Morten HjorthJensen教授、Anders MaltheSrenssen教授、Knut Mrken教授和Arnt Inge Vistnes教授。
非常感谢Springer出版系统,特别是Martin Peters、ThanhHa Le Thi、Ruth Allewelt、Peggy GlauchRuge、Nadja Kroke、Thomas Schmidt、Patrick Waltemate、Donatas Akmanavicius和Yvonne Schlatter多年来出色的协助,确保了这本书所有版本的顺利和快速出版。
奥斯陆
2016年2月
|
|