您好,登錄后才能下訂單哦!
今天小編給大家分享一下Python曲線擬合怎么實(shí)現(xiàn)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
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
是比較接近的,其擬合效果可以畫圖查看一下
import matplotlib.pyplot as plt plt.scatter(x, y, marker='.') Y = gauss(x, *abc) plt.plot(x, Y, lw=1) plt.show()
效果如下
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é)果如下
以上就是“Python曲線擬合怎么實(shí)現(xiàn)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。