如何用SymPy展开含可变指数的多项式并求指定项系数?
如何用SymPy求带符号指数多项式的特定项系数
别担心,基础问题完全没问题😉。你遇到的情况是因为当n是符号整数变量时,SymPy的expand函数不会自动展开(x²+x+1)^n——毕竟它不知道n的具体值,没法生成有限项的展开式。不过我们有两种方法可以解决你的问题:直接提取系数,或者通过组合推导验证结果。
方法一:用SymPy直接提取x²的系数
我们可以利用series函数将表达式展开到足够高的阶数(这里到x³就够了,因为我们只关心x²的系数),然后移除高阶无穷小项,最后用coeff方法提取目标系数。代码如下:
from sympy import symbols, series # 定义符号变量,n限定为非负整数 x, n = symbols('x n', integer=True, nonnegative=True) expr = (x**2 + x + 1)**n # 展开到x^3项,去掉O(x^3)的高阶无穷小标记 expanded_series = series(expr, x, 0, 3).removeO() # 提取x²的系数 x2_coeff = expanded_series.coeff(x, 2) print(x2_coeff) # 输出 n*(n+1)/2,也就是你预期的n + inom{n}{2}
运行这段代码后,你会得到n(n+1)/2,和你预期的n + inom{n}{2}完全等价(因为inom{n}{2} = n(n-1)/2,加n后就是n(n+1)/2)。
方法二:组合数学推导验证
如果你想理解这个系数的来源,我们可以把原式拆成二项式的形式来推导:
(x² + x + 1)^n = [(x+1) + x²]^n
根据二项式定理展开后,每一项是inom{n}{k} (x+1)^{n-k} (x²)^k。我们只需要找所有能生成x²的项:
- 当
k=0时:(x+1)^n中x²的系数是inom{n}{2} - 当
k=1时:(x+1)^{n-1}中x^0的系数是1,乘以inom{n}{1},得到n - 当
k≥2时:(x²)^k已经是x^{4}及以上的项,不会贡献x²的系数
把这两部分加起来,就是inom{n}{2} + n = n(n+1)/2,和SymPy计算的结果一致。
为什么直接用expand不行?
SymPy的expand函数针对的是有限项的多项式展开,当指数n是符号变量时,它无法确定展开后的项数,所以会保留原式的形式。只有当n是具体数值(比如n=3)时,expand((x²+x+1)**3)才会直接展开成完整的多项式。
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

