Как я могу вручную справиться с ошибкой расхождения при использовании optimize.newton в SciPy?

Я использую оптимизацию newton из SciPy для решения уравнения, и в зависимости от первоначального предположения иногда решение не сходится и дает сбой.

x = optimize.newton(fun,1/1000)

Можно ли вместо сообщения о сбое python напечатать сообщение о том, что конвергенция не удалась, или повторить попытку оптимизации с другими начальными значениями?


person melody    schedule 04.02.2020    source источник


Ответы (1)


Из документации:

disp: bool, необязательный

Если True, вызовите RuntimeError, если алгоритм не сошелся, с сообщением об ошибке, содержащим количество итераций и текущее значение функции. В противном случае статус конвергенции записывается в возвращаемый объект RootResults. Игнорируется, если x0 не является скалярным. Примечание: это не имеет ничего общего с отображением, однако ключевое слово disp нельзя переименовать для обратной совместимости.

Вы должны установить disp на False, потому что он включен по умолчанию:

optimize.newton(fun, 1/1000, disp=False)

Ваш результат и другая информация будут в RootResults объект.

person Jan Schultke    schedule 04.02.2020
comment
Привет, спасибо за ответ. Как вызвать RuntimeError? - person melody; 27.02.2020
comment
нашел учебник, который помог с RuntimeError. datacamp.com/community/tutorials/exception-handling-python - person melody; 27.02.2020