Compare commits

..

6 commits

6 changed files with 510 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -56,6 +56,16 @@
- [$QR$-Zerlegung](#qr-zerlegung)
- [Housholder-Matrizen](#housholder-matrizen)
- [Vorgang](#vorgang)
- [Fehlerrechnung bei linearen Gleichungssystemen](#fehlerrechnung-bei-linearen-gleichungssystemen)
- [Vektor- und Matrixnormen](#vektor--und-matrixnormen)
- [Aufwand-Abschätzung](#aufwand-abschätzung)
- [Iterative Verfahren zur Lösung von Gleichungssystemen](#iterative-verfahren-zur-lösung-von-gleichungssystemen)
- [$LDR$-Zerlegung](#ldr-zerlegung)
- [Jacobi-Verfahren](#jacobi-verfahren)
- [Gauss-Seidel-Verfahren](#gauss-seidel-verfahren)
- [Konvergenz](#konvergenz)
- [Komplexe Zahlen](#komplexe-zahlen)
- [Rechen-Regeln](#rechen-regeln)
- [Formelbuchstaben](#formelbuchstaben)
- [Glossar](#glossar)
@ -856,13 +866,14 @@ Die $QR$-Zerlegung kann folgendermassen durchgeführt werden:
3. Erweiterte Householder-Matrix als $Q_i$ speichern
4. $R = Q_i \cdot R$
5. $Q = Q \cdot Q_i^T$
6. Die Gleichung $R \cdot x = Q^T \cdot b$ mit Gauss-Algorithmus lösen
***Code-Beispiel:***
```py
from numpy import array, identity, sign, sqrt, square, sum, zeros
def qrDecomposition(A):
def qrSolve(A, b):
A = array(A)
n = A.shape[0]
R = A.reshape((n, n))
@ -880,9 +891,503 @@ def qrDecomposition(A):
Qi[i:,i:] = H
R = Qi @ R
Q = Q @ Qi.T
return [Q, R]
R[i + 1:,i:i + 1] = zeros((n - (i + 1), 1))
return linalg.solve(R, Q.T @ b)
```
### Fehlerrechnung bei linearen Gleichungssystemen
Ähnlich wie herkömmliche Gleichungen, können Gleichungssysteme nicht mit eindeutiger Genauigkeit berechnet werden. Es entsteht ein Fehler.
<div class="formula">
***Fehler bei linearen Gleichungssystemen:***
$$A \cdot \tilde{x} = \tilde{b} = b + \Delta b$$
$$\Delta x = \tilde{x} - x$$
</div>
<div class="letters">
- $A$: Matrix eines linearen Gleichungssystems
- $b$: Gewünschtes Ergebnis des Gleichungssystems
- $\tilde{b}$: Ergebnis des Gleichungssystems unter Verwendung von $\tilde{x}$ in $A \cdot \tilde{x}$
- $\Delta b$: Residuum: Die Differenz von $b$ und $\tilde{b}$
- $x$: Genaue Lösung
- $\tilde{x}$: Näherungslösung von $x$
- $\Delta x$: Der Fehler der Näherungslösung $\tilde{x}$
</div>
#### Vektor- und Matrixnormen
<div class="formula">
***Vektornormen:***
$1$-Norm, Summen-Norm:
$$||x||_1 = \sum_{i = 1}^n|x_i|$$
$2$-Norm, euklidische Norm:
$$||x||_2 = \sqrt{\sum_{i = 1}^n x_i^2}$$
$\infin$-Norm, Maximum-Norm:
$$||x||_\infin = \max_{i = 1, \dots, n}|x_i|$$
</div>
<div class="formula">
***Matrixnormen:***
$1$-Norm, Spaltensummen-Norm:
$$||A||_1 = \max_{j=1, \dots, n}\sum_{i = 1}^n|a_{ij}|$$
$2$-Norm, Spektral-Norm:
$$||A||_2 = \sqrt{\rho(A^T \cdot A)}$$
$\infin$-Norm, Zeilensummen-Norm:
$$||A||_\infin = \max_{i = 1, \dots, n}\sum_{j = 1}^n|a_{ij}|$$
</div>
Folgendes gilt für die Abschätzung von Vektoren und Matrizen:
<div class="formula">
***Fehlerabschätzung von Vektoren und Matrizen:***
Für die Gleichung $A \cdot x = b$ und die dazugehörige Approximation $A \cdot \tilde{x} = \tilde{b}$ gilt:
Absoluter Fehler:
$$||x - \tilde{x}|| \le ||A^{-1}|| \cdot ||b - \tilde{b}||$$
Falls $||b|| \not = 0$ gilt zudem:
Relativer Fehler:
$$\frac{||x - \tilde{x}||}{||x||} \le ||A|| \cdot ||A^{-1}|| \cdot \frac{||b - \tilde{b}||}{||b||}$$
</div>
<div class="formula">
***Konditionszahl:***
Die Konditionszahl $cond(A)$ einer Matrix $A$ berechnet sich wie folgt:
$$cond(A) = ||A|| \cdot ||A^{-1}||$$
Eine hohe Konditionszahl $cond(A)$ bedeutet, dass kleine Fehler im Vektor $b$ zu grossen Fehlern im Ergebnis $x$ führen können. In diesem Fall ist eine Matrix schlecht konditioniert.
</div>
<div class="formula">
***Fehlerabschätzung von Matrizen mit Fehlern:***
Sollte auch die Matrix $A$ fehlerhaft sein (fehlerhafte Matrix $\tilde{A}$), gilt der nachstehende Satz unter folgender Bedingung:
$$cond(A) \cdot \frac{||A - \tilde{A}||}{||A||} < 1$$
dann gilt:
Relativer Fehler:
$$\frac{||x - \tilde{x}||}{||x||} \le
\frac{cond(A)}{1 - cond(A) \cdot \frac{||A - \tilde{A}||}{||A||}} \cdot
\left(
\frac{||A - \tilde{A}||}{||A||} +
\frac{||b - \tilde{b}||}{||b||}
\right)$$
</div>
### Aufwand-Abschätzung
<div class="formula">
***Kennzahlen:***
Lösung Linearer Gleichungssysteme mit Hilfe von...
Gauss-Elimination:
$$\frac{2}{3}n^3 + \frac{5}{2}n^2 - \frac{13}{6}n$$
$LR$-Zerlegung:
$$\frac{2}{3}n^3 + \frac{7}{2}n^2 + \frac{13}{6}n$$
$QR$-Zerlegung:
$$\frac{5}{3}n^3 + 4n^2 + \frac{7}{3}n - 7$$
</div>
<div class="formula">
***Ordnung $O(n)$***
Die Ordnung $O(n)$ der zuvor genannten Verfahren entspricht der höchsten Potenz von $n$, welche in der Formel zur Berechnung des Aufwands vorkommt.
Das bedeutet also folgendes:
Ordnung von Gauss-Elimination, $LR$-Zerlegung und $QR$-Zerlegung:
$$O(n^3)$$
</div>
## Iterative Verfahren zur Lösung von Gleichungssystemen
### $LDR$-Zerlegung
Für die $LDR$-Zerlegung wird die Matrix $A$ in drei Matrizen $L$, $D$ und $R$ aufgeteilt, wobei $L$ eine untere Dreiecksmatrix, $D$ eine Diagonalmatrix und $R$ eine obere Dreiecksmatrix ist. Das bedeutet:
$$A = L + D + R$$
Mit
$$L = \left(
\begin{matrix}
0 & 0 & 0 & \cdots & 0 \\
a_{21} & 0 & 0 & \cdots & 0 \\
a_{31} & a_{32} & 0 & \cdots & 0 \\
\vdots & \vdots & \ddots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nn - 1} & 0
\end{matrix}
\right)$$
$$D = \left(
\begin{matrix}
a_{11} & 0 & 0 & \cdots & 0 \\
0 & a_{22} & 0 & \cdots & 0 \\
0 & 0 & a_{33} & \cdots & 0 \\
\vdots & \vdots & \ddots & \ddots & \vdots \\
0 & 0 & \cdots & 0 & a_{nn}
\end{matrix}
\right)$$
$$R = \left(
\begin{matrix}
0 & a_{12} & a_{13} & \cdots & a_{1n} \\
0 & 0 & a_{23} & \cdots & a_{2n} \\
0 & 0 & 0 & \ddots & \vdots \\
\vdots & \vdots & \ddots & \ddots & a_{n-1,n} \\
0 & 0 & \cdots & 0 & 0
\end{matrix}
\right)$$
> ***Wichtig:***
> Hierbei handelt es sich nicht um $L$ und $R$ aus der $LR$-Zerlegung!
### Jacobi-Verfahren
Das Jacobi-Verfahren ist ein iteratives Verfahren, welches nach jeder Iteration näher mit der tatsächlichen Lösung $x$ konvergiert.
Das Jacobi-Verfahren ist auch bekannt als **Gesamtschrittverfahren**.
<div class="formula">
***Jacobi-Verfahren:***
Zunächst beginnt man mit $x^{(0)}$ als ein Vektor, der nur aus $0$en besteht.
$$x^{(k + 1)} = -D^{-1} \cdot (L + R) \cdot x^{(k)} + D^{-1} \cdot b$$
Für die Berechnung einzelner Elemente des Vektors $x^{(k + 1)}$ gilt:
Für $i$ von $1$ bis $n$:
$$x^{(k + 1)}_i = \frac{1}{a_{ii}} \cdot
\left(
b_i - \sum_{j = 1,j \not = i}^n a_{ij} \cdot x^{(k)}_j
\right)$$
</div>
<div class="letters">
- $x^{(k)}$: Die Annäherung an $x$ nach der $k$-ten Iteration
</div>
### Gauss-Seidel-Verfahren
Das Gauss-Seidel-Verfahren konvergiert schneller als das Jacobi-Verfahren.
Da für die Berechnung des Jacobi-Verfahrens für die Berechnung von $x_2$ auch Werte von $x_1$ verwendet werden, können die Werte direkt aus der aktuellen Iteration $k$ wiederverwendet werden, um den Vorgang schneller konvergieren zu lassen.
Das Gauss-Seidel-Verfahren wird auch **Einzelschrittverfahren** genannt.
<div class="formula">
***Gauss-Seidel-Verfahren:***
$$x^(k+1) = -(D + L)^{-1} \cdot R \cdot x^{(k)} + (D + L)^{-1} \cdot b$$
Für die Berechnung einzelner Vektor-Komponente wiederum:
Für $i$ von $1$ bis $n$:
$$x^{(k + 1)}_i = \frac{1}{a_{ii}} \cdot
\left(
b_i - \sum_{j = 1}^{i - 1} a_{ij} \cdot x^{k + 1}_j -
\sum_{j = i + 1}^n a_{ij} \cdot x^{(k)}_j
\right)$$
</div>
### Konvergenz
<div class="formula">
***Anziehung/Abstossung:***
Gegeben sei eine Fixpunkt-Iteration:
$$x^{(n + 1)} = B \cdot x^{(n)} + c =: F(x^{(n)})$$
Beispiele für solche Fixpunkt-Iterationen sind das Jacobi- oder das Gauss-Seidel-Verfahren.
Falls folgendes gegeben ist: $\tilde{x} = B \cdot \tilde{x} + c = F(\tilde{x})$, dann gilt:
- $\tilde{x}$ ist ein anziehender Fixpunkt, falls $||B|| < 1$
- $\tilde{x}$ ist ein abstossender Fixpunkt, falls $||B|| > 1$
</div>
<div class="formula">
***Abschätzungen:***
Gegeben sei eine Fixpunkt-Iteration:
$$x^{(n + 1)} = B \cdot x^{(n)} + c =: F(x^{(n)})$$
Für Fixpunkt-Iterationen bei denen $x^{(k)}$ gegen $\tilde{x}$ konvergiert (gemäss oben stehender Formel "Anziehung/Abstossung"), gelten folgende Abschätzungen:
a-priori Abschätzung:
$$||x^{(n)} - \tilde{x}|| \le
\frac{||B||^n}{1 - ||B||} \cdot
||x^{(1)} - x^{(0)}||$$
a-posteriori Abschätzung:
$$||x^{(n)} - \tilde{x}|| \le
\frac{||B||}{1 - ||B||} \cdot
||x^{(n)} - x^{(n - 1)}||$$
</div>
Die Matrix $B$ hat hierbei je nach verwendetem Verfahren einen anderen Wert:
<div class="formula">
***Matrix $B$ für Abschätzung und Konvergenz***
- Für das Jacobi-Verfahren:
$$B = -D^{-1} \cdot (L + R)$$
- Für das Gauss-Seidel-Verfahren
$$B = -(D + L)^{-1} \cdot R$$
</div>
<div class="formula">
***Diagonal-Dominanz:***
Die Matrix $A$ ist diagonal-dominant, falls eines der folgenden Kriterien zutrifft:
- Zeilensummen-Kriterium:
- Für alle $i = 1, \dots, n$ gilt:
$$|a_{ii}| > \sum_{j = 1, i \not = j}^n{|a_{ij}|}$$
- Spaltensummen-Kriterium:
- Für alle $i = 1, \dots, n$ gilt:
$$|a_{jj}| > \sum_{i = 1, i \not = j}{|a_{ij}|}$$
Für alle Matrizen, die diagonal-dominant sind gilt, dass sie für das Jacobi- und das Gauss-Seidel-Verfahren konvergieren.
</div>
## Komplexe Zahlen
Der Bereich der Komplexen Zahlen dient dazu, Werte abzubilden, die es eigentlich nicht geben kann.
Beispiel einer komplexen Zahl:
$$x^2 = -1$$
Es gibt keinen Wert, der $-1$ ergibt, wenn er quadriert wird. Es handelt sich also um eine komplexe Zahl.
Dafür wird die imaginäre Einheit $i$ eingeführt mit folgender Eigenschaft:
$$i^2 = -1$$
Für diese Definition wäre das Resultat von $x^2= -1$ also $x = \plusmn{i}$
In Python und in der Elektrotechnik wird der Buchstabe $j$ verwendet.
Komplexe Zahlen $z$ mit $z = x + i \cdot y$ können nicht auf einem Zahlenstrahl dargestellt werden.
Sie können in einem Koordinaten-System eingezeichnet werden, wobei $x$ der reale und $y$ der imaginäre Anteil sind:
![](ComplexNumbers.png)
Dieses Koordinaten-System nennt sich auch **Gaussche Zahlenebene**.
<div class="formula">
***Komplexe Zahlen:***
Imaginäre Einheit $i$:
$$i^2 = -1$$
Komplexe Zahlen $z$:
$$z = x + i \cdot y$$
**Konjugierte** komplexe Zahl:
$$z^* = x - i \cdot y$$
Betrag von $z$:
$$|z| = \sqrt{x^2 + y^2}$$
Menge aller komplexen Zahlen $\mathbb{C}$:
$$\mathbb{C} = \{ z | z = x + i \cdot y \text{ mit } x, y \in \mathbb{R}\}$$
</div>
Veranschaulichung einer konjugierten komplexen Zahl $z^*$:
![](ConjugatedComplexNumber.png)
<div class="letters">
- $\mathbb{C}$: Menge aller komplexen Zahlen
- $x$: Realteil einer komplexen Zahl
- $y$: Imaginärteil einer komplexen Zahl
- $z$: Komplexe Zahl
</div>
<div class="formula">
***Darstellungsformen:***
Es gibt diverse Darstellungsformen für komplexe Zahlen:
- Normalform (auch "algebraische" oder "kartesische" Form):
$$z = x + i \cdot y$$
- Trigonometrische Form:
$$z = r \cdot (\cos(\varphi) + i \cdot \sin(\varphi))$$
- Exponential-Form:
$$z = re^{i \cdot \varphi}$$
</div>
Beispiel einer komplexen Zahl $z$ in der Normalform und der Trigonometrischen Form:
![](TrigonometricComplexNumber.png)
<div class="letters">
- $r$: Die Länge des Vektors einer komplexen Zahl $z$ ($r = |z|$)
- $\varphi$: Der Winkel zwischen der x-Achse und dem Vektor der komplexen Zahl $z$
</div>
### Rechen-Regeln
<div class="formula">
***Rechen-Regeln für komplexe Zahlen:***
Addition:
$$z_1 + z_2 = (x_1 + x_2) + i \cdot (y_1 + y_2)$$
Subtraktion:
$$z_1 - z_2 = (x_1 - x_2) + i \cdot (y_1 - y_2)$$
Multiplikation:
$$z_1 \cdot z_2 = (x_1 \cdot x_2 - y_1 \cdot y_2) +
i \cdot(x_1 \cdot y_2 + x_2 \cdot y_2)$$
Division:
$$\begin{aligned}
\frac{z_1}{z_2} &=
\frac{z_1 \cdot z_2^*}{z_2 \cdot z_2^*} =
\frac{(x_1 + i \cdot y_1) \cdot (x_2 - i \cdot y_2)}{(x_2 + i \cdot y_2) \cdot (x_2 - i \cdot y_2)} \\
&= \frac{(x_1 \cdot x_2 + y_1 \cdot y_2) + i \cdot (y_1 \cdot x_2 - x_1 \cdot y_2)}{x_2^2 + y_2^2} \\
&= \frac{(x_1 \cdot x_2 + y_1 \cdot y_2)}{x_2^2 + y_2^2} + i \cdot \frac{(y_1 \cdot x_2 - x_1 \cdot y_2)}{x_2^2 + y_2^2}
\end{aligned}$$
</div>
Visualisierung von Addition und Subtraktion zwei komplexer Zahlen $z_1$ und $z_2$:
![](ComplexNumberMath.png)
<div class="formula">
***Potenzieren in der Polarform:***
Für komplexe Zahlen in der Normalform gilt folgendes:
- Sei $n \in \mathbb{N}$:
$$z^n = (r \cdot e^{i \cdot \varphi})^n = r^n \cdot e^{i \cdot n \cdot \varphi} =
r^n \cdot (\cos(n \cdot \varphi) + i \cdot \sin(n \cdot \varphi))$$
</div>
<div class="formula">
***Fundamentalsatz der Algebra:***
Eine algebraische Gleichung $n$-ten Grades mit komplexen Koeffizienten und Variablen $a_i, z \in \mathbb{C}$
$$a_n \cdot z^n + a_{n - 1} \cdot z^{n - 1} + \dots + a_1 \cdot z + a_0 = 0$$
besitzt in der Menge $\mathbb{C}$ der komplexen Zahlen genau $n$ Lösungen.
</div>
<div class="formula">
***Ziehen der Wurzel einer komplexen Zahl:***
Die Gleichung für das Ziehen einer Wurzel $n$ der komplexen Zahl $a$ lautet: $z^n = a$.
Für die Lösung dieser Gleichung existieren genau $n$ verschiedene Lösungen in der Menge $\mathbb{C}$:
$$z_k = r \cdot (\cos(\varphi_k + i \cdot \sin(\varphi_k)) = r \dot e^{i \cdot \varphi_k}$$
für $k = 0, 1, 2, \dots, n - 1$:
mit
$$r = \sqrt[n]{r_0}$$
$$\varphi_k = \frac{\varphi + k \cdot 2 \cdot \pi}{n}$$
Die Bildpunkte der Ergebnisse liegen in der komplexen Zahlenebene auf einem Kreis um den Nullpunkt mit dem Radius $r = \sqrt[n]{r_0}$ und bilden die Ecken eines regelmässigen $n$-Ecks.
</div>
Visualisierung des Ziehens der $6$-ten Wurzel einer komplexen Zahl $z$:
![](RootComplexNumber.png)
## Formelbuchstaben
<div class="letters">
@ -896,6 +1401,8 @@ def qrDecomposition(A):
- $e$: Exponent der Maschinenzahl
- $H$: Housholder-Matrix (siehe $QR$-Zerlegung)
- $I$: Identitäts-Matrix (Matrix, überall den Wert $0$ und auf der Diagonalen den Wert $1$ hat)
- $i$: Imaginäre Einheit für die Darstellung komplexer Zahlen
- $j$: Alternative Schreibweise für $i$ in Python und in der Elektrotechnik
- $K$: Konditionszahl
- $L$: Untere Dreiecksmatrix/Normierte Matrix
- $m$: Mantisse (Darstellbarer Bereich der Maschinenzahl)
@ -906,6 +1413,7 @@ def qrDecomposition(A):
- $x$: Darzustellender Wert
- $x_n$: Die $n$-te Approximation von $x$
- $\tilde{x}$: Approximation/Annäherung an $x$
- $x^{(k)}$: Die Annäherung von $x$ in der $k$-ten Iteration
</div>