用python对高斯和洛伦兹数据进行拟合

用python对高斯和洛伦兹数据进行拟合,python,curve-fitting,gaussian,Python,Curve Fitting,Gaussian,我已经将一组数据加载到python中,并且认为我已经拟合了高斯和洛伦兹形状,但是我需要它打印到每个参数的值以及相关的错误,我不知道如何做到这一点 我是一个编程新手,所以任何帮助都将不胜感激 这是我的代码: import numpy as np import matplotlib.pyplot as plt import pylab

我已经将一组数据加载到python中,并且认为我已经拟合了高斯和洛伦兹形状,但是我需要它打印到每个参数的值以及相关的错误,我不知道如何做到这一点

我是一个编程新手,所以任何帮助都将不胜感激

这是我的代码:

import numpy as np                                                
import matplotlib.pyplot as plt                                    
import pylab as p                                                  
from scipy.optimize import curve_fit, leastsq                      
import math
from scipy.stats import norm

E,I = np.loadtxt('resonance_data.txt', unpack = True)

# Function to be fitted
def gauss(E, I0, E0, sigma):
    n = len(E)
    mean = sum(E*I)/sum(I)
    sigma = (np.sqrt(sum((E - mean)**2)/sum(I)))
    I0 = max(I)
    E0 = 31
    return I0* np.exp(-((E-E0)/sigma)**2)

sigmaerror = sigma - 28.01177

print sigmaerror

def lorentz(E,I0,E0,gamma):
    I0 = max(I)
    E0 = 31
    return I0*((gamma**2)/(((E-E0)**2)+gamma**2))

# Initialization parameters
init_vals = [45., 31., 33.]

best_vals, covar = curve_fit(gauss,E,I,p0=init_vals)
print best_vals

print curve_fit(gauss, E, I, p0=[max(I), mean, sigma])
print curve_fit(lorentz, E, I, p0=[max(I), mean, sigma])

plt.plot(E,I,'b+:',label='data')

popt,pcov = curve_fit(gauss,E,I,p0=[max(I), mean, sigma])
plt.plot(E,gauss(E,*popt),'r-',label='Gaussian')

popt,pcov = curve_fit(lorentz,E,I,p0=[max(I),mean,sigma])
plt.plot(E,lorentz(E,*popt), 'g', label='Lorentz')

plt.legend()
plt.title('Energy vs Intensity')
plt.xlabel('Energy')
plt.ylabel('Intensity')
plt.show()
print 'sigma =',sigma, 'error =', sigmaerror
print 'E0 = 34.22349966'
print 'I0 = 44.84743332'

只需打印
popt
pcov

print(popt)
print(pcov)

它们按照您向模型提供参数和协方差的顺序包含参数和协方差。

最佳参数存储在
best\u vals
中。这一点在文章中得到了很好的解释。