You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正数据曲线拟合结果?附Python拟合代码与问题说明

修正指定拟合函数曲线拟合结果的实操步骤

1. 先确认拟合函数与数据的匹配性

你的示例数据是用data(x, a, b, c, d)生成的指数组合形式,但拟合函数fit_function是带平方根项的复杂指数形态,两者函数特征完全不匹配,这是拟合失效的核心原因之一。

  • 如果是测试代码,需改用拟合函数生成模拟数据,确保数据形态与拟合目标一致:
# 改用拟合函数生成模拟数据(替换原data函数生成逻辑)
true_T, true_Delta_E, true_hbar_omega = 2, 3, 1.5
distribution_data = fit_function(epsilon_data, true_T, true_Delta_E, true_hbar_omega)
# 加少量噪声模拟真实数据
distribution_data += np.random.normal(0, 0.05 * np.max(distribution_data), size=distribution_data.shape)
  • 如果是实际数据,要先验证数据分布是否符合fit_function的理论形态,避免用错误的模型拟合数据。

2. 优化初始猜测值p0

非线性拟合的初始值对迭代结果影响极大,尤其是你的拟合函数包含多个指数项,初始值不合理会导致迭代陷入局部最优或不收敛:

  • 基于物理意义约束:T、Delta_E、hbar_omega均为正数,初始值需设置在合理正数区间。
  • 基于数据特征估算:
    • 数据峰值对应的epsilon值可作为Delta_E的初始猜测;
    • 数据从峰值衰减至1/e的epsilon差值,可估算T的初始值;
    • 根据数据整体缩放比例,设置hbar_omega的初始值。
      示例调整:
p0 = [2, 3, 1.5]  # 对应T, Delta_E, hbar_omega的合理初始值

3. 处理数值稳定性问题

拟合函数中的指数运算易出现数值溢出/下溢,可通过截断指数参数优化:

def fit_function(epsilon, T, Delta_E, hbar_omega):                            
    sqrt_ratio = np.sqrt(epsilon / Delta_E)
    exp_arg1 = -(epsilon - Delta_E) / T
    exp_arg2 = (4 * np.pi * Delta_E / hbar_omega) * (sqrt_ratio - 1)
    # 截断极端指数值,防止溢出
    exp_arg2 = np.clip(exp_arg2, -50, 50)
    term1 = np.exp(exp_arg1)
    term2 = np.exp(exp_arg2)
    term3 = term2 + 1
    return term1 * term2 / term3

4. 约束参数取值范围

使用curve_fit的bounds参数限制参数的合理范围,避免无物理意义的结果,同时缩小迭代范围提升精度:

# 设置参数下界(全为正数)和上界(根据实际场景调整)
bounds = (0, [10, 10, 5])
popt, pcov = curve_fit(fit_function, epsilon_data, distribution_data, p0=p0, bounds=bounds, maxfev=8000)

5. 验证拟合效果

  • 打印拟合参数popt和协方差矩阵pcov:协方差矩阵对角线元素越小,参数置信度越高;
  • 绘制残差图验证:残差随机分布在0附近说明拟合效果好,有明显趋势则需调整模型或参数:
# 计算并绘制残差
residuals = distribution_data - fit_function(epsilon_data, *popt)
plt.figure()
plt.scatter(epsilon_data, residuals)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('动能 (ε)')
plt.ylabel('残差')
plt.title('拟合残差图')
plt.show()

内容的提问来源于stack exchange,提问作者Saya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 01:44:57