本書將程序設(shè)計和數(shù)學巧妙地結(jié)合起來,從簡單的項目開始,應(yīng)用Python解決高中和大學低年級的數(shù)學問題,比如幾何、概率、統(tǒng)計以及微積分等,為進一步學習更復(fù)雜的數(shù)學內(nèi)容以及Python編程語言打下堅實的基礎(chǔ)。本書也可作為Python初學者的入門讀物,通過學習書中的示例程序和完成那些編程挑戰(zhàn),讀者可以提高自己的編程能力和技巧。
適讀人群 :本書適合廣大的青少年、年輕人學習編程和利用編程學數(shù)學。
本書展示了如何應(yīng)用Python探究高中和大學低年級的數(shù)學主題,比如代數(shù)、統(tǒng)計、幾何、概率以及微積分。你會從簡單的項目學起,比如因式分解、二次方程求解,當你掌握了這些基礎(chǔ)的知識后,就可以處理更復(fù)雜的項目了。
使用本書提供的方法探索數(shù)學和編程,將讓你的整個數(shù)學和計算機科學學習過程變得有趣、實用。
你將從本書學到以下內(nèi)容:
·用統(tǒng)計方法描述數(shù)據(jù),用線圖、條形圖和散點圖可視化數(shù)據(jù)
·用程序探究擲硬幣、擲骰子和其他概率游戲中的集合理論和概率問題
·用Python的符號數(shù)學功能解決代數(shù)問題
·繪制幾何圖形,探索分形,如Barnsley蕨類植物、Sierpiński三角以及Mandelbrot集
·寫程序求解導數(shù)與積分
本書還提供了有創(chuàng)意的編程挑戰(zhàn)以及應(yīng)用實例,可以幫助你把新學到的數(shù)學和編程技巧用于實踐。你可以嘗試解決各種有趣的問題,比如不等式求解、洗牌、畫出子彈飛行過程中重力的影響、探究斐波那契數(shù)列與黃金分割之間的聯(lián)系、利用向板子上投擲100000次“飛鏢”來估計圓的面積等。
無論你是對數(shù)學還是對編程感興趣,本書都會帶給你不一樣的體驗。如果你是一位老師,希望教學生編程,你會發(fā)現(xiàn)Python讓編程變得更容易。如果你是一位學生,當你致力于解決數(shù)學問題時,讓Python來幫助你處理那些煩瑣的計算工作吧!
關(guān)于作者
Amit Saha是一位曾在Red Hat和Sun Microsystems公司工作過的軟件工程師。他創(chuàng)辦并維護著Fedora Scientific,一個為科學和教育用戶服務(wù)的Linux發(fā)行版。他也是Prentice Hall出版社《寫下你的第一個程序》(Write Your First Program)一書的作者。
關(guān)于譯者
許楊毅,現(xiàn)任商湯智慧城市事業(yè)群產(chǎn)品總監(jiān),曾是京東云高級總監(jiān),百度系統(tǒng)部和新浪業(yè)務(wù)運維負責人,UCloud運營平臺部總監(jiān)和產(chǎn)品市場部副總裁,資深的業(yè)務(wù)架構(gòu)師、SRE專家、大數(shù)據(jù)工程和云計算架構(gòu)顧問。曾翻譯《貝葉斯思維:統(tǒng)計建模的Python學習法》一書。
劉旭華,現(xiàn)為中國農(nóng)業(yè)大學理學院應(yīng)用數(shù)學系副教授,北京理工大學博士,美國北卡羅來納大學教堂山分校訪問學者,主要從事數(shù)理統(tǒng)計、數(shù)據(jù)科學、數(shù)學與統(tǒng)計軟件等領(lǐng)域的教學與科研工作,主持和參與多項國家自然科學基金、北京市自然科學基金項目。曾翻譯《R語言統(tǒng)計入門(第2版)》《數(shù)據(jù)科學實戰(zhàn)手冊(第2版)》等圖書。
第 1章 處理數(shù)字1
1.1 基本數(shù)學運算 1
1.2 標簽:給數(shù)字命名 3
1.3 不同類型的數(shù)字 4
1.3.1 分數(shù)的操作 4
1.3.2 復(fù)數(shù) 5
1.4 獲取用戶輸入 6
1.4.1 處理異常和無效輸入 8
1.4.2 將分數(shù)和復(fù)數(shù)作為輸入 9
1.5 編寫一個數(shù)學計算程序 10
1.5.1 計算整數(shù)因子 10
1.5.2 生成乘法表 12
1.5.3 轉(zhuǎn)換測量單位 14
1.5.4 求二次方程的根 16
1.6 本章內(nèi)容小結(jié) 18
1.7 編程挑戰(zhàn) 19
#1:偶數(shù)奇數(shù)自動售貨機 19
#2:增強型乘法表生成器 19
#3:增強型單位轉(zhuǎn)換器 19
#4:分數(shù)計算器 19
#5:為用戶設(shè)置退出選項 20
第 2章 數(shù)據(jù)可視化 23
2.1 了解笛卡兒坐標平面 23
2.2 使用列表和元組 24
2.3 用matplotlib繪圖 26
2.3.1 圖上的標記 28
2.3.2 繪制紐約市的年平均氣溫 29
2.3.3 比較紐約市的月平均氣溫 31
2.3.4 自定義圖形 34
2.3.5 保存圖形 37
2.4 用公式繪圖 37
2.4.1 牛頓萬有引力定律 38
2.4.2 拋物運動 39
2.5 本章內(nèi)容小結(jié) 44
2.6 編程挑戰(zhàn) 44
#1:溫度如何變化 45
#2:探索二次函數(shù)的可視化 45
#3:增強型拋物軌跡比較程序 46
#4:可視化你的支出 46
#5:探索斐波那契序列與黃金比例 48
第3章 數(shù)據(jù)的統(tǒng)計學特征 50
3.1 計算均值 50
3.2 計算中位數(shù) 52
3.3 計算眾數(shù)并創(chuàng)建頻數(shù)表 54
3.3.1 尋找最常見的元素 54
3.3.2 計算眾數(shù) 55
3.3.3 創(chuàng)建頻數(shù)表 57
3.4 測量離散度 59
3.4.1 計算一組數(shù)字的極差 59
3.4.2 計算方差和標準差 60
3.5 計算兩個數(shù)據(jù)集之間的相關(guān)性 62
3.5.1 計算相關(guān)系數(shù) 63
3.5.2 高中成績和大學入學考試成績 64
3.6 散點圖 67
3.7 從文件中讀取數(shù)據(jù) 68
3.7.1 從文本文件中讀取數(shù)據(jù) 69
3.7.2 從CSV文件中讀取數(shù)據(jù) 70
3.8 本章內(nèi)容小結(jié) 73
3.9 編程挑戰(zhàn) 73
#1:更好的相關(guān)系數(shù)計算程序 73
#2:統(tǒng)計計算器 73
#3:用其他CSV數(shù)據(jù)做實驗 73
#4:計算百分位數(shù) 74
#5:創(chuàng)建分組頻數(shù)表 74
第4章 用SymPy包解代數(shù)和符號數(shù)學問題 76
4.1 定義符號和符號運算 76
4.2 使用表達式 78
4.2.1 分解和展開表達式 78
4.2.2 使表達式整齊輸出 79
4.2.3 輸出級數(shù) 80
4.2.4 用值替代符號 81
4.2.5 將字符串轉(zhuǎn)換為數(shù)學表達式 84
4.2.6 表達式乘法 85
4.3 解方程 86
4.3.1 解二次方程 86
4.3.2 用其他變量求解一個變量 87
4.3.3 解線性方程組 88
4.4 用SymPy包繪圖 88
4.4.1 繪制用戶輸入的表達式 91
4.4.2 多函數(shù)圖形繪制 92
4.5 本章內(nèi)容小結(jié) 94
4.6 編程挑戰(zhàn) 94
#1:尋找因子 94
#2:圖形方程求解器 94
#3:級數(shù)求和 94
#4:解單變量不等式 95
第5章 集合與概率 98
5.1 什么是集合? 98
5.1.1 構(gòu)建集合 99
5.1.2 子集、超集與冪集 100
5.1.3 集合運算 102
5.2 概率 106
5.2.1 事件A或事件B發(fā)生的概率 108
5.2.2 事件A與事件B同時發(fā)生的概率 109
5.2.3 生成隨機數(shù) 109
5.2.4 非均勻隨機數(shù) 112
5.3 本章內(nèi)容小結(jié) 114
5.4 編程挑戰(zhàn) 114
#1:使用文氏圖來可視化集合之間的關(guān)系 114
#2:大數(shù)定律 117
#3:擲多少次硬幣會輸光你的錢? 117
#4:洗牌 118
#5:估計一個圓的面積 118
第6章 繪制幾何圖形和分形 120
6.1 使用matplotlib的patches繪制幾何圖形 120
6.1.1 繪制一個圓 122
6.1.2 創(chuàng)建動畫圖形 123
6.1.3 拋物軌跡動畫演示 125
6.2 繪制分形 127
6.2.1 平面上點的變換 127
6.2.2 繪制Barnsley蕨類植物 131
6.3 本章內(nèi)容小結(jié) 134
6.4 編程挑戰(zhàn) 134
#1:在正方形中填充圓形 134
#2:繪制Sierpiński三角 136
#3:探索Hénon函數(shù) 137
#4:繪制Mandelbrot集 138
第7章 解微積分問題 142
7.1 什么是函數(shù)? 142
7.1.1 函數(shù)的定義域和值域 143
7.1.2 常用數(shù)學函數(shù)概述 143
7.2 SymPy中的假設(shè) 144
7.3 計算函數(shù)極限 145
7.3.1 連續(xù)復(fù)利 147
7.3.2 瞬時變化率 147
7.4 函數(shù)求導 148
7.4.1 求導計算器 149
7.4.2 求偏導數(shù) 150
7.5 高階導數(shù)和最大最小值點 150
7.6 用梯度上升法求全局最大值 153
7.6.1 梯度上升法的通用程序 156
7.6.2 關(guān)于初始值的附加說明 157
7.6.3 步長和epsilon的角色 158
7.7 求函數(shù)積分 160
7.8 概率密度函數(shù) 162
7.9 本章內(nèi)容小結(jié) 164
7.10 編程挑戰(zhàn) 164
#1:證明函數(shù)在一點處的連續(xù)性 165
#2:梯度下降法的實現(xiàn) 165
#3:兩條曲線圍成的面積 165
#4:計算曲線的長度 166
后 記 168
下一步可以探索的事情 168
歐拉項目 168
Python文檔 168
參考書 169
獲取幫助 169
附錄A 軟件安裝 170
A.1 Microsoft Windows 171
升級SymPy 172
安裝matplotlib-venn 172
啟動Python Shell 172
A.2 Linux 172
升級SymPy 173
安裝matplotlib-venn 173
啟動Python Shell 173
A.3 Mac OS X 173
升級SymPy 176
安裝matplotlib-venn 176
啟動Python Shell 176
附錄B Python主題概覽 177
B.1 if __name__ == '__main__' 177
B.2 列表推導(List Comprehensions) 178
B.3 字典數(shù)據(jù)結(jié)構(gòu) 180
B.4 多個返回值(Multiple Return Values) 181
B.5 異常處理(Exception Handling) 183
指定多個異常類型 183
else代碼塊 184
B.6 在Python中讀取文件 185
一次性讀取所有行 186
指定一個文件名作為輸入 186
讀取文件時錯誤的處理 186
B.7 代碼重用 189