我有以下代码:
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
我在这里误解了什么吗?
答案 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)。