Sympy nsolve против Mathematica NSolve для многомерных полиномиальных уравнений

Интересной особенностью NSolve[] с Mathematica является то, что он, кажется, предоставляет все решения, которые он может найти (и, надеюсь, он исчерпывающий). Например, как указано в примерах:

NSolve[{x^2 + y^3 == 1, 2 x + 3 y == 4}, {x, y}]

вернет массив из 3 решений. Из того, что я мог попробовать, кажется, что он достаточно хорошо масштабируется даже, скажем, для 20 многомерных полиномиальных уравнений с 20 переменными, как видно в этом блокноте.

В качестве альтернативы я довольно часто использую Sympy, который также имеет своего рода функцию nsolve< /а>. Но есть одна загвоздка: этой функции требуется начальная точка x0, и она, возможно, найдет только одно решение, и то при условии, что вам повезет выбрать правильный x0.

Некоторые пользователи в прошлом предлагали использовать многозаходный метод, выберите сетку потенциальных отправных точек и запустите nsolve несколько раз. Но это, кажется, не соответствует моей проблеме: если сетка имеет размер d для одной переменной, то она будет экспоненциально масштабироваться как 20 ^ d начальных точек для моих собственных задач с 20 переменными. Кажется, это не соответствует Mathematica, которая, кажется, работает в мгновение ока.

Что делает mathematica для достижения такого быстрого решения? Это связано с характером уравнений? (Возможно, какие-то базисные вычисления Грёбнера за кулисами) Можно ли это сделать с Sympy?

Спасибо за помощь!


person user2673062    schedule 21.02.2021    source источник