Я предполагаю, что вы хотите, чтобы эти выражения были упрощены, поэтому просто используйте функцию simplify
:
In [6]: from sympy import *
In [7]: phi = (1 + sqrt(5)) / 2
In [8]: should_be_phi = -(S(1)/2 + sqrt(5)/2)**2 + (S(1)/2 + sqrt(5)/2)**3
In [9]: should_be_phi
Out[9]:
2 3
⎛1 √5⎞ ⎛1 √5⎞
- ⎜─ + ──⎟ + ⎜─ + ──⎟
⎝2 2 ⎠ ⎝2 2 ⎠
In [10]: simplify(should_be_phi)
Out[10]:
1 √5
─ + ──
2 2
Обратите внимание, что вы должны использовать S(1)/2
вместо 1/2
, что даетfloat.
Если вы хотите сравнить выражения, тогда очевидным способом будет использование ==
, но это для "структурного равенства" в SymPy. Это означает, что expr1 == expr2
даст True
только тогда, когда выражения находятся в точно такой же форме. Если вы хотите проверить на математическое равенство, тогда вы должны использовать Eq(lhs, rhs)
или simplify(lhs-rhs)
:
In [11]: should_be_phi == phi # Expressions are not in the same form
Out[11]: False
In [12]: Eq(should_be_phi, phi)
Out[12]: True
In [13]: simplify(should_be_phi - phi)
Out[13]: 0
Есть ли способ сделать символические вычисления в Python, который действительно работает? Похоже, что SymPy не в состоянии делать то, для чего он предназначен.
В отличие от Wolfram Alpha, SymPy не предназначен для того, чтобы его можно было использовать или понять тому, кто не прочитал ни одной документации. Если вы прочитали первые несколько страниц учебника по SymPy, на ваши вопросы ответили бы: https://docs.sympy.org/latest/tutorial/index.html#tutorial