用python拟合一个高斯函数加voigt函数
时间: 2023-07-15 21:13:01 浏览: 331
pthon 高斯拟合
可以使用`lmfit`库来拟合高斯函数加Voigt函数。以下是一段示例代码:
```python
import numpy as np
from lmfit import Model
def gaussian(x, amp, cen, wid):
"""定义高斯函数"""
return (amp / (np.sqrt(2*np.pi) * wid)) * np.exp(-(x-cen)**2 / (2*wid**2))
def voigt(x, amp, cen, wid, eta):
"""定义Voigt函数"""
from scipy.special import wofz
z = (x - cen + 1j*wid*eta) / (wid*np.sqrt(2))
return (amp*wofz(z).real) / (np.sqrt(2*np.pi)*wid*(1-eta**2)**0.5)
def gauss_voigt(x, amp_g, cen_g, wid_g, amp_v, cen_v, wid_v, eta):
"""定义高斯函数加Voigt函数"""
return gaussian(x, amp_g, cen_g, wid_g) + voigt(x, amp_v, cen_v, wid_v, eta)
# 生成一组测试数据
x = np.linspace(-10, 10, 500)
y = gauss_voigt(x, 1, 0, 1, 1, 0, 1, 0.5) + np.random.randn(len(x))*0.05
# 定义模型
model = Model(gauss_voigt)
# 设置初始参数
params = model.make_params(amp_g=1, cen_g=0, wid_g=1, amp_v=1, cen_v=0, wid_v=1, eta=0.5)
# 拟合数据
result = model.fit(y, params, x=x)
# 打印拟合结果
print(result.fit_report())
```
输出结果中会显示拟合的参数和拟合曲线的相关信息。可以根据需要修改参数的初始值、约束条件等。
阅读全文