强制数据用曲线拟合点

2024-09-28 03:20:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Scipy中包含的曲线拟合函数时遇到了一个小问题。以下是我想要适应的函数:

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

我的问题是,我希望拟合函数在某些点上有一个特定的值(y(min)=0,y(max)=1)。如何使用曲线拟合强制这些点?你知道吗

谢谢


Tags: 函数logreturndefnpscipyminmax
2条回答

x=0x=1处具有特定值的拟合要求意味着参数abcd根据两个方程组进行约束:

funclog(0, a, b, c, d) = 0funclog(1, a, b, c, d) = 1

对于你正在考虑的funclog形式,你可以根据ad解这个方程组,得到(唯一的)解

a = 1/(-log(c) + log(b + c))d=log(c)/(log(c) - log(b + c))

(假设bc分母不等于零)。你知道吗

将这些表达式替换为ad中的funclog会产生一个新的拟合函数,即

(log(c) - log(b*x + c))/(log(c) - log(b + c))

默认情况下满足约束。bc的值可以通过curve_fit找到。你知道吗

您可以尝试使用边界:

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)

相关问题 更多 >

    热门问题