# Discrete Chebyshev transform

In applied mathematics, the discrete Chebyshev transform (DCT), named after Pafnuty Chebyshev, is either of two main varieties of DCTs: the discrete Chebyshev transform on the 'roots' grid of the Chebyshev polynomials of the first kind ${\displaystyle T_{n}(x)}$ and the discrete Chebyshev transform on the 'extrema' grid of the Chebyshev polynomials of the first kind.

## Discrete Chebyshev transform on the roots grid

The discrete chebyshev transform of u(x) at the points ${\displaystyle {x_{n}}}$ is given by:

${\displaystyle a_{m}={\frac {p_{m}}{N}}\sum _{n=0}^{N-1}u(x_{n})T_{m}(x_{n})}$

where:

${\displaystyle x_{n}=-\cos \left({\frac {\pi }{N}}(n+{\frac {1}{2}})\right)}$
${\displaystyle a_{m}={\frac {p_{m}}{N}}\sum _{n=0}^{N-1}u(x_{n})\cos \left(m\cos ^{-1}(x_{n})\right)}$

where ${\displaystyle p_{m}=1\Leftrightarrow m=0}$ and ${\displaystyle p_{m}=2}$ otherwise.

Using the definition of ${\displaystyle x_{n}}$,

${\displaystyle a_{m}={\frac {p_{m}}{N}}\sum _{n=0}^{N-1}u(x_{n})\cos \left({\frac {m\pi }{N}}(N+n+{\frac {1}{2}})\right)}$
${\displaystyle a_{m}={\frac {p_{m}}{N}}\sum _{n=0}^{N-1}u(x_{n})(-1)^{m}\cos \left({\frac {m\pi }{N}}(n+{\frac {1}{2}})\right)}$

and its inverse transform:

${\displaystyle u_{n}=\sum _{m=0}^{N-1}a_{m}T_{m}(x_{n})}$

(This so happens to the standard Chebyshev series evaluated on the roots grid.)

${\displaystyle u_{n}=\sum _{m=0}^{N-1}a_{m}\cos \left({\frac {m\pi }{N}}(N+n+{\frac {1}{2}})\right)}$
${\displaystyle \therefore u_{n}=\sum _{m=0}^{N-1}a_{m}(-1)^{m}\cos \left({\frac {m\pi }{N}}(n+{\frac {1}{2}})\right)}$

This can readily be obtained by manipulating the input arguments to a discrete cosine transform.

This can be demonstrated using the following MATLAB code:

function a=fct(f,l)
%x=-cos(pi/N*((0:N-1)'+1/2));

f=f(end:-1:1,:);
A=size(f); N=A(1);
if exist('A(3)','var') && A(3)~=1
for i=1:A(3)

a(:,:,i)=sqrt(2/N)*dct(f(:,:,i));
a(1,:,i)=a(1,:,i)/sqrt(2);

end
else

a=sqrt(2/N)*dct(f(:,:,i));
a(1,:)=a(1,:)/sqrt(2);

end


The discrete cosine transform (dct) is in fact computed using a fast Fourier transform algorithm in MATLAB.
And the inverse transform is given by the MATLAB code:

function f=ifct(a,l)
%x=-cos(pi/N*((0:N-1)'+1/2))
k=size(a); N=k(1);

a=idct(sqrt(N/2)*[a(1,:)*sqrt(2); a(2:end,:)]);

end


## Discrete Chebyshev transform on the extrema grid

This transform uses the grid:

${\displaystyle x_{n}=-\cos \left({\frac {n\pi }{N}}\right)}$
${\displaystyle T_{n}(x_{m})=\cos \left({\frac {\pi mn}{N}}+n\pi \right)=(-1)^{n}\cos \left({\frac {\pi mn}{N}}\right)}$

This transform is more difficult to implement by use of a Fast Fourier Transform (FFT). However it is more widely used because it is on the extrema grid which tends to be most useful for boundary value problems. Mostly because it is easier to apply boundary conditions on this grid.

There is a discrete (and in fact fast because it performs the dct by using a fast Fourier transform) available at the MATLAB file exchange that was created by Greg von Winckel. So it is omitted here.

In this case the transform and its inverse are

${\displaystyle u(x_{n})=u_{n}=\sum _{m=0}^{N}a_{m}T_{m}(x_{n})}$
${\displaystyle a_{m}={\frac {p_{m}}{N}}\left[{\frac {1}{2}}(u_{0}(-1)^{m}+u_{N})+\sum _{n=1}^{N-1}u_{n}T_{m}(x_{n})\right]}$

where ${\displaystyle p_{m}=1\Leftrightarrow m=0}$ and ${\displaystyle p_{m}=2}$ otherwise.

## Usage and implementations

The primary uses of the discrete Chebyshev transform are numerical integration, interpolation, and stable numerical differentiation[1]. An implementation which provides these features is given in the C++ library Boost[2]