ошибка: символ не имеет атрибута "пи" - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь решить уравнение с помощью sympy, однако по какой-то причине я получаю следующую ошибку:

Объект 'Symbol' не имеет атрибута '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 Ответ

2 голосов
/ 12 мая 2019

Вам не нужно использовать 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, что использовать для «математики» (в противном случае создается символ с именем «математика», а символы не имеют атрибута pi ... таким образом, ошибка):

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

Вы, вероятно, можете восстановить свой пример, но вы должны знать, что (в настоящее время) solveset не нравится работать с числами с плавающей запятой в этом случае:

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

Но это работает, если вы замените 0.5 на S(1)/2 (что создает SymPy Rational, 1/2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...