如何使用 sympy 求生成函数的第 n 项?

4 python math sympy maxima

我有一个有理函数:f(x) = P(x)/Q(x)。\n例如:

\n\n
f(x) = (5x + 3)/(1-x^2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为 f(x) 是生成函数,所以可以写为:

\n\n
f(x) = a0 + a1*x + a2*x\xc2\xb2 + ... + a_n*x^n + ... = P(x)/Q(x)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如何使用 sympy 求生成函数的f(x)n 项(即a_n)?

\n\n

如果 Sympy 中没有这样的实现,我也很想知道这是否在其他包中实现,例如 Maxima。

\n\n

我很感激任何帮助。

\n

Joh*_*anC 6

a_n要获得有理形式生成函数的一般公式,rational_algorithm可以使用 SymPy。例如:

from sympy import simplify
from sympy.abc import x, n
from sympy.series.formal import rational_algorithm

f = (5*x + 3)/(1-x**2)
func_n, independent_term, order = rational_algorithm(f, x, n, full=True)
print(f"The general formula for a_n is {func_n}")
for k in range(10):
    print(f"a_{k} = {simplify(func_n.subs(n, k))}")
Run Code Online (Sandbox Code Playgroud)

输出:

The general formula for a_n is (-1)**(-n - 1) + 4
a_0 = 3
a_1 = 5
a_2 = 3
a_3 = 5
a_4 = 3
a_5 = 5
a_6 = 3
a_7 = 5
a_8 = 3
a_9 = 5
Run Code Online (Sandbox Code Playgroud)

这是另一个例子:

The general formula for a_n is (-1)**(-n - 1) + 4
a_0 = 3
a_1 = 5
a_2 = 3
a_3 = 5
a_4 = 3
a_5 = 5
a_6 = 3
a_7 = 5
a_8 = 3
a_9 = 5
Run Code Online (Sandbox Code Playgroud)
The general formula for a_n is 2**n/3 - (-1)**(-n)/3
First terms: [0, 1, 1, 3, 5, 11, 21, 43, 85, 171, 341, 683, 1365, 2731, 5461, 10923, 21845, 43691, 87381, 174763]
Run Code Online (Sandbox Code Playgroud)