Я работаю с длинными уравнениями, но не очень сложный, и я хотел использовать sympy, чтобы упростить и «разложить» их. Но я столкнулся с несколькими проблемами. Вот список некоторых минимальных примеров:Ограничения на подписку Sympy
Задача 1: симметрия
from sympy import *
from __future__ import division
a = symbols('a')
b = symbols('b')
expr = 1/12*b + 1
expr.subs(1/12*b, a)
expr.subs(b*1/12, a)
Первая строка дает ожидаемый результат (т.е. a+1
.), А во втором нет никакой замены.
Проблема 2: факторизованная выражения
Некоторые части выражения являются факторизованная и когда я расширяю выражение они получают упрощенным, таким образом, делая замену невозможно. Например
(((x+1)**2-x).expand()).subs(x**2+2*x, y+1)
x^2+x+1
даст и то, что я ищу это y+2-x
.
Вопрос
Есть ли способ, чтобы решить эти проблемы? Или, может быть, я должен использовать другой символический математический инструмент? Любые предложения приветствуются.
Для первой проблемы я думаю, что существует 'от __future__ import division ', с этим дополнением я пробовал и работает. Однако я не понимаю, почему. Для второй проблемы это действительно не решает мою проблему. То, что я здесь приводил, - это минимальные примеры, но на самом деле уравнения действительно длинны. Я не могу «обмануть» результаты. И я определенно не могу изменить значение, которое нужно заменить ... Спасибо, что ответили! – lasofivec
Для второго вопроса, может быть, мой вопрос: «Можно ли расширять без упрощения»? – lasofivec