我正在尝试定义一个分段函数,以便由Python中的lmfit库来拟合。我遇到的问题是我为函数定义的一个参数不会与我提交的数据一起计算。在
我有一个与我的here有点相似的例子。然而,answer描述的向量化函数并没有产生我想要的值,而且在阅读文档时,它似乎不是我的解决方案的答案。我也用过scipy.optimize.leatsq,但我遇到了与下面描述的lmfit相同的问题。在
我有一个剩余函数的定义,比如from lmfit import minimize, Parameters, Model
def residual(params, y, x):
param1 = params['one']
param2 = params['two']
if(param2 < x):
p = 1
else:
p = param1*x + param2
return p - y
params = Parameters()
params.add('one', value=1)
params.add('two', value=2)
out = minimize(residual, params,args=(y,x))
我还试着定义函数
^{pr2}$
我也尝试过内联使用lambda函数。在
我得到了一个错误“具有多个元素的数组的真值不明确”。当我得到错误时,它发生的原因是有道理的,因为(param2<;x)将生成一个逻辑数组。然而,我似乎找不到一种方法来用给定的情况以分段的方式定义函数,以使它与最小拟合()功能。我已经在Matlab中看到了答案,其中nlinfit函数似乎可以毫无问题地对数据元素求值(我尝试搜索Python是否有一个等价的操作来定义元素计算,比如.*或.+,但这似乎没有显式存在)。在
与nlinfit相比,lmfit的操作方式似乎也有点不同,因为我们必须总是有残差返回(model-y),而nlinfit一旦函数给定就输出结果,我不确定这可能是另一个问题。在
所以重申一下,我的主要问题是,是否有一种方法来定义分段函数,以便它可以将参数与数据集进行比较。在
任何帮助或解释将不胜感激,谢谢!在