Документация Engee

Многочлены Чебышева

Многочлены Чебышева представляют собой две последовательности многочленов: и . Многочлены Чебышева первого рода, , могут определяться рекуррентной формулой:

Многочлены Чебышева второго рода, , могут определяться следующей формулой:

Как , так и имеют степень , и любой многочлен степени можно однозначно записать в виде линейной комбинации многочленов , , …​, (то же самое верно и для ).

Первый род

# Polynomials.ChebyshevTType

ChebyshevT{T, X}(coeffs::AbstractVector)

Многочлен Чебышева первого рода.

Создает многочлен на основе коэффициентов coeffs, начиная с самого низкого порядка, опционально c использованием заданной переменной var, которая может быть представлена символом или строкой.

ChebyshevT не учитывает оси, и аргумент coeffs интерпретируется просто как список коэффициентов, причем первый индекс всегда соответствует коэффициенту T_0(x).

Примеры

julia> using Polynomials

julia> p = ChebyshevT([1, 0, 3, 4])
ChebyshevT(1⋅T_0(x) + 3⋅T_2(x) + 4⋅T_3(x))

julia> ChebyshevT([1, 2, 3, 0], :s)
ChebyshevT(1⋅T_0(s) + 2⋅T_1(s) + 3⋅T_2(s))

julia> one(ChebyshevT)
ChebyshevT(1.0⋅T_0(x))

julia> p(0.5)
-4.5

julia> Polynomials.evalpoly(5.0, p, false) # обходит проверку области определения, выполняемую в p(5.0)
2088.0

В последнем случае показано, как многочлен ChebyshevT вычисляется за пределами области определения, то есть [-1,1]. В последних версиях Julia функция evalpoly экспортируется из Base с методами, расширяемыми в данном пакете, поэтому квалификация модуля не требуется.

Многочлены Чебышева также реализованы в пакетах ApproxFun, ClassicalOrthogonalPolynomials.jl, FastTransforms.jl и SpecialPolynomials.jl.

Тип ChebyshevT содержит коэффициенты, представляющие многочлен .

Например, базисный многочлен можно представить как ChebyshevT([0,0,0,0,1]).

Преобразование

ChebyshevT можно преобразовать в Polynomial, и наоборот.

julia> c = ChebyshevT([1, 0, 3, 4])
ChebyshevT(1⋅T_0(x) + 3⋅T_2(x) + 4⋅T_3(x))


julia> p = convert(Polynomial, c)
Polynomial(-2.0 - 12.0*x + 6.0*x^2 + 16.0*x^3)

julia> convert(ChebyshevT, p)
ChebyshevT(1.0⋅T_0(x) + 3.0⋅T_2(x) + 4.0⋅T_3(x))