用Python物理建模的第一本書終於來啦

點擊標題下「異步圖書」可快速關注html

今天這一本圖書,是全網第一本Python物理建模書。
python

他是一本用Python解決科學問題的實踐指南!web

他就是《Python物理建模初學者指南》算法

他有多牛,衆多世界知名大學教授推薦閱讀!編程

做者更像是耐心的潛水教練,手把手地從零開始教授編程新手,幫助他們克服學習中的障礙,迴避各類陷阱。在閱讀完本書後,讀者應該能具備專業人士般的自信,駕馭Python解決數據分析、建模和可視化中的科學問題。本書適於做爲任何場景下科學編程的教程。固然我也會使用它。 數組

——Garnet Kin-Lic Chan,普林斯頓大學 bash

做者以友好和簡明的方式編寫了這本使用Python進行科學編程的入門指南,但內容卻出人意料的全面。本書不只適用於計算科學家,也適用於那些須要繪製並分析實驗數據、求解方程數值或學習編程基礎的讀者。即使是有編程經驗的讀者,也會對書中那些激發思考的練習和指南產生興趣,從而更大程度地發揮Python的做用。 數據結構

——Vinothan N. Moanharan,哈佛大學 app

對於剛剛起步作科學計算的物理研究人員而言,這是一本量身定製的Python教程。與我曾讀過的其餘編程類圖書相比,我從這本書中更能感覺到做者是誠心誠意地指望解決讀者可能會遇到的困惑和問題。本書對讀者給出了細緻有效的指導,引導讀者實現形式化計算問題並求解的目標。 異步

——Justin Bois,加州理工學院

做者針對如何使用Python進行科學編程而編寫了這本引人入勝的指南,內容細緻透徹,側重於實用的問題。書中所使用的例子是經深思熟慮的,取自於平常的科研實踐,展現了每一個計算科學家工具箱中應具有的核心概念和技術。本書內容構思精妙,有助於學生邁出最重要的一步,即朝着正確的方向開始編程。

——Cornelis Storm,埃因霍溫理工大學

本書全面覆蓋了Python編程語言的基礎知識,側重於物理建模。對於本科生和之前從未接觸過編程的人而言,本書提供了很是有用的Python入門。

——Želijko Ivezič,華盛頓大學

本書爲那些幾乎沒有編程經驗的人提供了很是優秀的入門指南。兩位做者採用一種清晰精確的方式,覆蓋了使用Python作科學計算的全部重要方面。本書經過解釋如何最好地執行科學計算中特定的通用任務,爲讀者提供了學習指南。書中的例子和練習也是通過精心選取的。

——Quentin Caudron,普林斯頓大學

若是你符合以下特色,必定要讀它!

Python 初學者

想要用Python 進行科學計算和物理建模的讀者。

閱讀前須知,本書提供免費的示例代碼

Python是一種迅速獲得科學界普遍承認的計算機編程語言。本書的目的在於爲Python學習者提供幫助,使他們能夠經過自學掌握足以開展物理建模工做的編程技能,包括設置開源Python的編程環境,以及使用Python完成一些常見的科學運算任務,例如數據的導入和導出、數據的可視化、數值分析和模擬等。本書無需讀者具有任何的編程經驗。

本書側重於基礎性內容,並介紹了一些普遍適用的技術,包括:

● Python編程基礎與腳本;

● 數值數組;

● 二維和三維繪圖;

● 蒙特卡洛模擬;

● 數值方法,包括常微分方程求解;

● 圖像處理;

● 動畫。

爲了清晰地闡述新的知識點,本書提供了豐富的代碼例子和練習,並給出了相應的解答。本書的示例代碼和數據集,能夠從www.epubit.com.cn下載。

爲何要自學Python?爲何要用本書的方法自學?

學習計算機編程可改變你的思惟。一開始你會感到寸步難行,三三兩兩地隨處收集編程技巧,可是假以時日,你會發現本身能讓計算機近乎無所不能。你能夠添加常被物理學教授說成是可忽略不計的摩擦力和空氣阻力的影響,你能夠模擬出本身的捕食者—獵物生態去研究種羣模型,你能夠建立出本身的分形,你能夠發現股票市場中的關聯關係,不勝枚舉。

