- 利用Python解決數(shù)學問題(原書第2版)
- (英)薩姆·莫利
- 1327字
- 2025-08-07 15:28:33
1.3 理解基本數(shù)學函數(shù)
基本數(shù)學函數(shù)在許多應用中都會出現(xiàn)。例如,對數(shù)可以將呈指數(shù)增長的數(shù)據(jù)進行縮放,從而得到線性數(shù)據(jù)。指數(shù)函數(shù)和三角函數(shù)在處理幾何信息時是常用的工具,伽馬函數(shù)出現(xiàn)在組合數(shù)學中,高斯誤差函數(shù)則在統(tǒng)計學中至關重要。
Python標準庫中的math模塊提供了所有標準數(shù)學函數(shù),以及常用的常數(shù)和一些實用函數(shù),可以使用以下命令導入:

一旦導入了該模塊,我們就可以使用此模塊包含的所有數(shù)學函數(shù)。例如,為了得到非負數(shù)的平方根,我們可以使用math模塊中的sqrt函數(shù):

嘗試給sqrt函數(shù)傳遞負數(shù)參數(shù)會拋出ValueError異常。sqrt函數(shù)僅處理實數(shù),負數(shù)的平方根對于該函數(shù)是未定義的。負數(shù)的平方根是一個復數(shù),可以使用Python標準庫中cmath模塊對應的sqrt函數(shù)進行求解。
正弦、余弦和正切三角函數(shù)在math模塊中分別以常用的縮寫形式sin、cos和tan提供。常數(shù)pi保存著π的值,約為3.1416:

在math模塊中,反三角函數(shù)分別以acos、asin和atan的名稱命名:

math模塊中的log函數(shù)用于執(zhí)行對數(shù)運算,它有一個可選參數(shù)用于指定對數(shù)的底(請注意,第二個參數(shù)只是位置參數(shù))。默認情況下,如果沒有可選參數(shù),它是以e為底的自然對數(shù)。常數(shù)e可以使用math.e方法進行訪問:

math模塊還包含gamma函數(shù)(伽馬函數(shù)),以及在統(tǒng)計學中非常重要的erf函數(shù)(高斯誤差函數(shù)),這兩個函數(shù)都是由積分定義的。伽馬函數(shù)由以下積分定義:

高斯誤差函數(shù)由以下積分定義:

高斯誤差函數(shù)定義中的積分無法使用微積分進行計算,而必須通過數(shù)值計算進行估計:

除了三角函數(shù)、對數(shù)和指數(shù)函數(shù)等標準函數(shù)之外,math模塊還包含各種理論函數(shù)和組合函數(shù)。其中包括comb函數(shù)和factorial函數(shù),它們在很多應用中都很有用。comb函數(shù)調用時帶有參數(shù)n和k,如果不考慮元素的順序,它會返回從包含n個元素的集合中無重復地選取k個元素的方式總數(shù)。例如,先選取1然后選取2,這與先選取2然后選取1是相同的。這個組合數(shù)有時被寫作。階乘函數(shù)factorial被調用時帶有參數(shù)n,它返回n的階乘,即n!=n(n-1)(n-2)…1:

將factorial函數(shù)應用于負數(shù)會拋出ValueError異常。整數(shù)n的階乘與伽馬函數(shù)在n+1處的值相等,即
Γ(n+1)=n!
math模塊還包含一個名為gcd的函數(shù),該函數(shù)返回其參數(shù)的最大公約數(shù)。整數(shù)a和b的最大公約數(shù)k是能同時整除a和b的最大整數(shù):

math模塊還有許多用于處理浮點數(shù)的函數(shù)。fsum函數(shù)對一組可迭代的數(shù)字執(zhí)行加法運算,并跟蹤每一步的總和,以減少結果中的誤差。下面的例子很好地說明了這一點:

如果參數(shù)之間的差值小于容差,isclose函數(shù)將返回True。這在單元測試中尤其有用,因為在單元測試中,基于機器架構或數(shù)據(jù)變化,計算結果可能會有很小的變化。
最后,math模塊中的floor和ceil函數(shù)提供了對參數(shù)的向下和向上取整的整數(shù)結果。一個數(shù)x的向下取整(floor函數(shù))結果是滿足f≤x的最大的整數(shù)f,而x的向上取整(ceil函數(shù))結果是滿足x≤c的最小的整數(shù)c。在將一個數(shù)除以另一個數(shù)得到的浮點數(shù)轉化為整數(shù)時,這些函數(shù)非常有用。
math模塊中的函數(shù)是用C語言實現(xiàn)的(假設你運行的是CPython),因此它們比用Python實現(xiàn)的函數(shù)要快得多。如果你需要將函數(shù)應用于相對較小的數(shù)字集合,那么此模塊是一個不錯的選擇。如果你同時想要將這些函數(shù)應用于大型數(shù)據(jù)集,那么最好使用NumPy包中的等價函數(shù),因為NumPy處理數(shù)組更有效。一般來說,如果你已經導入了NumPy包,那么最好總是使用NumPy的等價函數(shù)來減少出錯的可能性。考慮到這一點,現(xiàn)在讓我們開始介紹NumPy包及其基本對象“多維數(shù)組”吧。
- Python編程自學手冊
- Redis Applied Design Patterns
- 騰訊iOS測試實踐
- 微服務設計原理與架構
- Responsive Web Design with HTML5 and CSS3
- Effective Python Penetration Testing
- 網店設計看這本就夠了
- PhpStorm Cookbook
- Learning OpenStack Networking(Neutron)
- MATLAB for Machine Learning
- PHP 7從零基礎到項目實戰(zhàn)
- Python計算機視覺和自然語言處理
- 從零開始學UI:概念解析、實戰(zhàn)提高、突破規(guī)則
- Access數(shù)據(jù)庫應用教程(2010版)
- Azure for Architects