2012-02-07 11 views
12

Używam w sposób powtarzalny metody scipy.optimize.curve_fit().Błąd runtime SciPy curve_fit, zatrzymywanie iteracji

Moim problemem jest to, że kiedy tylko jest w stanie dopasować parametry cały program (a więc iteracji) zatrzymuje się, to jest błąd to daje:

RuntimeError: Optimal parameters not found: Number of calls to function has reached maxfev = 800.

Rozumiem, dlaczego to ma nie mogłem się zmieścić. Mój problem polega na tym, że w jaki sposób mogę napisać program w Pythonie 3.2.2, który zignoruje takie zdarzenia i po prostu kontynuuje?

Odpowiedz

12

Można użyć standardowej obsługi wyjątków Pythona, aby wychwycić błąd podniesiony przez curve_fit w przypadkach, gdy optymalizacja nie może znaleźć rozwiązania. Więc coś takiego:

try: 
    popt,pcov = scipy.optimize.curve_fit(f, xdata, ydata, p0=None, sigma=None) 

except RuntimeError: 
    print("Error - curve_fit failed") 

To konstrukcja pozwoli Ci złapać i obsługiwać stan błędu podniesiony przez curve_fit bez swój program Przerwij.

+1

Dziękuję bardzo. Jestem nowy w Pythonie i ten błąd naprawdę mi przeszkadzał. Przeczytałem podręcznik na temat procedury obsługi błędów próba wyjątkiem i zrozumiałem. Jeszcze raz dziękuję ... – makhlaghi

+1

Więc jedno szybkie słowo, aby to podsumować. Czy taki błąd (nawet jeśli jest podniesiony do, powiedzmy, 'maxfev = 2000') oznacza, że ​​dopasowanie nie jest możliwe, np. Krzywa, którą próbujemy dopasować, nie jest dobrze dopasowana, lub może nie pasuje w ogóle ? Ostatecznie, jeśli testujesz szereg praw, czy ten błąd mówi nam, że powinniśmy odrzucić funkcję, dla której powstał błąd? – FaCoffee

Powiązane problemy