sympy: как упростить несколько выражений - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть набор sympy выражений, подобных этому (несколько сотен из них):

>>> foo = parse_expr('X | Y')
>>> bar = parse_expr('(Z & X) | (Z & Y)')
>>> baz = parse_expt('AAA & BBB') # not needed for this example; just filler

Я могу упростить одно в отдельности:

>>> simplify(bar)
Z & (X | Y)

Есть лиспособ упростить, включая весь набор доступных переменных?

>>> mysimplify(bar, include=(foo,bar,baz))
Z & foo

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете воспользоваться преимуществом Общее устранение Subexpresion .Вы должны использовать его в сочетании с simplify, объединяя все ваши выражения в одно искусственное выражение (например, передавая их в качестве аргументов фиктивной функции).Я не думаю, что он всегда будет работать так, как хотелось бы, однако на свободном аналоге вашего примера он дает ожидаемый результат:

In [1]: from sympy import *

In [2]: myexprlist = sympify('listofexpr(x|y, (z&x)|(z&y))')

In [3]: cse(simplify(myexprlist))
Out[3]: ([(x0, Or(x, y))], [listofexpr(x0, And(x0, z))])

Первая запись в результате представляет собой список введенных подвыражений.В этом случае подвыражение x|y было обозначено x0.Вторая часть результата - это упрощенное выражение (упаковано в список, поскольку входные данные могут быть списком выражений).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...