Как рекурсивно реализовать полиномы Чебышева в 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 реализованы чебышевские многочлены и друзья различного рода.

Другие вопросы по тегам