如何在 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) = x
和 T(0) = 1
,所以:
T(2) = 2x * x - 1
T(2) = 2x^2 - 1
需要说明的是,Chebyshev polynomials 和各种朋友都在 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) = x
和 T(0) = 1
,所以:
T(2) = 2x * x - 1
T(2) = 2x^2 - 1
需要说明的是,Chebyshev polynomials 和各种朋友都在 SageMath 中实现了。