Основы SymPy - PullRequest
       15

Основы SymPy

4 голосов
/ 23 декабря 2009

Я только начинаю играть с SymPy , и я немного удивлен его поведением, например, это не те результаты, которых я ожидал:

>>> import sympy as s
>>> (-1)**s.I == s.E**(-1* s.pi)
False
>>> s.I**s.I == s.exp(-s.pi/2)
False

Почему они возвращают False и есть ли способ заставить его преобразовать один способ записи комплексного числа в другой?

Ответы [ 2 ]

9 голосов
/ 23 декабря 2009

Из FAQ :

Почему SymPy говорит, что два равных выражения неравны?

Оператор равенства (==) проверяет, имеют ли выражения одинаковую форму, а не являются ли они математически эквивалентными.

Чтобы сделать тестирование на равенство полезным в базовых случаях, SymPy пытается переписать математически эквивалентные выражения в каноническую форму при их оценке. Например, SymPy оценивает x + x и - (- 2 * x) в 2 * x, а x * x в x ** 2.

Простейший пример, когда преобразования по умолчанию не могут сгенерировать каноническую форму, - это нелинейные полиномы, которые могут быть представлены как в разложенном виде, так и в развернутом виде. Хотя математически ясно a(1+b) = a+ab, SymPy дает:

>>> bool(a*(1+b) == a + a*b) False 

Аналогично, SymPy не может обнаружить, что разница равна нулю:

 >>> bool(a*(1+b) - (a+a*b) == 0) False  

Если вы хотите определить математическую эквивалентность нетривиальных выражений, вам следует применить более сложную процедуру упрощения к обеим сторонам уравнения. В случае многочленов выражения могут быть переписаны в канонической форме путем их полного расширения. Это делается с помощью метода .expand() в SymPy:

>>> A, B = a*(1+b), a + a*b 
>>> bool(A.expand() == B.expand()) True 
>>> (A - B).expand() 0 

Если .expand() не помогает, попробуйте simplify(), trigsimp() и т. Д., Чтобы выполнить более сложные преобразования. Например,

>>> trigsimp(cos(x)**2 + sin(x)**2) == 1 True
0 голосов
/ 23 декабря 2009

Потому что они не равны.Попробуйте это:

sE ** (sI * s.pi) == sI * sI

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