Scipy минимизирует скаляр с помощью метода Brent, вызывая переполнение 34

#python #scipy

#python #scipy

Вопрос:

Я хотел бы найти локальный минимум функции f(x) = x^3 x^2 x - 2 , где x находится между <-10; 10> . Я использую Anaconda 3 в 64-битной версии Windows.

Мой код scipy python выдает ошибку:

 from scipy import optimize
def f(x):
    return (x**3) (x**2) x-2
x_min = optimize.minimize_scalar(f, bounds=[-10, 10], method='brent')
  

OverflowError: (34, ‘Результат слишком большой’)

Не слишком ли простая функция power to 3, чтобы сломать пакет оптимизации scipy?

Комментарии:

1. Согласно документации minimize_scalar , если вы хотите ограничить решение внутри bounds , вы должны использовать method = 'bounded' . По-видимому, brent метод не учитывает границы и прерывается, поскольку ваша функция не ограничена

2. вот и все, вы можете записать это как решение @Stelios, я приму его

3. Я был бы признателен за подсказку, почему Brent не может быть применен здесь, я не смог найти ответ, почему x^2 работает с Brent, в то время как power to 3 не будет.

Ответ №1:

При использовании локальных границ требуется изменение method на 'bounded'

 from scipy import optimize
def f(x):
    return (x**3) (x**2) x-2
x_min = optimize.minimize_scalar(f, bounds=[-10, 10], method='bounded')
print(x_min)