Поиск корня для нелинейных векторных функций в python: как я могу установить границы для своих переменных?

Для поиска корня скалярных функций scipy.optimize.root_scalar предоставляет очень полезный аргумент bracket, который я могу использовать для установки интервала, заключающего в скобки мой корень, чтобы гарантировать, что найденный корень является тем, который мне нужен. Я хочу сделать то же самое для векторной функции (x1, x2), где единственные значимые для меня корни лежат между (0, 1) для обеих переменных. Однако функция поиска корня вектора в scipy scipy.optimize.root не позволяет мне указать границы, и, похоже, я не могу указать это как опцию для любого из методов решателя.

Есть ли способы обойти этот или другие пакеты/функции, которые делают то, что я хочу? Я очень новичок в поиске корней, но я удивлен, что эту функцию трудно найти, поскольку интуитивно поиск корней кажется проще, если указаны границы. Есть ли способы взломать мою функцию, чтобы направить один из этих алгоритмов в область (0, 1)?


person The Hagen    schedule 07.07.2021    source источник
comment
Да, спасибо вам обоим за указание, что это можно превратить в проблему минимизации.   -  person The Hagen    schedule 08.07.2021


Ответы (1)


Функция scipy.optimize.root_scalar имеет аргумент bracket, потому что, когда функция имеет один параметр, можно использовать алгоритм деления пополам для поиска корня. В более высоких измерениях такого алгоритма деления пополам нет.

Тем не менее, в нескольких измерениях можно указать ranges в scipy.optimize.brute, чтобы ограничить пространство поиска решения. Чтобы найти корень f(x_1, ..., x_n), вы можете попробовать использовать scipy.optimize.brute на f(x_1, ..., x_n)^2, поскольку корень — это глобальный минимум функций в квадрате.

person LGrementieri    schedule 07.07.2021