[NumCS] Fix some typos, pagination issues

This commit is contained in:
2025-10-10 11:45:53 +02:00
parent 975b131b03
commit 73b2326b64
7 changed files with 59 additions and 52 deletions

Binary file not shown.

View File

@@ -67,6 +67,7 @@ Dann verwandeln sich die Integrale in die Form $\frac{1}{T} \int_{\frac{T}{2}}^{
\inlinedef Eine Funktion $f$ ist der $L^2$-Grenzwert von Funktionenfolgen $f_n \in L^2(0, 1)$, wenn für $n \rightarrow \infty$ gilt, dass $||f - f_n||_{L^2(0, 1)} \rightarrow 0$ \inlinedef Eine Funktion $f$ ist der $L^2$-Grenzwert von Funktionenfolgen $f_n \in L^2(0, 1)$, wenn für $n \rightarrow \infty$ gilt, dass $||f - f_n||_{L^2(0, 1)} \rightarrow 0$
\newpage
\begin{theorem}[]{Fourier-Reihe} \begin{theorem}[]{Fourier-Reihe}
Jede Funktion $f \in L^2(0, 1)$ ist der Grenzwert ihrer Fourier-Reihe: Jede Funktion $f \in L^2(0, 1)$ ist der Grenzwert ihrer Fourier-Reihe:
\rmvspace \rmvspace

View File

@@ -22,6 +22,7 @@ Der Beweis hierfür ist im Skript auf p. $71$. Die $N$-te Einheitswurzel wird hi
\fancydef{$N$-te Einheitswurzel} $\omega_N := \exp(\frac{-2\pi i}{N})$ \fancydef{$N$-te Einheitswurzel} $\omega_N := \exp(\frac{-2\pi i}{N})$
\fancyremark{Eigenschaften von $\omega_N$} \fancyremark{Eigenschaften von $\omega_N$}
\vspace{-1.5pc}
\begin{multicols}{3} \begin{multicols}{3}
\begin{align*} \begin{align*}
\forall j,k \in \mathbb{Z}:\quad & \omega_N^{k+jN}=\omega_N^k \\ \forall j,k \in \mathbb{Z}:\quad & \omega_N^{k+jN}=\omega_N^k \\
@@ -42,4 +43,5 @@ Der Beweis hierfür ist im Skript auf p. $71$. Die $N$-te Einheitswurzel wird hi
\end{cases} \end{cases}
\end{align*} \end{align*}
\newcolumn \newcolumn
\end{multicols} \end{multicols}
\vspace{-1.5pc}

View File

@@ -2,54 +2,57 @@
Wir definieren die Trigonometrische Basis. Den Basiswechsel zu dieser Basis nennen wir diskrete Fourier Transformation. Wir definieren die Trigonometrische Basis. Den Basiswechsel zu dieser Basis nennen wir diskrete Fourier Transformation.
\fancydef{Trigonometrische Basis}\\ \fancydef{Trigonometrische Basis}\\
\begin{align*} \begin{align*}
\{v_0, v_{N-1}\} \text{ ist eine Basis von } \mathbb{C}^N, \text{ wobei } v_k = \{v_0, \ldots, v_{N-1}\} \text{ ist eine Basis von } \mathbb{C}^N, \text{ wobei } v_k =
\begin{bmatrix} \begin{bmatrix}
\omega_N^{0\cdot k} \\ \omega_N^{1\cdot k}1 \\ \vdots \\ \omega_N^{(N-1)\cdot k} \omega_N^{0\cdot k} \\ \omega_N^{1\cdot k} \\ \vdots \\ \omega_N^{(N-1)\cdot k}
\end{bmatrix} \end{bmatrix}
\in \mathbb{C}^N \in \mathbb{C}^N
\end{align*} \end{align*}
Die symmetrische, nicht hermitesche Matrix $V = [v_0,\ \ldots\ , v_{N-1}]$ ist eine orthogonale Basis für $\mathbb{C}^N$: $V^HV = N\cdot I_N$.\\ Die symmetrische, nicht hermitesche Matrix $V = [v_0,\ \ldots\ , v_{N-1}]$ ist eine orthogonale Basis für $\mathbb{C}^N$: $V^HV = N\cdot I_N$.\\
Ebenfalls ist $V$ die Basiswechsel Matrix Trigonometrische Basis ($z$) $\mapsto$ Standardbasis ($y$).\\ Ebenfalls ist $V$ die Basiswechsel Matrix Trigonometrische Basis ($z$) $\mapsto$ Standardbasis ($y$).\\
An Hand von $V$ definieren wir gleich die Fourier-Matrix $F_N$. An Hand von $V$ definieren wir gleich die Fourier-Matrix $F_N$.
\begin{align*} \begin{align*}
y = Vz \implies z = V^{-1}y = \frac{1}{N}V^Hy = \frac{1}{N}\underbrace{F_N}_{:= V^H} y y = Vz \implies z = V^{-1}y = \frac{1}{N}V^Hy = \frac{1}{N}\underbrace{F_N}_{:= V^H} y
\end{align*} \end{align*}
Der Eintrag $y_l$ enstspricht einem Glied der Fourier-Reihe ausgewertet in $\frac{l}{N} \in [0,1)$. \\ Der Eintrag $y_l$ enstspricht einem Glied der Fourier-Reihe ausgewertet in $\frac{l}{N} \in [0,1)$. \\
Die diskreten Fourier-Koeffizienten $\gamma_k$ sind eine Umsortierung der trigonometrischen Basis Koeffizienten. Die diskreten Fourier-Koeffizienten $\gamma_k$ sind eine Umsortierung der Koeffizienten der trigonometrischen Basis.
\begin{multicols}{2} \begin{multicols}{2}
\begin{align*} \begin{align*}
y = \underbrace{\sum_{k=0}^{N-1} y_k e_{k+1}}_{y \text{ in Komponenten}} = \underbrace{\sum_{k=0}^{N-1} z_k v_k}_{\text{in Trig. Basis}} = \sum_{k=0}^{N-1} z_k \begin{bmatrix} y = \underbrace{\sum_{k=0}^{N-1} y_k e_{k+1}}_{y \text{ in Komponenten}} = \underbrace{\sum_{k=0}^{N-1} z_k v_k}_{\text{in Trig. Basis}} = \sum_{k=0}^{N-1} z_k
\omega_N^{0 \cdot k} \\ \omega_N^{1 \cdot k} \\ \omega_N^{2 \cdot k} \\ \vdots \\ \omega_N^{(N-1) \cdot k} \begin{bmatrix}
\end{bmatrix} \omega_N^{0 \cdot k} \\ \omega_N^{1 \cdot k} \\ \omega_N^{2 \cdot k} \\ \vdots \\ \omega_N^{(N-1) \cdot k}
\end{align*} \end{bmatrix}
\newcolumn \end{align*}
\newcolumn
\begin{align*} \begin{align*}
y_l &= \sum_{k=0}^{N-1} z_k \omega_N^{l \cdot k} \overset{\text{S. 75}}{=} \sum_{k=-N/2}^{N/2-1} \gamma_k \cdot \exp(\frac{2\pi i}{N}lk) \\ y_l & = \sum_{k=0}^{N-1} z_k \omega_N^{l \cdot k} \overset{\text{S. 75}}{=} \sum_{k=-N/2}^{N/2-1} \gamma_k \cdot \exp(\frac{2\pi i}{N}lk) \\
\text{wobei }\gamma_k &= \begin{cases} \text{wobei }\gamma_k & =
z_k, & 0 < k \leq \frac{N}{2}-1 \\ \begin{cases}
z_k+N, & -\frac{N}{2} \leq k < 0 z_k, & 0 < k \leq \frac{N}{2}-1 \\
\end{cases} z_k+N, & -\frac{N}{2} \leq k < 0
\end{align*} \end{cases}
\end{align*}
\end{multicols} \end{multicols}
\fancydef{Fourier-Matrix}\\ \fancydef{Fourier-Matrix}
\begin{align*} \begin{align*}
F_N := V^H = [v_0, \ldots, v_{N-1}]^H = \begin{bmatrix} F_N := V^H = [v_0, \ldots, v_{N-1}]^H =
\omega_N^0 & \omega_N^0 & \cdots & \omega_N^0 \\ \begin{bmatrix}
\omega_N^0 & \omega_N^1 & \cdots & \omega_N^{N-1} \\ \omega_N^0 & \omega_N^0 & \cdots & \omega_N^0 \\
\omega_N^0 & \omega_N^2 & \cdots & \omega_N^{2(N-1)} \\ \omega_N^0 & \omega_N^1 & \cdots & \omega_N^{N-1} \\
\vdots & \vdots & & \vdots \\ \omega_N^0 & \omega_N^2 & \cdots & \omega_N^{2(N-1)} \\
\omega_N^0 & \omega_N^{N-1} &\cdots & \omega_N^{(N-1)^2} \vdots & \vdots & & \vdots \\
\omega_N^0 & \omega_N^{N-1} & \cdots & \omega_N^{(N-1)^2}
\end{bmatrix} \end{bmatrix}
= =
\begin{bmatrix} \begin{bmatrix}
\omega_N^{jk} \omega_N^{jk}
\end{bmatrix}^{N-1}_{j,k = 0} \end{bmatrix}^{N-1}_{j,k = 0}
\in \mathbb{C}^{N\times N} \in \mathbb{C}^{N\times N}
\end{align*} \end{align*}

View File

@@ -1,25 +1,26 @@
\subsubsection{DFT in Numpy} \subsubsection{DFT in Numpy}
Sei $y$ in der Standardbasis, und $c = \mathcal{F}_N(y)$, also $y$ in der trig. Basis. Sei $y$ in der Standardbasis, und $c = \mathcal{F}_N(y)$, also $y$ in der trig. Basis.
$$ \begin{align*}
c = F_N \times y = \verb|fft|(y)\quad \textit{(DFT in numpy)} \quad \quad \quad y = \frac{1}{N}F_N^Hc = \verb|ifft|(c)\quad \textit{(Inverse DFT in numpy)} c = F_N \times y = \texttt{fft}(y)\quad \text{\textit{(DFT in numpy)}} & y = \frac{1}{N}F_N^Hc = \texttt{ifft}(c)\quad \textit{(Inverse DFT in numpy)}
$$ \end{align*}
Um zur ursprünglichen Darstellung des trig. Polynoms zurück zu kommen, müssen wir die Koeffizienten umsortieren: \\ Um zur ursprünglichen Darstellung des trig. Polynoms zurück zu kommen, müssen wir die Koeffizienten umsortieren: \\
Seien $z = \frac{1}{N} F_N y$ und $\zeta = \verb|fft.fftshift|(z)$. Seien $z = \frac{1}{N} F_N y$ und $\zeta = \verb|fft.fftshift|(z)$.
\begin{align*} \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}} 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*} \end{align*}
\setcounter{all}{13} \setcounter{all}{13}
\inlineremark Man kann mit dieser Approximation einfach die $L^2$-Norm und Ableitungen berechnen: \inlineremark Man kann mit dieser Approximation einfach die $L^2$-Norm und Ableitungen berechnen:
\vspace{-1.5pc}
\begin{multicols}{2} \begin{multicols}{2}
\begin{align*} \begin{align*}
||f||^2_{L^2} \approx \left\Vert \sum_{k=-N/2}^{N/2-1} \zeta_k \cdot e^{2 \pi ikx} \right\Vert^2_{L^2} = \sum_{k=-N/2}^{N/2-1} |\zeta_k|^2 = \Vert z \Vert^2_{L^2} ||f||^2_{L^2} \approx \left\Vert \sum_{k=-N/2}^{N/2-1} \zeta_k \cdot e^{2 \pi ikx} \right\Vert^2_{L^2} = \sum_{k=-N/2}^{N/2-1} |\zeta_k|^2 = \Vert z \Vert^2_{L^2}
\end{align*} \end{align*}
\newcolumn \newcolumn
\begin{align*} \begin{align*}
f'(t) \approx \sum_{k=-N/2}^{N/2-1} (2\pi ik) \zeta_k \cdot e^{2 \pi ikx} f'(t) \approx \sum_{k=-N/2}^{N/2-1} (2\pi ik) \zeta_k \cdot e^{2 \pi ikx}
\end{align*} \end{align*}
\end{multicols} \end{multicols}