要與計算機進行交流,你必須先學會一門計算機能夠理解的語言。Python就是一個優秀的選擇,它易於入門,結構很是天然,至少相比於其餘的計算機語言是這樣的。不久,你將發現大量時間沒必要再花費在如何向計算機解釋你的計算方法,而是用於思考如何解決問題。不管你是出於什麼動機學習Python,你都會想到這樣的一個問題:是否確有必要費力讀完本書中的全部內容。請相信咱們!做爲工做在一線的科學家,爲了使讀者能開始獨自探索和學習,咱們用自身經驗準備好了儘可能高效的方法。若是你能按本書推薦的順序花費一些時間嘗試書中推薦的全部內容,從長遠看會節省學習Python的時間。在一開始寫書時,咱們就去除了全部讀者不須要的內容,書中保留下來的是一組基本知識和技能。總有一天,你會發現這些內容的確有用。

如何使用本書?

對於如何使用本書自學Python,下面給出一些建議:

那好,咱們如今開始吧!

本書目錄

第1 章 Python入門 1

1.1 算法與算法思想 1

1.1.1 算法思想 2

1.1.2 狀態 3

1.1.3 「a=a+1」是什麼意思 4

1.1.4 符號和數字的對比 5

1.2 啓動Python 6

1.2.1 IPython 控制檯 7

1.2.2 錯誤信息 13

1.2.3 如何獲取幫助 13

1.2.4 好的作法:記錄日誌 15

1.3 Python 模塊 15

1.3.1 import 15

1.3.2 from...import 16

1.3.3 NumPy和PyPlot模塊 17

1.4 Python 表達式 18

1.4.1 數字 18

1.4.2 算術操做和預約義函數 19

1.4.3 好的作法:變量命名 21

1.4.4 更多的函數相關信息 22

第2 章 數據結構與程序控制 24

2.1 對象和方法 24

2.2 列表、元組和數組 27

2.2.1 建立列表和元組 28

2.2.2 NumPy數組 28

2.2.3 爲數組填充值 30

2.2.4 數組的鏈接 32

2.2.5 訪問數組元素 33

2.2.6 數組和賦值 34

2.2.7 數組切片 35

2.2.8 數組展平 37

2.2.9 更改數組形狀 38

2.2.10 以列表和數組爲索引 38

2.3 字符串 39

2.3.1 使用format 方法格式化字符串 41

2.3.2 使用「%」格式化字符串 43

2.4 循環 43

2.4.1 for 循環 44

2.4.2 while 循環 46

2.4.3 循環長時間運行 46

2.4.4 死循環 47

2.5 數組操做 47

2.5.1 矢量化數學 48

2.5.2 數組化簡 50

2.6 腳本 51

2.6.1 Editor 窗格 52

2.6.2 其餘編輯器 53

2.6.3 調試的第一步 54

2.6.4 好的作法:作註釋 57

2.6.5 好的作法:使用命名參數 61

2.6.6 好的作法:注意單位問題 62

2.7 或有行爲:分支 63

2.7.1 if 語句 64

2.7.2 真值的處理 65

2.8 嵌套 65

第3 章 數據輸入、結果輸出 67

3.1 導入數據 68

3.1.1 獲取數據 68

3.1.2 將數據導入Python 70

3.2 導出數據 73

3.2.1 腳本 73

3.2.2 數據文件 74

3.3 數據可視化 77

3.3.1 plot 及相關命令 77

3.3.2 繪圖的調整與裝飾 81

3.3.3 偏差條 83

3.3.4 3D圖形 84

3.3.5 多重繪圖 85

3.3.6 子繪圖 87

3.3.7 保存圖形 87

3.3.8 在其餘應用中使用圖形 88

第4 章 首次上機實驗 90

4.1 艾滋病病毒載量模型 90

4.1.1 探究模型 91

4.1.2 匹配實驗數據 92

