Симпи - разбить многочлен на две части, положительную и отрицательную - PullRequest
1 голос
/ 03 марта 2020

У меня есть большой многочлен от Sympy, и мне нужно разбить его на два многочлена. Где в первом - термины (мономы) с положительным знаком, а во втором - все термины (мономы) с отрицательным знаком. Как это сделать с хорошей производительностью?

1 Ответ

3 голосов
/ 04 марта 2020

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

>>> from sympy import sift, Add
>>> ispos = lambda x: x.as_coeff_Mul()[0].is_positive
>>> p = -x*y**2/3 + 4*x*y + 3*x - y
>>> pos, neg = sift(Add.make_args(p), ispos, binary=True)
>>> pos
[3*x, 4*x*y]

Чтобы воссоздать фигуры, сложите их вместе:

>>> ppos, pneg = map(Add, (pos, neg))
>>> assert ppos == 3*x + 4*x*y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...