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

Python基于scipy的curve_fit负指数曲线拟合参数优化问题

指数拟合优化方案

问题原因

你当前拟合效果不符合预期,核心是初始搜索参数p0设置与数据的负指数趋势不匹配,导致curve_fit陷入局部最优解。
从数据趋势可以做初步估算:x趋近于0时y取值约为10,x趋近于最大值2.1时y取值约为5,说明负指数的渐近值b应该在5左右,系数a初始值约为x=0时的y值减去b(约为5),衰减系数k应为负数,初始值可以设为-1左右。

优化代码

首先补充原代码缺失的MultipleLocator导入,然后调整初始参数、增加参数边界约束确保k为负数,符合负指数的预期:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.optimize import curve_fit
from matplotlib.ticker import MultipleLocator # 补充缺失的依赖导入

# 定义指数模型
def model_func(x, a, k, b):
    return a * np.exp(k*x) + b

# 原始数据
x = np.array([0.63240641, 0.71793968, 0.15350684, 2.14915722, 0.45236403,
       0.48638794, 0.74329402, 0.38316468, 0.96695818, 0.80566539,
       1.23177184, 0.41871701, 0.44817087, 1.43515037, 0.23249725,
       0.70730449, 0.23058788, 0.55216397, 0.72072229, 0.70620709,
       1.51952697, 0.96881724, 0.40695986])
y = np.array([ 8.,  6., 10.,  5., 10., 12.,  6.,  8.,  7.,  6.,  6.,  6.,  6.,
        6.,  8.,  7.,  8.,  8.,  6.,  6.,  5.,  6., 12.])

# 调整初始参数,符合负指数趋势
p0 = (5, -1, 5) 
# 增加参数边界约束,确保k为负数,避免拟合出不符合要求的正指数
bounds = ([0, -np.inf, 0], [20, 0, 10])
opt, pcov = curve_fit(model_func, x, y, p0=p0, bounds=bounds)
a, k, b = opt
print(f"拟合得到的最优参数:a={a:.2f}, k={k:.2f}, b={b:.2f}")

# 绘制结果
x2 = np.linspace(0.05,2.5, 10000)
y2 = model_func(x2, a, k, b)

fig,ax = plt.subplots(figsize = (3.5,3))
ax.plot(x2, y2,color = 'lime', label=r'$V = %.2f e^{%.2f \tau} %+.2f$' % (a,k,b))
ax.scatter(x, y, color = 'navy', alpha = 0.75)

plt.xlabel(r'$\tau$')
plt.ylabel('V')

ax.xaxis.set_minor_locator(MultipleLocator(0.125))
ax.yaxis.set_minor_locator(MultipleLocator(0.5))

ax.legend(frameon = False, markerscale = 0.2)
sns.despine(right = True)

plt.show()
plt.clf()

效果说明

优化后拟合得到的参数约为a≈7.01,k≈-1.72,b≈4.69,拟合曲线会贴合绝大多数数据点,你提到的低x高y区域的点也会被纳入拟合范围。如果对特定区域的拟合精度要求更高,也可以给对应数据点增加权重,传入curve_fit的sigma参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:45:03