<div dir="ltr">Hi ALl,<div><br></div><div>I am trying to a three-term gaussian with a specific form to fit a data set. The fit isn't working out as I nicely. Could you help me out? Here attached is my code and the data, along with the fit I obtain:</div><div><br></div><div><div>import numpy as np</div><div><br></div><div>#from scipy.optimize import curve_fit</div><div>import scipy.optimize as optimize</div><div><br></div><div>import matplotlib.pyplot as plt</div><div><br></div><div>#r=np.linspace(0.0e-15,4e-15, 100)Â </div><div><br></div><div>data = np.loadtxt('V_lambda_n.dat')</div><div>r = data[:, 0]</div><div>V = data[:, 1]</div><div><br></div><div>std_dev=np.std(data)</div><div><br></div><div>def func(x, ps1, ps2, ps3, ps4):</div><div>Â Â return ps1*np.exp(-(x/ps2)**2) + ps2*np.exp(-(x/ps3)**2) + ps3*np.exp(-(x/ps4)**2)</div><div><br></div><div>popt, pcov = optimize.curve_fit(func, r, V, p0=[50, std_dev, 50, std_dev], maxfev=10000)</div><div><br></div><div>#params = optimize.curve_fit(func, ps1, ps2, ps3, ps4)</div><div><br></div><div>#[ps1, ps2, ps2, ps4] = params[0]</div><div><br></div><div>p1=plt.plot(r, V, 'bo', label='data')</div><div>p2=plt.plot(r, func(r, *popt), 'r-', label='fit')</div><div><br></div><div>plt.xticks(np.linspace(0, 4, 9, endpoint=True))</div><div>plt.yticks(np.linspace(-50, 150, 9, endpoint=True))</div><div>plt.show()</div></div></div>