【问题标题】:Has SymPy lost the functionality to divide by multiple polynomials?SymPy 是否失去了除以多个多项式的功能?
【发布时间】:2023-03-25 12:49:01
【问题描述】:

SymPy 新手,正在尝试除法多项式。目前,我正在运行 Python 3.6.4 和 SymPy 1.1.1(安装了 pip)。在浏览了他们的文档后,我在他们的0.6.7 documentation page 上发现了以下有用的示例:

另一种选择是同时除以多个多项式。通常,输出不是唯一的,取决于除数的顺序和给定的单项式顺序(如果指定)。

>>> f = x*y + y*z + z*x
>>> g1 = x + 1
>>> g2 = 2*y + 1
>>> q, r = div(f, [g1, g2], x, y, z)
>>> q
               z
[y + z, -1/2 + -]
               2
>>> r
      3*z
1/2 - ---
       2

不过,这个功能,至少在1.1.1 documentation page是不存在的。而且,更重要的是,如果我尝试在 1.1.1 上尝试类似的操作,我会收到以下错误:

>>> f = x*y + y*z + z*x
>>> g1 = x + 1
>>> g2 = 2*y + 1
>>> q, r = div(f, [g1, g2], x, y, z)
Traceback (most recent call last):
  File "C:\[...]\Python\Python36\lib\site-packages\sympy\polys\polytools.py", line 4659, in div
    (F, G), opt = parallel_poly_from_expr((f, g), *gens, **args)
  File "C:\[...]\Python\Python36\lib\site-packages\sympy\polys\polytools.py", line 4266, in parallel_poly_from_expr
    return _parallel_poly_from_expr(exprs, opt)
  File "C:\[...]\Python\Python36\lib\site-packages\sympy\polys\polytools.py", line 4312, in _parallel_poly_from_expr
    raise PolificationFailed(opt, origs, exprs, True)
sympy.polys.polyerrors.PolificationFailed: can't construct polynomials from x*y + x*z + y*z, [x + 1, 2*y + 1]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\[...]\Python\Python36\lib\site-packages\sympy\polys\polytools.py", line 4661, in div
    raise ComputationFailed('div', 2, exc)
sympy.polys.polyerrors.ComputationFailed: div(x*y + x*z + y*z, [x + 1, 2*y + 1]) failed without generators

我非常怀疑此功能已被删除,因为这是一个非常重要的功能,尤其是对于仿射变量和 Groebner 基分析(我正在研究的主题)

有人可以向我指出一个使用 SymPy 的工作示例吗?

【问题讨论】:

    标签: python sympy polynomial-math


    【解决方案1】:

    现在可以通过函数reduced 使用此功能。使用示例中的 f, g1, g2,

    >>> reduced(f, [g1, g2], x, y, z)
    ([y + z, z/2 - 1/2], -3*z/2 + 1/2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2014-09-20
      • 1970-01-01
      • 2019-09-25
      • 2020-10-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多