2024-09-28 03:20:52 发布
网友
我在使用Scipy中包含的曲线拟合函数时遇到了一个小问题。以下是我想要适应的函数:
def funclog(x, a, b, c, d): return a * np.log(b * x + c) + d
我的问题是,我希望拟合函数在某些点上有一个特定的值(y(min)=0,y(max)=1)。如何使用曲线拟合强制这些点?你知道吗
谢谢
在x=0,x=1处具有特定值的拟合要求意味着参数a,b,c,d根据两个方程组进行约束:
x=0
x=1
a
b
c
d
funclog(0, a, b, c, d) = 0,funclog(1, a, b, c, d) = 1
funclog(0, a, b, c, d) = 0
funclog(1, a, b, c, d) = 1
对于你正在考虑的funclog形式,你可以根据a和d解这个方程组,得到(唯一的)解
funclog
a = 1/(-log(c) + log(b + c))和d=log(c)/(log(c) - log(b + c))
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的值可以通过curve_fit找到。你知道吗
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)
在
x=0
,x=1
处具有特定值的拟合要求意味着参数a
,b
,c
,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
的值可以通过curve_fit
找到。你知道吗您可以尝试使用边界:
下一个
相关问题 更多 >
编程相关推荐