458 lines
12 KiB
Markdown
458 lines
12 KiB
Markdown
<style>
|
|
.formula, .letters {
|
|
margin-top: 2px;
|
|
margin-bottom: 2px;
|
|
color: black;
|
|
padding: 0.5rem;
|
|
padding-bottom: 1px;
|
|
}
|
|
|
|
.formula p:last-child, .letters p:last-child {
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.formula {
|
|
background: lightblue;
|
|
}
|
|
|
|
.letters {
|
|
background: lightyellow;
|
|
}
|
|
</style>
|
|
|
|
# Höhere Mathematik
|
|
## Inhalt
|
|
- [Höhere Mathematik](#höhere-mathematik)
|
|
- [Inhalt](#inhalt)
|
|
- [Einführung](#einführung)
|
|
- [Einsatzgebiet](#einsatzgebiet)
|
|
- [Arten von Lösungen](#arten-von-lösungen)
|
|
- [Verbindung zur Informatik](#verbindung-zur-informatik)
|
|
- [Typische Fragestellungen](#typische-fragestellungen)
|
|
- [Rechnerarithmetik](#rechnerarithmetik)
|
|
- [Maschinenzahl](#maschinenzahl)
|
|
- [Grenzen von Maschinenzahlen](#grenzen-von-maschinenzahlen)
|
|
- [Datentypen gem. IEEE](#datentypen-gem-ieee)
|
|
- [Rundungsfehler und Maschinengenauigkeit](#rundungsfehler-und-maschinengenauigkeit)
|
|
- [Konditionszahl](#konditionszahl)
|
|
- [Nullstellenprobleme](#nullstellenprobleme)
|
|
- [Problemstellung und Ansatz](#problemstellung-und-ansatz)
|
|
- [Fixpunktiteration](#fixpunktiteration)
|
|
- [Banachscher Fixpunktsatz](#banachscher-fixpunktsatz)
|
|
- [Newton-Verfahren](#newton-verfahren)
|
|
- [Sekantenverfahren](#sekantenverfahren)
|
|
- [Konvergenz-Ordnung](#konvergenz-ordnung)
|
|
- [Fehlerabschätzung](#fehlerabschätzung)
|
|
- [Formelbuchstaben zu Nullstellenproblem](#formelbuchstaben-zu-nullstellenproblem)
|
|
- [Lineare Gleichungssysteme](#lineare-gleichungssysteme)
|
|
- [Lernziele](#lernziele)
|
|
- [Formelbuchstaben](#formelbuchstaben)
|
|
- [Glossar](#glossar)
|
|
|
|
## Einführung
|
|
### Einsatzgebiet
|
|
- Annähern komplexer Formeln in endlicher Zeit
|
|
- Berechnung von Algorithmen durch Computer
|
|
- Algorithmen ohne expliziter Lösungsdarstellung
|
|
- Alternative Lösungsvorgänge für höhere Performance
|
|
|
|
### Arten von Lösungen
|
|
- Direkte Verfahren - Exakte Lösung nach endlicher Zeit
|
|
- Näherungsverfahren - Approximation nach begrenzter Anzahl Rechenschritte
|
|
|
|
### Verbindung zur Informatik
|
|
- Effiziente Berechnung numerischer Algorithmen
|
|
- Speicherung und Darstellung von Zahlen
|
|
- Computergrafik & Bildverarbeitung
|
|
- Neuronale Netze
|
|
|
|
### Typische Fragestellungen
|
|
- Wie wirkt sich die Beschränkung der Anzahl Bits für Zahlenformate auf Rechenergebnisse und Rechengenauigkeit aus?
|
|
- Numerische Lösung von Nullstellenproblemen
|
|
- Numerische Integration
|
|
|
|
## Rechnerarithmetik
|
|
### Maschinenzahl
|
|
Maschinenzahlen werden als Zahlen $x$ in folgender Form dargestellt:
|
|
|
|
$x = m \cdot B^e$
|
|
|
|
- $x$: Die zu repräsentierende Zahl
|
|
- $m$: Die Mantisse (der darstellbare Zahlenwert)
|
|
- $B$: Die Basis der zu repräsentierenden Zahl
|
|
- $e$: Der Exponent (der Stellenwert der Mantisse $m$)
|
|
|
|
Beispiel:
|
|
$1337 = 0.1337 * 10^4$
|
|
|
|
Maschinenzahlen sind normalisiert, wenn
|
|
- für die Mantisse $m$ $0.1 <= |m| < 1.0$ zutrifft
|
|
|
|
Maschinenzahlen werden normalisiert, damit es zu jedem Wert eine eindeutige Darstellung als Maschinenzahl gibt.
|
|
|
|
### Grenzen von Maschinenzahlen
|
|
<div class="formula">
|
|
|
|
$x_{max} = B^{e_{max}} - B^{e_{max}-n} = (1 - B^{-n}) \cdot B^{e_{max}}$
|
|
|
|
$x_min = B^{e_{min} - 1}$
|
|
|
|
</div>
|
|
|
|
### Datentypen gem. IEEE
|
|
`float` oder `single`: 32 Bit - 1 Bit für Vorzeichen, 23 Bit für Mantisse $m$, 8 Bit für Exponent $e$
|
|
|
|
`double`: 64 Bit - 1 Bit für Vorzeichen, 52 für Mantisse $m$, 11 Bit für Exponent $e$
|
|
|
|
### Rundungsfehler und Maschinengenauigkeit
|
|
<div class="formula">
|
|
|
|
Absoluter Fehler:
|
|
|
|
$$|\tilde{x} - x|$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
Relativer Fehler:
|
|
|
|
$$\frac{|\tilde{x} - x|}{|x|}$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
|
|
Maximaler **absoluter** Rundungsfehler:
|
|
|
|
$$\frac{B}{2} \cdot B^{e - n - 1}$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
**Maschinengenauigkeit** oder maximaler **relativer** Rundungsfehler:
|
|
|
|
$$\frac{1}{2} \cdot B^{1 - n}$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
Fehlerfortpflanzung bei Funktionsauswertung:
|
|
|
|
Relativ:
|
|
|
|
$$\frac{f'(x) \cdot x}{f(x)} \cdot \frac{\tilde{x} - x}{x}$$
|
|
|
|
Absolut:
|
|
|
|
$$|f'(x)| \cdot |\tilde{x} - x|$$
|
|
|
|
</div>
|
|
<div class="letters">
|
|
|
|
- $B$: Die Basis der Maschinenzahl
|
|
- $e$: Der Exponent der Maschinenzahl (Standard-Wert: $0$)
|
|
- $n$: Die Anzahl Stellen der Mantisse $m$
|
|
- $x$: Der darzustellende Wert
|
|
- $\tilde{x}$: Die Annäherung/Approximation an $x$
|
|
- $f$: Auszuwertende Funktion
|
|
|
|
</div>
|
|
|
|
### Konditionszahl
|
|
Die Konditionszahl gibt an, wie gross der potenzielle relative Fehler einer numerischen Lösung ist.
|
|
|
|
Eine niedrige Konditionszahl ($K \le 1$) bedeutet einen niedrigen Fehler, eine hohe Konditionszahl ein grosses Fehlerrisiko.
|
|
|
|
Formel:
|
|
|
|
<div class="formula">
|
|
|
|
Konditionszahl:
|
|
|
|
$$K = \frac{|f'(x)| \cdot |x|}{|f(x)|}$$
|
|
|
|
</div>
|
|
|
|
## Nullstellenprobleme
|
|
### Problemstellung und Ansatz
|
|
Es wird der korrekte Wert $x$ für eine Aufgabe gesucht.
|
|
|
|
1. Aufgabe ausformulieren:
|
|
$x = \sqrt{A}$
|
|
2. Aufgabe zu Nullstellenproblem umformulieren (Funktion, die bei gesuchtem $x$ immer $0$ ergibt):
|
|
$f(x) = x^2 - A$
|
|
3. (Algorithmisch) richtiges $x$ finden, bei dem die Funktion $0$ ergibt
|
|
4. Das gefundene $x$ ist die Lösung
|
|
|
|
> ***Note:***
|
|
> Als Ausgangsbedingung für eine numerische Lösung eines Nullstellenproblems können diverse Bedingungen verwendet werden wie etwa:
|
|
> - Eine bestimmte Anzahl Iterationen
|
|
> - Abstand zwischen $x_n$ und $x_{n + 1}$ unterschreitet Threshold (approximiertes Resultat)
|
|
> - Ein niedriger Threshold ergibt ein genaueres Resultat
|
|
> - Ein Threshold von $0$ ergibt das genaue Resultat
|
|
|
|
### Fixpunktiteration
|
|
|
|
![](FixedPointIteration.png)
|
|
|
|
Ein möglicher Ansatz für ein solches Problem ist eine Fixpunktiteration.
|
|
|
|
Der Vorgang für eine solche ist folgende:
|
|
|
|
1. Die Funktion in die Form $F(x) = x$.
|
|
Beispiel für $f(x) = x^2 - A$:
|
|
$F(x) = \sqrt{A}$
|
|
2. Beliebigen Wert für $x_0$ wählen (vorzugsweise Wert in Nähe von erwarteter Lösung)
|
|
3. Fixpunktiteration $x_{n + 1}$ berechnen:
|
|
$x_{n+1} = F(x_n)$
|
|
|
|
Dies wird durchgeführt bis die Ausgangsbedingung erfüllt ist.
|
|
|
|
***Code-Beispiel:***
|
|
```py
|
|
import math
|
|
|
|
threshold = 10 ** -6
|
|
|
|
def f(x): # Funktion f in Nullstellenform
|
|
return math.cos(x) - x
|
|
|
|
def F(x): # Funktion f in Fixpunktform
|
|
return math.cos(x)
|
|
|
|
def F_(x): # Die Ableitung F'(x)
|
|
return return -math.sin(x)
|
|
|
|
x = 0.75 # Startwert - angenommene, etwaige Lösung
|
|
|
|
if F_(x) >= 1:
|
|
print("Fehler: Fixpunktiteration divergiert!")
|
|
else:
|
|
while math.abs(x - F(x)) >= threshold:
|
|
x = F(x)
|
|
|
|
print(f"Approximierte Lösung: {x}")
|
|
```
|
|
|
|
<div class="formula">
|
|
|
|
**Konvergenz**
|
|
|
|
Eine Fixpunktiteration is konvergent (also berechenbar), wenn folgendes zutrifft:
|
|
|
|
$$|F'(\tilde{x})| < 1$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
**Divergenz**
|
|
|
|
Eine Fixpunktiteration is divergent (also unberechenbar), wenn folgendes zutrifft:
|
|
|
|
$$|F'(\tilde{x})| \ge 1$$
|
|
|
|
</div>
|
|
<div class="letters">
|
|
|
|
- $F(x)$: Die Fixpunktgleichung
|
|
- $F'(x)$: Die Ableitung der Fixpunktgleichung
|
|
- $x$: Das genaue Resultat für $x$
|
|
- $\tilde{x}$: Das approximierte Resultat für $x$ (Fixpunkt)
|
|
- $x_n$: Die $n$-te Approximation für $x$
|
|
|
|
</div>
|
|
|
|
#### Banachscher Fixpunktsatz
|
|
Der Fixpunktsatz dient dazu, abzuschätzen, wie gross der Fehler des Ergebnisses einer Fixpunktiteration in etwa ist.
|
|
|
|
<div class="formula">
|
|
|
|
Fixpunktsatz:
|
|
|
|
$$|F(x) - F(y)| \le \alpha \cdot |x - y| \text{für alle }x,y \in [a, b]$$
|
|
|
|
Alternative Umformung:
|
|
|
|
$$\frac{|F(x) - F(y)|}{|x - y|} \le \alpha$$
|
|
|
|
</div>
|
|
|
|
<div class="formula">
|
|
|
|
**Fehlerabschätzung:**
|
|
|
|
a-priori Abschätzung:
|
|
|
|
$$|x_n - \tilde{x}| \le \frac{\alpha^n}{1 - \alpha} \cdot |x_1 - x_0|$$
|
|
|
|
a-posteriori Abschätzung:
|
|
|
|
$$|x_n - \tilde{x}| \le \frac{\alpha}{1 - \alpha} \cdot |x_n - x_{n - 1}|$$
|
|
|
|
</div>
|
|
|
|
<div class="formula">
|
|
|
|
Konstante $\alpha$:
|
|
|
|
$$\alpha = \max_{x_0 \in [a, b]}| F'(x_0)|$$
|
|
|
|
$$\alpha \approx |F'(\tilde{x})|$$
|
|
|
|
</div>
|
|
|
|
Folgendermassen kann dieser aufgestellt werden:
|
|
|
|
> ***Note:***
|
|
> In dieser Passage wird sowohl $a$ (der Buchstabe "a") als auch $\alpha$ (Alpha) verwendet. Diese haben hier eine unterschiedliche Bedeutung.
|
|
|
|
1. Start- und Endpunkt $a$ und $b$ auswählen, welche genau einen Fixpunkt $\tilde{x}$ beinhalten
|
|
2. Prüfen, ob folgendes Zutrifft: Alle Ergebnisse von $F([a, b])$ befinden sich im Intervall $[a, b]$
|
|
3. Konstante $\alpha$ berechnen (gem. Formel)
|
|
4. Die a-priori und die a-posteriori Abschätzung kann nun beliebig angewendet werden. Hierbei wird für $x_0$ der Wert $a$ verwendet.
|
|
|
|
### Newton-Verfahren
|
|
|
|
![](NewtonMethod.png)
|
|
|
|
Das Newton-Verfahren erreicht die Konvergenz (d.h. das (approximierte) Resultat) um einiges schneller.
|
|
|
|
Hierfür wird die Funktion $f$ in der Nullstellenform benötigt ($f(x) = \text{[...]} = 0$).
|
|
|
|
<div class="formula">
|
|
|
|
Newton-Verfahren:
|
|
|
|
$$x_{n + 1} = x_n - \frac{f(x_n)}{f'(x_n)}$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
Vereinfachtes Newton-Verfahren:
|
|
|
|
$$x_{n + 1} = x_n - \frac{f(x_n)}{f'(x_0)}$$
|
|
|
|
</div>
|
|
<div class="formula">
|
|
|
|
Konvergenz-Kontrolle:
|
|
|
|
$$\left|\frac{f(x) \cdot f''(x)}{(f'(x))^2}\right| < 1$$
|
|
|
|
Das Ergebnis ist wahr, wenn mit dem gewählten $x$ eine Konvergenz erreicht werden kann.
|
|
|
|
</div>
|
|
|
|
1. Startpunkt $x_0$ in der Nähe einer Nullstelle wählen
|
|
2. (Wahlweise vereinfachtes) Newton-Verfahren anwenden bis $x_n$ und $x_{n + 1}$ bis Ausgangsbedingung erreicht wird
|
|
|
|
### Sekantenverfahren
|
|
|
|
![](SecantMethod.png)
|
|
|
|
<div class="formula">
|
|
|
|
$$x_{n + 1} = x_n - \frac{x_n - x_{n - 1}}{f(x_n) - f(x_{n - 1})} \cdot f(x_n)$$
|
|
|
|
</div>
|
|
|
|
Vorgang:
|
|
|
|
1. Startpunkte $x_0$ und $x_1$ wählen (Punkte, die eine Nullstelle umschliessen)
|
|
2. Iteration durchführen, bis Ausgangsbedingung erfüllt wird
|
|
|
|
### Konvergenz-Ordnung
|
|
|
|
<div class="formula">
|
|
|
|
Ein Verfahren hat eine Konvergenz-Ordnung $q \ge 1$, wenn es eine Konstante $c > 0$ für die für alle $n$ Iterations-Schritte gilt:
|
|
|
|
$$|x_{n + 1} - \tilde{x}| \le c \cdot |x_n - \tilde{x}|^q$$
|
|
|
|
</div>
|
|
<div class="letters">
|
|
|
|
- $c$: Beliebige Konstante
|
|
- $q$: Konvergenz-Ordnung
|
|
- Für Newton-Verfahren: $q = 2$
|
|
- Für vereinfachtes Newton-Verfahren: $q = 1$
|
|
- Für Sekanten-Verfahren: $1 = (1 + \sqrt{5}) : 2 \approx 1.618$
|
|
|
|
</div>
|
|
|
|
### Fehlerabschätzung
|
|
|
|
<div class="formula">
|
|
|
|
Wenn folgendes zutrifft:
|
|
|
|
$$f(x_n - \varepsilon) \cdot f(x_n + \varepsilon) < 0$$
|
|
|
|
Schneidet $f$ zwischen $x_n - \varepsilon$ und $x_n + \varepsilon$ die Nullstelle.
|
|
|
|
Deswegen gilt folgendes:
|
|
|
|
$$|x_n - \xi| < \varepsilon$$
|
|
|
|
Sprich: Der Fehler ist kleiner als $\varepsilon$.
|
|
|
|
</div>
|
|
|
|
Vorgang:
|
|
|
|
- $\varepsilon$ suchen, für die oben genannte Bedingung zutrifft
|
|
- Der maximale Fehler ist $\varepsilon$
|
|
|
|
<div class="letters">
|
|
|
|
- $x_n$: Der approximierte $x$-Wert nach der $n$-ten Iteration
|
|
- $\varepsilon$: Der maximale Fehler
|
|
- $\xi$: Der Schnittpunkt der Nullstelle
|
|
|
|
</div>
|
|
|
|
### Formelbuchstaben zu Nullstellenproblem
|
|
|
|
<div class="letters">
|
|
|
|
- $\alpha$: Lipschitz-Konstante
|
|
- $[a, b]$: Der
|
|
- $F(x)$: Die Fixpunktgleichung
|
|
- $F'(x)$: Die Ableitung der Fixpunktgleichung
|
|
- $x$ und $y$: Beliebig gewählte Punkte im Interval $[a,b]$
|
|
- $\tilde{x}$: Das approximierte Resultat für $x$ (Fixpunkt)
|
|
- $x_n$ Die $n$-te Approximation von $x$
|
|
|
|
</div>
|
|
|
|
## Lineare Gleichungssysteme
|
|
### Lernziele
|
|
- Sie können...
|
|
- [ ] Lineare Gleichungssysteme aufstellen
|
|
- [ ] den Gauss-Algorithmus mit und ohne Pivotisierung
|
|
- [ ] die LR-Zerlegung
|
|
- [ ] die QR-Zerlegung
|
|
- [ ] Jacobi-Verfahren (in Python)
|
|
- [ ] Gauss-Seidel-Verfahren (in Python)
|
|
- [ ] Fehlerabschätzungen
|
|
- [ ] Eigenwerte und Eigenvektoren von Matrizen berechnen
|
|
|
|
## Formelbuchstaben
|
|
<div class="letters">
|
|
|
|
- $\alpha$: Lipschitz-Konstante (siehe Fixpunktsatz)
|
|
- $[a,b]$: Das Untersuchungs-Interval für den Banachschen Fixpunktsatz
|
|
- $B$: Basis der Maschinenzahl
|
|
- $e$: Exponent der Maschinenzahl
|
|
- $K$: Konditionszahl
|
|
- $m$: Mantisse (Darstellbarer Bereich der Maschinenzahl)
|
|
- $n$: Anzahl möglicher Stellen der Mantisse $m$
|
|
- $q$: Konvergenz-Ordnung
|
|
- $x$: Darzustellender Wert
|
|
- $x_n$: Die $n$-te Approximation von $x$
|
|
- $\tilde{x}$: Approximation/Annäherung an $x$
|
|
|
|
</div>
|
|
|
|
## Glossar
|