sympy错误:“ Symbol”对象没有属性“ pi”

时间:2019-05-12 02:39:27

标签: python sympy

我正在尝试使用sympy求解方程,但是由于某些原因,我遇到了以下错误:

“符号”对象没有属性“ pi”

代码如下:

solveset(Eq(parse_expr("sin(math.pi/6)+sin(a)"),parse_expr("1")),a,domain=S.Reals)

有人知道在这种情况下该怎么办吗?

我的导入语句如下:

import re
from sympy import *
from sympy.parsing.sympy_parser import parse_expr 
import math

1 个答案:

答案 0 :(得分:2)

您无需在这里使用parse_expr(或数学)。

>>> from sympy import pi, solveset, sin, Eq
>>> from sympy.abc import a
>>> solveset(Eq(sin(pi/6)+sin(a), 1), a, domain=S.Reals)
Union(ImageSet(Lambda(_n, 2*_n*pi + 5*pi/6), Integers), ImageSet(Lambda(_n, 2*_n*pi + pi/6), Integers))

否则,如果您这样做,则需要告诉parse_expr用于'math'的内容(否则它将创建一个名为'math'的Symbol,而Symbols没有pi的属性。 ..因此出现错误):

>>> import math
>>> parse_expr('math.pi', {'math': math})  # local dict: "for "math" use math
3.14159265359

您可能可以重构示例,但是您应该意识到,(当前)求解集在这种情况下不喜欢使用浮点数:

>>> solveset(sin(x) - .5, domain=S.Reals)
EmptySet()

但是如果您将0.5替换为S(1)/2(它会创建SymPy Rational,1/2),它将起作用。