与SQRT一起使用POLY时出现Sympy错误

时间:2017-04-27 14:36:20

标签: python-3.x sympy

我有以下代码:

from sympy import *
a = Symbol('a')
p = Poly(sqrt(a), domain=QQ)
p.eval(a,2)

eval之后我期望的是2的平方根。但我得到的是:

ValueError: tuple.index(x): x not in tuple

我在这里误解了什么吗?

2 个答案:

答案 0 :(得分:1)

实际的完整错误是

Traceback (most recent call last):
  File "./sympy/polys/polytools.py", line 1701, in _gen_to_level
    return f.gens.index(sympify(gen))
ValueError: tuple.index(x): x not in tuple

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "./sympy/polys/polytools.py", line 2308, in eval
    j = f._gen_to_level(x)
  File "./sympy/polys/polytools.py", line 1704, in _gen_to_level
    "a valid generator expected, got %s" % gen)
sympy.polys.polyerrors.PolynomialError: a valid generator expected, got a

问题在于

>>> Poly(sqrt(a))
Poly((sqrt(a)), sqrt(a), domain='ZZ')

您已经为Poly提供了一个不是多项式的表达式,但是无论如何它都会尝试创建一个多项式,方法是将其作为sqrt(a)中的多项式,而不仅仅是{{1} }。

一般来说,除非你明确知道自己在做什么,否则我会避免这种情况。将生成器传递给Poly,你希望你的表达式是多项式,这总是很好的做法。

a

答案 1 :(得分:0)

评估多项式意味着替换其中一个生成器。问题是你在sqrt(a)中创建多项式后试图替换a。

基本上,您将多项式视为表达式,恰好在sqrt(a)中具有多项式形式。因此,命令应该是

p.as_expr().subs(a, 2)

按预期返回sqrt(2)。