【问题标题】:Three-term gaussian fit to gaussian data (python)三项高斯拟合高斯数据(python)
【发布时间】:2017-08-30 18:02:46
【问题描述】:

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

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()

结果如下:

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

【问题讨论】:

  • .........popt, pcov = optimize.curve_fit(partial(func, x, ps1, ps2, ps3, ps4), r, V, maxfev=10000).. ..?
  • 嗨@AriGold,当我尝试收到错误“NameError: name 'partial' is not defined”
  • 从 functools 导入部分
  • @AriGold 我收到错误消息“NameError: name 'x' is not defined”。这是我的拟合函数中的参数之一。
  • 从现在开始就是你的任务了,请找出原因......

标签: python python-2.7 gaussian data-fitting


【解决方案1】:

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

p0=[V.max(), std_dev, V.max(), 2]

合身度好多了。新的配合如图所示

enter image description here

我希望合身可以变得比这更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 2018-12-10
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多