Я пытаюсь определить кусочную функцию для подгонки библиотекой lmfit в 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
Я также попытался встроить с помощью лямбда-функции.
Я получаю сообщение об ошибке «Значение истинности массива с более чем одним элементом неоднозначно».Когда я получил ошибку, было понятно, почему это произошло, потому что (param2
Похоже, что lmfit также работает немного по-другому по сравнению с nlinfit, потому что мы должны всегда возвращать остатки (модель - y), в то время как nlinfit выводит результат, как только задана функция, что, я не уверен, могло бытьдругая проблема.
Итак, еще раз повторяю, мой главный вопрос заключается в том, существует ли метод определения кусочной функции, позволяющий сравнивать параметр с набором данных.
Буду признателен за любую помощь или объяснение,спасибо!