4.2 細菌實驗 93

4.2.1 探究模型 93

4.2.2 匹配實驗數據 94

第5 章 Python進階 96

5.1 自定義函數 97

5.1.1 定義Python函數 97

5.1.2 更新函數 100

5.1.3 參數、關鍵字和缺省值 101

5.1.4 返回值 102

5.1.5 函數式編程 103

5.2 隨機數和模擬 105

5.2.1 模擬拋硬幣 105

5.2.2 生成軌跡線 106

5.3 直方圖和條形圖 107

5.4 等勢線繪圖和曲面 109

5.4.1 生成繪圖點網格 109

5.4.2 等勢線繪圖 110

5.4.3 曲面繪圖 111

5.5 非線性方程的數學求解 111

5.5.1 通常實函數 112

5.5.2 多項式的複數根 113

5.6 求解線性等式 114

5.7 數值積分 115

5.7.1 對預約義函數積分 116

5.7.2 對自定義函數積分 117

5.7.3 對震盪函數積分 117

5.7.4 參數依賴性 118

5.8 微分方程的數值解 118

5.8.1 問題重構 119

5.8.2 ODE求解 120

5.8.3 參數依賴 122

5.9 向量場和流線圖 123

5.9.1 向量場 123

5.9.2 流型 124

第6 章 第二次上機實驗 126

6.1 生成和繪製軌跡 126

6.2 繪製位移分佈 127

6.3 少見事件 129

6.3.1 泊松分佈 129

6.3.2 等待時間 131

第7 章 更多的技術 133

7.1 圖像處理 133

7.1.1 圖像和數字數組 134

7.1.2 操做圖像 135

7.2 動畫 135

7.2.1 建立動畫 136

7.2.2 保存動畫 137

7.3 分析計算 141

7.3.1 SymPy軟件包 141

7.3.2 Wolfram Alpha 142

第8 章 第三次上機實驗 145

8.1 卷積 146

8.1.1 Python 的圖像處理工具 146

8.1.2 圖像平均 148

8.1.3 使用高斯濾波器作平滑 149

8.2 圖像去噪 149

8.3 特徵強調 150

繼續努力 152

附錄A 安裝Python 154

A.1 安裝Python 和Spyder 154

A.1.1 圖形界面安裝 155

A.1.2 命令行安裝 156

A.2 設置Spyder 159

A.2.1 工做目錄 159

A.2.2 交互圖形 159

A.2.3 腳本模塊 159

A.2.4 重啓 160

A.3 加速 160

A.4 保持版本最新 161

A.5 安裝FFmpeg 161

附錄B 錯誤和錯誤消息 164

B.1 Python錯誤概述 165

B.2 一些常見的錯誤 166


附錄C 比較Python 2與Python 3 170

C.1 除法 171

C.2 用戶輸入 171

C.3 打印命令 172

C.4 更多幫助 173

附錄D 深刻學習 174

D.1 賦值語句 174

D.2 內存管理 177

D.3 函數 177

D.4 做用域 178

D.4.1 命名衝突 180

D.4.2 做爲參數傳遞變量 181

D.5 總結 182

附錄E 練習的解答 183

致謝 189

參考文獻 190

第一章試讀

分析機編織代數模式,就像提花織機在編織花和葉。

——埃達·洛夫萊斯伯爵夫人,1815-1853

1.1 算法與算法思想

本書的目的在於讓讀者運用計算機語言Python開始計算科學之旅。Python是一種開源軟件,讀者可自行下載、安裝並使用它。如今好的Python入門教程不勝枚舉,而且每一年還在推陳出新。與這些內容相比,本書的獨到之處在於側重能解決物理建模問題的有用技能。

對物理系統建模或許會是一項十分複雜的任務。下面讓咱們瞭解一下功能強大的計算機處理器是如何爲此提供幫助的。

1.1.1 算法思想

假設你須要指導一位朋友完成倒車入位操做。當時是一個緊急狀況,必須由你這位從未開過車的朋友完成操做,開始操做前,大家之間只能經過電話聯繫。

