【发布时间】:2017-11-15 12:14:42
【问题描述】:
我想找出信号开始呈指数增长的时间。为此,我将指数曲线拟合到数据中,并乘以重阶阶跃函数。
def fit(x, a, b, c, d, e):
return np.heaviside(x-a, 0.5)*b*np.exp(c*x-d)+e
parameter, covariance = curve_fit(fit, fitx, fity)
x = np.linspace(min(fitx), max(fitx), 1000)
plt.plot(fitx, fity)
plt.plot(x, fit(x, *parameter), 'b-', label='fit')
plt.show()
结果是一条直线
当我只拟合指数部分时,我得到下图:
我希望 x 轴是一条直线,然后是图 2 中的指数图。有人知道我哪里出错了吗?
【问题讨论】:
-
可能你需要为你的参数
a提供一个合理的起点。 -
@IgnacioVergaraKausel 帮助很大,谢谢!
-
我会说 70% 的拟合问题是错误的起点,其余大部分是定义错误的拟合函数。我会把评论作为答案。
-
你说的指数增长是什么意思?首先它会减少,然后随着一些振荡而增加。你想适合哪一边?如果函数的类型是
( 1 - exp( -x ) ),那么阶梯函数是否更适合括号外?此外,拟合阶跃函数总是有点棘手,因为位置偏移小于数据密度不会改变chi**2。不过,SE 上有几篇文章处理这个问题。
标签: python scipy curve-fitting