Я пытаюсь решить несколько простых задач логической выполнимости в Sympy. Здесь я попытался решить ограничение, содержащее логический оператор Or
:
from sympy import *
a,b = symbols("a b")
print(solve(Or(Eq(3, b*2), Eq(3, b*3))))
# In other words: (3 equals b*2) or (3 equals b*3)
# [1,3/2] was the answer that I expected
Удивительно, но вместо этого возникает ошибка:
TypeError: unsupported operand type(s) for -: 'Or' and 'int'
Я могу обойти эту проблему с помощью Piecewise
, но это гораздо более подробный вариант:
from sympy import *
a,b = symbols("a b")
print(solve(Piecewise((Eq(3, b*2),Eq(3, b*2)), (Eq(3, b*3),Eq(3, b*3)))))
#prints [1,3/2], as expected
К сожалению, этот обходной путь не удается, когда я пытаюсь найти две переменные вместо одной:
from sympy import *
a,b = symbols("a b")
print(solve([Eq(a,3+b),Piecewise((Eq(b,3),Eq(b,3)), (Eq(b,4),Eq(b,4)))]))
#AttributeError: 'BooleanTrue' object has no attribute 'n'
Есть ли более надежный способ решения подобных ограничений в Sympy?