在 Sympy 中,可以通过 Grobner 基获得多项式归约的表示:
from sympy import groebner, expand
from sympy.abc import x, y
f = 2*x**4 - x**2 + y**3 + y**2
G = groebner([x**3 - x, y**3 - y])
Q, r = G.reduce(f)
assert f == expand(sum(q*g for q, g in zip(Q, G)) + r)
但我正在寻找的是一种根据定义它的多项式来表达 Groebner 基的元素的方法,基本上只是存储在生成基时使用的 Buchberger 算法中执行的计算。
例如
groebner([2*x+3*y+5, 3*x+5*y+2, 5*x+2*y+3]) # GroebnerBasis([1], x, y, domain='ZZ', order='lex')
它表明这三个多项式生成单位理想,但我想要这些多项式的明确组合等于 1。在给出的示例中,它是线性组合,但我想要一种也适用于非线性的方法。
在我获得的第一个示例Q,r
中。在第二个示例中,我获得了余数的模拟,r
但我希望多项式能够Q
实现它。
同样,该方法G.contains()
将指示理想是否包含多项式,但不会告诉您如何生成它。有没有办法做到这一点?