mirror of
https://github.com/janishutz/eth-summaries.git
synced 2025-11-25 10:34:23 +00:00
[NumCS] Update to new helpers
This commit is contained in:
@@ -20,13 +20,13 @@ Zusätzlich kommt hinzu, dass durch Unterläufe (in diesem Kurs ist dies eine Za
|
||||
Überläufe hingegen sind konventionell definiert, also eine Zahl, die zu gross ist und nicht mehr dargestellt werden kann.
|
||||
|
||||
|
||||
\setcounter{all}{9}
|
||||
\setLabelNumber{all}{9}
|
||||
\begin{remark}[]{Auslöschung}
|
||||
Bei der Subtraktion von zwei ähnlich grossen Zahlen kann es zu einer Addition der Fehler der beiden Zahlen kommen, was dann den relativen Fehler um einen sehr grossen Faktor vergrössert.
|
||||
Die Subtraktion selbst hat einen vernachlässigbaren Fehler
|
||||
\end{remark}
|
||||
|
||||
\setcounter{all}{18}
|
||||
\setLabelNumber{all}{18}
|
||||
\fancyex{Ableitung mit imaginärem Schritt} Als Referenz in Graphen wird hier oftmals die Implementation des Differenzialquotienten verwendet.
|
||||
|
||||
Der Trick hier ist, dass wir mit Komplexen Zahlen in der Taylor-Approximation einer glatten Funktion in $x_0$ einen rein imaginären Schritt durchführen können:
|
||||
@@ -41,7 +41,7 @@ Da $f(x_0)$ und $f''(x_0)h^2$ reell sind, verschwinden die Terme, wenn wir nur d
|
||||
Falls jedoch hier die Auswertung von $\text{Im}(f(x_0 + ih))$ nicht exakt ist, so kann der Fehler beträchtlich sein.
|
||||
|
||||
|
||||
\setcounter{all}{20}
|
||||
\setLabelNumber{all}{20}
|
||||
\fancyex{Konvergenzbeschleunigung nach Richardson}
|
||||
\begin{align*}
|
||||
y f'(x) & = y d\left(\frac{h}{2}\right) + \frac{1}{6} f'''(x) h^2 + \frac{1}{480}f^{(s)} h^4 + \ldots - f'(x) \\
|
||||
|
||||
@@ -18,17 +18,17 @@ Wie in Lineare Algebra besprochen, ist das Resultat der Multiplikation einer Mat
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\setcounter{all}{4}
|
||||
\setLabelNumber{all}{4}
|
||||
\fancyremark{Rang der Matrixmultiplikation} $\text{Rang}(AX) = \min(\text{Rang}(A), \text{Rang}(X))$
|
||||
|
||||
\setcounter{all}{7}
|
||||
\setLabelNumber{all}{7}
|
||||
\fancyremark{Multiplikation mit Diagonalmatrix $D$} $D \times A$ skaliert die Zeilen von $A$ während $A \times D$ die Spalten skaliert
|
||||
|
||||
\stepcounter{all}
|
||||
\inlineex \verb|D @ A| braucht $\tco{n^3}$ Operationen, wenn wir jedoch \verb|D.diagonal()[:, np.newaxis] * A| verwenden, so haben wir nur noch $\tco{n^2}$ Operationen, da wir die vorige Bemerkung Nutzen und also nur noch eine Skalierung vornehmen.
|
||||
So können wir also eine ganze Menge an Speicherzugriffen sparen, was das Ganze bedeutend effizienter macht
|
||||
|
||||
\setcounter{all}{14}
|
||||
\setLabelNumber{all}{14}
|
||||
\inlineremark Wir können bestimmte Zeilen oder Spalten einer Matrix skalieren, in dem wir einer Identitätsmatrix im unteren Dreieck ein Element hinzufügen.
|
||||
Wenn wir nun diese Matrix $E$ (wie die in der $LU$-Zerlegung) linksseitig mit der Matrix $A$ multiplizieren (bspw. $E^{(2, 1)}A$), dann wird die zugehörige Zeile skaliert.
|
||||
Falls wir aber $AE^{(2, 1)}$ berechnen, so skalieren wir die Spalte
|
||||
@@ -79,7 +79,7 @@ Die vollständige Implementation sieht so aus:
|
||||
\end{code}
|
||||
|
||||
|
||||
\setcounter{all}{21}
|
||||
\setLabelNumber{all}{21}
|
||||
\fancydef{Kronecker-Produkt} Das Kronecker-Produkt ist eine $(ml) \times (nk)$-Matrix, für $A \in \R^{m \times n}$ und $B \in \R^{l \times k}$.
|
||||
|
||||
\innumpy können wir dieses einfach mit \verb|np.kron(A, B)| berechnen (ist jedoch nicht immer ideal):
|
||||
|
||||
@@ -26,16 +26,16 @@ Dann lässt sich der Bezug zwischen $f$ und $\tilde{f} = f_n(x)$ so ausdrücken:
|
||||
f(x) \approx f_n(x) = \sum_{j=1}^n \alpha_j b_j(x)
|
||||
\end{align*}
|
||||
|
||||
\setcounter{all}{2}
|
||||
\setLabelNumber{all}{1}
|
||||
\inlineremark Unterräume $\mathcal{V}_n$ existieren nicht nur für Polynome, wir beschränken uns aber auf $b_j(x) = x^{i-1}$.
|
||||
Andere Möglichkeiten: $b_j = \cos((j-1)\cos^-1(x))$ \textit{(Chebyshev)} oder $b_j = e^{i2\pi j x}$ \textit{(Trigonometrisch)}
|
||||
|
||||
% FIXME: This could go into a special "maths theory" section -> GOOD
|
||||
|
||||
\setcounter{all}{5}
|
||||
\setLabelNumber{all}{4}
|
||||
\fancytheorem{Peano} $f$ stetig $\implies \exists p(x)$ welches $f$ in $||\cdot||_\infty$ beliebig gut approximiert.
|
||||
|
||||
\setcounter{all}{7}
|
||||
\setLabelNumber{all}{5}
|
||||
\fancydef{Raum der Polynome} $\mathcal{P}_k := \{ x \mapsto \sum_{j = 0}^{k} \alpha_j x^j \}$
|
||||
\fancydef{Monom} $f: x \mapsto x^k$
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ Die Konstruktion verläuft iterativ, und vorherige Datenpunkte müssen nicht neu
|
||||
p_3(x) &= p_2(x) + \ldots
|
||||
\end{align*}
|
||||
|
||||
\setcounter{all}{3}
|
||||
\setLabelNumber{all}{2}
|
||||
\fancytheorem{Newton-Basis} $\{ N_0,\ \ldots\ ,N_n\}$ ist eine Basis von $\mathcal{P}_n$
|
||||
\begin{align*}
|
||||
N_0(x) &:= 1 \quad
|
||||
@@ -49,7 +49,7 @@ Wegen Satz 2.2.3 lässt sich jedes $p_n \in \mathcal{P}_n$ als $p_n(x) =\display
|
||||
|
||||
Die Matrixmultiplikation in $\mathcal{O}(n^3)$ ist aber nicht nötig: Es gibt ein effizienteres System.
|
||||
|
||||
\setcounter{all}{5}
|
||||
\setLabelNumber{all}{4}
|
||||
\fancydef{Dividierte Differenzen}
|
||||
\begin{multicols}{2}
|
||||
\begin{align*}
|
||||
@@ -81,7 +81,7 @@ Falls $x_j = x_0 + \underbrace{j \cdot h}_{:= \Delta^j}$ gilt vereinfacht sich e
|
||||
y[x_0,\ \ldots\ , x_n] &= \frac{1}{n! h^n} \Delta^n y_0
|
||||
\end{align*}
|
||||
|
||||
\setcounter{all}{8}
|
||||
\setLabelNumber{all}{8}
|
||||
\fancytheorem{Newton} Falls $\beta_j = y[x_0,\ \ldots\ , x_j]$ geht das resultierende Polynom durch alle $(x_i,y_i)$.\\
|
||||
\footnotesize
|
||||
(D.h. die dividierten Differenzen sind korrekt.)
|
||||
@@ -164,7 +164,7 @@ Auswertung eines Newton-Polynoms funktioniert in $\mathcal{O}(n)$ durch ein modi
|
||||
|
||||
\subsubsection{Fehler}
|
||||
|
||||
\setcounter{all}{11}
|
||||
\setLabelNumber{all}{10}
|
||||
\inlinetheorem $f$ $n$-mal diff.-bar, $y_i = f(x_i) \implies \exists \xi \in (\min_i x_i, \max_i x_i)$ s.d. $y[x_0,x_1,\ldots,x_n] = \frac{f^{(n)}(\xi)}{(n+1)!}$
|
||||
|
||||
\fancytheorem{Fehler} $f: [a,b] \to \R$ ist $(n+1)$-mal diff.-bar, $p$ ist das Polynom zu $f$ in $x_0,\ldots,x_n \in [a,b]$.
|
||||
|
||||
@@ -84,14 +84,14 @@ Gleiche funktion, etwas kürzer:
|
||||
\end{code}
|
||||
|
||||
Mit dem können wir dann ein Polynom mit der baryzentrischen Interpolationsformel interpolieren:
|
||||
\setcounter{numberingConfig}{0}
|
||||
\numberingOff
|
||||
\begin{formula}[]{Baryzentrische Interpolationsformel}
|
||||
\vspace{-1.5pc}
|
||||
\begin{align*}
|
||||
p(x) = \frac{\displaystyle \sum_{k = 0}^{n} \frac{\lambda_k}{x - x_k} y_k}{\displaystyle \sum_{k = 0}^{n} \frac{\lambda_k}{x - x_k}}
|
||||
\end{align*}
|
||||
\end{formula}
|
||||
\setcounter{numberingConfig}{3}
|
||||
\numberingOn
|
||||
|
||||
Falls wir die Stützstellen als $(n + 1)$ Chebyshev-Abszissen $\displaystyle x_k = \cos\left( \frac{k\pi}{n} \right)$ wählen,
|
||||
so sind alle $\lambda_k$ gegeben durch $\lambda_k = (-1)^k \delta_k$ mit $\delta_0 = \delta_n = 0.5$ und $\delta_i = 1$.
|
||||
@@ -141,7 +141,7 @@ Verglichen in der Lagrange-Basis zum korrekten Interpolationspolynom $p(x)$ ergi
|
||||
\end{align*}
|
||||
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\fancytheorem{Auswirkung von Messfehlern} Es gilt (wenn $\Lambda_n$ die beste Lebesgue-Konstante für die Ungleichung ist):
|
||||
\rmvspace
|
||||
\begin{align*}
|
||||
@@ -156,7 +156,7 @@ Verglichen in der Lagrange-Basis zum korrekten Interpolationspolynom $p(x)$ ergi
|
||||
\end{align*}
|
||||
\end{theorem}
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\inlineremark Für gleichmässig auf $I$ verteilte Stützstellen gilt $\displaystyle \Lambda_n \approx \frac{2^{n + 1}}{e n \log(n)}$
|
||||
|
||||
\shade{gray}{Wichtig:} \bi{Niemals gleichmässig verteilte Stützstellen verwenden für die Interpolation von Polynomen hohen Grades}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
\end{definition}
|
||||
$T_n(x)$ scheint erst nicht ein Polynom zu sein, aber wir haben einen $\arccos$ in einem $\cos$. Zudem:
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\fancytheorem{Eigenschaften}
|
||||
Das $n$-te Chebyshev-Polynom ist ein Polynom von Grad $n$ und für $x \in [-1, 1]$ gilt:
|
||||
\begin{multicols}{2}
|
||||
@@ -81,7 +81,7 @@ Oder $k = 1, \ldots, n - 1$ bei ausgeschlossenen Endpunkten $a$ und $b$
|
||||
|
||||
|
||||
% ────────────────────────────────────────────────────────────────────
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\newpage
|
||||
\subsubsection{Fehler}
|
||||
Was hat die neue Verteilung für einen Einfluss auf den Fehler?
|
||||
@@ -98,12 +98,12 @@ Folglich sind also die Nullstellen der Chebyshev-Polynome $T_n$ die bestmöglich
|
||||
Da die Abszissen mit FFT einfacher zu berechnen sind, werden diese oft bevorzugt berechnet.
|
||||
Dies, da die Nullstellen von $T_n$ in den Extrema von $T_{2n}$ enthalten sind, während zudem zwischen zwei nebeneinanderliegenden Chebyshev-Abszissen jeweils eine Nullstelle von $T_{2n}$ liegt
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\fancytheorem{Lebesgue-Konstante} Für die Chebyshev-Interpolation: $\displaystyle \Lambda_n \approx \frac{2}{\pi} \log(n) \text{ für } n \rightarrow \infty$
|
||||
|
||||
|
||||
% ────────────────────────────────────────────────────────────────────
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\begin{theorem}[]{Interpolationspolynom}
|
||||
Das Interpolationspolynom $p$ zu $f$ mit Chebyshev-Knoten gleich der Nullstellen von $T_{n + 1}$ ist gegeben durch
|
||||
\begin{align*}
|
||||
|
||||
@@ -60,7 +60,7 @@ $p_m$ kann folgendermassen dargestellt werden ($a_0 = 2\gamma_0, a_j = 2\Re(\gam
|
||||
In Anwendungen findet sich oft das Intervall $\left[ -\frac{T}{2}, \frac{T}{2} \right]$.
|
||||
Dann verwandeln sich die Integrale in die Form $\frac{1}{T} \int_{\frac{T}{2}}^{-\frac{T}{2}} (\ldots) \dx t$ und $\exp(2\pi ijt)$ durch $\exp(i \frac{2\pi j}{T} t)$ ersetzt wird.
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\inlineremark Die Funktionen $\varphi_k(x) = \exp(2\pi ikx)$ sind orthogonal bezüglich des $L^2(0, 1)$-Skalarprodukts, bilden also eine Basis für den Unterraum der trigonometrischen polynome.
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ Dann verwandeln sich die Integrale in die Form $\frac{1}{T} \int_{\frac{T}{2}}^{
|
||||
|
||||
% A (small) intuitive explanation of what the fourier series / coefficients are & what they are useful for would be great, script *briefly* touches on it.
|
||||
|
||||
\setcounter{all}{14}
|
||||
\setLabelNumber{all}{14}
|
||||
\inlineremark Die Parseval'sche Gleichung beschreibt einfach gesagt einen ``schnellen'' Abfall der $\hat{f}(k)$.
|
||||
Genauer gesagt, klingen die Koeffizienten schneller als $\frac{1}{\sqrt{k}}$ ab.
|
||||
Sie sagt zudem aus, dass die $L^2$-Norm der Funktion aus einer Summe berechnet werden kann (nicht nur als Integral).
|
||||
@@ -134,7 +134,7 @@ Mit $c = \pi(a + b)$ und $d = \pi(b - a)$
|
||||
\label{fig:trigo-interp-overarcing}
|
||||
\end{figure}
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\inlineremark Meist ist es nicht möglich (oder nicht sinnvoll) die Fourier-Koeffizienten analytisch zu berechnen,
|
||||
weshalb man wieder zur Numerik und der Trapezformel greift, die folgendermassen definiert ist für $t_l = \frac{l}{N}$,
|
||||
wobei $l = 0, 1 \ldots, N - 1$ und $N$ die Anzahl der Intervalle ist:
|
||||
|
||||
@@ -58,14 +58,14 @@ Die diskreten Fourier-Koeffizienten $\gamma_k$ sind eine Umsortierung der Koeffi
|
||||
|
||||
Die skalierte Fourier-Matrix $\frac{1}{\sqrt{N}}F_N$ hat einige besondere Eigenschaften.
|
||||
|
||||
\setcounter{all}{6}
|
||||
\setLabelNumber{all}{6}
|
||||
\inlinetheorem Die skalierte Fourier-Matrix $\frac{1}{\sqrt{N}}F_N$ ist unitär: $F_N^{-1} = \frac{1}{N} F_N^H = \frac{1}{N} \overline{F_N}$
|
||||
|
||||
\fancyremark{Eigenwerte von $\frac{1}{\sqrt{N}}F_N$} Die $\lambda$ von $\frac{1}{\sqrt{N}}F_N$ liegen in $\{1,-1,i,-i\}$.
|
||||
|
||||
Die diskrete Fourier-Transformation ist nun einfach die Anwendung der Basiswechsel-Matrix $F_N$.
|
||||
|
||||
\setcounter{all}{5}
|
||||
\setLabelNumber{all}{5}
|
||||
\fancydef{Diskrete Fourier-Transformation} $\mathcal{F}_N: \mathbb{C} \to \mathbb{C}$ s.d. $\mathcal{F}_N(y) = F_Ny$
|
||||
\begin{align*}
|
||||
\text{Für } c = \mathcal{F}_N(y) \text{ gilt: }\quad c_k = \sum_{j=0}^{N-1} y_j \omega_N^{kj}
|
||||
|
||||
@@ -10,7 +10,7 @@ Seien $z = \frac{1}{N} F_N y$ und $\zeta = \verb|fft.fftshift|(z)$.
|
||||
\begin{align*}
|
||||
f(x) \approx \underbrace{\sum_{k=-N/2}^{N/2-1} \zeta_k \cdot e^{2 \pi ikx} }_{\text{Form des trig. Polynoms}}
|
||||
\end{align*}
|
||||
\setcounter{all}{13}
|
||||
\setLabelNumber{all}{13}
|
||||
\inlineremark Man kann mit dieser Approximation einfach die $L^2$-Norm und Ableitungen berechnen:
|
||||
\vspace{-1.5pc}
|
||||
\begin{multicols}{2}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
\newpage
|
||||
\subsubsection{DFT \& Lineare Algebra}
|
||||
|
||||
\setcounter{all}{25}
|
||||
\setLabelNumber{all}{25}
|
||||
\fancydef{Zirkulant} Für einen vektor $c \in \mathbb{R}^N$ hat der Zirkulant $C \in \mathbb{R}^{N \times N}$ die Form:
|
||||
\begin{align*}
|
||||
C = \begin{bmatrix}
|
||||
@@ -74,7 +74,7 @@ Die Faltung von $a = [a_0,\ldots,a_{N-1}]^\top, b = [b_0,\ldots,b_{N-1}]^\top$ i
|
||||
c = a \circledast b\quad\quad \text{s.d. } \sum_{n=0}^{N-1} a_nb_{k-n} \equiv_N \sum_{n=0}^{N-1}b_na_{n-k}
|
||||
\end{align*}
|
||||
|
||||
\setcounter{all}{32}
|
||||
\setLabelNumber{all}{32}
|
||||
\inlineremark Zyklische Faltungen von Vektoren kann man mit Zirkulanten berechnen.
|
||||
\begin{align*}
|
||||
c = a \circledast b = Ab = \underbrace{\begin{bmatrix}
|
||||
@@ -87,7 +87,7 @@ Die Faltung von $a = [a_0,\ldots,a_{N-1}]^\top, b = [b_0,\ldots,b_{N-1}]^\top$ i
|
||||
|
||||
% NOTE: I'm not sure if this below is correct. This is how I interpret what is written in the script
|
||||
|
||||
\setcounter{all}{30}
|
||||
\setLabelNumber{all}{30}
|
||||
\inlineremark Eine Multiplikation von Polynomen $g,h$ entspricht einer Faltung im Frequenzbereich.
|
||||
\begin{align*}
|
||||
\mathcal{F}_N(\underbrace{g * h}_{\text{Standard Basis}}) = \underbrace{\mathcal{F}_N(g) \cdot \mathcal{F}_N(h)}_{\text{Trigonometrische Basis}}
|
||||
|
||||
@@ -36,7 +36,7 @@ Auch hier tritt das Gibbs-Phänomen wieder an den Sprungstellen von $f(t)$ auf.
|
||||
Dies verursacht die Verlangsamung der Konvergenz in den Stellen, in welchen die Funktion nicht glatt ist.
|
||||
|
||||
\newpage
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\inlineex Sei für $\alpha \in [0, 1)$ $\displaystyle f(t) = \frac{1}{\sqrt{1 - \alpha \sin(2\pi t)}}$.
|
||||
Die Konvergenz ist exponentiell in $n$ und je kleiner $\alpha$, desto schneller ist sie.
|
||||
In der untenstehenden Abbildung \ref{fig:interpolation-error-convergence} sind einige Beispiele aufgetragen:
|
||||
@@ -50,7 +50,7 @@ In der untenstehenden Abbildung \ref{fig:interpolation-error-convergence} sind e
|
||||
\end{figure}
|
||||
|
||||
|
||||
\setcounter{all}{6}
|
||||
\setLabelNumber{all}{6}
|
||||
\begin{theorem}[]{Aliasing}
|
||||
Der k-te Fourier-Koeffizient des $N$-ten trigonometrischen Interpolationspolynoms unterscheidet sich vom $k$-ten Fourier-Koeffizienten von $f$
|
||||
gerade um die Summe aller Fourier-Koeffizienten, die um ganze Vielfache von $N$ vom $k$-ten Fourier-Koeffizienten verschoben sind:
|
||||
|
||||
@@ -39,7 +39,7 @@ Und mit weitern Umformungen erhalten wir
|
||||
\end{align*}
|
||||
Auf Seite 102 im Skript findet sich auch eine effiziente Implementation dessen.
|
||||
|
||||
\stepcounter{all}
|
||||
\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.
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ Bei anderen Interpolationsmethoden ist dies nicht garantiert (so auch nicht beim
|
||||
\textit{Wenn man den Parameter \texttt{method="makima"} bei \texttt{Akima1DInterpolator} mitgibt, wird eine neuere modifizierte Variante davon ausgeführt}
|
||||
\end{footnotesize}
|
||||
|
||||
\stepcounter{all}
|
||||
\stepLabelNumber{all}
|
||||
\begin{theorem}[]{Fehler der CHIP}
|
||||
% FIXME: Explain what the C is or if it is \C, then replace
|
||||
Sei $f \in C^4[a, b]$ und $s$ der stückweise CHIP mit exakten Werten der Ableitungen $s'(x_j) = f'(x_j), s(x_j) = f(x_j)$ für $j = 0, \ldots, N$
|
||||
|
||||
@@ -55,4 +55,7 @@ Falls wir $c_k(x) = x^k$ haben (was oft der Fall ist, je nach Funktion aber kön
|
||||
\rmvspace
|
||||
als die Lagrange-Polynome zu den Stützstellen $x_0, x_1, \ldots, x_n$
|
||||
\end{definition}
|
||||
Für ein Beispiel verweisen wir auf Abschnitt \ref{sec:barycentric-interpolation}
|
||||
Für ein Beispiel verweisen wir auf Beispiel \ref{all:2-3-2}
|
||||
|
||||
\setLabelNumber{all}{6}
|
||||
\fancyremark{Eigenschaften der Lagrange-Polynome} Zusätzlich zu den Eigenschaften in \ref{all:2-3-4} ist folgende Eigenschaft erwähnenswert
|
||||
|
||||
Reference in New Issue
Block a user