Python曲線擬合詳解
入門
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()
效果如下
參數(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)用過之外,其他參數(shù)的含義為
p0
擬合參數(shù)初始值sigma
相對(duì)精度要求absolute_sigma
絕對(duì)精度要求check_finite
有限性檢測(cè)開關(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ù)模型用來生成數(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
還是比較接近的,下面繪制三維圖像來更加直觀地查看一下
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連接Oracle數(shù)據(jù)庫的基本操作指南
由于之前的在職的公司沒有機(jī)會(huì)接觸到Oralce數(shù)據(jù)庫,所以就沒有用python連接過Oralce,之前大多集中在連接mysql和sql server,最近在做一下web自動(dòng)化的工作,所以簡(jiǎn)單的記錄一下,下面這篇文章主要給大家介紹了關(guān)于利用Python連接Oracle數(shù)據(jù)庫的基本操作,需要的朋友可以參考下2022-06-06使用python+whoosh實(shí)現(xiàn)全文檢索
今天小編就為大家分享一篇使用python+whoosh實(shí)現(xiàn)全文檢索,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12python爬取企查查企業(yè)信息之selenium自動(dòng)模擬登錄企查查
這篇文章主要介紹了python爬取企查查企業(yè)信息之自動(dòng)模擬登錄企查查以及selenium獲取headers,selenium獲取cookie,需要的朋友可以參考下2021-04-04詳解Python自動(dòng)化之文件自動(dòng)化處理
今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識(shí),文章圍繞著Python文件自動(dòng)化處理展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06超詳細(xì)注釋之OpenCV dlib實(shí)現(xiàn)人臉采集
這篇文章主要介紹了OpenCV dlib實(shí)現(xiàn)人臉采集,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09利用Python查看微信共同好友功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了利用Python查看微信共同好友功能的實(shí)現(xiàn)代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04PyQt5實(shí)現(xiàn)QLineEdit添加clicked信號(hào)的方法
今天小編就為大家分享一篇PyQt5實(shí)現(xiàn)QLineEdit添加clicked信號(hào)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-06-06Python基本類型的連接組合和互相轉(zhuǎn)換方式(13種)
這篇文章主要介紹了Python中基本類型的連接組合和互相轉(zhuǎn)換13種方式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12