python的Scipy數值計算庫
Scipy函式庫在numpy的基礎上增加了眾多的的數學,科學以及工程計算中常用的函式庫。什麼線性代數,訊號處理,影象處理等等,由於這個庫涉及到的領域眾多,不可能在這裡一一舉例說明。在這裡只介紹與資料分析相關的用法。
A.最小二乘擬合
如果不知道最小二乘擬合是什麼請訪問度娘百科。Scipy中的子函式optimize已經提供了實現最小二乘擬合算法的函式leastsq。下面用leastsq進行資料擬合:
說明:這個函式我們要擬合的函式是一個正弦波函式,他有三個引數A,k,theta。分別對應振幅,頻率,相角。假設我們的實驗資料是一組包含噪聲的資料x,y1,其中y1是在真實資料y0的基礎上加入噪聲的。通過leastsq函式對帶噪聲的實驗資料x,y1進行資料擬合,可以找到x和真實資料y0之間的正弦關係的三個引數:A,k,theta。
我們看到擬合引數雖然和真實引數完全不同,但是由於正弦函式具有周期性,實際上擬合引數得到的函式和真實引數對應的函式是一致的。
B.函式最小值
optimize庫提供了幾個求函式最小值的演算法:fmin,min_powell,fmin_cg,fmin_bfgs。
下面的程式通過求解卷積的逆運算演示fmin的功能。對於一個離散的線性時不變系統h,如果它的輸入是x,那麼輸出y可以用x和h的卷積表示:y = x × h
現在的問題是如果已知系統的輸入x和輸出y,如何計算系統的傳遞函式h;或者如果已知系統的傳遞函式h和系統的輸出y,如何計算系統的輸入x。這種運算被稱為反捲積運算,是十分困難的,特別是在實際的運用中,測量系統的輸出總是存在誤差的。下面用fmin計算反捲積,這種方法只能用在很小規模的數列之上,因此沒有很大的使用價值,不過用來評價fmin函式的效能還是不錯的。
下面是輸出:
Scipy還可以進行很多的運算,如對非線性方程的求解,B-Spline樣條曲線,對定積分的數值求解,解常微分方程組等。
參考資料:《python與資料科學》