使用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强制这些点?
谢谢
答案 0 :(得分:1)
在x=0
,x=1
处具有特定值的拟合要求意味着参数a
,b
,c
,{{1}根据两个方程的集合约束:
d
,funclog(0, a, b, c, d) = 0
对于您正在考虑的funclog(1, a, b, c, d) = 1
形式,您可以针对funclog
和a
解决此方程组,从而产生(唯一)解决方案
d
和a = 1/(-log(c) + log(b + c))
(假设d=log(c)/(log(c) - log(b + c))
和b
使得分母不等于零)。
替换c
中a
和d
的这些表达式会产生新的拟合函数,即
funclog
,
默认情况下满足约束。可以通过(log(c) - log(b*x + c))/(log(c) - log(b + c))
找到b
和c
的值。
答案 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)