From d1e18b6673104a2a3b366fa7b247bd951869d293 Mon Sep 17 00:00:00 2001 From: Simon Kuberski Date: Wed, 2 Feb 2022 09:05:13 +0100 Subject: [PATCH] Fixes least_squares with migrad, tests extended --- pyerrors/fits.py | 5 +++-- tests/fits_test.py | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pyerrors/fits.py b/pyerrors/fits.py index 22c69fe3..311fba89 100644 --- a/pyerrors/fits.py +++ b/pyerrors/fits.py @@ -487,20 +487,21 @@ def _standard_fit(x, y, func, silent=False, **kwargs): chisq = anp.sum(((y_f - model) / dy_f) ** 2) return chisq - if 'method' in kwargs: + if 'method' in kwargs and not (kwargs.get('method', 'Levenberg-Marquardt') == 'Levenberg-Marquardt'): output.method = kwargs.get('method') if not silent: print('Method:', kwargs.get('method')) if kwargs.get('method') == 'migrad': fit_result = iminuit.minimize(chisqfunc, x0) fit_result = iminuit.minimize(chisqfunc, fit_result.x) + output.iterations = fit_result.nfev else: fit_result = scipy.optimize.minimize(chisqfunc, x0, method=kwargs.get('method')) fit_result = scipy.optimize.minimize(chisqfunc, fit_result.x, method=kwargs.get('method'), tol=1e-12) + output.iterations = fit_result.nit chisquare = fit_result.fun - output.iterations = fit_result.nit else: output.method = 'Levenberg-Marquardt' if not silent: diff --git a/tests/fits_test.py b/tests/fits_test.py index 48012edb..33a3b958 100644 --- a/tests/fits_test.py +++ b/tests/fits_test.py @@ -49,6 +49,8 @@ def test_least_squares(): y = a[0] * np.exp(-a[1] * x) return y + out = pe.least_squares(x, oy, func, method='migrad') + out = pe.least_squares(x, oy, func, method='Powell') out = pe.least_squares(x, oy, func, expected_chisquare=True, resplot=True, qqplot=True) beta = out.fit_parameters