❶ 什麼是最小二乘擬合,方法和具體步驟
定義:(xi)2為最小,按ni=1這樣的標準定義的擬合函數稱為最小二乘擬合,是離散情形下的最佳平方逼近.對給定數據點{(Xi,Yi)}(i=0,1,…,m),在取定的函數類Φ 中,求p(x)∈Φ ,使誤差的平方和E^2最小,E^2=∑[p(Xi)-Yi]^2。從幾何意義上講,就是尋求與給定點 {(Xi,Yi)}(i=0,1,…,m)的距離平方和為最小的曲線y=p(x)。函數p(x)稱為擬合函數或最小二乘解,求擬合函數p(x)的方法稱為曲線擬合的最小二乘法。
❷ Python最小二乘法擬合與作圖
在函數擬合中,如果用p表示函數中需要確定的參數,那麼目標就是找到一組p,使得下面函數S的值最小:
這種演算法稱為最小二乘法擬合。Python的Scipy數值計算庫中的optimize模塊提供了 leastsq() 函數,可以對數據進行最小二乘擬合計算。
此處利用該函數對一段弧線使用圓方程進行了擬合,並通過Matplotlib模塊進行了作圖,程序內容如下:
Python的使用中需要導入相應的模塊,此處首先用 import 語句
分別導入了numpy, leastsq與pylab模塊,其中numpy模塊常用用與數組類型的建立,讀入等過程。leastsq則為最小二乘法擬合函數。pylab是繪圖模塊。
接下來我們需要讀入需要進行擬合的數據,這里使用了 numpy.loadtxt() 函數:
其參數有:
進行擬合時,首先我們需要定義一個目標函數。對於圓的方程,我們需要圓心坐標(a,b)以及半徑r三個參數,方便起見用p來存儲:
緊接著就可以進行擬合了, leastsq() 函數需要至少提供擬合的函數名與參數的初始值:
返回的結果為一數組,分別為擬合得到的參數與其誤差值等,這里只取擬合參數值。
leastsq() 的參數具體有:
輸出選項有:
最後我們可以將原數據與擬合結果一同做成線狀圖,可採用 pylab.plot() 函數:
pylab.plot() 函數需提供兩列數組作為輸入,其他參數可調控線條顏色,形狀,粗細以及對應名稱等性質。視需求而定,此處不做詳解。
pylab.legend() 函數可以調控圖像標簽的位置,有無邊框等性質。
pylab.annotate() 函數設置注釋,需至少提供注釋內容與放置位置坐標的參數。
pylab.show() 函數用於顯示圖像。
最終結果如下圖所示:
用Python作科學計算
numpy.loadtxt
scipy.optimize.leastsq