你須要將操做分解爲可被你的朋友能理解的小步驟,這些小步驟應是明確的,依次執行便可完成任務。例如,你可給出以下一系列指令:

複製代碼

1 將車鑰匙插入點火器。2 轉動鑰匙直至啓動,而後鬆開鑰匙。3 按下變速桿上的按鈕,將變速掛入「倒車」標識的檔位。4 ……

遺憾的是,即便你的朋友理解了每條指令,該「代碼」對一些車輛並不起做用。這個過程有「程序故障」。在作第3步指令前,很多車輛須要駕駛者:

複製代碼

踩下左腳踏板。

此外,變速器上的倒車檔多是用「R」標記的,而非「倒車」。建立這樣的操做指令時,難以作到一開始就習慣操做所需的高精確度。

由於指令是預先給出的(假定你的朋友沒有手機),因此好的作法是容許存在乎外狀況:

複製代碼

在聽到了吱嘎聲後,踩下左踏板……

這就是算法思想的開端,將長的操做步驟分解爲小的、清晰的子步驟,以及預期中的意外狀況。

若是你的朋友見過別人駕車,並已有了大量的經驗,那麼上述指令足以適用。可是對於另一些沒有任何經驗的朋友,甚至是機器人,須要提供更多的細節。例如,最初兩步指令可能須要進行以下擴展:

複製代碼

握住鑰匙的大頭端。將鑰匙的另外一端插入位於駕駛杆右下方的鑰匙孔內。按順時針方向扭動鑰匙(從鑰匙的大頭端向對端的角度看)。……

低層計算機程序使用計算機可理解的語言形式提供相似的指令[1] 。而高層系統能夠理解不少通用任務,於是編程方式更爲簡明扼要,就像在上面例子中第一次所給出的指令。Python就是一種高層語言,它具備進行數學計算、文本處理、文件操做的通用操做命令。此外,Python還能夠訪問不少標準程序庫。做爲程序的集合,這些程序庫能夠執行數據可視化、圖像處理等高級功能。

Python也提供命令行接口,即一個執行在其中輸入的Python命令的程序。這樣在Python中,你能夠輸入命令並馬上執行。與之造成對比的是,用C、C++、Fortran等不少科學計算中使用的其餘語言所編寫的程序,在執行前須要進行編譯。這時要先由一個稱爲編譯器的獨立程序將你的代碼轉譯爲低級語言,而後你才能運行生成的編譯程序去執行(實現)你的算法。使用Python,相對容易實現程序的快速編寫、運行和調試(雖然依然須要耐心和實踐)。

命令行解釋器,連同標準函數庫和你本身編寫的程序,一塊兒提供了便利的、強大的科學計算平臺。

1.1.2 狀態

也許之前你在上幾何課時,就已經學過了如何作多步數學證實。這種證實方法的目標在於經過依次訴諸已知的信息和形式化系統去證明一個指望結論的真實性。這樣,雖然孤立看來每一個語句的真實性不明顯,綜合考慮前面的語句,就能夠明確地斷定指望的真實性。在通讀證實過程當中,讀者的「狀態」(已知爲真的命題列表)會發生改變,最終給出了一個如何從公理和假設引出結果的完整邏輯推導鏈條。

每一個算法都具備各自的目標。能夠將算法當作是一個指令鏈,其中的每條指令都描述了一個基本操做,這些操做共同實現了一個複雜的任務。指令鏈中可能包括很多重複的操做,所以你不會想要去對執行中的每一步進行管理。替代的作法是,你預先制訂了全部步驟,而後觀看你的電子助理是如何快速執行的。其中可能存在一些預料以外的事件(例如聽到汽車吱嘎做響……)。

在算法中,計算機的狀態時常會發生改變。例如,一個計算機有多個內存單元,其中的內容會在操做過程當中發生變化。你的目標多是安排一到多個這樣的單元,用於在完成複雜計算後保存一些運行的結果。你可能還但願能繪製出特定的圖形圖像。

1.1.3 「a=a+1」是什麼意思

