#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
- Если потенциально существует более двух решений, вам нужно будет повторить этот процесс, постепенно разделяя пространство решений до тех пор, пока решений больше не останется.