% ┌                                                ┐
% │     AUTHOR: Janis Hutz<info@janishutz.com>     │
% └                                                ┘

\newsection
\subsection{DFT und Chebyshev-Interpolation}
Mithilfe der DFT können günstig und einfach die Chebyshev-Koeffizienten ($c_k$) berechnet werden.
Die Idee basiert auf dem Satz 2.4.16, durch welchen schon schnell klar wird, dass es eine Verbindung zwischen den Fourier-Koeffizienten und Chebyshev-Koeffizienten gibt.

Die Chebyshev-Knoten sind folgendermassen definiert:
\begin{align*}
    t_k := \cos\left( \frac{2k + 1}{2(n + 1)} \pi \right), \smallhspace k = 0, \ldots, n
\end{align*}
Mit den Hilfsfunktionen $g: [-1, 1] \rightarrow \C, s \mapsto f(\cos(2\pi s))$ und $q: [-1, 1] \rightarrow \C, s \mapsto p(\cos(2\pi s))$,
können wir folgendes mit der Interpolationsbedingung $f(t_k) = p(t_k)$ tun:
\begin{align*}
    f(t_k) = p(t_k) \Longleftrightarrow g\left( \frac{2k + 1}{4(n + 1)} \right) = p\left( \frac{2k + 1}{4(n + 1)} \right)
\end{align*}
Wir wenden nun die Translation $s^* = s + \frac{1}{4n + 1}$ an, die Hilfsfunktionen sind dann $g*(s) = g(s^*)$ und $q^*(s) = q(s^*)$
und man kann zeigen (Seite 100 im Skript), dass $q^*$ das trigonometrische Interpolationspolynom von $g^*$ ist,
also kann man eine Chebyshev-Interpolation durch eine DFT durchführen.
Folglich überträgt sich auch die Fehlerabschätzung. Die Interpolationsbedingungen sind folgendermassen definiert:
\begin{align*}
    q\left( \frac{k}{2(n + 1)} + \frac{1}{4(n + 1)} \right) = z_k :=
    \begin{cases}
        y_k            & \text{ für } k = 0, \ldots, n \\
        y_{2n + 1 - k} & \text{ für } k = n, \ldots, 2n + 1
    \end{cases}
\end{align*}

Um das ganze zu implementieren ist eine andere Darstellung nützlich:
\begin{align*}
    \cos(2\pi \xi_k) \text{ mit } \xi_k = \frac{2k + 1}{4(n + 1)}
\end{align*}
Durch Umformungen (Seite 101 im Skript) erhalten wir:
\begin{align*}
    z_l = \sum_{-n}^{n} \zeta_j \exp\left( 2\pi ij \tilde{\xi}_l \right) \text{ mit } \tilde{\xi}_l = \frac{l}{2n + 2} \text{ für } 0, 1, \ldots, 2n + 1\\
    \zeta_j = c_j \exp\left( \frac{2 \pi ij}{4(n + 1)} \right) \text{ für } j = -n, \ldots, -1, 0, 1, \ldots, n
\end{align*}
Und mit weitern Umformungen erhalten wir
\begin{align*}
    F^{-1}_{2n + 2} \left[ \exp\left( \frac{\pi inl}{n + 1} \right) z_l \right] = [\zeta_{k -n}]
\end{align*}
Auf Seite 102 im Skript findet sich auch eine effiziente Implementation dessen.

\stepLabelNumber{all}
\inlineremark Die Formel in Satz 2.4.16 (und in der eben erwähnten Implementierung) sind nichts anderes als eine Version der DCT (Discrete Cosine Transform).
Dies ist eine günstigere, aber beschränktere Variante der DFT, mit der nur reellwertige, gerade Funktionen interpoliert werden können.

\innumpy benutzen wir \texttt{scipy.fft.dct}. Dazu müssen die Mesungen in den Punkten $x_j = \cos\left( (j + 0.5) \cdot \frac{\pi}{N} \right)$ sein.

\inlineremark Die Chebyshev-Koeffizienten $c_j$ können folgendermassen berechnet werden:
\rmvspace
\begin{align*}
    c_j = \frac{1}{\pi} \int_{0}^{2\pi} f(\cos(\varphi)) \cos(j \varphi) \dx \varphi
\end{align*}
Eine weitere effiziente Interpolation findet sich auf Seiten 104 - 105 im Skript
