【发布时间】:2018-08-27 19:22:31
【问题描述】:
我正在尝试用 Voigt 函数拟合我的数据。我使用了下面给出的代码。但是合适的范围不合适..而且我不知道如何设置合适的范围。谁能帮帮我?
import numpy as np
import matplotlib.pyplot as plt
from scipy import asarray as exp
from numpy import genfromtxt
data= genfromtxt ('calibration.txt')
x=data[:,0]
y=data[:,1]
plt.xlim(0,1)
plt.ylim(0,1.25)
plt.xlabel("Voltage [V]")
plt.ylabel("Intensity")
def V(amp,x, sigma, gamma,a,b):
"""
Return the Voigt line shape at x with Lorentzian component HWHM gamma
and Gaussian component sigma, a&b as the center.
"""
return amp*np.exp(-(x-a)**2/(2*(sigma)**2))+gamma/np.pi/((x-b)**2+(gamma)**2)
amp,sigma, gamma,a,b =0.9, 0.1,0.04, 0.5,0.5
plt.plot(x,y,'b.',x, V(amp, x, sigma, gamma,a,b))
plt.show()
这是我的数据的链接 https://www.dropbox.com/s/vm9ta6samnlc0s2/calibration.txt?dl=0 感谢您的任何帮助。 PS:该程序产生下面给出的情节: https://www.dropbox.com/s/3rbuq4v7gcc92m7/figure_1.png?dl=0
【问题讨论】:
-
你放的不是 Voigt 而是伪 Voigt,我不确定它是否好用,请参阅 here。最重要的是,你不适合任何东西。最后,您应该考虑将峰值位置作为函数的变量。顺便说一句,为什么高斯被
0.1移动,而洛伦兹被0.5移动。这有点不正确。 -
作为 Voigt,您可能希望使用 Faddeeva function,它可以用
erf表示,它是scipy.special的一部分。不过,可能需要一些数据缩放才能正常工作。 -
我再次编辑了我的代码。你能检查一下并告诉我那里有什么问题吗?
-
请重新编辑。首先,您的示例不需要大多数
imports,请检查How to create a Minimal, Complete, and Verifiable example。amp等设置的行有错误的缩进。应该删除后面带有plt的两行。 -
提示,不要混淆变量和参数的顺序。最好有
V( x, sigma, gamma, amp, a, b )
标签: python data-fitting