fsolve
использует численные методы для решения системы алгебраических уравнений - вам абсолютно необходимо первоначальное предположение, чтобы использовать fsolve
.Если бы вы должны были решать уравнения аналитически, вам потребовалась бы линеаризация системы (если она была нелинейной, и обратите внимание, что это может или не может дать вам хорошие результаты), и вы могли бы использовать mldivide
или LU факторизацию или какая-то другая матричная декомпозиция для быстрого решения системы Ax=b
.
Вы можете потенциально использовать свой собственный метод поиска ограниченных корней (поиск по золотому сечению, параболическая интерполяция и т. Д.), Чтобы обойти тот факт, чтоВам нужно первоначальное предположение - компромисс здесь заключается в том, что (а) ограниченные методы поиска корней занимают больше времени, чем неограниченные методы, которые требуют начальных догадок;и (b) вам нужно убедиться, что ваше решение находится в пределах нижней и верхней границ.
Проще говоря, нет никакого способа численно определить набор уравнений и точно решить его аналитически, точно - вы должны либо решитьсистема аналитически (что может быть невозможным - если это так, я предлагаю Mathematica поверх MATLAB, если вам требуется, чтобы нелинейные системы работали без линеаризации), или вы должны довольствоваться указанием начального предположения или границ.
В физическомМотивированные, основанные на инженерных системах системы, которые я видел, вектор нуля обычно является достаточно хорошим предположением, но это не должно быть жестко закодировано - и если вы хотите решить любую произвольную систему, вы не должны заставлять пользователей использовать это в качестве начальногодумаю.