mirror of
https://github.com/janishutz/eth-summaries.git
synced 2026-01-11 19:48:27 +00:00
[NumCS] Linear curve fitting
This commit is contained in:
Binary file not shown.
@@ -33,7 +33,6 @@
|
||||
\vspace{4cm}
|
||||
\begin{center}
|
||||
\begin{Large}
|
||||
\quote{Denken vor Rechnen} % FIXME: Marked for removal
|
||||
\quote{Wer in Python Type annotation benötigt, der soll kein Python verwenden} (2025-10-09T10:43) % FIXME: Marked for removal
|
||||
\quote{Wenn ich keine Lust habe, das zu berechnen, dann wende ich einfach Gewalt an}
|
||||
\end{Large}
|
||||
|
||||
@@ -36,4 +36,7 @@ $B_a =
|
||||
-aI & A \\
|
||||
A^H & 0
|
||||
\end{bmatrix}
|
||||
$
|
||||
$
|
||||
% TODO: What the f does the kappa mean???
|
||||
ersetzen, wobei wir $a$ so wählen, dass $\kappa(B_a)$ minimal wird.
|
||||
% TODO: Consider adding the code and the example, but likely skip
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
\subsubsection{Lösung mittels orthogonaler Transformation}
|
||||
Nicht nur die Normalengleichungen, aber auch das LU-Verfahren kann für gewisse Matrizen (im Falle von LU sind es Matrizen mit $m > n$) ungeeignet sein.
|
||||
|
||||
Wir versuchen wieder $||r||_2^2$ zu minimieren, mit $r = Ax - b$.
|
||||
Mithilfe der $QR$-Zerlegung lässt sich ein Lösungsansatz herleiten, der höhere numerische Stabilität aufweist, als die Normalengleichungen.
|
||||
Sei $A = QR = Q \begin{bmatrix}
|
||||
\tilde{R} \\ 0
|
||||
\end{bmatrix}$.
|
||||
Dann, nach Umformungen erhalten wir $||Rx - \tilde{b}||_2^2$ mit $\tilde{b} = Q^Hb$.
|
||||
|
||||
Nutzt man beispielsweise Housholder-Spiegelungen zur Berechnung der $QR$-Zerlegung, so kann man die Transformationen direkt auf $b$ anwenden
|
||||
und so kann man sich das Abspeichern der Matrix $Q$ komplett sparen.
|
||||
|
||||
Falls jedoch die Matrix $A$ nicht vollen Rang hat (was sehr oft der Fall ist), dann ist es besser, die Singulärwertzerlegung zu verwenden.
|
||||
Dann ist:
|
||||
\rmvspace
|
||||
\begin{align*}
|
||||
||Ax - b||_2 = ||U \Sigma V^H x - b||_2 = ||\Sigma V^H x - U^H b||_2
|
||||
\end{align*}
|
||||
|
||||
\drmvspace
|
||||
\innumpy verwendet \texttt{numpy.linalg.lstsq} die SVD für das Lösen
|
||||
|
||||
\setLabelNumber{all}{15}
|
||||
\fancydef{Pseudoinverse} $A^+ = (A^H A)^{-1} A^H = V_1 \Sigma_r^+ U_1^H$
|
||||
|
||||
Die drei bisher besprochenen Verfahren lassen sich in zwei Kategorien einordnen:
|
||||
\begin{enumerate}
|
||||
\item $A \in K^{m \times n}$ ist voll besetzt und $n$ ist klein ($m \gg n$)
|
||||
\item $A \in K^{m \times n}$ ist dünn besetzt und $m, n$ sind gross
|
||||
\end{enumerate}
|
||||
Im ersten Fall wird aufgrund der numerischen Stabilität die $QR$ oder SVD-Methode verwendet.
|
||||
Im zweiten Fall verwendet man die Normalengleichungen, da diese die Struktur der dünn besetzten Matrizen verwenden können.
|
||||
|
||||
\begin{code}{python}
|
||||
import numpy as np
|
||||
|
||||
A = np.array([[98.269, 1.0], [0.0, 1.0], [-194.96, 1.0]])
|
||||
b = np.array([852.7, 624.5, 172.7])
|
||||
|
||||
def least_squares_svd(A, b, epsilon=1e-6):
|
||||
U, s, Vh = np.linalg.svd(A)
|
||||
r = 1 + np.where(s / s[0] > epsilon)[0].max() # numerical rank
|
||||
y = np.dot(Vh[:r, :].T, np.dot(U[:, :r].T, b) / s[:r])
|
||||
return y
|
||||
|
||||
# qr-decomposition:
|
||||
def least_squares_qr(A, b):
|
||||
Q, R = np.linalg.qr(A)
|
||||
b_tilde = np.dot(Q.T, b)
|
||||
return np.linalg.solve(R, b_tilde)
|
||||
|
||||
np.linalg.lstsq(A, b)
|
||||
\end{code}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
\subsubsection{Totale Ausgleichsrechnung}
|
||||
Es kann vorkommen, dass sowohl die Matrix $A$, wie auch der Vektor $b$ fehlerhaft sind.
|
||||
Dann ersetzen wir das System $Ax = b$ durch ein neues System $\hat{A}\hat{x} = \hat{b}$,
|
||||
welches so nah wie möglich am ursprünglichen System liegt und so für welches gilt $\hat{b} \in \text{Bild}(\hat{A})$.
|
||||
|
||||
Wir versuchen also die folgende Norm zu minimieren:
|
||||
\begin{align*}
|
||||
||C - \hat{C}||_F
|
||||
=
|
||||
\left|\left|
|
||||
\begin{bmatrix}
|
||||
A & b
|
||||
\end{bmatrix}
|
||||
-
|
||||
\begin{bmatrix}
|
||||
\hat{A} & \hat{b}
|
||||
\end{bmatrix}
|
||||
\right|\right|_F
|
||||
\end{align*}
|
||||
|
||||
\drmvspace
|
||||
Das Problem lässt sich umschreiben als
|
||||
\rmvspace
|
||||
\begin{align*}
|
||||
\min_{\text{Rang}(\hat{C}) = n} ||C - \hat{C}||_F
|
||||
\end{align*}
|
||||
|
||||
\drmvspace
|
||||
Theorem \ref{all:7-1-50} liefert die Lösung. Die Singulärwertzerlegung
|
||||
\rmvspace
|
||||
\begin{align*}
|
||||
C = U\Sigma V^H = \sum_{j = 1}^{n + 1} \sigma_j (u)_j (v)_j^H
|
||||
\end{align*}
|
||||
|
||||
\drmvspace
|
||||
gibt das Optimum
|
||||
\rmvspace
|
||||
\begin{align*}
|
||||
\hat{C} = \sum_{j = 1}^{n} \sigma_j (u)_j (v)_j^H
|
||||
\end{align*}
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
\newsection
|
||||
\subsection{Nichtlineare Ausgleichsrechnung}
|
||||
|
||||
Reference in New Issue
Block a user