《科學計算基礎編程——Python版 (第五版)》是2020年清華大學出版社出版的圖書。
基本介紹
- 書名:科學計算基礎編程——Python版 (第五版)
- 作者:(挪) 漢斯.佩特.蘭坦根(Hans Petter Langtangen)
- 譯者:張春元 、劉萬偉、毛曉光、陳立前 、周會平、李暾
- 出版社:清華大學出版社
- 出版時間:2020年7月1日
- 定價:128 元
- ISBN:9787302549437
- 印次:1-2
- 印刷日期:2020.08.20
內容簡介,目錄,作者介紹,
內容簡介
本書通過數學和自然科學中的計算例子來講授電腦程式設計。選擇語法簡單緊湊且功能強大的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
科學計算基礎編程——Python版(第五版)
目錄
第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將Python/Cython代碼移植到
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製作完整的獨立可執行
檔案713H.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
參考文獻730
作者介紹
張春元,國防科技大學計算機學院副院長,博士,教授,博士生導師,計算機體系結構專家,學術帶頭人,著有《計算機體系結構》等教材。 毛曉光,國防科技大學計算機學院計算機系副主任,博士,教授,博士生導師,著有《離散數學》等教材。