使用curve_fit强制数据拟合点

时间:2016-11-03 12:30:51

标签: python numpy scipy

使用Scipy中包含的curve_fit函数我有点问题。这是我想要的功能:

def funclog(x, a, b, c, d):
   return a * np.log(b * x + c) + d

我遇到的问题是我希望fit函数在某些点上具有特定值(y(min)= 0和y(max)= 1)。如何用curve_fit强制这些点?

谢谢

2 个答案:

答案 0 :(得分:1)

x=0x=1处具有特定值的拟合要求意味着参数abc,{{1}根据两个方程的集合约束:

dfunclog(0, a, b, c, d) = 0

对于您正在考虑的funclog(1, a, b, c, d) = 1形式,您可以针对funcloga解决此方程组,从而产生(唯一)解决方案

da = 1/(-log(c) + log(b + c))

(假设d=log(c)/(log(c) - log(b + c))b使得分母不等于零)。

替换cad的这些表达式会产生新的拟合函数,即

funclog

默认情况下满足约束。可以通过(log(c) - log(b*x + c))/(log(c) - log(b + c))找到bc的值。

答案 1 :(得分:0)

您可以尝试使用边界:

bounds = ([amin, bmin, cmin, dmin], [amax, bmax, cmax, dmax])
(or np.inf  -np.inf if limes of param is in infininty)

下一个

popt1, pcov1 = curve_fit(funclog, x, y, bounds=bounds)