如何在 sympy 中隔离多项式中项的系数?
How to isolate the coefficients of the terms in a polynomial in sympy?
在 Python 中,我进行了一些 SymPy 计算,生成了一个充满多项式的数组,例如:
a*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b))) + b *(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b)))
请注意,此示例恰好简化为 (a+b)**4,但显然情况并非总是如此。那么如何将此表达式转换为以下形式:
c_1*a**4 + c_2*a**3*b + ... + c_n*b**4
一旦有了这样的表达式,我将如何提取指数 c_1, ..., c_n?
我只有 .exp 命令,但它只适用于 a**n 形式的表达式(即 a 和 b 的混合以及系数 1)。
非常感谢任何帮助。
Poly class 很有用 (运行 isympy
)
from sympy import Poly
from sympy.abc import a, b
expr = a*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b))) + b*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b)))
poly = Poly(expr)
poly.as_expr()
输出:
4 3 2 2 3 4
a + 4⋅a ⋅b + 6⋅a ⋅b + 4⋅a⋅b + b
并提取系数 c_1, ..., c_n,我会这样做:
poly.coeffs()
输出:
[1, 4, 6, 4, 1]
在 Python 中,我进行了一些 SymPy 计算,生成了一个充满多项式的数组,例如:
a*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b))) + b *(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b)))
请注意,此示例恰好简化为 (a+b)**4,但显然情况并非总是如此。那么如何将此表达式转换为以下形式:
c_1*a**4 + c_2*a**3*b + ... + c_n*b**4
一旦有了这样的表达式,我将如何提取指数 c_1, ..., c_n? 我只有 .exp 命令,但它只适用于 a**n 形式的表达式(即 a 和 b 的混合以及系数 1)。
非常感谢任何帮助。
Poly class 很有用 (运行 isympy
)
from sympy import Poly
from sympy.abc import a, b
expr = a*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b))) + b*(a*(a*(a + b) + b*(a + b)) + b*(a*(a + b) + b*(a + b)))
poly = Poly(expr)
poly.as_expr()
输出:
4 3 2 2 3 4
a + 4⋅a ⋅b + 6⋅a ⋅b + 4⋅a⋅b + b
并提取系数 c_1, ..., c_n,我会这样做:
poly.coeffs()
输出:
[1, 4, 6, 4, 1]