2015-01-30 1 views
2

Я пытаюсь найти корни для двумерной задачи оптимизации, формы (ниже это не фактическое уравнение, поскольку оно очень длинное, это всего лишь пример стиля проблемы).Корневой поиск изредка терпит неудачу. Может ли fSolve предоставить лимиты для 2D-оптимизации?

def my_function(a,b): 
    c = exp(a) + b 
    d = a + 2 - exp(b) 
    return c, d 

Я хочу знать a и b, для которых c и d равны нулю.

До сих пор я использую fsolve из библиотеки scipy optimize и передаю начальные значения, поскольку значения, которые, как я знаю, близки к решению. Это хорошо работает, хотя в некоторых случаях это происходит неудачно, и я получаю сообщение об ошибке «не достигнув успеха в течение последних 10 итераций».

Интересно, есть ли способ/общая хорошая практика для того, чтобы корень нашел более надежным?

В противном случае, я хотел бы попробовать найти ограниченный корень. В 1D можно использовать fminbound, но я не могу найти функцию, которая позволит мне указать границы для двумерной задачи.

Любая помощь приветствуется.

Благодаря

+0

Должны ли мы предположить, что в вашей «актуальной» проблеме невозможно решить для 'b' в терминах' a'? Наилучший подход заключается в использовании связей между свободными переменными, чтобы аналитически уменьшить проблему до 1D. –

ответ

0

В большой картине нет общего способа сделать корень поиск более надежным - есть причина, есть так много различных функций в scipy.optimize!

Один трюк, а не нахождение корней f (x), вы можете вместо этого попытаться найти минимальные значения f^2 (x). Поиск минимальной часто бывает более надежным, потому что алгоритм просто должен идти вниз по склону. Однако недостатком является то, что найденные минимумы могут быть не в f (x) = 0 (т. Е. Не в корне).

Итак, вы можете попробовать scipy.optimize.fmin_tnc, который является минимизатором с границами и посмотреть, что произойдет.

Хорошие догадки всегда полезны, но «закрыть» может не всегда быть лучше - вы можете более глубоко изучить функцию и выяснить, как выглядит «закрытие» пейзажа, и если «закрыть» (или далеко !) в другом направлении может быть проще для решателя (т. е. одно направление может быть довольно изменчивым, требуя перехода на горы, чтобы найти долину, в то время как другое направление имеет прекрасный широкий путь вниз к дну долины).

Смежные вопросы