mirror of
https://github.com/janishutz/eth-summaries.git
synced 2025-11-25 18:44:24 +00:00
54 lines
3.0 KiB
TeX
54 lines
3.0 KiB
TeX
\newsection
|
|
\subsection{DFT und Chebyshev-Interpolation}
|
|
Mithilfe der DFT können günstig und einfach die Chebyshev-Koeffizienten 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.
|
|
|
|
\stepcounter{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)$
|
|
|
|
\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
|