簡體   English   中英

高斯適合 Python 情節

[英]Gaussian fit in Python plot

我正在嘗試將高斯函數擬合到我的 Python 圖中。 我在這里附上了代碼。 任何更正將不勝感激!

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import math
import random
from numpy import genfromtxt

data= genfromtxt ('PVC_Cs137.txt')
plt.xlim(0,2500)
plt.ylim(0,30000)
plt.xlabel("Channel number")
plt.ylabel("Counts")

x = data[:,0]
y = data[:,1]

n = len(x)                          
mean = sum(x*y)/n                   
sigma = sum(y*(x-mean)**2)/n    

def gaus(x,a,x0,sigma):
  return a*exp(-(x-x0)**2/(2*sigma**2))

popt,pcov = curve_fit(gaus,x,y,p0=[1,mean,sigma])

plt.plot(x,gaus(x,*popt))
plt.show()

這是我文件的鏈接: https ://www.dropbox.com/s/hrqjr2jgfsjs55x/PVC_Cs137.txt?dl=0

您的方法有兩個問題。 一個與編程有關。 gauss擬合函數必須使用numpy數組。 math函數無法提供此功能,它們與標量一起使用。 因此你的擬合函數應該是這樣的

def gauss(x, a, x0, sigma):
    return a * np.exp(-(x - x0) ** 2 / (2 * sigma ** 2))

這產生了正確的均值/西格瑪組合像這樣的高斯曲線

在此處輸入圖像描述

現在我們查看文件中值的分布:

在此處輸入圖像描述

這甚至模糊地看起來不像高斯曲線。 難怪 fit 函數不收斂。

其實還有第三個問題,你計算的mean/sigma是錯誤的,但是因為你的數據不能服從高斯分布,所以我們暫時可以忽略這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM