Численное решение нелинейного уравнения для всех множественных решений

#python #optimization #solver #scipy-optimize

Вопрос:

У меня есть нелинейное уравнение: я строю левую и правую части этого уравнения на рисунке ниже. Очевидно, есть два решения. Я попробовал scipy.optimize.fsolve и стратегически угадал отправные точки, чтобы найти два решения, но это довольно ненадежно. Существует ли решатель Python, который может просто найти все решения этого уравнения, например, в пределах некоторого конечного набора значений x?

Функция с несколькими решениями

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

1. @nutix не могли бы вы опубликовать уравнения?

2. В более высоких измерениях мы могли бы использовать глобальный решатель. Добавьте ограничение ||x-sol||gt;=tol , чтобы найти новое решение. (Внимание: это ограничение невыпукло). Барон глобального решателя включает в себя опцию NumSols , чтобы вы могли определить, сколько решений он должен искать,

Ответ №1:

Решатель не знает, сколько существует решений или где они могут возникнуть, поэтому вам нужно будет искать решения. Один из способов сделать это -:

  • Решите модель, чтобы найти решение. Допустим, это происходит при x = 88,7.
  • Добавьте ограничение, исключающее это решение на очень малую величину. например, x
  • Решите еще раз. Решатель либо найдет другое решение, либо скажет, что нет никаких осуществимых решений.
  • Поскольку мы не знаем, какое решение решатель найдет в первый раз, нам также необходимо проверить другое направление. например, x gt;= 88,7 0,00001
  • Если потенциально существует более двух решений, вам нужно будет повторить этот процесс, постепенно разделяя пространство решений до тех пор, пока решений больше не останется.