我正在尝试定义一个分段函数,以便由 Python 中的 lmfit 库拟合。我遇到的问题是我为该函数定义的参数不会与我提交的数据一起评估。
我有一个与我的案例有点相似的例子here https://stackoverflow.com/questions/11129812/fitting-piecewise-function-in-python。然而,答案描述的向量化函数没有产生我想要的值,并且在阅读文档时,它似乎不是我的解决方案的答案。我还使用了 scipy.optimize.leastsq,但我在使用下面描述的 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))
我还尝试定义该函数
def f(param1,param2,x):
if(param2 < x):
p = 1
else:
p = param1*x + param2
return p
def residual(params, y, x):
param1 = params['one']
param2 = params['two']
return f(param1,param2,x) - y
我还尝试过使用 lambda 函数内联。
我收到一条错误消息“具有多个元素的数组的真值不明确。”当我收到错误时,就明白了为什么会发生这种情况,因为 (param2
与 nlinfit 相比,lmfit 的操作似乎也有点不同,因为我们必须始终返回残差(模型 - y),而 nlinfit 在给出函数后输出结果,我不确定这可能是另一个问题。
因此,重申一下,我的主要问题是是否有一种定义分段函数的方法,以便它可以将参数与数据集进行比较。
任何帮助或解释将不胜感激,谢谢!