本書首先講解了Python語言的語法基礎(chǔ),適合沒有Python基礎(chǔ)的人,隨后重點講解Python在科學(xué)計算方面的應(yīng)用,包括數(shù)組的使用、多項式、最小二乘法擬合、繪制各種二維和三維數(shù)據(jù)圖像、各種數(shù)值計算方法,例如聚類算法、線性代數(shù)運算(特征值、特征向量、線性方程組求解、奇異值分解、范數(shù)等)、稀疏矩陣的存儲及線性代數(shù)運算、積分、微分、常微分方程組的求解、各種插值算法、優(yōu)化算法(單變量、多變量局部優(yōu)化和全局優(yōu)化、曲線擬合、方程求根、線性規(guī)劃)、傅里葉變換(FFT、正弦余弦變換、窗函數(shù)、短時傅里葉變換等)、信號處理(卷積和相關(guān)計算、FIR和IIR濾波器及設(shè)計、濾波器頻率響應(yīng)、小波分析等)、圖像處理、正交距離回歸、空間算法(三維旋轉(zhuǎn)變換、kd樹、勞內(nèi)德三角形、凸包等),符號運算包括多項式簡化、微分、積分、極限、泰勒展開、代數(shù)方程、常微分偏微分方程求解、非線性方程組求解、密集和稀疏矩陣運算、繪制二維和三維圖像等,用Python處理Excel數(shù)據(jù)、繪制Excel數(shù)據(jù)圖像,文本文件和二進制文件的讀寫等內(nèi)容。
本書內(nèi)容講解詳細,給出了每個命令的語法格式,對語法中的參數(shù)進行了詳細解釋,在每個知識點配以實例程序。
本書的主要目的是替代Mathlab,Matlab價格昂貴且受到美國政府的限制,不允許國內(nèi)的一些行業(yè)使用,Python及科學(xué)算法包是開源的免費的。本書的主要讀者對象是高校的老師、研究生、博士生、高年級本科生、科研院所及企業(yè)中的科技工作者等。
在研究自然科學(xué)規(guī)律時,通常需要建立數(shù)學(xué)方程或研究方法,用數(shù)學(xué)方程來描述所研究對象的客觀規(guī)律,再現(xiàn)、預(yù)測和發(fā)現(xiàn)客觀世界的運動規(guī)律和演化過程。另外,對于一個復(fù)雜的系統(tǒng),所建立的數(shù)學(xué)方程往往是非常復(fù)雜的,無法或根本不可能直接計算出精確解。隨著計算機技術(shù)的發(fā)展,可以用計算機求解出復(fù)雜系統(tǒng)數(shù)學(xué)方程或者研究方法的數(shù)值解,并能以某種手段呈現(xiàn)和分析所得到的數(shù)值解。在保證一定計算精度的情況下,用計算機的數(shù)值解來解決實際工程中遇到的各種問題,研究系統(tǒng)的客觀規(guī)律。
數(shù)值計算相對于傳統(tǒng)的解析計算有很大的優(yōu)勢。數(shù)值計算可以完成非線性、大模型、非平衡問題,把科學(xué)原理應(yīng)用于虛擬實驗,解決更復(fù)雜的實際問題。數(shù)值計算不會對環(huán)境產(chǎn)生任何破壞,例如研究核爆炸的破壞,不可能進行真實的核破壞實驗, 但可以用科學(xué)計算進行核爆炸的模擬; 數(shù)值計算不受儀器設(shè)備和時間、空間的影響,只需要一臺計算機,因此成本低; 可以把數(shù)值計算方法編譯成某個學(xué)科的專業(yè)軟件,例如各種CAE仿真分析軟件,通過界面的簡單操作完成相應(yīng)的計算,提供給更多的人使用。
用計算機進行數(shù)值求解時,需要有一套求解數(shù)學(xué)方程的方法。MATLAB軟件是一套使用非常廣泛的數(shù)學(xué)軟件,提供了多種數(shù)值計算方法,但是MATLAB價格昂貴,并且由于中美之間科技的競爭,受到美國政府的限制,MATLAB在我國國內(nèi)多個行業(yè)已經(jīng)被限制使用,隨著競爭的激烈,相信會有更多的科技產(chǎn)品受到限制。替代MATLAB進行數(shù)值計算的一個非常好的選擇是用Python編程語言及其科學(xué)計算包。Python作為開源的高級程序語言,它是免費的,Python有與MATLAB對應(yīng)的數(shù)值計算的科學(xué)計算包,編者編寫本書的主要目的是幫助廣大科技工作者快速掌握Python語言在科學(xué)計算方面的使用方法,培養(yǎng)其進行科學(xué)計算的能力。Python語言的語法簡單,使用方便,對于初學(xué)計算機編程的人員來說,是值得推薦的計算機語言。Python有眾多的第三方程序包,通過pip命令可以直接安裝使用,利用第三方模塊和Python語言能夠快速搭建出各式各樣的程序,滿足用戶的需求。
本書分為10章,其中第1~4章介紹Python語言的基礎(chǔ),供沒有Python基礎(chǔ)的人員使用; 第5章介紹NumPy進行數(shù)組和矩陣運算的方法,它是進行數(shù)值計算的基礎(chǔ); 第6章介紹用matplotlib進行數(shù)值的可視化的方法,繪制各種二維和三維數(shù)據(jù)圖像; 第7章介紹用SciPy進行各種數(shù)值計算的方法,是本書的主要內(nèi)容; 第8章介紹用SymPy進行符號運算,用符號推導(dǎo)數(shù)學(xué)公式; 第9章介紹用openpyxl操縱Excel進行數(shù)據(jù)處理的方法和數(shù)據(jù)可視化; 第10章介紹用PyQt5進行文本文件和二進制文件的讀寫及文件管理方面的內(nèi)容。PyQt5可以進行復(fù)雜的圖形界面開發(fā),可以與數(shù)值計算方法結(jié)合,通過界面把數(shù)值計算的結(jié)果呈現(xiàn)出來。關(guān)于PyQt5進行圖形界面開發(fā)方面的內(nèi)容可以參考編者所著的另一本書《Python基礎(chǔ)與PyQt可視化編程詳解》,本書對此不作過多介紹。
在編寫本書時,Python的版本是3.9.6,由于Python語言及其科學(xué)計算包仍在不斷發(fā)展中,因此讀者在使用本書的時候,Python語言和科學(xué)計算包很可能發(fā)展到更高的版本,但由于軟件一般都有向下兼容的特點,因此本書所述內(nèi)容不會影響正常的使用。本書在講解內(nèi)容時,在主要知識點上配有應(yīng)用實例,這些應(yīng)用實例可以起到畫龍點睛的作用,請讀者掃描下面的二維碼下載本書實例的源程序。
本書由北京諾思多維科技有限公司組織編寫,由于受作者水平與時間的限制,書中疏漏和錯誤在所難免,敬請廣大讀者批評指正。在使用本書的過程中,如有問題可通過郵箱forengineer@126.com與編者聯(lián)系。
掃描二維碼,下載本書應(yīng)用實例的源代碼。
編者2021年10月
實例源代碼
第1章Python編程基礎(chǔ)
1.1Python編程環(huán)境
1.1.1Python語言簡介
1.1.2Python編程環(huán)境的建立
1.2Python開發(fā)環(huán)境使用基礎(chǔ)
1.2.1Python自帶集成開發(fā)環(huán)境
1.2.2PyCharm集成開發(fā)環(huán)境
1.3變量與賦值語句
1.3.1變量和賦值的意義
1.3.2變量的定義
1.3.3賦值語句
1.4Python中的數(shù)據(jù)類型
1.4.1數(shù)據(jù)類型
1.4.2數(shù)據(jù)類型的轉(zhuǎn)換
1.4.3字符串中的轉(zhuǎn)義字符
1.5表達式
1.5.1數(shù)值表達式
1.5.2邏輯表達式
1.5.3運算符的優(yōu)先級
1.6Python編程的注意事項
1.6.1空行與注釋
1.6.2縮進
1.6.3續(xù)行
1.7Python中常用的一些函數(shù)
1.7.1輸入函數(shù)和輸出函數(shù)
1.7.2range()函數(shù)
1.7.3隨機函數(shù)
1.8分支結(jié)構(gòu)
1.8.1if分支結(jié)構(gòu)
1.8.2分支語句的嵌套
1.9循環(huán)結(jié)構(gòu)
1.9.1for循環(huán)結(jié)構(gòu)
1.9.2while循環(huán)結(jié)構(gòu)
1.9.3循環(huán)體的嵌套
1.9.4continue語句和break語句
第2章Python的數(shù)據(jù)結(jié)構(gòu)
2.1列表
2.1.1創(chuàng)建列表
2.1.2列表元素的索引和輸出
2.1.3列表的編輯
2.2元組
2.2.1創(chuàng)建元組
2.2.2元組元素的索引和輸出
2.3字典
2.3.1創(chuàng)建字典
2.3.2字典的編輯
2.4集合
2.4.1創(chuàng)建集合
2.4.2集合的編輯
2.4.3集合的邏輯運算
2.4.4集合的元素運算
2.5字符串
2.5.1字符串的索引和輸出
2.5.2字符串的處理
2.5.3格式化字符串
第3章自定義函數(shù)、類和模塊
3.1自定義函數(shù)
3.1.1自定義函數(shù)的格式
3.1.2函數(shù)參數(shù)
3.1.3函數(shù)的返回值
3.1.4函數(shù)的局部變量
3.1.5匿名函數(shù)lambda
3.1.6函數(shù)的遞歸調(diào)用
3.2類和對象
3.2.1類和對象介紹
3.2.2類的定義和實例
3.2.3實例屬性和類屬性
3.2.4類中的函數(shù)
3.2.5屬性和方法的私密性
3.2.6類的繼承
3.2.7類的其他操作
3.3模塊和包
3.3.1模塊的使用
3.3.2模塊空間與主程序
3.3.3包的使用
3.3.4枚舉模塊
3.3.5sys模塊
第4章異常處理和文件操作
4.1異常信息和異常處理
4.1.1異常信息
4.1.2被動異常的處理
4.1.3主動異常的處理
4.1.4異常的嵌套
4.2文件的讀寫
4.2.1文件的打開與關(guān)閉
4.2.2讀取數(shù)據(jù)
4.2.3寫入數(shù)據(jù)
4.3文件和路徑操作
4.4py文件的編譯
第5章NumPy數(shù)組運算
5.1創(chuàng)建數(shù)組
5.1.1數(shù)組的基本概念
5.1.2NumPy的數(shù)據(jù)類型
5.1.3創(chuàng)建數(shù)組的方法
5.1.4數(shù)組的屬性
5.1.5NumPy中的常量
5.1.6數(shù)組的切片
5.1.7數(shù)組的保存與讀取
5.2數(shù)組操作
5.2.1基本運算
5.2.2調(diào)整數(shù)組的形狀
5.2.3數(shù)組的重新組合
5.2.4數(shù)組的分解
5.2.5數(shù)組的重復(fù)復(fù)制
5.2.6類型轉(zhuǎn)換
5.2.7數(shù)組排序
5.2.8數(shù)組查詢
5.2.9數(shù)組統(tǒng)計
5.2.10數(shù)組的添加和刪除
5.2.11數(shù)組元素的隨機打亂
5.2.12數(shù)組元素的顛倒
5.3隨機數(shù)組
5.3.1隨機生成器
5.3.2隨機函數(shù)
5.4矩陣
5.4.1矩陣的定義
5.4.2矩陣的方法
5.5通用函數(shù)
5.5.1數(shù)組基本運算函數(shù)
5.5.2數(shù)組邏輯運算函數(shù)
5.5.3數(shù)組三角函數(shù)
5.6線性代數(shù)運算
5.6.1矩陣對角線
5.6.2數(shù)組乘積
5.6.3數(shù)組的行列式
5.6.4數(shù)組的秩和逆矩陣
5.6.5特征值和特征向量
5.6.6SVD分解
5.6.7Cholesky分解
5.6.8QR分解
5.6.9范數(shù)和條件數(shù)
5.6.10線性方程組的解
5.7快速傅里葉變換
5.7.1傅里葉變換公式
5.7.2傅里葉變換及逆變換
5.7.3窗函數(shù)
5.7.4傅里葉變換的輔助工具
5.8多項式運算
5.8.1多項式的定義及屬性
5.8.2多項式的四則運算
5.8.3多項式的微分和積分
5.8.4多項式擬合
第6章matplotlib數(shù)據(jù)可視化
6.1二維繪圖
6.1.1折線圖
6.1.2對數(shù)折線圖
6.1.3堆疊圖
6.1.4時間折線圖
6.1.5帶誤差的折線圖
6.1.6填充圖
6.1.7階梯圖
6.1.8極坐標圖
6.1.9火柴桿圖
6.1.10散點圖
6.1.11柱狀圖
6.1.12餅圖
6.1.13直方圖
6.1.14六邊形圖
6.1.15箱線圖
6.1.16小提琴圖
6.1.17等值線圖
6.1.18四邊形網(wǎng)格顏色圖
6.1.19三角形圖
6.1.20箭頭矢量圖
6.1.21流線圖
6.1.22矩陣圖
6.1.23稀疏矩陣圖
6.1.24風(fēng)羽圖
6.1.25事件圖
6.1.26自相關(guān)函數(shù)圖
6.1.27互相關(guān)函數(shù)圖
6.1.28幅值譜和相位譜圖
6.1.29時頻圖
6.1.30功率譜密度圖
6.1.31繪制圖像
6.2圖像、子圖和圖例
6.2.1圖像對象
6.2.2子圖對象
6.2.3圖例對象
6.3圖像的輔助功能
6.3.1添加注釋
6.3.2添加顏色條
6.3.3添加文字
6.3.4添加箭頭
6.3.5添加網(wǎng)格線
6.3.6添加水平、豎直和傾斜線
6.3.7添加表格
6.4三維繪圖
6.4.1三維子圖對象
6.4.2三維折線圖
6.4.3三維散點圖
6.4.4三維柱狀圖
6.4.5三維曲面圖
6.4.6三維等值線圖
6.4.7三維三角形網(wǎng)格圖
6.4.8三維箭頭矢量圖
第7章SciPy數(shù)值計算方法
7.1SciPy中的常數(shù)
7.1.1數(shù)學(xué)和物理常量
7.1.2單位換算常量
7.2SciPy的數(shù)據(jù)讀寫
7.2.1讀寫MATLAB文件
7.2.2讀寫wave文件
7.2.3讀寫Fortran文件
7.3聚類算法
7.3.1k平均聚類法
7.3.2矢量量化
7.3.3層次聚類法
7.4線性代數(shù)運算
7.4.1特殊矩陣
7.4.2矩陣函數(shù)
7.4.3線性代數(shù)基本運算
7.4.4向量和矩陣的范數(shù)
7.4.5特征值和特征向量
7.4.6矩陣分解
7.4.7線性方程組的解
7.4.8矩陣方程的解
7.5稀疏矩陣
7.5.1稀疏矩陣的基類
7.5.2稀疏矩陣的定義
7.5.3一些實用方法
7.5.4稀疏矩陣的線性代數(shù)運算
7.6數(shù)值積分
7.6.1一重定積分
7.6.2二重定積分
7.6.3三重定積分
7.6.4n重定積分
7.6.5給定離散數(shù)據(jù)的積分
7.6.6一階常微分方程組的求解
7.6.7二階常微分方程組的求解
7.6.8數(shù)值微分
7.7插值計算
7.7.1一維樣條插值
7.7.2一維多項式插值
7.7.3二維樣條插值
7.7.4根據(jù)FFT插值
7.8優(yōu)化
7.8.1單變量局部優(yōu)化
7.8.2多變量局部優(yōu)化
7.8.3多變量全局差分進化法
7.8.4多變量全局模擬退火法
7.8.5線性規(guī)劃問題
7.8.6用小二乘法解方程誤差小問題
7.8.7曲線擬合
7.8.8求方程的根
7.9傅里葉變換
7.9.1離散傅里葉變換
7.9.2傅里葉變換的輔助工具
7.9.3離散余弦和正弦變換
7.9.4窗函數(shù)
7.9.5短時傅里葉變換
7.10數(shù)字信號處理
7.10.1信號的卷積和相關(guān)計算
7.10.2二維圖像的卷積計算
7.10.3FIR與IIR濾波器
7.10.4FIR與IIR濾波器的設(shè)計
7.10.5濾波器的頻率響應(yīng)
7.10.6其他濾波器
7.10.7小波分析
7.11圖像處理
7.11.1圖像的卷積與相關(guān)計算
7.11.2高斯濾波
7.11.3圖像邊緣檢測
7.11.4樣條插值濾波
7.11.5廣義濾波
7.11.6圖像的平移、旋轉(zhuǎn)和縮放
7.11.7圖像的仿射變換
7.11.8二進制形態(tài)學(xué)
7.12正交距離回歸
7.12.1正交距離回歸流程
7.12.2簡易模型
7.13空間算法
7.13.1三維空間旋轉(zhuǎn)變換
7.13.2kdtree及近鄰搜索
7.13.3德勞內(nèi)三角剖分
7.13.4凸包
7.13.5Voronoi圖
第8章SymPy符號運算
8.1符號與符號表達式
8.1.1符號定義
8.1.2符號表達式
8.1.3符號表達式的簡化
8.1.4符號多項式操作
8.1.5邏輯表達式
8.2符號運算基礎(chǔ)
8.2.1有限集合
8.2.2區(qū)間表示
8.2.3等式和不等式
8.2.4條件表示
8.2.5分段函數(shù)
8.3與微積分有關(guān)的運算
8.3.1極限運算
8.3.2微分運算
8.3.3積分運算
8.3.4泰勒展開
8.3.5積分變換
8.4方程求解
8.4.1代數(shù)方程的求解
8.4.2線性方程組的求解
8.4.3非線性方程組的求解
8.4.4常微分方程組的求解
8.4.5偏微分方程的求解
8.5矩陣運算
8.5.1矩陣的創(chuàng)建
8.5.2矩陣的屬性和方法
8.5.3稀疏矩陣
8.6繪圖
8.6.1二維繪圖
8.6.2參數(shù)化繪圖
8.6.3隱式方程繪圖
8.6.4三維繪圖
第9章操縱Excel進行數(shù)據(jù)處理
9.1工作簿和工作表格
9.1.1openpyxl的基本結(jié)構(gòu)
9.1.2對工作簿和工作表格的操作
9.2對工作表格的操作
9.3對單元格的操作
9.4在Excel中繪制數(shù)據(jù)圖表
第10章數(shù)據(jù)讀寫和文件管理
10.1數(shù)據(jù)讀寫
10.1.1QIODevice類
10.1.2字節(jié)數(shù)組與字節(jié)串
10.1.3QFile類
10.1.4文本流讀寫文本數(shù)據(jù)
10.1.5數(shù)據(jù)流讀寫二進制數(shù)據(jù)
10.1.6原生數(shù)據(jù)的讀寫方法
10.2數(shù)據(jù)存儲文件
10.2.1QTemporaryFile臨時文件
10.2.2QSaveFile存盤
10.2.3QBuffer內(nèi)存存儲
10.3文件管理
10.3.1文件信息
10.3.2路徑管理