[NumCS] Update to new helpers

This commit is contained in:
2025-10-18 13:40:39 +02:00
parent 8c34f7196d
commit 580928bee1
16 changed files with 41 additions and 38 deletions

Binary file not shown.

View File

@@ -18,8 +18,8 @@
\begin{document}
\startDocument
\usetcolorboxes
\setcounter{numberingConfig}{3}
\setcounter{numberSubsections}{1}
\setNumberingStyle{3}
\setSubsectionNumbering{1}
% ╭────────────────────────────────────────────────╮
% │ Title page │

View File

@@ -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) \\

View File

@@ -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):

View File

@@ -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$

View File

@@ -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]$.

View File

@@ -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}

View File

@@ -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*}

View File

@@ -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:

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}}

View File

@@ -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:

View File

@@ -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.

View File

@@ -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$

View File

@@ -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