适合两种不同的功能,边界作为适合参数

时间:2018-04-24 08:57:51

标签: python curve-fitting

我对Python中的简单拟合函数有疑问。 我试图在数据集上安装两个不同的函数,两个机制之间的边界也应该是一个拟合参数。 非常天真,我正在尝试这样的事情:

bash-3.2$ A="coucou" B="a$Aa"; echo  "${B}"
a
bash-3.2$ A="coucou" B="a${A}a"; echo  "${B}"
acoucoua
bash-3.2$

但我得到了一个ValueError:

  

系列的真值是模棱两可的。使用a.empty(),a.bool(),a.item(),a.any()或a.all()

据我所知,你不能将我的x数组与一个整数值(甚至没有分配给一个固定值,这应该由curve_fit过程完成)。

我无法找到这个所谓的简单问题的解决方案。有人可以帮我解决这个问题吗?

提前致谢!

编辑:我构建了一个例子: Constructed example 对于x <5的数据,这通过线性函数(y = x-3)完美地描述,对于x> 5,这通过平方函数(y = x ** 2 / 5-3 * x / 5)完美地描述。 )。假设你不知道x是完美的'边界',有没有办法让curve_fit找到?

1 个答案:

答案 0 :(得分:1)

错误消息表示将数组(x)的值与标量值(border)进行比较是不明确的。您的意思是,如果x任何值小于border,或者x所有值小于{{1} }}?

我怀疑你真正想要的是numpy的border函数,这有点像循环where并决定逐点使用哪个表达式,只是更快:

x

我认为这就是你想要的,它应该可以根据def FitFunc(x, a, b, c, d, e, border): out = a * x + b out[np.where(x > border)] = c * x**2 + d * x + e return out 选择合适的功能形式。

但是,我要提醒一下,它可能不会你想要的东西。也就是说,看起来您希望border成为拟合变量。

在scipy border例程(以及大多数“曲线拟合”上下文)中拟合变量需要是连续浮点变量。您的optimize变量将用作border索引的离散整数值来更改函数形式。拟合算法将首先选择一个值(比如说5.0),然后对该值进行非常小的改变(比如说,5.0000002)。这不会改变两个函数形式之间断点的位置,并且拟合将决定x不会改变拟合。我希望我能解决这个问题。