Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三项高斯拟合高斯数据(python)_Python_Python 2.7_Gaussian_Data Fitting - Fatal编程技术网

三项高斯拟合高斯数据(python)

三项高斯拟合高斯数据(python),python,python-2.7,gaussian,data-fitting,Python,Python 2.7,Gaussian,Data Fitting,我试图将高斯数据拟合到一个特定的三项高斯(其中一项中的振幅等于下一项标准偏差的两倍)。以下是我的尝试: import numpy as np #from scipy.optimize import curve_fit import scipy.optimize as optimize import matplotlib.pyplot as plt #r=np.linspace(0.0e-15,4e-15, 100) data = np.loadtxt('V_lambda_n.dat')

我试图将高斯数据拟合到一个特定的三项高斯(其中一项中的振幅等于下一项标准偏差的两倍)。以下是我的尝试:

import numpy as np

#from scipy.optimize import curve_fit
import scipy.optimize as optimize

import matplotlib.pyplot as plt

#r=np.linspace(0.0e-15,4e-15, 100) 

data = np.loadtxt('V_lambda_n.dat')
r = data[:, 0]
V = data[:, 1]

def func(x, ps1, ps2, ps3, ps4):
    return ps1*np.exp(-(x/ps2)**2) + ps2*np.exp(-(x/ps3)**2) + ps3*np.exp(-(x/ps4)**2)

popt, pcov = optimize.curve_fit(func, r, V, maxfev=10000)

#params = optimize.curve_fit(func, ps1, ps2, ps3, ps4)

#[ps1, ps2, ps2, ps4] = params[0]

p1=plt.plot(r, V, 'bo', label='data')
p2=plt.plot(r, func(r, *popt), 'r-', label='fit')

plt.xticks(np.linspace(0, 4, 9, endpoint=True))
plt.yticks(np.linspace(-50, 150, 9, endpoint=True))
plt.show()
结果如下:


如何修复此代码以提高拟合度?谢谢

在scipy用户论坛朋友的帮助下,我尝试了以下初步猜测:

p0=[V.max(),标准偏差,V.max(),2]

身体状况好多了。新配合如图所示


我希望拟合能比这更好。

…popt,pcov=optimize.curve_拟合(部分(func,x,ps1,ps2,ps3,ps4),r,V,maxfev=10000)…?Hi@AriGold,当我尝试从functools导入中得到错误“NameError:name'partial'未定义”partial@AriGold我得到的错误是“NameError:name'x'未定义”。这是我的拟合函数中的一个参数。从现在起,这是您的任务,请找到原因。。。。。。。。。