SymPy выделить коэффициенты
Есть выражение:
а = (x1*e^(-i*n) + x11*e^(i*n) + x2*e^(i*2*n) + x22*e^(-i*2*n) + ......)^3
Раскрываю с помощью:
a=expand(a)
Получаю:
z11^3*e^(3*i*n) + 3*z11^2*z10*e^(12*i*n) + 3*z11^2*z11*e^(-9*i*n) + 3*z1^2*z13*e^(15*i*n)
Вопрос: как сгруппировать результат и получить следующий вид?
(...)*e^(-i*n) + (...)*e^(i*n) + (...)*e^(i*2*n) + (...)*e^(-i*2*n)...
С помощью collect не получается, или я что-то делаю не так.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
In [38]: from sympy import symbols, factor, E as e
In [39]: from sympy.parsing.sympy_parser import parse_expr
In [40]: expr_str = "z11^3*e^(3*i*n) + 3*z11^2*z10*e^(12*i*n) + 3*z11^2*z11*e^(-9*i*n) + 3*z1^2*z13*e^(15*i*n)"
In [41]: a = parse_expr(expr_str.replace("^", "**"))
In [42]: a
Out[42]: 3*e**(15*i*n)*z1**2*z13 + 3*e**(12*i*n)*z10*z11**2 + e**(3*i*n)*z11**3 + 3*e**(-9*i*n)*z11**3
In [43]: a.simplify()
Out[43]: e**(-9*i*n)*(e**(12*i*n)*(3*e**(12*i*n)*z1**2*z13 + 3*e**(9*i*n)*z10*z11**2 + z11**3) + 3*z11**3)
или так:
In [44]: factor(a)
Out[44]: e**(-9*i*n)*(3*e**(24*i*n)*z1**2*z13 + 3*e**(21*i*n)*z10*z11**2 + e**(12*i*n)*z11**3 + 3*z11**3)