mirror of
https://github.com/janishutz/eth-summaries.git
synced 2026-01-12 14:18:23 +00:00
[NumCS] Linear curve fitting
This commit is contained in:
Binary file not shown.
@@ -33,7 +33,6 @@
|
|||||||
\vspace{4cm}
|
\vspace{4cm}
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{Large}
|
\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{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}
|
\quote{Wenn ich keine Lust habe, das zu berechnen, dann wende ich einfach Gewalt an}
|
||||||
\end{Large}
|
\end{Large}
|
||||||
|
|||||||
@@ -37,3 +37,6 @@ $B_a =
|
|||||||
A^H & 0
|
A^H & 0
|
||||||
\end{bmatrix}
|
\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}
|
\subsection{Nichtlineare Ausgleichsrechnung}
|
||||||
|
|||||||
@@ -43,8 +43,6 @@ Dies gilt jedoch nicht, weil für jedes $z = 1^i$ zwar jedes $0^i 1^i \in L$ gil
|
|||||||
Um die Nichtregularität konkreter Sprachen zu beweisen, sucht man nach einfach verifizierbaren Eigenschaften,
|
Um die Nichtregularität konkreter Sprachen zu beweisen, sucht man nach einfach verifizierbaren Eigenschaften,
|
||||||
denn wenn eine Sprache eine dieser Eigenschaften \textit{nicht} erfüllt, so ist sie nicht regulär.
|
denn wenn eine Sprache eine dieser Eigenschaften \textit{nicht} erfüllt, so ist sie nicht regulär.
|
||||||
|
|
||||||
% TODO: For Kolmogorov complexity elaborate some more, i.e. how to do proofs properly / how to derive a word more easily
|
|
||||||
% -> TA Slides explain that really well
|
|
||||||
|
|
||||||
\vspace{0.3cm}
|
\vspace{0.3cm}
|
||||||
\hrule
|
\hrule
|
||||||
|
|||||||
Reference in New Issue
Block a user