Как мне получить неопределенности от lmfit минимизатораPython

Программы на Python
Anonymous
Как мне получить неопределенности от lmfit минимизатора

Сообщение Anonymous »

Я использую lmfit, чтобы подогнать несколько лоренцианов. По причинам границ я не могу напрямую использовать функции scipy.optimize. С lmfit подгонка работает хорошо, но res.covar всегда имеет значение None, res.errorbars имеет значение False, res.uvars не определено и res.params['parameter_name'].stderr также имеет значение None. Мне нужны панели ошибок. Вот мой код (без данных):

Код: Выделить всё

def to_minimize(params, x, y, uncertainties=None):
x0 = params["x0"]
ampl0 = params["ampl0"]
ampl = params["ampl"]
sig = params["sig"]

model = lorentzian(x, x0, ampl0, ampl, sig)
if uncertainties is not None:
return (y- model) / uncertainties
else:
return y - model

params = lmfit.Parameters()
params.add("x0", value=guess[0], min=guess[0] - 1000, max=guess[0] + 1000)
params.add("ampl0", value=guess[1], min=0)
params.add("ampl", value=guess[2], min=0)
params.add("sig", value=guess[3], min=0)

out = lmfit.minimize(to_minimize, params, args=(x_data, y_data))
Здесь лоренциан — это функция, которая вычисляет лоренциан, а предположение — это список начальных значений для предположения. x_data и y_data — это массивы 1d размером 50000+. Вот результат, который я получаю, когда печатаю в ячейке Jupyter:

Код: Выделить всё

Fit Result
Fit Statistics
fitting method  leastsq
# function evals    156
# data points   51201
# variables 4
chi-square  9.8949e-23
reduced chi-square  1.9327e-27
Akaike info crit.   -3149414.19
Bayesian info crit. -3149378.82
Parameters
name    value   initial value   min max vary
x0  2424682.92  2424725.9731872166  2423725.97  2425725.97  True
ampl0   1.6720e-13  1.6717888361052836e-13  0.00000000  inf True
ampl    1.2557e-12  1.2557626695414776e-12  0.00000000  inf True
sig 105.300229  4.296879768371582   0.00000000  inf True
print(out.covar) дает «Нет». out.errorbars имеет значение false. out.uvars вызывает AttributeError. Мне нужны эти ошибки в параметрах, какими бы маленькими они ни были. Но во время установки я не получаю никаких предупреждений, и numdiftools установлен. Что мне здесь не хватает?
Моя версия lmfit — 1.3.2, а numdifftools — 0.9.41. Версия Python 3.11.7
Если невозможно получить их в качестве выходных данных, можете ли вы предложить способ их вычисления вручную? Спасибо большое

Подробнее здесь: https://stackoverflow.com/questions/787 ... -minimizer

Вернуться в «Python»