Sympy - сравнение эквивалентных выражений со знаком равенства (=)

1

Я понимаю, что в Sympy эквивалентность == не работает для символических выражений и, следовательно, не может использоваться для проверки символической эквивалентности. Из документации рекомендуется использовать simplify (ab) и проверить, равен ли результат 0. Например,

>>> simplify((x + 1)**2 - (x**2 + 2*x + 1))

Однако, похоже, это не работает для выражений с равными в них. Например, я хочу сравнить (2x = 6 и x = 3), который должен быть равен.

>>> a = Eq(2*x,6)
>>> b = Eq(x,3)
>>> simplify(a-b)
−x=3+(2x=6)

Или более сложные уравнения, которые должны быть эквивалентными

>>> a = Eq(x*(y+1),6)
>>> b = Eq(2*x*y + 2*x, 12)
>>> simplify(a-b)
(x(y+1)=6)−(2x(y+1)=12)

Удивление, если есть хороший способ или трюк, чтобы сделать это в Sympy.

Спасибо!

Теги:
sympy

1 ответ

1
Лучший ответ

Что эквивалентно этим уравнениям, так это то, что они имеют одинаковое решение или они одинаковы при решении для x. Имейте sympy, чтобы решить их и сравнить решения:

from sympy import *
x, y = symbols('x y')

a = Eq(2*x,6)
b = Eq(x,3)
print(solve(a) == solve(b)) #True

То же самое работает для вашего более сложного примера:

a = Eq(x*(y+1),6)
b = Eq(2*x*y + 2*x, 12)
print(solve(a)) # [{x: 6/(y + 1)}]
print(solve(b)) # [{x: 6/(y + 1)}]
print(solve(a) == solve(b)) # True

Ещё вопросы

Сообщество Overcoder
Наверх
Меню