Scipy 曲线拟合在期望四个值时仅给出两个值

问题描述 投票:0回答:1

我目前正在尝试使用 Scipy 曲线拟合函数来拟合具有四个值的双曲正切数据集。然而曲线拟合仅返回两个值。这是我开始的代码:

def tanh(x,A,B,C,To):
    y=((A+B)/2)+((A-B)/2)*np.tanh((x-To)/(C))
    return y

parameters=curve_fit(tanh,df5.iloc[:,0],df5.iloc[:,1])
Afit=parameters[0]
Bfit=parameters[1]
Cfit=parameters[2]
Tofit=parameters[3]

numpy 和 curve_fit 均已正确安装并导入。我知道 df5 的格式正确,因为我已经能够在代码的其他部分绘制原始数据。

我尝试更改代码,将参数设置为等于不同的拟合值,如下所示:

 def tanh(x,A,B,C,To):
    y=((A+B)/2)+((A-B)/2)*np.tanh((x-To)/(C))
    return y

parameters=curve_fit(tanh,df5.iloc[:,0],df5.iloc[:,1])
Afit,Bfit,Cfit,Tofit=parameters

我还添加了初始猜测,以帮助函数缩小预期值的范围。

def tanh(x,A,B,C,To):
    y=((A+B)/2)+((A-B)/2)*np.tanh((x-To)/(C))
    return y

initialguess=[intA,intB,intC,intTo]
parameters=curve_fit(tanh,df5.iloc[:,0],df5.iloc[:,1],p0=initialguess)
Afit,Bfit,Cfit,Tofit=parameters

` 我相信问题出在我定义的 tanh 函数中。我看不出我哪里搞砸了,也看不出我需要改变什么才能让它运行。

python scipy curve-fitting
1个回答
0
投票

curve_fit函数始终返回两个值。第一个是包含 N 个优化参数的数组,这些参数是您期望函数返回的参数,第二个是这些参数的协方差。 因此,要按照您想要的方式提取参数,请替换

parameters=curve_fit(tanh,df5.iloc[:,0],df5.iloc[:,1],p0=initialguess)

parameters, _=curve_fit(tanh,df5.iloc[:,0],df5.iloc[:,1],p0=initialguess)
这将使参数 = opt 和 _ = cov,而不是参数 = (opt, cov)。现在,参数是四个值的数组而不是两个值的元组,您应该能够用它分配四个变量。

© www.soinside.com 2019 - 2024. All rights reserved.