Невозможно получить значение chi ^ 2 из scipy.optimize.curve_fit
напрямую без ручных вычислений.Хотя возможно получить дополнительный вывод из curve_fit
помимо popt
и pcov
, указав аргумент full_output=True
, но дополнительный вывод не содержит значения chi ^ 2.(Дополнительным выводом является документ, например, leastsq
здесь ).
В случае, когда sigma
является массивом MxM, определение функции chi ^ 2, минимизированной с помощью curve_fit, равнонемного отличается.В этом случае curve_fit
минимизирует функцию r.T @ inv(sigma) @ r
, где r = ydata - f(xdata, *popt)
вместо chisq = sum((r / sigma) ** 2)
в случае одномерного sigma
, см. Документацию параметра sigma
.Таким образом, вы также сможете вычислять chi ^ 2 в вашем случае, используя r.T @ inv(sigma) @ r
с вашими оптимизированными параметрами.
Альтернативой может быть использование другого пакета, например lmfit , гдезначение квадрата хи можно получить непосредственно из результата подгонки:
from lmfit.models import GaussianModel
model = GaussianModel()
# create parameters with initial guesses:
params = model.make_params(center=9, amplitude=40, sigma=1)
result = model.fit(n, params, x=centers)
print(result.chisqr)