爲使計算機執行你的算法,必須用計算機能理解的語言與計算機進行通訊。一開始接觸計算機編程時,你可能會對所使用的命令感到困惑,尤爲是這些命令與標準數學用法有衝突的時候。例如,不少編程語言(其中包括Python)接受下面這樣的聲明:

複製代碼

1 a = 1002 a = a + 1

這在數學中是不合理的。第二行是一個永假斷言,相應地也是一個無解的等式。可是對於Python而言,「=」並不是是測試相等性,而是一個須要執行的指令。上面兩行命令的大概意思爲[2]:

1.命名整數對象a,並賦值100

2.提取命名對象a的值,並與1作求和運算,而後將運算結果賦於a,並拋棄a所指代對象的原始值。

換句話說,等號「=」通知Python去更改變量自身的狀態。相反,等號在數學概念中是用於建立一個結果爲真或爲假的命題。還應注意的是,Python對命令「x=y」 中等號兩側內容的處理不一樣,而在數學中等號兩側是對稱的。例如,Python將對「b+1=a」這樣的命令報錯,由於賦值語句的左側必須是一個變量名稱,該變量可被賦值爲右側表達式的求值。

咱們每每但願能肯定一個變量是否具備特定的值。爲避免賦值和等價測試間的模糊性,Python以及其餘不少語言都對後者使用雙等號「==」。例如:

複製代碼

1 a = 12 a == 03 b = (a == 1)

上面的代碼再次設置了變量a,並對a賦了一個數值。而後將該數值與0進行比較。最後,建立了第二個變量b。在完成另外一次比較運算後,將變量b賦予一個邏輯值(TrueFalse)。該值可在或然代碼中使用,咱們將在本書的隨後內容中介紹。

注意:不要在應該使用「==」(等價測試)的地方使用「=」(賦值)。

這是編程新手常犯的一個錯誤。由於「=」和「==」都是合法的Python語法,這個錯誤會產生沒法預料的結果。可是不管在何種狀況下,「=」和「==」二者中只會有一個是你所須要的。

1.1.4 符號和數字的對比

在不知道a值的狀況下使用「假定b=a2-a」進行減法運算,這在數學上是徹底合理的。該語句將會根據a定義b,不管a的值是什麼。

若是咱們啓動Python並直接給出上面運算的一個等價語句「b= a**2-a」,這會報錯[3] 。每次按下<Return/Enter>鍵以後,Python會嘗試對每一個賦值語句求值。若是變量還沒有賦值,那麼求值就會失敗,Python就會報錯。這樣的輸入可能會被其餘的數學計算軟件包接受,由於它們能夠追蹤符號的關係並隨後求值,可是基本Python並不會這樣作[4] 。

在數學中可理解的是,相似於「假定b=a2-a」這樣的定義在整個問題討論期間都不會發生改變。若是咱們說「當a=1時」,那麼讀者就知道b等於0;若是隨後咱們說「當a=2時,……」,咱們就沒必要再次定義b,讀者知道b如今表明的值是22-2=2。

與此相對比,Python這樣的數學系統在執行賦值語句「b=a**2-a」後,並不會記住ba之間的關係,它所記住的只是賦給b的值。若是咱們隨後更改了a的值,b的值並不會發生變化[5]。

通常來講,在證實的過程當中改變符號關係並不是一個好作法。可是在Python中,若是咱們說「b=a**2-a」,咱們稍後也能夠說「b=2**a」。第二次賦值會丟棄第一次賦值時計算的值,並替換爲新計算的值,這樣更新了Python的狀態。

點擊Python,查看更多python書單

延伸推薦

2017內核大會看點雲集

你所不瞭解的Kafka

Kotlin最佳項目實戰——歐瑞天氣App

用Python實現「猜數字」遊戲

10月| 異步新書人氣王票選

點擊關鍵詞閱讀更多新書:


我有幾張阿里雲幸運券分享給你,用券購買或者升級阿里雲相應產品會有特惠驚喜哦!把想要買的產品的幸運券都領走吧!快下手,立刻就要搶光。

相關文章
相關標籤/搜索