Сравнение результатов фактора Sympy false

Я обнаружил проблему с Sympy, которую не могу понять.

Почему это возвращает false ...

factor(81*q + 90) == 9*(9*q + 10)

... пока это вернет истину?

factor(q**2-64) == (q+8)*(q-8)

Когда я печатаю

factor(81*q + 90)

вывод именно это выражение

9*(9*q + 10)

Итак, почему Симпи не считает мое первое сравнение верным?


person user2905179    schedule 15.02.2016    source источник


Ответы (2)


SymPy автоматически распределяет number*addition, как 9*(9*q + 10), в 81*q + 90. factor использует уловку, чтобы предотвратить это автоматическое упрощение (в основном, Mul(9, 9*q + 10, evaluate=False)).

Существует открытая проблема для удаления этого автоматического упрощения, но она еще не реализована. .

person asmeurer    schedule 15.02.2016
comment
Спасибо за помощь. У вас есть идеи о том, как я могу проверить, полностью ли факторизована входная строка? - person user2905179; 16.02.2016
comment
Думаю, единственный способ - проверить factor(expr) == expr. - person asmeurer; 16.02.2016
comment
Да, но в таких случаях не работает: factor(81*q + 90) == 9*(9*q + 10) - person user2905179; 17.02.2016
comment
Если вы начинаете с expr как строки, вы можете использовать sympify(string, evaluate=False) для преобразования его в выражение без распределения констант (или любой другой оценки). - person asmeurer; 17.02.2016

Из документов

Вы можете сделать следующее:

factor(81*q + 90).equals(9*(9*q + 10))
person Prokhozhii    schedule 29.06.2020