在sympy中用可变指数扩展多项式
Expanding polynomial with variable exponent in sympy
我对 sympy 不是很有经验,如果这是一个简单的问题,我很抱歉。
如何使用 sympy 展开二项式表达式?例如说我想让 sympy 计算多项式 $(x^2 + x + 1)^n$ 中 $x^2$ 的系数(我希望答案是 $n + \binom{n} {2}$)。
我尝试了以下代码:
x = symbols('x')
n = symbols('n', integer=True, nonnegative = True)
expand((x**2+x+1)**n)
但结果只是 $(x^2+x+1)^n$ 而我想要二项式展开,即 .
提前致谢。
如果指数不是符号的,那么下面给出了具有整数系数的任意多项式的幂的系数,例如,
>>> eq
x**3 + 3*x + 2
>>> (Poly(eq)**42).coeff_monomial(x**57)
2294988464559317378977138572972
但是如果多项式的指数是符号的,目前还没有表示系数的例程。如果在系数中也可以看到模式,rsolve
也可以用来表示封闭形式:
>>> print([((x**2+x+1)**i).expand().coeff(x**2) for i in range(8)])
[0, 1, 3, 6, 10, 15, 21, 28]
>>> from sympy.abc import n
>>> f=Function('f') # f(n) represents the coefficient of x**2 for a given n
给定 n
的 x^2
的系数比上一个值多 n
:
>>> rsolve(f(n)-f(n-1)-n, f(n),{f(0):0,f(1):1})
n*(n + 1)/2
这个最终表达式是x^2
对任意n
的系数。
问题 17889 给出了一个例程,该例程将计算单变量多项式(每个项具有任意系数)中项的系数,提高到 n 次方:
>>> eq = 2 + x + x**2
>>> unicoeff(eq, 4).simplify()
Piecewise(
(0, n < 2),
(2**(n - 3)*n*(n - 1), n < 3),
(2**(n - 4)*n**2*(n - 1), n < 4),
(2**n*n*(n - 1)*(n**2 + 19*n + 6)/384, True))
>>> _.subs(n, 5)
210
>>> (eq**5).expand().coeff(x**4)
210
对于你的表达式(常量为 1):
>>> unicoeff(1+x+x**2,2).simplify()
Piecewise((0, n < 1), (n, n < 2), (n*(n + 1)/2, True))
我对 sympy 不是很有经验,如果这是一个简单的问题,我很抱歉。
如何使用 sympy 展开二项式表达式?例如说我想让 sympy 计算多项式 $(x^2 + x + 1)^n$ 中 $x^2$ 的系数(我希望答案是 $n + \binom{n} {2}$)。
我尝试了以下代码:
x = symbols('x')
n = symbols('n', integer=True, nonnegative = True)
expand((x**2+x+1)**n)
但结果只是 $(x^2+x+1)^n$ 而我想要二项式展开,即
提前致谢。
如果指数不是符号的,那么下面给出了具有整数系数的任意多项式的幂的系数,例如,
>>> eq
x**3 + 3*x + 2
>>> (Poly(eq)**42).coeff_monomial(x**57)
2294988464559317378977138572972
但是如果多项式的指数是符号的,目前还没有表示系数的例程。如果在系数中也可以看到模式,rsolve
也可以用来表示封闭形式:
>>> print([((x**2+x+1)**i).expand().coeff(x**2) for i in range(8)])
[0, 1, 3, 6, 10, 15, 21, 28]
>>> from sympy.abc import n
>>> f=Function('f') # f(n) represents the coefficient of x**2 for a given n
给定 n
的 x^2
的系数比上一个值多 n
:
>>> rsolve(f(n)-f(n-1)-n, f(n),{f(0):0,f(1):1})
n*(n + 1)/2
这个最终表达式是x^2
对任意n
的系数。
问题 17889 给出了一个例程,该例程将计算单变量多项式(每个项具有任意系数)中项的系数,提高到 n 次方:
>>> eq = 2 + x + x**2
>>> unicoeff(eq, 4).simplify()
Piecewise(
(0, n < 2),
(2**(n - 3)*n*(n - 1), n < 3),
(2**(n - 4)*n**2*(n - 1), n < 4),
(2**n*n*(n - 1)*(n**2 + 19*n + 6)/384, True))
>>> _.subs(n, 5)
210
>>> (eq**5).expand().coeff(x**4)
210
对于你的表达式(常量为 1):
>>> unicoeff(1+x+x**2,2).simplify()
Piecewise((0, n < 1), (n, n < 2), (n*(n + 1)/2, True))