python - Python中的最小二乘拟合高斯
问题描述
我试图用给定的数据在 Python 中实现高斯拟合。但是,我无法获得所需的配合。任何建议都会有所帮助。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar, exp
xData=ar([-7.66E-06,-7.60E-06,-7.53E-06,-7.46E-06,-7.40E-06,-7.33E-06,-7.26E-06,-7.19E-06,-7.13E-06,-7.06E-06,-6.99E-06,
-6.93E-06,-6.86E-06,-6.79E-06,-6.73E-06,-6.66E-06,-6.59E-06,-6.52E-06,-6.46E-06,-6.39E-06,-6.32E-06,-6.26E-06,-6.19E-06,
-6.12E-06,-6.06E-06,-5.99E-06,-5.92E-06,-5.85E-06,-5.79E-06,-5.72E-06])
yData=ar([17763,2853,3694,4203,4614,4984,5080,7038,6905,8729,11687,13339,14667,16175,15953,15342,14340,15707,13001,10982,8867,6827,5262,4760,3869,3232,2835,2746,2552,2576])
#plot the data points
plt.plot(xData,yData,'bo',label='experimental_data')
plt.show()
#define the function we want to fit the plot into
# Define the Gaussian function
n = len(xData)
mean = sum(xData*yData)/n
sigma = np.sqrt(sum(yData*(xData-mean)**2)/n)
def Gauss(x,I0,x0,sigma,Background):
return I0*exp(-(x-x0)**2/(2*sigma**2))+Background
popt,pcov = curve_fit(Gauss,xData,yData,p0=[1,mean,sigma, 0.0])
print(popt)
plt.plot(xData,yData,'b+:',label='data')
plt.plot(xData,Gauss(xData,*popt),'ro:',label='fit')
plt.legend()
plt.title('Gaussian_Fit')
plt.xlabel('x-axis')
plt.ylabel('PL Intensity')
plt.show()
解决方案
推荐阅读
- trading - 银色 RSI 指标 - 一小时零梯度
- angular - 使用 SimpleChanges 访问多个属性
- python - 基于相关集的Django过滤器
- javascript - 如何通过更改状态使按钮在 React.js 中充当单选按钮?
- rest - IBM Maximo REST 服务 POST 未在 MBO 上设置属性
- python - 在锦标赛中获得尽可能多的球员比赛组合
- laravel - Laravel 6 执行基于角色的路由
- c# - 菜单单击未触发其绑定命令
- swift - Why is UIImage nil if i have the Data
- excel - Running VBA functions in a specific order