【问题标题】:Why do I get new values for defined variables?为什么我会得到已定义变量的新值?
【发布时间】:2020-11-25 09:48:51
【问题描述】:

我正在尝试使用曲线拟合计算偏移。我定义了我的已知变量并有一个未知变量。当我使用 logifunc 时,我 p0 中的变量不是定义的已知值。相反,我为每个变量都获得了一个新值。

Vergleich2['Wind']=Vergleich2.index

x2=Vergleich2.T.iloc[7]
y2=Vergleich2.T.iloc[6]
A2=popt[0]
b2=popt[1]
k2=popt[2]
off2=popt[3]

def logifunc(x2,A2,b2,k2,x0,off2):
    return A2 / (1 + b2 * np.exp(k2 * (x2+x0)))+off2

x_data2 = Vergleich2['Wind']
popt2, pcov2 = curve_fit(logifunc, x2,y2,p0 = [A2,b2,k2,2,off2])

my popt is: 
100.589
449.427
-0.695534
0.0554911

the popt2 output is:
100.204
846.734
-0.767603
0.517314
0.393996

为什么每个变量的值都会改变?

【问题讨论】:

  • 嗯,这不是curve_fit 的本意:更改所有参数以更好地适应输入数据。如果它不会改变参数,它还能做什么?请注意,curve_fit 允许对参数设置界限。
  • 感谢您的回复。我想要一个具有固定值且只有一个 x0 的公式,您可以更改它以在 x 轴上移动曲线。 x0 应该是最佳偏移值,以便尽可能多的点靠近新曲线。你有什么建议吗?

标签: matplotlib scipy curve-fitting


【解决方案1】:

您可以创建第二个函数来修复除x0 之外的所有参数:

def logifunc(x2,A2,b2,k2,x0,off2):
    return A2 / (1 + b2 * np.exp(k2 * (x2+x0)))+off2

def logifunc_x0(x2,x0):
    return A2 / (1 + b2 * np.exp(k2 * (x2+x0)))+off2

popt2, pcov2 = curve_fit(logifunc_x0, x2, y2, p0=[2])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多