Python曲線擬合詳解
入門(mén)
scipy.optimize中,curve_fit函數(shù)可調(diào)用非線性最小二乘法進(jìn)行函數(shù)擬合,例如,現(xiàn)在有一個(gè)高斯函數(shù)想要被擬合

則調(diào)用方法如下
import numpy as np
from scipy.optimize import curve_fit
def gauss(x, a, b, c):
return a*np.exp(-(x-b)**2/c**2)
x = np.arange(100)/10
y = gauss(x, 2, 5, 3) + np.random.rand(100)/10
# 非線性擬合 abc為參數(shù);para為擬合評(píng)價(jià)
abc, para = curve_fit(gauss, x, y)
print(abc)
# [2.03042233 5.01182397 3.10994351]
其中,curve_fit在調(diào)用時(shí)輸入了三個(gè)參數(shù),分別是擬合函數(shù)、自變量、因變量。返回值abc和para分別為擬合參數(shù)和擬合的協(xié)方差,最終得到abc的值與預(yù)設(shè)的2,0.5, 3是比較接近的,其擬合效果可以畫(huà)圖查看一下
import matplotlib.pyplot as plt plt.scatter(x, y, marker='.') Y = gauss(x, *abc) plt.plot(x, Y, lw=1) plt.show()
效果如下

參數(shù)
curve_fit的裝形式如下
curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, bounds=(-inf, inf), method=None, jac=None, *, full_output=False, **kwargs)
除了f, xdata, ydata已經(jīng)用過(guò)之外,其他參數(shù)的含義為
p0擬合參數(shù)初始值sigma相對(duì)精度要求absolute_sigma絕對(duì)精度要求check_finite有限性檢測(cè)開(kāi)關(guān)bounds擬合范圍method擬合方法,可選‘lm’, ‘trf’, ‘dogbox’,與least_squares函數(shù)中定義相同jac雅可比矩陣,與least_squares中定義相同
最小二乘函數(shù):least_squares
多元擬合
盡管curve_fit的參數(shù)列表中,只給出了xdata, ydata作為擬合參數(shù),而xdata只有一組,但curve_fit是具備多元擬合潛力的。
唯一需要注意的是,當(dāng)多元擬合函數(shù)的返回值必須為一維數(shù)組,示例如下
# 創(chuàng)建一個(gè)函數(shù)模型用來(lái)生成數(shù)據(jù)
def func1(x, a, b, c, d):
r = a * np.exp(-((x[0] - b) ** 2 + (x[1] - d) ** 2) / (2 * c ** 2))
return r.ravel()
# 生成原始數(shù)據(jù)
xx = np.indices([10, 10])
z = func1(xx, 10, 5, 2, 5) + np.random.normal(size=100)/100
abcd, para = curve_fit(func1, xx, z)
print(abcd)
# [10.00258587 5.00146314 1.99952885 5.00138184]
可以發(fā)現(xiàn)擬合結(jié)果與預(yù)設(shè)的abcd還是比較接近的,下面繪制三維圖像來(lái)更加直觀地查看一下
z = z.reshape(10, 10) Z = func1(xx, *abcd).reshape(10,10) ax = plt.subplot(projection='3d') ax.scatter3D(xx[0], xx[1], z, color='red') ax.plot_surface(xx[0], xx[1], Z, cmap='rainbow') plt.show()
結(jié)果如下

到此這篇關(guān)于Python曲線擬合詳解的文章就介紹到這了,更多相關(guān)Python曲線擬合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python-opencv實(shí)現(xiàn)視頻指定幀數(shù)間隔圖像的保存功能
這篇文章主要介紹了python-opencv實(shí)現(xiàn)視頻指定幀數(shù)間隔圖像的保存的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
pandas基于時(shí)間序列的固定時(shí)間間隔求均值的方法
今天小編就為大家分享一篇pandas基于時(shí)間序列的固定時(shí)間間隔求均值的方法,具有好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
Python線性網(wǎng)絡(luò)實(shí)現(xiàn)分類糖尿病病例
什么是線性規(guī)劃?想象一下,您有一個(gè)線性方程組和不等式系統(tǒng)。這樣的系統(tǒng)通常有許多可能的解決方案。線性規(guī)劃是一組數(shù)學(xué)和計(jì)算工具,可讓您找到該系統(tǒng)的特定解,該解對(duì)應(yīng)于某些其他線性函數(shù)的最大值或最小值2022-10-10
Python區(qū)塊鏈Creating?Miners教程
這篇文章主要為大家介紹了Python區(qū)塊鏈Creating?Miners教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
使用Python的開(kāi)發(fā)框架Brownie部署以太坊智能合約
在本文中,我們將使用Python部署智能合約。這篇文章可能是您走向智能合約和區(qū)塊鏈開(kāi)發(fā)的橋梁!2021-05-05
PyQt5 QTreeWidget 樹(shù)形結(jié)構(gòu)遞歸遍歷當(dāng)前所有節(jié)點(diǎn)的實(shí)現(xiàn)
Qt中實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)可以使用QTreeWidget類,也可以使用QTreeView類,本文主要介紹了PyQt5 QTreeWidget 樹(shù)形結(jié)構(gòu)遞歸遍歷當(dāng)前所有節(jié)點(diǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
Python Tkinter GUI編程實(shí)現(xiàn)Frame切換
本文主要介紹了Python Tkinter GUI編程實(shí)現(xiàn)Frame切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04

