【问题标题】:scipy.optimize.curve_fit with conditionsscipy.optimize.curve_fit 条件
【发布时间】:2020-04-29 14:57:25
【问题描述】:

我正在使用 Python + NumPy + SciPy 根据数据确定方程的系数。方程定义如下:

def func (x, a,b,c,d):
    if x < d:
        return 0
    else:
        return a * ( 1 - np.exp( - b * (x - c) ** d)

根据我的发现,根据this discussion,传统的函数表示将不起作用,必须替换为:

def func (x, a,b,c,d):
    return np.where ( x < c,
        0 ,
        a * ( 1 - np.exp( - b * (x - c) ** d) )
    )

这会引发错误RuntimeWarning: invalid value encountered in power a * ( 1 - np.exp( - b * (x - c) ** d)

据我了解,这是因为试图创建 2 个数字数组(在这种情况下):

  • 第一个用0填充
  • 第二个填充了a * ( 1 - np.exp( - b * (x - c) ** d) )的结果

然后,根据这两个的条件选择创建结果数组。 在区间x &lt; c 中创建第二个数组,并结合d 的小数值导致从负数中求根。这导致了问题。

我的解决方法是:

def func (x, a,b,c,d):
    return np.where ( x < c,
        0 ,
        a * ( 1 - np.exp( - b * np.abs( x - c) ** d) )
    )

它工作正常,因为x &lt; c 的值范围由条件定义, 但是有没有更好的方法呢?

理想情况下,如果x &lt; c 和unversal,甚至可以防止计算a * ( 1 - np.exp( - b * (x - c) ** d),make 是否适用于更多的条件?

【问题讨论】:

    标签: python-3.x scipy scipy-optimize


    【解决方案1】:

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      相关资源
      最近更新 更多