fsolve
не является глобальным решателем. Существуют глобальные решатели (такие как генетические алгоритмы и имитационный отжиг), но они должны работать в течение бесконечного времени, чтобы гарантировать, что возвращаемые решения включают все минимизаторы. На руке почти все остальные решатели оптимизации локальны, а это означает, что они будут гарантировать, что возвращается локальный минимизатор.
Кроме того, в дополнение к тому, что не известно, является ли возвращаемое решение глобальным или локальным минимизатором, в общем случае нет способа определить, сколько корней имеет проблема. Таким образом, в принципе, нет способа сделать то, что вы хотите, за исключением 2 хорошо известных случаев:
1) Если проблема выпуклая, то нет локальных минимизаторов, которые не являются глобальными минимизаторами. Таким образом, все, что возвращается fsolve, будет глобальным минимизатором. Более того, этот минимизатор почти всегда уникален. Исключением является то, что технически существует бесконечное количество решений, но все они будут связаны (как на конкретной плоскости). Не может быть конечного числа отдельных минимизаторов, которые не связаны.
2) Полиномы имеют различное количество корней, которые мы можем однозначно определить.
Отметьте [этот вопрос] (http://stackoverflow.com/questions/16809744/equivalent-to-roots-for-non-polynomials-in-matlab). Я думаю, вы можете изменить [ответ Роди] (http://stackoverflow.com/a/16809955/2338750), изменив вторую и третью входные переменные. –