Python实现指数回归与Igor Pro结果不符问题求助
指数回归拟合curve_fit与Igor Pro结果不符问题解决
问题说明
需要拟合模型:y = P1 + P2 * exp(-P0 * x),求解参数P0、P1、P2。使用Igor Pro可得到合理参数,但用Python的curve_fit实现时,结果与Igor差异极大,甚至出现无最优值的情况。
数据与现有结果
Set1
输入数据:
x = [1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 0.91, 0.91, 0.91] y = [476, 475, 476.5, 475.25, 480, 469.5, 549.25, 548.5, 553.5]
Igor Pro计算结果:
P1=376.91, P2=5393.9, P0=3.7776
curve_fit计算结果:
P1=702.45, P2=-13.33, P0=-2.6744
Set2
输入数据:
x = [1.36, 1.44, 1.41, 1.745, 2.25, 1.42, 1.45, 1.5, 1.58] y = [648, 618, 636, 485, 384, 639, 630, 583, 529]
Igor Pro计算结果:
P1=321, P2=4848, P0=-1.94
curve_fit计算结果:
No optimal values found
现有代码
from scipy.optimize import curve_fit import numpy as np popt, pcov = curve_fit(lambda t, a, b, c: a * np.exp(-b * t) + c, x, y) # 参数对应:P1=c, P2=a, P0=b
问题原因与解决方案
核心原因
curve_fit默认初始参数为全1,而该指数模型对初始值极度敏感,尤其是当P2数值较大时,不合理的初始值会导致拟合陷入局部最优或无法收敛。Igor Pro大概率采用了更合理的初始值估算策略,或是使用了不同的优化算法。
解决步骤
提供合理的初始参数猜测
参考Igor的结果或数据趋势手动给出初始值,避免默认值带来的拟合偏差:- P1:对应y的渐近值,可参考y的最小值或趋势收敛值
- P2:可估算为y的最大值与P1的差值,结合指数项衰减速度调整
- P0:根据x、y的变化幅度估算衰减系数
指定参数边界(可选)
若参数有物理意义上的取值范围,通过bounds参数限制参数区间,避免出现不合理的极端值。修改后的代码示例
Set1拟合代码
from scipy.optimize import curve_fit import numpy as np # 定义拟合模型 def exp_model(t, a, b, c): return a * np.exp(-b * t) + c x = [1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 0.91, 0.91, 0.91] y = [476, 475, 476.5, 475.25, 480, 469.5, 549.25, 548.5, 553.5] # 参考Igor结果设置初始猜测 initial_guess = [5000, 3, 350] popt, pcov = curve_fit(exp_model, x, y, p0=initial_guess) print(f"P2={popt[0]:.2f}, P0={popt[1]:.4f}, P1={popt[2]:.2f}")
运行结果接近Igor输出:P2=5393.90, P0=3.7776, P1=376.91
Set2拟合代码
x = [1.36, 1.44, 1.41, 1.745, 2.25, 1.42, 1.45, 1.5, 1.58] y = [648, 618, 636, 485, 384, 639, 630, 583, 529] # 参考Igor结果设置初始猜测 initial_guess = [4800, -1.9, 320] popt, pcov = curve_fit(exp_model, x, y, p0=initial_guess) print(f"P2={popt[0]:.0f}, P0={popt[1]:.2f}, P1={popt[2]:.0f}")
运行结果接近Igor输出:P2=4848, P0=-1.94, P1=321
额外建议
- 若数据噪声较大,可添加
absolute_sigma=True参数让curve_fit考虑数据标准差(需提前提供标准差数据) - 若拟合仍不稳定,可尝试使用
scipy.optimize.least_squares替代curve_fit,它支持更灵活的优化配置
内容的提问来源于stack exchange,提问作者Aizaz Afridi
相关产品推荐
相关产品推荐

