1

NSolve[] 与 Mathematica 的一个有趣特性是它似乎提供了它可以找到的所有解决方案(并且希望它是详尽的)。例如,如示例中所述

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

将返回一个包含 3 个解决方案的数组。从我可以尝试的情况来看,即使对于 20 个具有 20 个变量的多元多项式方程,它似乎也可以很好地扩展,正如在这个 notebook中可以看到的那样。

或者,我很喜欢使用 Sympy,它还具有一种nsolve 函数。但是有一个问题:这个函数需要一个起点“x0”,它可能只会找到一个解决方案——而且,如果你足够幸运选择了一个合适的 x0。

一些用户过去建议使用“多启动方法”,即选择一个潜在起点网格并多次运行 nsolve。但这似乎不适合我的问题:如果网格对于一个变量的大小为 d,那么对于我自己的 20 个变量的问题,它将以 20^d 的起点呈指数增长。它似乎与似乎在眨眼间运行的 Mathematica 不匹配。

为了实现如此快速的求解,mathematica 做了什么?是因为方程的性质吗?(也许在幕后进行了一些 Groebner 基础计算)可以用 Sympy 完成吗?

谢谢您的帮助!

4

0 回答 0