Как рекурсивно реализовать полиномы Чебышева в Sagemath?
Я нашел в Википедии формулу для вычислениямногочленов Чебышева первого рода рекурсивным способом:
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
2 ответа
Вы неправильно интерпретируете правило. Там нет необходимости решать за 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
Просто чтобы прояснить, в SageMath реализованы чебышевские многочлены и друзья различного рода.