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

如何解决scipy.optimize.curve_fit拟合指数函数时报残差非有限值错误

问题根因

  • 核心错误是scipy.optimize.curve_fit的入参顺序传反:该函数的标准调用顺序是curve_fit(待拟合函数, 自变量x数据, 因变量y数据),你两次调用都把y和x的位置写反了。
  • 参数顺序错误后,原本的因变量y(数值范围2307~309083)被当作自变量输入拟合函数,计算np.exp(c*(x-2011))时指数项数值爆炸溢出,得到无穷大结果,因此触发ValueError: Residuals are not finite in the initial point报错;之前调大maxfev无效也是因为参数逻辑错误,拟合过程完全偏离正确方向。

修复方案

调整curve_fit的x、y数据顺序即可,完整可运行代码如下:

import numpy as np
from scipy.optimize import curve_fit

# 原始数据
x = np.linspace(2011, 2021, 11)
y = np.array([2307, 4541, 7114, 12156, 18948, 25502, 34022, 53861, 83175, 136617, 309083])

# 自定义拟合函数
def y_func(x, a, b, c):
    return np.exp(c*(x-2011))*b + a

# 修正参数顺序后的拟合调用
popt, pcov = curve_fit(y_func, x, y, bounds=([1000, 30, 0.8], [3000, 80, 1.1]), p0=[2307, 50, 0.88])

# 输出拟合得到的a、b、c参数
print(popt)

运行后可正常得到拟合结果,无报错。

可选优化建议

如果后续遇到手动猜初始参数不准的情况,可以先对y取对数,做线性拟合先拿到c和b的近似估计值,作为p0传入能大幅提升拟合成功率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:09:02