如何在 Sagemath 中递归实现切比雪夫多项式?

How to implement recursively the Chebyshev polynomials in Sagemath?

我找到了 Wikipedia 一个公式来计算 第一类切比雪夫多项式 以递归方式:

T₀(x) = 1
T₁(x) = x
Tₙ(x) = (Tₙ₊₁(x) + Tₙ₋₁(x)) / 2x

但是我实际上不确定如何在 Sagemath 中实现它。

def T(n):
    if n == 0:
        return 1
    elif n == 1:
        return x
    else:
        t = (T(n+1) + T(n-1)) / (2*x)
    return t

n 为 2 或更大时,我总是得到一个 RuntimeError,这意味着我的递归永远不会停止。我理解递归的原理和与迭代过程的区别,但我有点卡在这里。

预期输出为:

sage: T(0)
1
sage: T(1)
x
sage: T(2)
2x^2 - 1
sage: T(3)
4x^3 - 3x
sage: # and so on

您对规则的解释有误。无需求解 T(n)。假设n = n + 1,最后的递归关系变为:T(n) = 2xT(n-1) - T(n-2)。所以你的递归函数变成:

def T(n):
    if n == 0:
        return 1
    elif n == 1:
        return x
    else:
        return 2 * x * T(n-1) - T(n-2)

给出了想要的结果。


示例:

T(2) = 2x * T(1) - T(0)

但是 T(1) = xT(0) = 1,所以:

T(2) = 2x * x - 1
T(2) = 2x^2 - 1

需要说明的是,Chebyshev polynomials 和各种朋友都在 SageMath 中实现了。