Я делаю очень простые вычисления вероятности получения подмножества X, Y, Z из множества A-Z (с соответствующими вероятностями x, y, z).Факторинговые полисы в sympy
И из-за очень тяжелых формул для того, чтобы справиться с ними, я пытаюсь упростить (или собирать или фактор - я не знаю точное определение) эти полиномиальные выражения с использованием SymPy.
Так .. имея это (очень простое выражение для вычисления вероятности получения подмножества X, Y, Z из множества AZ с соответствующими вероятностями х, у, г)
import sympy as sp
x, y, z = sp.symbols('x y z')
expression = (
x * (1 - x) * y * (1 - x - y) * z +
x * (1 - x) * z * (1 - x - z) * y +
y * (1 - y) * x * (1 - y - x) * z +
y * (1 - y) * z * (1 - y - z) * x +
z * (1 - z) * y * (1 - z - y) * x +
z * (1 - z) * x * (1 - z - x) * y
)
Я хочу, чтобы получить что-то как этот
x * y * z * (6 * (1 - x - y - z) + (x + y) ** 2 + (y + z) ** 2 + (x + z) ** 2)
поли, переписывается в пути иметь несколько операций (+
, -
, *
, **
, ...), как это возможно
Я пробовал factor()
, collect()
, simplify()
. Но результат отличается от моих ожиданий. В основном я
2*x*y*z*(x**2 + x*y + x*z - 3*x + y**2 + y*z - 3*y + z**2 - 3*z + 3)
Я знаю, что SymPy может объединить полиномов в простые формы:
sp.factor(x**2 + 2*x*y + y**2) # gives (x + y)**2
Но как сделать, чтобы SymPy объединить многочленов из выражений выше?
Если это невозможно в sympy, возможно, есть другие варианты?
Nice комбо, но это очень трудно понять. Не могли бы вы объяснить алгоритм/идею? BTW Я обнаружил очевидную ошибку: 'x * (1 - x) * y * (1 - x - y) * z + ...' -> 'x/(1 - x) * y/(1 - x - y) * z + ... ', и для такого eq ваша комбо не работает (я полагаю, что это из-за очевидных вещей, но так как я не знаю алгоризма ....) – akaRem