{%hackmd @themes/dracula %} # Motivation - ich finde es großartig wie die Informatiker hier gerade mit Lagrange Gleichungen verstört werden - die armen kinder # Inhalt 1. Einführung, Motivation 2. Rechnerarithmetik, Fehleranalyse & Konditionierung 3. Interpolation & Approximation 4. Numerische Integration 5. LGS & Ausgleichsprobleme (direkte Verfahren) 6. Nichtlineare Gleichungssysteme 7. LGS (iterative Verfahren) 8. Eigenwertaufgaben # Literatur - [Numerische Mathematik 1](https://link.springer.com/book/10.1007/978-3-540-45390-1) - Deuflhard, Hohmann: Numerische Mathematik 1 - R. Rannacher Numerik 0: Einführung in die numerische Mathematik - Skript R. Scheichl - Skript P. Bastian - Kostina Notizen # Kapitel 2 - Fehleranalyse ## 2.1) Fehlertypen #### Beispiel: Wir werfen einen Stein vom schiefen Turm von Pisa (44,12m) . <img src="https://hackmd.io/_uploads/HJraG90gC.png" scale /> Frage: Wann schlägt er auf dem Boden auf? - Modellbildung: - Annahmen: - Reibungsfreier Fall - Stein ist eine Punktmasse - wie in Theo 1, xD - <font color="red">=> im Vergleich zur Wirklichkeit: **Modellierungsfehler** </font> - Höhe $h(t)$ - Geschwindigkeit des Steines $v(t) =\frac{dh}{dt}(t)$ - Beschleunigung $a(t)=\frac{d^2h}{dt^2} (t)$ - Newton: $\vec{F}=m\vec{a}=\vec{g}$ - Annahme: $g=9.81\frac{m}{s^2}$ (Konstante) => <font color="red">weiterer Modellierungsfehler/Fehler in Daten, denn $\vec{g}$ hängt von der Höhe $h$ ab</font> - $\implies$ Modell: $a(t)= -9.81$ - Berechnung: - $v(t) = \int \vec{a(t)} dt= -\vec{g}t+ \vec{v_0}$ - $h(t)= \int v(t) dt= - g\frac{t^2}{2} + c_1 t+ c_2$ - $v(0) = 0 \implies c_1 = 0$ - $h(0)= 44.12 \implies c_2 = 44.12$ - $h(t) = \frac{-g}{2}t^2 + 44.12$ - **Gesucht:** - $t$ s.d. $h(t) = 0 \implies t = \pm \sqrt{\frac{2c_2}{g}}$ - Alg: $t=\sqrt{\frac{2*44.12}{9.81}}$ - <font color ="red"> Verfahrensfehler Rundungsfehler</font> - Rechner: $t= 3.00 s$ (3 Stellen genau) | Anwendungsproblem | Bsp.Freier Fall | Fehler | |---|---|---| | Modellbildung - Math. Problem | $\frac{d^2h}{dt^2}= -9.81$| Modellierungsfehler, Datenfehler| |Math. Analyse - Numerische Methode|| | |analytische Lösung - numerische Lösung| Lösung: $t=3.00$| Verfahrensfehler (z.B. Diskretisierungsfehler), Rundungsfehler, Abbruchsfehler, ...| | exakte Lösung - Näherung | |Gesamtfehler| #### Bemerkung: 2 Phänomene bei Fehleranalyse zu unterscheiden: 1) Fehlerentstehung 2) Fehlerfortpflanzung ## 2.2 Floatingpoint arithmetics - IEEE 754: [Definition auf Wikipedia](https://en.wikipedia.org/wiki/IEEE_754) - hi #### Definition - Gleitpunktzahl 1. Eine (normalisierte) Gleitpunktzahl zur <font color = "red">Basis B</font> $\in \mathbb{N}, ~b \geq 2$ ist eine Zahl dargestellt in der Form $x = \pm m \times b^{\pm e}$ mit der <font color = "green"> Mantisse </font> $m=m_1 b^{-1}+ m_2b^{-2} + ...+ m_r b^{-r} + ... \in \mathbb{R}$ und dem <font color = "lightblue"> Exponenten </font> $e = e_0b^0+ e_1b^1+...+ e_{S-1}b^{S-1}+... \in \mathbb{N}$ wobei $m_1, e_i \in \{0,...,b-1\} \forall x \in \mathbb{R}$ können als Gleitpunktzahl dargestellt werden. 2. Mit $mk= 0 ~\forall k> r$ und $e_k= 0~ \forall k \geq s$ erhält man einen **endlichen** Unterraum der reellen Zahlen mit endlicher Gleitpunktdarstellung$\mathbb{F} := \mathbb{F}(b,r,s) \subset \mathbb{R}$ 3. $\forall x \neq 0$ ist eindeutig bestimmt durch $m_1 \neq 0 m = 0. m_1m_2...m_r$ (falls $b=2 \implies m_1 =1$) 4. Für $x=0$ setzen wir $m=0$ und $e=0$ - Auf Computer endlicher Speicher $\implies \text{in } \; \mathbb{F}(b,r,s)$ muss man für jede Zahl - $r$ Ziffern $+ 1$ Vorzeichen für die Mantisse - $s$ Ziffern $+ 1$ Vorzeichen für den Exponenten speichern, - d.h. gesamt $r+s+2$ Bits - Alternativ könnte man mit Festpunktzahlen arbeiten, d.h. $x = \pm \sum\limits_{i= - R}^{l} m_i b^i$ - <font color = "red"> Achtung: </font> Für wissentschaftliche Anwendungen ist das ineffizient( aufgrund der zum Teil sehr unterschiedlichen Größenordnungen verschiedener Zahlen). Gegebenenfalls wählt man andere Abbildungen der Reellen Zahlen in einen Unterraum - $\mathbb{F}(r,b,s)$ endlich ist $\implies \exists$ eine größte/kleinste Zahl. Setze - $m_i = (b-1),~e_i=(b-1)$, pos. Vorzeichen bei Exponent - $X_{max}^{+} = \underbrace{(b-1)(b^{-1}+ ... + b^{-r})}_m \times b^{\underbrace{(b-1)(b^0+...+b^{S-1})}_e}$ - $= (b-1) b^{-1} \frac{b^{-r}-1}{b^{-1}-1}\times b^{(b-1)}\frac{b^s-1}{b-1}$ - $=(1-b^{-r}) \times b^{b^s-1}$ - $X_{min}^{-} = -(1-b^{-r}) \times b^{b^s-1}$ => Nahe Null gibt es eine kleinste postive/größte negative darstellbare Zahl. - Setze - $m_1$, $m_i=0$ $\; \forall i > 1$ - $e_i= (b-1)$ - negative Vorzeichen in Exponenten - $X_{min}⁺= b^{-1} \times b^{-(b-1)(b^0+...+ b^{S-1})}=b^{-b^s}$ - $X_{max}^-=-b^{-b^s}$ #### IEEE 754 Auf modernen Rechnern: - $b=2$ - IEEE 754 double precision standard (standard in Matlab, python, C++, (siehe Definition weiter oben)) werden 8 Bytes = 64 bits zum Speichern einer Floatingpoint Zahl benutzt. - Statt Exponenten $\pm e \in \mathbb{Z}$ wird sog. Charakteristika $c\in \mathbb{N}_0$ verwendet$x= \pm m \times 2^{c+e_{min+1}}$ - $c=c_02^0+c_12^1+...+c_S2^S$ - $\implies$ entfällt: Speicherung des Vorzeichens im Exponent: - $b=2$ => $m_1=1$ (muss nicht gespeichert werden) - 64 Bit für Zahlspeicherung: - 1 Bit für Vorzeichen - 52 bit für $m_2, ..., m_r \in \{ 0,1\}$ => $r=53$ - 11 Bit für Charakteristik => $s=10$ - $\implies x = \pm m \times 2 ^{c-1022}$ - $\implies c \in \{1,...,2046\}$ für normalisierte Zahl $c=0$ und $c=2047$ zusätzlich - $\implies X_{max}^+\approx 2^{1024}\approx 1.8 \times 10^{308}$ - $\implies X_{min}^+ = 2^{-1022}\approx 2.2 \cdot 10^{-308}$ - Ähnlich für negative Bereiche - $c=0$, $m=0 \equiv$ Null - $c=0~ m\neq 0~ \text{denormalisierte Darstellung}$ - $c=2047$, $m\neq 0 \equiv$ NAN (not a number) - $c=2047~ m\neq 0 \equiv$ NaN(not a number) (z.B. Division durch Null) <!--- 23.04 ----> ## 2.3 Runden und Rundungsfehleranalyse Zu $x\in \mathbb{R}$ definiere <font color=green>Rundungsoperation. </font> $rd: \mathbb{R} \rightarrow \mathbb{F}$ mit $| x-rd(x)|= \min\limits_{y\in \mathbb{F}} |x-y|$ (Bestapproximation). #### Natürliche Rundung $rd(x)= sgn(x) \begin{cases} (m_1b^{-1} +.. + m_rb^{-r} ) \times b^l \texttt{ falls } m_{r+1}< \frac{b}{2}\\ m_1b^{-1}+...+(m_r+1)b^{-r}) \times b^l \texttt{ falls } m_{r+1}\geq \frac{b}{2} \end{cases}$ Beispiel im Zahlenformat IEEE: - $rd(x)=sgn(x)*\begin{cases} (0.m_1...m_{53}*2^l \texttt{ falls } m_{54}=0)\\(0.m_1...m_{53}+2^{-53})*2^l \texttt{ falls } m_{54}=1 \end{cases}$ Der absolute Rundungsfehler für Natürliche Rundung (NR) erfüllt $|x-rd(x)|\leq \frac 1 2 b^{-r} b^l =\frac 1 2 b^{l-r}$ Bild einfügen! - Hilfe ![Screenshot from 2024-04-23 14-37-43](https://hackmd.io/_uploads/B12ioQHZR.png) $|r(x)-l(x)|\leq b^{l-r}$ $|x-rd(x)|\leq\left|\frac{l(x)+r(x)}{2}-l(x) \right|=\frac 1 2 |l(x)-r(x)|\leq \frac 1 2 b^{l-r}$ #### Der relative Rundungsfehler $|\frac{x-rd(x)}{x} | \leq \frac{\frac{1}{2}b^{l-r}}{|m|b^l}\leq \frac12 b^{-r+1}=: eps$ $x = \pm (0.\underbrace{m_1 ...m_rm_{r+1}}_m+...)\cdot b^l=: eps$ $|m|\geq \frac{1}{b}$ (wegen Normierung $m_1 \neq 0$) $eps=\frac{1}{2}b^{-r+1}$ heißt <font color=red>Maschinengenauigkeit</font> (engl. machine precision) Mit eps: $rd(x)=x(1+\epsilon)\quad |\epsilon | \leq eps$ ##### Bsp: IEEE double precision $eps=\frac{1}{2}2^{-52} \approx10^{-16}$ #### Rundungsfehler elementarer Operationen $+,-,\times,/$ werden ersetzt durch Maschinenoperationen $\oplus,\ominus,\otimes,\oslash$ z.B. $x\oplus y = rd(x+y) = (x+y)\cdot (1+ \varepsilon)$ mit $|\varepsilon| \leq eps$ <font color=red> ACHTUNG:</font> Assoziativ und Distributivgesetze gelten nicht für Maschinenoperationen!(Intern gibt es kleine unterschiede einmal bedingt durch die floating point Darstellung und Rundungsfehler beim rechnen) z.B. $a=0.23371258\cdot 10^{-4}$ $b=0.33678429\cdot 10^2$ $c=-0.33677811\cdot 10^2$ Exakt: $a+b+c=0.641371258 \cdot 10^{-3}$ Rundung: - $rd(rd{(a+b)}+c) \neq rd(a+rd(b+c))$ - $~~~~~~~~~(a\oplus b)\oplus c ~~\neq ~~~~~a \oplus (b \oplus c)$ <font color= green> Assoziativgesetz</font> - $rd(a+b) =0.33678452 \cdot 10^2$ - $rd(rd(a+b)+c)= 0.0000641\cdot 10^2$ Normalisiert: $0.\underbrace{641}_{\text{3 Stellen in Ergebnis}}\text{xxxxx} \cdot 10^{-3}$ $rd(b+c)=0.00000618 \cdot 10^2$ Normalisiert: $0.618 \text{yyyyy}\cdot 10^{-3}$ $rd(a+rd(b+c))=0.641\text{zzzzz}\cdot 10^{-3}$ ## Fehlerfortpflanzung (nicht dass noch jemand denkt wir seien hier in Biologie) bei elementaren Operationen Eingangsdaten: $x,y$ sind gestört durch Rundungsfehler $\overset{\sim}x=x(1+\epsilon_x)$, $\tilde y=y(1+\epsilon_y)$, $|\epsilon_x|\ll1$, $|\epsilon_y|\ll1$ Betrachten : $rd(\overset{\sim}{x}\circ \overset{\sim}{y})-x\circ y,~\circ\in \{+,-,\times, /\}$ Multiplikation: $\overset{\sim}z=rd(\overset{\sim}x * \overset{\sim}y)= rd(x(1+\varepsilon_x) y(1+\varepsilon y))$ $=x\cdot(1+\varepsilon_x)\cdot y\cdot (1+\varepsilon_y)\cdot (1+\varepsilon_{mult})$ $=x\cdot y \cdot (1+\varepsilon_x+\varepsilon_y+ \varepsilon_{mult} + \text{gemischte terme})$ $\dot{=} ~x\cdot y(1+\epsilon_x+\epsilon_y+\epsilon_\text{mult.})$ Gleichheit in 1. Ordnung Für relative Fehler: $| \frac{\overset{\sim}{ z}-xy}{xy} | \leq |\varepsilon_x| + |\varepsilon_y|+|\varepsilon_{mult}|$ Keine Verstärkung von Eingangsfehler Division: $y,\tilde y\neq 0$ $\tilde{z} =rd\left(\frac {\overset{\sim}{x}}{\overset{\sim}{y}} \right)=\frac{x(1+\epsilon_x)}{y(1+\epsilon_y)}(1+\epsilon_\text{div})$ $\left[ \frac{1}{1+\varepsilon}=\frac{1}{1+\varepsilon}|_{\varepsilon=0} + (\frac{1}{1+\varepsilon})'|_{\varepsilon=0} \varepsilon+... = 1- \varepsilon +...\right ]$ $\begin{split}\tilde z&\dot=\frac{x}{y}(1+\varepsilon_x)(1 - \varepsilon_y)(1 + \varepsilon_{div})\\ &\dot = \frac{x}{y} (1+\varepsilon_x-\varepsilon_y+\varepsilon_{div})\end{split}$ $\implies$ Auch hier keine Verstärkung vom Eingangsfehler Addition/Substraktion $\tilde z=rd(\tilde x+\tilde y)=(x(1+\varepsilon_x)+y(1+\varepsilon_y))(1+\varepsilon_{add})$ $\dot=(x+y)(1+\frac{x}{x+y}\varepsilon_x+\frac{y}{x+y}\varepsilon_y+\varepsilon_{add})$ 2 Fälle: 1) $x$ und $y$ haven gleiches Vorzeichen $\Rightarrow K_x:=\mid \frac{x}{x+y}\mid < 1~~ K_y = | \frac{y}{x+y}|< 1~~ |K_x|+|K_y|=1$ $\implies$Keine Verstärkung von Eingangsfehler 2. $x$ und $y$ haben unterschiedliche Vorzeichen: Annahme: $x>0,~ y<0 \Rightarrow K_x$ oder $K_y > 1$ $\Rightarrow$ Verstärkung von Fehler Schlimmster Fall: $|x| \approx |y|$ $\implies K_x \text{ oder } K_y >> 1$ ##### Bsp ![Screenshot from 2024-04-23 15-18-58](https://hackmd.io/_uploads/BkEISVrbA.png) Normalisiert: $0.00002222\cdot 10^{-4}$ Eingaben: 8 Stellen exakt Ergebnis: 4 Stellen korrekt $\implies$ Fehlerverstärkung um Faktor $10^4$ ##### <font color=green> Bemerkung: </font> - Stimmen $l$ Dezimalstellen überein, so ergibt sich eine Verstärkung von mindestens $10^{l-1}$. Dieser Effekt heißt <font color=red>Auslöschung </font>führender Stellen. - Auslöschung ist ein Phänomen der Fortpflanzung von Eingangsfehlern. ## 2.4 Kondition von Aufgaben, Stabilität von Algorithmen Aufgaben: - Eingangsdaten $p\in\mathbb{R}^{n_{p}}$ - Aufgabe: - $x=f(p), x\in \mathbb{R}^n$ - $f:D\subset \mathbb{R}^{n_p} \rightarrow \mathbb{R}^n$ 2mal stetig diff'bar ### Hilfsmittel für die Fehleranalyse Frage: $\overset{\sim}{p}= p+ \Delta p$ (gestörte Daten mit $\Delta p$ Fehler) Auswirkung von $\Delta p$ auf $\Delta x= f\cdot (p+\Delta p)-f(p)$ Hilfsmittel für die Fehleranalyse: Taylor: $\Delta x = \frac{\partial f}{\partial p}(p)\Delta p+R(p,\Delta p)~\forall x \in \mathbb{R}^n$ Restglied: $R(p, \Delta p)=O(||\Delta p||^2)$ Komponentenweise: $\underbrace{f_j(p+\Delta p)-f_j(p)}_{\Delta x_j}=\frac{\partial f_j}{\partial p}(p)\Delta p+\underbrace{\frac12 \Delta p^T\frac{\partial f_j(p+\tau_j\Delta p)}{\partial p}\Delta p}_{R_j(p,\Delta p)=O(||\Delta p||^2)},~\tau_j\in[0,1]$ #### <font color=red> Def Landau Symbole </font> Funktionen $g(t),h(t), t\in \mathbb{R}^t$ 1. $g(t)=O(h(t)) \text{ für } t\to 0$ bedeutet für kleine $t\in [0,t.] \text{ gilt } |g(t)|\leq c\cdot |h(t)| \text { mit } c \geq 0$ 2. $g(t)=o(h(t)) \text{ für } t\to 0$ falls für kleine $t\in[0,t]$ und eine Funktion $c(t)\to 0$, $t\to 0$ gilt: $|g(t)|~\leq~|c(t)h(t)|$ Analog für $t\to\infty$ #### Taylorreihe und Fehlerfortpflanzung Der Absolute Fehler: $\Delta x= f(p+\Delta p)-f(p)\dot= \frac{\partial f}{\partial p}p\Delta p,~\forall x\in \mathbb{R}^n$ $\Delta x_j\dot= \sum\limits_{i=1}^{k} \frac{\partial f_j}{\partial p_i}(p)\Delta p_i$ Komponentenweise Relativer Fehler in Daten: $\frac{\Delta p_i}{p_i}$ Relativer Fehler im Ergebnis: $\frac{\Delta x_j}{x_j}\dot= \sum_{i=1}^k\frac{\partial f_j}{\partial p_i}(p)\frac{p_i}{x_j}\frac{\Delta p_i}{p_i}$ $\implies |\underbrace{\frac{\Delta x_j}{x_j}}_{\text{relativer Fehler in Ergebnis}}| \dot\leq \sum\limits_{i=1}^{k} |\underbrace{\frac{\partial f_j(p)}{\partial p_i}\cdot \frac{p_i}{x_j}}_\text{Faktoren}|\cdot |\underbrace{\frac{\Delta p_i}{p_i}}_\text{rel. Fehler in Daten}|$ ### Definition Konditionszahlen Die großen $\kappa_{ji}(p)=\frac{\partial f_j(p)}{\partial p_i}- \frac{p_j}{\underbrace{x_j}_{=f_j(p)}}$ heißen relative Kondidtionszahlen der Aufgabe f im Punkt $p$. Die Aufgabe $x=f(p)$ heißt **schlecht konditioniert** falls eine der $\mid \kappa_{ji}(p))|>>1$ ist. Andernfalls heißen sie **gut konditioniert**. Im Falle von $|\kappa _{ji}|<1$ spricht man über Fehlerdämpfung, im Fall von $>1$ von Fehlerverstärkung. Bsp. Konditionszahlen von elementaren Operationen 1. **Multiplikation**: Aufgabe: $x= f(p) = p_1 \cdot p_2, p \in \mathbb{R}^2$ Fehler im Ergebnis: $\Delta x = \frac{\partial f}{\partial p} \cdot \Delta p= (p_2 ; p_1) \cdot \begin{pmatrix}\Delta p_1\\ \Delta p_2\end{pmatrix}= p_2 \Delta p_1 + p_1 \Delta p_2$ Relativer Fehler: $\frac{\Delta x}{x} = \frac{p_2\cdot p_1}{\underbrace{x}_1}\cdot \frac{\Delta p_1}{p_1} + \frac{p_1 \cdot p_2}{\underbrace{x}_1} \cdot \frac{\Delta p_2}{p_2}$ $\implies$ Die Multiplikation ist gut konditioniert! 2. **Addition**: Aufgabe: $x=f(p)=p_1+p_2$ Fehler: $\Delta x = \frac{\partial f}{\partial p}\Delta p=(1;1) \begin{pmatrix}\Delta p_1\\ \Delta p_2\end{pmatrix}=\Delta p_1 +\Delta p_2$ Relativer Fehler: $\frac{\Delta x}{x}=\frac{p_1}{x}\frac{\Delta p_1}{p_2}+\frac{p_2}{x}\frac{\Delta p_2}{p_2}$ $\implies \frac{p_1}{p_1+p_2}= \frac{1}{1+\frac{p_2}{p_1}}$ Analog für $\frac{p_2}{p_1+p_2}$ $\implies$ Die Addition ist schlecht konditioniert falls $p_1 \approx -p2$ Bsp. LGS $Ax=b$ $\begin{pmatrix} 1 & 10^6\\ 0 & 1 \end{pmatrix} \cdot \begin{pmatrix}x_1\\ x_2\end{pmatrix}= \begin{pmatrix} b_1 \\ b_2 \end{pmatrix}$ Lösung $\begin{pmatrix} x_1 \\ x_2 \end{pmatrix} = \begin{pmatrix} 1 & -10^6 \\ 0 & 1 \end{pmatrix} \cdot \begin{pmatrix} b_1 \\ b_2 \end{pmatrix}$ Sei $b=\begin{pmatrix} 1\\0\end{pmatrix}\implies x=\begin{pmatrix}1\\0\end{pmatrix}$ $b=\begin{pmatrix} 1\\10^{-3}\end{pmatrix}\implies x=\begin{pmatrix}-999\\10^{-3}\end{pmatrix}\neq\begin{pmatrix}1\\0\end{pmatrix}$ Ist schlecht konditioniert! ### Stabilität von Algorithmen Sei $f: p \overset{f}\longmapsto x$ ein Algorithmus. Frage: $\Delta p \mapsto \Delta x$? Algorithmus hat Zwischenschritte $\varphi _i$ und Zwischenergebnisse $z_i$ mit Fehler: $p := z_0 \overset{\varphi_0}{\to} z_1 \overset{\varphi_1}{\to} z_2 \to ... \overset{\varphi_{m-1}}{\to} z_m \overset{rd}{\to} x$ $\Delta p_i := \Delta z_0 \overset{\varphi_0}{\to} \Delta z_1 \overset{\varphi_1}{\to} \Delta z_2 \to ... \overset{\varphi_{m-1}}{\to} \Delta z_m \overset{rd}{\to} \Delta x$ Alle Zwischenschritte $\varphi _i$ sind mit Fehlerentstehung und Fehlerfortplanzung behaftet $\Delta z_i=\underbrace{\Delta z_i^\text{neu}}_{\text{neue Fehler des Schrittes }\varphi_{i-1}} + \underbrace{\varphi_{i-1}(z_{i-1}+\Delta z_{i-1})-\varphi_{i-1}(z_{i-1})}_{\text{Fehlerfortpflanzung von alten Fehlern }\Delta z_{i-1}}$ $~~~~~~~\overset{\circ}{=}\Delta z_i^{\text{neu}}+\frac{\partial \varphi_{i-1}(z_{i-1})}{\partial z_{i-1}}\Delta z_{i-1}$ Restabbildung $\overset{\sim}{\varphi_i} := \varphi_m \circ \varphi_{m-1} \circ ... \circ ~\varphi_i$ pflanzt Fehler im Schritt $\varphi_i$ auf $x$ fort. Für den gesamten Fehler gilt: $\Delta x^\text{ges}\dot= \underbrace{\frac{\partial f}{\partial p}(p)\Delta p}_{{\Delta x^E}\text{ Fortpflanzung des Eingangsfehlers}}$ $+\underbrace{\sum_{i=1}^m \frac{\partial \tilde\phi _{i+1}}{\partial z_i}\Delta z_i^{\text{neu}}}_{\Delta x^A \text{ Fortpflanzung des Algorithmusfehler}} + \underbrace{rd(z_m)-z_m}_{\text{Fehler des letzten Schritts}}$ #### Definition Stabilität von Algorithmen Ein Algorithmus heißt stabil (oder instabil), wenn der vom Algorithmus verursachte Fehler $\Delta x^A$ klein oder nur moderat (groß) gegenüber dem unvermeidbaren, fortgeplanzten Eingangsfehler $\Delta x^E$ ist. ![Screenshot from 2024-04-28 16-54-03](https://hackmd.io/_uploads/SJJHXJnb0.png) Aufgabe gut/schlecht konditioniert ![Screenshot from 2024-04-28 16-52-27](https://hackmd.io/_uploads/HJUJ7y2ZC.png) Falls der Algorithmus stabil ist, dann ist $\tilde p \approx p$. <span style="background-color:green">Mrs. Robinson</span>, ### Beispiel: Lösung von quadratischen Gleichungen $y^2-py+q=0$, mit $p,q\in \mathbb{R}$ and $q \neq 0$ $\implies y_{1,2}= \frac{p}{2} \pm \sqrt{\frac{p^2}{4}-q}=: f_{1,2}(p,q)$ Wurzel $y_1$ und $y_2$ erfüllen: $\underbrace{p=y_1+y_2}$, $\underbrace{q=y_1\cdot y_2}$ $\begin{matrix} \frac{dp}{dp} = 1 = \frac{\partial y_1}{\partial p}+\frac{\partial y_2}{\partial p} & \frac{dq}{dp} = 0 = \frac{\partial y_1}{\partial q}+\frac{\partial y_2}{\partial q} \\ \frac{dp}{dq} = 0 = \frac{\partial y_1}{\partial p}+\frac{\partial y_2}{\partial p} & \frac{dq}{dq} = 1 = \frac{\partial y_1}{\partial q}+\frac{\partial y_2}{\partial q} \end{matrix}$ Lösung für $\frac{\partial y_1}{\partial p}$, $\frac{\partial y_2}{\partial p}$ (1. Zeile von der Matrix) Lösung für $\frac{\partial y_1}{\partial q}$, $\frac{\partial y_2}{\partial q}$ (2. Zeile von der Matrix) Lösung: $\begin{matrix}\frac{\partial y_1}{\partial p} = \frac{y_1}{y_1-y_2}& \frac{\partial y_2}{\partial p}=\frac{y_2}{y_2-y_1}\\ \frac{\partial y_1}{\partial q}= \frac{1}{y_2-y_1} & \frac{\partial y_2}{\partial q}=\frac{-1}{y_2-y_1}\end{matrix}$ Konditionszahlen: $\kappa_{11}(p,q)=\frac{\partial f_1}{\partial p} \cdot \frac{p}{y_1}= \frac{y_1}{y_1-y_2}\cdot \frac{p}{y_1}=\frac{y_1+y_2}{y_1-y_2}=\frac{1+\frac{y_2}{y_1}}{1-\frac{y_2}{y_1}}$ $\kappa_{12}(p,q)=\frac{\partial f_1}{\partial q} \cdot \frac{q}{y_2}= \frac{1}{y_2-y_1}\cdot \frac{y_1\cdot y_2}{y_1}=\frac{1}{1-\frac{y_1}{y_2}}$ $\implies$ $\kappa_{11}(p,q)$ und $\kappa_{12}(p,q)$ sind groß, falls $y_1 \approx y_2 \implies$ schlecht konditioniert, falls $y_1\approx y_2$ - Betrachten wir gut konditionierte Aufgaben: - $y^2-py+q=0$ mit $p<0$ und $0\neq q \ll \frac{p^2}{4}$, d.h. $|\frac{y_1}{y_2}| \gg 1$ - Algorithmus: $u= \frac{p^2}{4}$, $v=u-q$, $w=\sqrt{v}$ Fehlerfortpflanzung: $\frac{\Delta u}{u}\overset{\cdot}{=}\frac{2p}{4} \cdot \frac{p}{u}\cdot \frac{\Delta p}{p}= \frac{\Delta p}{p}$ $[u=f(p)]$ $\frac{\Delta v}{v} \overset{\cdot}{=} \frac{1\cdot u}{v} \cdot \frac{\Delta u}{u} +\frac{-1 \cdot q \cdot \Delta q}{v\cdot q}$ $[v=f(u,g)]$ $\frac{u}{v}= \frac{\frac{p^2}{4}}{\frac{p^2}{4}-q}=\frac{1}{1-\underbrace{ \frac{q\cdot 4 }{p^2}}_{q \ll \frac{p^2}{4}}}\approx 1$ $\frac{q}{v}= \frac{q}{u-q}= \frac{1}{\frac{u}{q}-1}\ll 1$ $\frac{u}{q}= \frac{p^2}{4} \cdot \frac{1}{q} \gg 1$ Analog für den Rest. $\implies \frac{\Delta w} w \dot = \frac 1 2 \frac{\Delta v}{v}$ Um Auslöschung zu vermeiden, berechnen wir zuerst $\tilde y_2 = \frac p 2 - w$ Relativer Fehler: Für $\frac{\Delta y_2}{y_2} \dot = \underbrace{\frac12 \frac{p}{y^2}}_{\underbrace{=\frac{p}{p-2w}}_{\underbrace{\approx \frac12}_{\text{weil } w \approx -\frac{p}{2}}}} \frac{\Delta p}{p} - \underbrace{\frac{w}{y_2}}_{\frac{2w}{p-2w}\approx \frac{1}{2}}\cdot \frac{\Delta w}{w}$: Berechnung von Wurzel $y_2$ $[y_2=f(p,w)]$ Variante A $\tilde y_1=\frac p 2 + w$ Variante B $\tilde y_1=\frac q {\tilde{y}_2}$ Wegen $w \approx \frac{-p}{2}$ tritt bei Variante A zwangläufig eine Auslöschung ein. $|\frac{y_1}{y_1}| \dot= |\frac{p}{p+2w}||\frac{\Delta p}{p}|+|\frac{2w}{p+2w}||\frac{\Delta w}{w}|$ Fazit: Variante A instabil, Variante B stabil! Schauen Sie hier nach: https://entwickler.de/programmierung/top-10-der-software-katastrophen oder https://www.uni-frankfurt.de/63789753/numerik.pdf <!---30.04---> # Einschub: Grundbegriffe der linearen Algebra und Analysis 2 ## Vektorraum Definition Eine Menge $V$ mit einer Verkönüpfung "Addition" $$+: V\times V \to V, (v,w)\mapsto v+w$$ und einer Verknüpfung "Multiplikation mit Skalaren" $$\cdot: \mathbb{R} \times V\to V, (\lambda,v)\mapsto \lambda \cdot v$$ heißt Vektorraum (über $\mathbb{R}$) wenn - $V1$ $(V,+) ist eine abel'sche Gruppe (d.h. kommutativ) $$\begin{split} (\lambda+\mu) \cdot v&=\lambda \cdot v +\lambda \cdot w \\ \lambda \cdot (v+w) \end{split} $$ ## Lineare Hülle > Einschub nach vl ergänzen my brain is not braining this fast - agree # Noch VL vom 2.5 Ergänzen . . ### Satz 3.4.1 <!--- Nachtragen ---> #### Beweis Notation: $p_{i,j}\in P_k$ mit Grad $k:=j-i$ des Polynoms, das die Punkte $(x_iy_i) ... (x_j,y_j)$ interpoliert. Dann $p_{o,n}$ des gas gesuchte Polynom. Wir zeigen dass $p_{i,j}(x)=y[x_i] +y[x_i, x_{i+1}] (x-x_i)+..+y[x_i,...,x_j](x-x_i)$: (woraus mit $i=0$, $j=n$ die Aussage von Satz 3.4.1 folgt) Induktion bzgl. $k$ $k=0:~~p_{i,j}(x)\equiv y_i=y[x_i]~~\checkmark$ Übergang von $k-1\implies k$: Seien $i< j, k = j-i$ Aus Induktionsannahme $\implies$ für $(k-1)$ Aussage des Satzes $p_{i,j}(x)=\underbrace{p_{i,j-1}(x)}_{grad(k-1)}+a_k(x-x_i)...(x-x_{j-1})$ z.zg: $a_k=y[x_i,\dots,x_j]$ Es ist leicht zu erkennen, dass $a_k$ ist der Koeffizient zu $x^k$ ist. (weil $p_{i,j-1}(x)$ von $grad(k-1)$) $a_k$ ist der Koeffizient zu $x^k$ in $p_{i,j}(x)$ (weil $p_{i,j-1}(x)$ von $grad(k-1)$) Betrachte $q(x):=\frac{(x-x_i)p_{i-1,j}-(x-x_j)p_{i,j-1}}{x_j-x_i}\in P_k$ :::info $p_{i-1,j}$ und $p_{i,j-1}\in P_{k-1}$ ::: - $q(x)\in P_k$ - interpoliert $(x_i,y_i)...(x_j,y_j)$ - überprüfen: - $x=x_l, ~~~ i<l<j$ - $p_{i,j-1}(x_l)=y_l$ - $q(x_l)=\frac{x_l-x_i-x_l+x_j}{x_j-x_i}y_e=y_e$ - analog für $x=x_i$ und $x=x_j$ Polynomaufgabe eindeutig lösbar $\implies$ $q(x)=p_{i,j}(x)$ Koeffizienten zu $x^{k-1}$ in $p_{i+1,j}$ und $p_{i,j-1}$ sind $y[x_{i+1},\dots,x_j]$ resp. $y[x_i,\dots,x_{j-1}]$ $\implies$ Koef zu $x^k$ in $q(x)$ is $\frac{y[x_{i+1}\dots x_j]-y[x_i\dots x_{j-1}]}{(x_j-x_i)}$ $=\underbrace{y[x_i,...,x_j]}_{=a_k\text{ q e d}}$ Bemerkungen: - Eindeutigkeit des **Interpolationspolynoms** + **Unabhängigkeit** von $a_n$ von der Numerierung von Stützstellen. - $\implies y[x_{i_0}, ..., x_{x_n}]=y[x_0,...,x_n]$ - hier ist $(i_b,...,i_n)$ eine beliebige Permutation von $(0,...,n)$ - Tabelle: Dividierte Differenzen | i | $x_i$ | $y_[x_i]$ | $y_[x_i,x_{i+1}$ | ... | $y[0\dots n]$ | |:---: | :---:| :---: | :---: | :---: | :---: | | 0 | $x_0$ | $y_0$ | $\frac{y[x_1]-y[x_0]}{x_1-x_0}$ | ... | | | 1 | $x_1$ | $y_1$ | $\frac{y[x_2]-y[x_1]}{x_2-x_1}$ | ... | | | 2 | $x_2$ | $y_2$ | $\frac{y[x_3]-y[x_2]}{x_3-x_2}$ | ... | | | ... | ... | ... | ... | ... | | | n-1 | $x_{n-1}$ | $y_{n-1}$ | $\frac{y[x_n]-y[x_{n-1}]}{x_{n}-x_{n-1}}$ | | | | n | $x_n$ | $y_n$ | | | | yeah okay, no just imagine the lines, i dunno - Mit Hilfe von (NS)(Neville-Schema) berechnet man die Polynome $p_{i,j}(x)$ - Diese bodenlosen Pfeile werden auch als Neville-Schema oder Neville Darstellung bezeichnet <!--- later ---> >boooooooooooooooooooooodenlose pfeile >[name=olga] > xDDDDD > [name=felix] > very pain > [name=xel] - ! Annahme: alle Stützstellen paarweise verschieden - **Algorithmus**: Neville Schema/Auswertung von Polynomen an einer Stelle $\xi \in \mathbb{R}$ ![image](https://hackmd.io/_uploads/ry43SiDf0.png) - Die Idee ist, dass wir ausgehend von einer Menge an Datenpunkten ein Polynom finden, dass diese Werte bestmöglich beschreibt, sodass wir im Nachhinein für einen Wert $\xi$ der nicht in unseren ursprünglichen Datenpunkten liegt vorhesagen können welchen Wert er annimt. Dafür nehmen wir an, dass unser Polynom $f(\xi)\approx p(\xi)$. Falls wir genügend Datenpunkte(Stützstellen) haben, sollte dies auch genügend gut funktionieren Gegeben: $(x_0,y_0)...(x_n,y_n),\xi$ Gesucht: $p(\xi)=p_{0,n}(\xi)$ für $k=0,...,n$ setze $P_{k,k}=y_k$ für $l=1,...,n$ und fpr $k=0,...n-l$ berehcne $p_{k,k+l}=p_{k,k+l-1}+(\xi-x_k)\frac{p_{k+1,k+l}+aaaaaaaa}{x_{k+l}aaa}$ $\implies$ Mit Neville Schema kann man $p(\xi), \xi \neq x_i$ auswerten - Auswertung von Polynomen mit Horner Schema Gegeben: $p(x)=a_0+a_1x+...+a_nx^n,\xi \neq x_i$ Horner Schema: Berechne $b_k=\begin{cases} a_n, ~ n=k \\ a_k + b_{k+1}, k=n-1,...,0\end{cases}$ $\implies p(\xi) = b_0$ Gegeben: $p(x) = a_0 +a_1(x-x_0) + ...+ a_n(x-x_0)...(x-x_{n-1})$ Verallgemeinertes Horner Schema: $b_k= \begin{cases} a_n, n= k \\ a_k +( \xi - x_k) b_{k+1}, k= n-1,...,0\end{cases}$ $\implies p(\xi)=b_0$ ##### Beispiel Stützstellen: - $(x_0,y_0) = (0,1)$ - $(x_1,y_1) = (1,4)$ - $(x_2,y_2) = (2,3)$ Gesucht ist: $p\in P_2$ (Polynom vom Grad 2) ###### (a) Monombasis $\{ 1,x,x^2\}$ $\begin{pmatrix} 1, 0, 0\\ 1, 1, 1\\ 1,2,4 \end{pmatrix} \cdot \begin{pmatrix} a_0\\a_1\\a_2\end{pmatrix} = \begin{pmatrix}1\\4\\3\end{pmatrix}$ $\implies \begin{pmatrix} a_0\\a_1\\a_2\end{pmatrix} = \begin{pmatrix}1 \\5 \\ -2\end{pmatrix}$ ###### (b) Lagrange-Darstellung $\begin{split}p(x)&= \underbrace{1\cdot L_0^{(2)}(x)}_{y_0}+\underbrace{4\cdot L_1^{(2)}(x)}_{y_1}+\underbrace{3 \cdot L_2^{(2)}(x)}_{y_2}\\ &= 1 \cdot \frac{(x-1)(x-2)}{(0-1)(0-2=)}+4\frac{(x-0)(x-2)}{(1-0)(1-2)}+3 \frac{(x-0)(x-1)}{(2-0)(2-1)}\\ &=\frac12 (x-1) (x-2)-4x(x-2)+\frac32 x(x-1) \end{split}$ ###### (c) Newton-Darstellung TODO: TABELLE MIT PFEILEN EINFÜGEN > there is no such thing as too many arrows.... right? > [name=xel] > definetly not > [name=olga] > i mean the arrows and the concept overall are quite straigthforward. I am howewer utterly clueless as to how to make them in Tex/markdown > [name=felix] > possible (in tex), but too much work for during a lecture > [name=xel] > yeaah think with tikz or smthg meybe > [name=olga] > there was other stuff here too that we forgot > [name=olga] ## 3.5 Interpolation von Funktionen und Interpolationsfehler gegeben: Stützpunkte $y_i=f(x_i), ~~ x_i \in[a,b], ~~ i=0,...,n$ Knotenwerte $y_i$ sind Funktionswerte von $y:[a,b] \longrightarrow \mathbb{R}$ Frage: Wie gut approximiert das zugehörige Interpolationsoolynom $p\in P_n$ die Funktion $f$ auf $[a,b]$? **Notation**: - $I(x_0,...,x_n)$ ist das kleinste Intervall, das die Punkte $x_0,...,x_n$ enthält. - $C[a,b]$ Vektorraum der stetigen Funktionen über $[a,b]$ - $C^k[a,b]$ - Vektorraum von k-mal stetig diff.baren Funktionen ### Satz 3.5.1 (Interpolationsfehler) Sei $\in C^{n+1}[a,b]$. Dann gilt: $~~~~~\forall x\in[a,b] \exists \xi_x \in I(x_0,...,x_n,x):$ $~~~~~f(x)-p(x)= \frac{f^{(n+1)}(\xi)}{(n+1)!}\prod\limits_{j=0}^n (x-x_j)$ **Beweiß** wird in den Notizen provided, alternativ im scheichl skript nachschauen ### Korollar 3.5.2 Unter Vorraussetzung von Satz 3.5.1 mit $a=x_0 < x_1 < ... < x_n=b$ gilt: $||f-p||_{\infty,[a,b]} \leq \frac{|x_n-x_0|^{n+1}}{(n+1)!}||f^{(n+1)}||_{\infty,[a,b]}$ #### Beispiel: Interpoliere $sin(x)$ durch kubische Polynome auf $x_{i-1},xt_i,x_{i+1},x_{i+2}$ auf $[x_i, x_{i+1}]$ so dass: $|\text{Fehler}(x)| < \text{Toleranz(TOL)}, ~~~~ x\in [x_i, x_{i+1}]$. Aus Satz 3.5.1 folgt: $\begin{split}|\text{Fehler}(x)| &= \mid \frac{sin^4(\xi)}{4!} \mid \cdot \mid (x-x_{x-1}(x-x_i)(x-x_{i+1})(x-x_{i+2}) \mid\\ &\leq \frac{1}{4!} \frac32 h \cdot \frac12 h \cdot \frac12 h \cdot \frac32 h= \frac{3}{128}h^4 \leq TOL\end{split}$ z.B $TOL = 10^{-6}\implies h \leq 0.8 \cdot 10^{-1}$ #### Bemerkung (Diskussion) z.B. für $x_i=ih$, $h=\frac{1}{h}$ auf $[0,1]$ $||f-p||_{\infty,[a,b]} \leq \frac{||f^{n+1}||_{\infty,[0,1]}}{{2^n(n+1)!}}$ $\implies$ falls $||f^{(n+1)}||_{\infty,[0,1]}$ beschränkt, dann wird Fehler reduziert mit $O(\frac{2-n}{(n+1)!}$ für $n \ti \infty$ Aber: meistens die Ableitungen von $f$ haben ein zu starkes Wachstum für $n \to \infty$, z.B. "Runge Funktion" $f(x) = \frac{1}{1+25x^2}\implies f^{(n)}(x) \approx 2^n n! O(|5x|^{-(n+2)})$ > Frage: Hat die Runge Funktion einen bezug zu Runge-Kutta? > [name=felix] .