通常我們進行高斯擬合的辦法是匯入scipy的curve_fit 包,不過這需要自己手寫乙個高斯分布的函式表示式,不是很方便,astropy提供了乙個寫好的高斯擬合包
調包
from astropy.modeling import models, fitting
import numpy as np
import matplotlib.pyplot as plt
生成乙個高斯的資料
為了檢驗擬合結果的好壞,我們先生成乙個μ=0.5,σ=0.2的高斯資料,並賦予他乙個雜訊
def
func_gaosi
(x, miu, sigma)
:return
1/np.sqrt(
2*np.pi)
/sigma*np.exp(
-(x-miu)**2
/2/sigma**2)
x = np.linspace(0,
1,100)
y = func_gaosi(x,
0.5,
0.2)
y += np.random.normal(0.
,0.02
, x.shape)
plt.plot(x, y)
plt.xlabel(
'x')
plt.ylabel(
'y')
結果如下:
使用astropy進行高斯擬合
g_init = models.gaussian1d(amplitude=1.
, mean=
0, stddev=1.
)fit_g = fitting.levmarlsqfitter(
)g = fit_g(g_init, x, y)
amplitude表示振幅的初值,振幅也就是高斯分布的係數,mean表示μ的初值,stddev表示σ的初值,g就是擬合結果,通過如下命令檢視擬合的μ和σ
print
(g.mean.value, g.stddev.value)
>>
>>
0.5007101792640887
0.20002191014593193
可以看到是很精確的,而且也不需要自己寫高斯分布的函式 用python對資料進行高斯擬合分布
小李默默吐槽,被這個高斯擬合分布折磨的 下面是正文 首先是公式 自定義函式 deffunc x,a,u,sig return a np.exp x u 2 2 sig 2 然後就是橫縱座標,畫圖 x np.array dist y np.array probability dist popt,pco...
MATLAB實現高斯曲線擬合
完成某次課程任務,在matlab中新建乙個m檔案,將下列 複製,或者直接複製到命令欄回車即可使用 x 0 0.1 10 0 10每次加0.1,共101個點 y 50 exp x 5 2.2 x,y為初始函式值表現為紅線 x x 因為擬合曲線時需要列向量 y y y0 1 randn 1,101 新增...
高斯曲線擬合原理及實現
高斯 擬合 gaussian fitting 即使用形如 gi x ai exp x bi 2 ci 2 的高斯函式 對資料點集進行函式逼近的 擬合方法。其實可以跟 多項式擬合 模擬起來,不同的是 多項式擬合是用 冪函式系,而高斯擬合是用 高斯函式 系。使用 高斯函式 來進行擬合,優點在於計算積分十...