View File

@@ -56,7 +56,7 @@ Die Shift Matrix $S_N$ ist der Zirkulant für $c=e_2$. $S_N$ ist eine Permutatio
Die Shift-Matrix hat einen speziellen Bezug zu den Spaltenvektoren $v_k$ von $F_N$, und auch allen anderen Zirkulanten $C$. Die Shift-Matrix hat einen speziellen Bezug zu den Spaltenvektoren $v_k$ von $F_N$, und auch allen anderen Zirkulanten $C$.
\inlineremark Der $k$-te Fourier-vektor $v_k$ ist ein Eigenvektor von $S_N$ zu $\lambda_k = e^{2\pi i \frac{k}{N}}$. \inlineremark Der $k$-te Fourier-Vektor $v_k$ ist ein Eigenvektor von $S_N$ zu $\lambda_k = e^{2\pi i \frac{k}{N}}$.
\fancytheorem{Diagonalisierung von Zirkulanten} Die Eigenvektoren von $S_N$ diagonalisieren jeden Zirkulanten $C$, und sind d.h. auch die Eigenvektoren von $C$. \fancytheorem{Diagonalisierung von Zirkulanten} Die Eigenvektoren von $S_N$ diagonalisieren jeden Zirkulanten $C$, und sind d.h. auch die Eigenvektoren von $C$.
Die Eigenwerte erhält man aus $p(z) = c_0z^0 + \ldots + c_{N-1}z^{N-1}$. Die Eigenwerte erhält man aus $p(z) = c_0z^0 + \ldots + c_{N-1}z^{N-1}$.
@@ -101,4 +101,4 @@ Im Fall von $T$-periodischen Funktionen gilt: $(g * h)(x) = \frac{1}{T}\displays
Man erhält so letzendlich das Faltungs-Theorem: Die $F_N$-Transformierte einer Faltung ist genau das gleiche wie die Multiplikation zweier $F_N$-Transormierten. Da die DFT in $\mathcal{O}(n\log(n))$ (Kap. 3.3) geht, gilt dies nun auch für die Faltung. Man erhält so letzendlich das Faltungs-Theorem: Die $F_N$-Transformierte einer Faltung ist genau das gleiche wie die Multiplikation zweier $F_N$-Transormierten. Da die DFT in $\mathcal{O}(n\log(n))$ (Kap. 3.3) geht, gilt dies nun auch für die Faltung.
\begin{align*} \begin{align*}
F_Nc = \text{diag}(F_N a) F_N b F_Nc = \text{diag}(F_N a) F_N b
\end{align*} \end{align*}

View File

@@ -45,15 +45,15 @@ Unten findet sich Python code der mit den unterschiedlichen Methoden die Koeffiz
\rmvspace \rmvspace
\begin{code}{python} \begin{code}{python}
def get_coeff_trig_poly(t: np.ndarray, y: np.ndarray): def get_coeff_trig_poly(t: np.ndarray, y: np.ndarray):
N = y.shape[0] N = y.shape[0]
if N % 2 == 1: if N % 2 == 1:
n = (N - 1.0) / 2.0 n = (N - 1.0) / 2.0
M = np.exp(2 * np.pi * 1j * np.outer(t, np.arange(-n, n + 1))) M = np.exp(2 * np.pi * 1j * np.outer(t, np.arange(-n, n + 1)))
else: else:
n = N / 2.0 n = N / 2.0
M = np.exp(2 * np.pi * 1j * np.outer(t, np.arange(-n, n))) M = np.exp(2 * np.pi * 1j * np.outer(t, np.arange(-n, n)))
c = np.linalg.solve(M, y) c = np.linalg.solve(M, y)
return c return c
N = 2**12 N = 2**12
t = np.linspace(0, 1, N, endpoint=False) t = np.linspace(0, 1, N, endpoint=False)