[NumCS] Linear curve fitting

This commit is contained in:
2025-12-22 11:56:55 +01:00
parent b0bdb10a71
commit 9f908784dc
7 changed files with 99 additions and 4 deletions

Binary file not shown.

View File

@@ -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}

View File

@@ -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

View File

@@ -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}

View File

@@ -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*}

View File

@@ -1 +1,2 @@
\newsection
\subsection{Nichtlineare Ausgleichsrechnung}