首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在一组数据中拟合多个独立和重叠的洛伦兹峰?

在一组数据中拟合多个独立和重叠的洛伦兹峰,可以使用非线性最小二乘拟合方法

  1. 导入所需的库:
代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
  1. 定义洛伦兹函数:
代码语言:javascript
复制
def lorentzian(x, A, x0, gamma):
    return A * (1 / (1 + ((x - x0) / gamma) ** 2))
  1. 准备数据:
代码语言:javascript
复制
# 示例数据
x = np.linspace(-10, 10, 1000)
y = 3 * lorentzian(x, 1, -2, 0.5) + 2 * lorentzian(x, 1, 0, 0.5) + 1 * lorentzian(x, 1, 2, 0.5) + 0.1 * np.random.normal(0, 1, len(x))
  1. 定义拟合函数:
代码语言:javascript
复制
def multi_lorentzian(x, params):
    n_peaks = len(params) // 3
    y_fit = np.zeros_like(x)
    for i in range(n_peaks):
        A, x0, gamma = params[i * 3:i * 3 + 3]
        y_fit += lorentzian(x, A, x0, gamma)
    return y_fit
  1. 初始化参数:
代码语言:javascript
复制
# 假设有3个洛伦兹峰
n_peaks = 3
params_init = np.random.rand(n_peaks * 3)
  1. 使用curve_fit进行拟合:
代码语言:javascript
复制
params_opt, cov_matrix = curve_fit(multi_lorentzian, x, y, p0=params_init)
  1. 绘制结果:
代码语言:javascript
复制
y_fit = multi_lorentzian(x, params_opt)

plt.plot(x, y, 'ko', label='Data')
plt.plot(x, y_fit, 'r-', label='Fit')
plt.legend()
plt.show()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券