如何在 sympy 中求解简并方程组

2024-03-14

我有很多方程组,其中一些未指定,我想找到一个非零解(如果存在)或报告不存在。然而,sympy 似乎在试图找到所有解决方案时停滞不前。这是一个极端的例子。

from sympy import *
A = Matrix([
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
])
syms = symbols("x:12")
s = Matrix(syms)
constraints = [xi**3 - xi for xi in syms]
solve(list(A*s) + constraints, syms)

在这样的示例中,如何才能快速报告一个非零解?事实上,如果它只是报告有解决方案,我会很高兴。


给 SymPy 提供越来越难的系统(指定的 0 越来越少),并在得到解决方案时退出:

>>> def nonzsol(eqs, syms):
...     from sympy import subsets
...     for i in range(len(syms)-1,-1,-1):
...         for z in subsets(syms, i):
...             s, nontriv = solve(eqs + list(z), set=True)
...             for v in nontriv:
...                 if any(v):
...                     return dict(zip(s, v))
... 
>>> 
>>> nonzsol(eqs, syms)
{x0: 0, x1: 0, x10: 0, x11: -1, x2: 0, x3: 0, x4: 0, x5: 0, x6: 0, x7: 0, x8: 0, x9: 0}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 sympy 中求解简并方程组 的相关文章

随机推荐