如何在Sagemath中递归地实现Chebyshev多项式?

时间:2018-01-11 14:04:47

标签: python recursion sage

我找到了 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,这意味着我的递归永远不会停止。我理解Principe的递归和迭代过程的区别,但我有点卡在这里。

预期输出为:

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

2 个答案:

答案 0 :(得分:1)

您正在解释规则错误。没有必要解决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

答案 1 :(得分:0)

为了清楚起见,Chebyshev polynomials和各种朋友都在SageMath中实现。