diff --git a/semester3/numcs/format.py b/semester3/numcs/format.py new file mode 100644 index 0000000..e69de29 diff --git a/semester3/numcs/numcs-summary.pdf b/semester3/numcs/numcs-summary.pdf index 0dd5e5f..6c2a276 100644 Binary files a/semester3/numcs/numcs-summary.pdf and b/semester3/numcs/numcs-summary.pdf differ diff --git a/semester3/numcs/numcs-summary.tex b/semester3/numcs/numcs-summary.tex index 195c2e3..6a5345e 100644 --- a/semester3/numcs/numcs-summary.tex +++ b/semester3/numcs/numcs-summary.tex @@ -132,6 +132,8 @@ Moral of the story: Use descriptive variable names and do NOT use $t$, $tt$, $tt \input{parts/01_interpolation/02_piece-wise/01_hermite-interpolation.tex} \input{parts/01_interpolation/02_piece-wise/02_splines.tex} + +% ── quadrature ────────────────────────────────────────────────────── \newsection \section{Numerische Quadratur} \input{parts/02_quadrature/00_introduction.tex} @@ -144,10 +146,12 @@ Moral of the story: Use descriptive variable names and do NOT use $t$, $tt$, $tt \input{parts/02_quadrature/06_reduction-of-variance.tex} -% ── Nullstellen ───────────────────────────────────────────────────── +% ── zeros ─────────────────────────────────────────────────────────── \newsection \section{Nullstellensuche} \input{parts/03_zeros/00_intro.tex} +\input{parts/03_zeros/01_termination-criteria.tex} +\input{parts/03_zeros/02_fix-point-iteration.tex} diff --git a/semester3/numcs/parts/03_zeros/00_intro.tex b/semester3/numcs/parts/03_zeros/00_intro.tex index 66cfecd..0f08971 100644 --- a/semester3/numcs/parts/03_zeros/00_intro.tex +++ b/semester3/numcs/parts/03_zeros/00_intro.tex @@ -14,7 +14,7 @@ Die Definition ist dabei rekursiv: $x^{(k)} := \phi_F(x^{(k - 1)})$, sofern $x^{ \innumpy haben wir \texttt{numpy.linalg.norm}, welches zwei Argumente nimmt. Dabei ist das erste Argument der Vektor und das Zweite die Art der Norm. Ohne zweites Argument wird die Euklidische Norm $||x||_2$, mit Argument $1$ wird die $1$-Norm $||x||_1 := |x_1| + \ldots + |x_n|$ -und mit mit \texttt{inf} als Argument wird die $\infty$-Norm, bzw die Max-Norm $||x||_\infty := \max\{ |x_1|, \ldots, |x_n| \}$ berechnet. +und mit mit \texttt{inf} als Argument wird die $\infty$-Norm, bzw. die Max-Norm $||x||_\infty := \max\{ |x_1|, \ldots, |x_n| \}$ berechnet. \stepLabelNumber{all} \inlinedef Zwei Normen $||\cdot||_1$ und $||\cdot||_2$ sind äquivalent auf $\cV$, falls es Konstanten $\underline{C}$ und $\overline{C}$ gibt so dass @@ -30,7 +30,7 @@ und mit mit \texttt{inf} als Argument wird die $\infty$-Norm, bzw die Max-Norm $ \fancydef{Lineare Konvergenz} $x^{(k)}$ konvergiert linear gegen $x^*$, falls es ein $L < 1$ gibt, so dass \rmvspace \begin{align*} - ||x^{(k + 1)} - x^*|| \leq L||x^{(k)} - x^*|| \smallhspace \forall k \geq k_0, \smallhspace L \text{ gennant Konvergenzrate } + ||x^{(k + 1)} - x^*|| \leq L||x^{(k)} - x^*|| \smallhspace \forall k \geq k_0, \smallhspace L \text{ genannt Konvergenzrate } \end{align*} \drmvspace\stepLabelNumber{all} @@ -42,7 +42,40 @@ und mit mit \texttt{inf} als Argument wird die $\infty$-Norm, bzw die Max-Norm $ \drmvspace Wir nehmen dabei an, dass $||x^{(0)} - x^*|| < 1$, damit wir eine konvergente Folge haben. +Man kann die Konvergenzordnung folgendermassen abschätzen, mit $\varepsilon_k := ||x^{(k)} - x^*||$ (Konvergenzrate in Bemerkung \ref{all:6-1-19}): +\rmvspace +\begin{align*} + p \approx \frac{\log(\varepsilon_{k + 1}) - \log(\varepsilon_k)}{\log(\varepsilon_k) - \varepsilon_{k - 1}} +\end{align*} + +\drmvspace +Intuitiv haben wir Quadratische (oder Kubische, etc.) Konvergenzordnung, wenn sich die Anzahl Nullen im Fehler jede Iteration verdoppeln (verdreifachen, etc.) \numberingOff \inlineremark Eine höhere Konvergenzordnung ist in Lin-Log-Skala an einer gekrümmten Konvergenzkurve erkennbar. \numberingOn + +\rmvspace\setLabelNumber{all}{19} +\fancyremark{Abschätzung der Konvergenzrate} Sei $\varepsilon_k := ||x^{(k)} - x^*||$ die Norm des Fehlers im $k$-ten Schritt. +\drmvspace\rmvspace +\begin{align*} + \varepsilon_{k + 1} \approx L \cdot \varepsilon_k \Longrightarrow \log(\varepsilon_{k + 1}) \approx \log(L) + \log(\varepsilon_k) + \Longrightarrow \varepsilon_{k + 1} \approx k \log(L) + \log(\varepsilon_0) +\end{align*} + +\drmvspace +Untenstehender Code berechnet den Fehler und die Konvergenzrate von $\displaystyle x^{(k + 1)} = x^{(k)} + \frac{\cos(x^{(k)}) + 1}{\sin(x^{(k)})}$. +Dabei verwenden wir $x^{(15)}$ anstelle von $x^*$ zur Berechnung der Konvergenzrate, da $x^*$ meist unbekannt ist. + +\drmvspace +\begin{code}{python} + def linear_convergance(x): + y = [] # container for the x(j) + for k in range(15): + x = x + (np.cos(x) + 1) / np.sin(x) # apply the iteration formula + y += [x] # store the value in the container + err = abs(np.array(y) - x) # estimation for the error + rate = err[1:] / err[:-1] + # estimation for convergence rate + return err, rate +\end{code} diff --git a/semester3/numcs/parts/03_zeros/01_termination-criteria.tex b/semester3/numcs/parts/03_zeros/01_termination-criteria.tex new file mode 100644 index 0000000..33b3bee --- /dev/null +++ b/semester3/numcs/parts/03_zeros/01_termination-criteria.tex @@ -0,0 +1,16 @@ +\newsection +\subsection{Abbruchkriterien} +Wir müssen irgendwann unsere Iteration abbrechen können, dazu haben wir folgende Möglichkeiten: +\begin{fullTable}{p{2.5cm}p{5.5cm}p{3cm}p{4.5cm}}{Typ & Idee & Vorteile & Nachteile}{Vergleich der Abbruchkriterien} + \bi{A priori} & Fixe Anzahl $k_0$ Schritte & Einfach zu implementieren & Zu ungenau \\ + \bi{A posteriori} & Berechnen bis Toleranz $\varepsilon < \tau$ erreicht & Präzise & Man kennt $x^*$ nicht \\ + \bi{Ungefähr gleich} & Itaration bis$x^{(k + 1)} \approx x^{(k)}$ & Keine Voraussetzungen & Ineffizient \\ + \bi{Residuum} & Abbruch wenn $||F(x^{(k)})|| < \tau$ (wir also fast bei $0$ sind mit dem Funktionswert) & Einfach zu implementieren & Bei flachen Funktionen kann $||F(x^{(k)}||$ klein sein, aber $\varepsilon$ gross) \\ +\end{fullTable} + +\drmvspace +\inlineremark Für das \textit{a posteriori} Abbruchkriterium mit linearer Konvergenz und bekanntem $L$ gilt folgende Abschätzung: +\drmvspace +\begin{align*} + ||x^{(k + 1)} - x^*|| \leq \frac{L}{1 - L} ||x^{(k + 1)} - x^{(k)}|| +\end{align*} diff --git a/semester3/numcs/parts/03_zeros/02_fix-point-iteration.tex b/semester3/numcs/parts/03_zeros/02_fix-point-iteration.tex new file mode 100644 index 0000000..29b60c4 --- /dev/null +++ b/semester3/numcs/parts/03_zeros/02_fix-point-iteration.tex @@ -0,0 +1,7 @@ +\drmvspace\drmvspace +\newsectionNoPB +\subsection{Fixpunktiteration} +Ein $1$-Punkt-Verfahren benötigt nur den vorigen Wert: $x^{(k + 1)} = \phi(x^{(k)})$ + +% FIXME: Below konsistent is probably wrong, but is what is in the script +\inlinedef Eine Fixpunktiteration heisst konsistent mit $F(x) = 0$ falls $F(x) = 0 \Leftrightarrow \phi(x) = x$