{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7f3396b6-5418-4471-945d-2dc38325c5af",
   "metadata": {},
   "source": [
    "# Matrix-Zerlegungen"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d2d4143-2918-4bb1-ae77-b18b29bdf5c3",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bb466eb9-9e4d-465b-bd1d-768ef39fd9e8",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-danger\">\n",
    "<b>Ziel des Notebooks:</b>\n",
    "\n",
    "- Verschiedene Matrix-Zerlegungen kennenlernen\n",
    "- Zweck von Matrix-Zerlegungen verstehen\n",
    "- Eigenschaften verschiedener Matrix Zerlegungen begreifen\n",
    "\n",
    "<br>\n",
    "    \n",
    "<b>Mathematische Tools:<b>\n",
    "- Matrizen\n",
    "- Untere und obere Dreiecksmatrizen\n",
    "- Orthogonale Matrizen\n",
    "- LR Zerlegung\n",
    "- Singulärwertzerlegung\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64db432d-9d3c-413c-a1a4-a1515158e094",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d49255b-cccb-4e6e-856f-350189a43c3a",
   "metadata": {},
   "source": [
    "Haben Sie sich auch schonmal gefragt, wie, bei aktuellen Stand der Technik, so riesige Fotos mit manchmal dutzenden Millionen von Pixeln eigentlich so effizient gespeichert und per Knopfdruck geteilt werden können? Nein? Nun Matrizen könnten ein Teil der Antwort sein. <br>\n",
    "\n",
    "Die Informationen des Bildes, bzw. die Informationen eines Pixels werden in einem oder mehreren Einträg einer Matrix gespeichert. Pro Bild kann man so etwa ein Matrix für Rot, Grün und Blau verwenden und so bereits einen sehr großen Teil des Farbspektrums abdekcen. Insbesondere Zerlegungen von Matrizen spielen in diesem Kontext eine große Rolle. So können etwa mit der Singulärwertzerlegung, die Matrizen mit den Farbinformationen auf eine Art und Weise gespeichert werden, sodass man nur einige wenige Werte braucht, um bereits sehr hochauflösende Bilder zu erhalten. Eine Seite zur Demonstration dieses Verfahrens zur Bildkompression findet sich [hier](http://timbaumann.info/svd-image-compression-demo/).\n",
    "\n",
    "In diesem Notebook wollen wir uns Matrix-Zerlegungen und insbesondere die Singulärwertzerlegung anschauen, werden aber auch über bekannte Konzepte wie den Gauss-Algorithmus stolpern.\n",
    "\n",
    "Bevor wir uns jedoch der Singulärwertzerlegung widmen - das Verfahren was für die Bildkompression verwendet wurde - wollen wir uns zunächst mit einer etwas einfacheren Zerlegung, der LR-Zerlegung beschäftigen."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ea4ef4b3-ed39-4dee-bae8-49104ad64222",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a896763d-aefd-4cf8-aace-91126eba6685",
   "metadata": {},
   "source": [
    "### LR Zerlegung"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c53f2003-5f1e-4a41-97f1-2dfe8c05c754",
   "metadata": {},
   "source": [
    "Wir möchten zunächst eine mögliche Motivation der LR-Zerlegung verstehen bevor wir uns mit dieser beschäftigen. Dafür skizzieren wir folgende Situation: <br>\n",
    "Eine Fabrik, die Soja zu weiteren Produkten verarbeitet hat drei verschieden Produktionsketten, die jeweils aus Soja entweder, Sojamilch, Tofu oder Sojasahne oder mehrere Sachen parallel herstellt. Der Einfachheit halber stellen wir uns die Prozesse wie folgt vor:\n",
    "1. In Produktionskette 1 werden aus 10 Einheiten Soja, 0 Einheiten Tofu, 3 Einheiten Sojasahne und 7 Einheit Sojamilch hergestellt\n",
    "2. In Produktionskette 2 werden aus 10 Einheiten Soja, 8 Einheiten Tofu, 0 Einheiten Sojasahne und 2 Einheiten Sojamilch hergestellt\n",
    "3. In Produktionskette 3 werden aus 10 Einheiten SOja, 4 Einheiten Tofu, 3 Einheiten Sojasahne und 3 Einheiten Sojamilch hergestellt\n",
    "\n",
    "Nun will die Fabrik im Sommer 2 Einheiten Tofu, 5 Einheiten Sojamilch und 3 Einheiten Sojasahne produzieren.\n",
    "\n",
    "Diesen Umstand können wir als lineares Gleichungssystem wie folgt kodieren. Sei $x_i$ das Produktionsniveau der Produktionskette $i,$ so suchen wir den Lösungsvektor $x = \\begin{pmatrix} x_1 \\\\ x_2 \\\\ x_3  \\end{pmatrix},$ sodass\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "0 & 3 & 7 \\\\\n",
    "8 & 0 & 2 \\\\\n",
    "4 & 3 & 3\n",
    "\\end{pmatrix} \\cdot x = \\begin{pmatrix} 2 \\\\ 5 \\\\ 3 \\end{pmatrix}\n",
    "$$\n",
    "Nun möchte die Fabrik womöglich ihre Produktionskapazitäten der einzelnen Produkte entsprechend der Jahreszeiten, bestimmter Feierlichkeiten oder der Nachfrage entsprechend anpassen. Somit müssen mehrere Gleichungssysteme der Form:\n",
    "$$\n",
    "\\begin{pmatrix}\n",
    "0 & 3 & 7 \\\\\n",
    "8 & 0 & 2 \\\\\n",
    "4 & 3 & 3\n",
    "\\end{pmatrix} \\cdot x = b\n",
    "$$\n",
    "Für verschiedene $b$ gelöst werden. Genau für diese Anwendung macht sich die LR-Zerlegung die Struktur einer Matrix ($A$) zu nutze, um wiederkehrende Gleichungssysteme obiger Form effizienter lösen zu können."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d2e57a00-27e7-4da6-b992-02b1a838875d",
   "metadata": {},
   "source": [
    "Bevor wir nun aber das Prinzip der LR-Zerlegung verstehen können, müssen wir noch ein paar Definitionen wiederholen:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "46cbef6f-79dd-41d3-88eb-ef1b7cbae078",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "    <b> Definition Obere Dreiecksmatrizen</b> <br>\n",
    "    Wir nennen eine Matrix $R \\in \\mathbb{R}^{m \\times n}$ mit den Einträgen $r_{i,j} = (R)_{i,j}$ obere Dreiecksmatrix, falls für $i > j$ gilt, dass $(R)_{i,j} = 0.$ <br>\n",
    "    Untere Dreiecksmatrizen $L \\in \\mathbb{L}^{m \\times n}$ definieren wir analog mit $j > i \\implies (L)_{i,j} = 0.$ <br>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2d8bfe8-4bac-4f87-b3d6-b1e29f534d8b",
   "metadata": {},
   "source": [
    "Für unsere Zwecke ist es relevant, dass es sich bei $B_{n,R} = \\{R \\in \\mathbb{R}^{n \\times n} \\mid R \\text{ ist obere Dreiecksmatrix} \\wedge \\det(R) \\neq 0 \\}$ um eine multiplikativ abgeschlossene Gruppe handelt. Daher wollen wir dies für obere Dreiecksmatrizen zeigen:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9eae26b6-0a28-4f46-a261-e5f57f0e5e36",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "\n",
    "### Aufgabe\n",
    "***\n",
    "<P> Zeigen sie (anhand der Definition einer Gruppe), dass es sich bei $B_{n,R}$ um eine multiplikative Untergruppe der $\\text{GL}_n$ (die Menge aller invertierbaren $n \\times n$ Matrizen) handelt. <br>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e90fae0c-c509-44c3-bedb-fdd9196a318b",
   "metadata": {},
   "source": [
    "Dies lässt sich natürlich völlig analog für die Menge der invertierbaren unteren Dreiecksmatrizen $B_L$ zeigen."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0d5eab61-4806-4b2a-936b-a8a00ca1f47d",
   "metadata": {},
   "source": [
    "Nun kommen wir auch schon zum angekündigten Stolperstein - dem Gauss-Algorithmus. In der linearen Algebra I haben wir diesen als nützliches Mittel zur Bestimmung vom Rang einer Matrix oder zum Lösen von linearen Gleichungssystemen der Form $Ax = b$ kennengelernt. Nun wollen wir diesen nochmal betrachten, allerdings zunächst nur die Transformationen der Matrix $A$ verstehen. Unser Ziel ist nach wie vor, einer Darstellung der Matrix $A=LR$ zu finden, wobei $L$ und $R$ untere, bzw. obere, Dreiecksmatrizen sind."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4cfb5bc0-1813-4f0a-93d6-01ecd63844d2",
   "metadata": {},
   "source": [
    "Dafür betrachten wir beispielsweise folgende Matrix und wollen im ersten Schritt alle Einträge der ersten Spalte außer dem in der ersten Zeile \"eliminieren\". Welche Matrix $L_1 \\in \\mathbb{R}^{3 \\times 3}$ kann von links an die Matrix\n",
    "\n",
    "$$A = \\begin{pmatrix} 2 & -1 & -3 \\\\4 & 0 & -3 \\\\6 & 1 & -1 \\end{pmatrix} $$\n",
    "multiplizieren, sodass\n",
    "$$ L_1 \\cdot A = \\begin{pmatrix} 2 & * & * \\\\ 0 & * & * \\\\ 0 & * & * \\end{pmatrix}$$\n",
    "Es zeigt sich, dass hierfür ein untere Dreiecksmatrix verwendet werden kann. Genauer ist hier\n",
    "$$\n",
    "L_1 = \\begin{pmatrix} 1 & 0 & 0 \\\\ -2 & 1 & 0 \\\\ -3 & 0 & 1 \\end{pmatrix}\n",
    "$$\n",
    "eine mögliche Lösung, was wir uns zu nutze machen wollen. Hierbei stehen die Einträge unter der Diagonale in der ersten Spalte von $L_1$ für den Faktor, mit dem der erste Eintrag der ersten Zeile (2) multipliziert werden muss, um addiert mit den anderen Einträgen auf der ersten Spalte (4 und 6), 0 zu ergeben. <br>\n",
    "\n",
    "Dieser Umstand lässt sich auch verallgemeinern: Da für die Operation auf der Spalte nur Einträge eliminiert werden, die unterhalb der Diagonale liegen, müssen in der Matrix $L$ nur Einträge unterhalb der Diagonale gewählt werden. <br>\n",
    "Diese Elimination der Einträge unter der Diagonale in einer Spalte kann nun Induktiv weitergeführt werden und so die ganze Matrix durch Multiplikation von unteren Dreiecksmatrizen auf obere Dreiecksgestalt gebracht werden $L_2 \\cdot L_1 \\cdot A = R$ für eine obere Dreiecksmatrix $R.$ <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "489f7f1d-e33d-4993-986f-981dd6422245",
   "metadata": {},
   "source": [
    "Da Sie oben gezeigt haben, dass es sich bei den invertierbaren unteren- und oberen Dreiecksmatrizen um Gruppen handelt, heißt dies insbesondere auch, dass $L_1$ und $L_2$ inverse besitzen. Merke dafür, dass bei unserer Konstruktion der $L_i$ die Diagonaleinträge stets $1$ sind. Damit erhält man insgesamt $A = L_1 ^{-1} \\cdot L_2 ^{-1} \\cdot R.$ Somit haben wir eine LR-Zerlegung (ohne Pivotisierung) von A erhalten. Den geneigten Lesenden sei überlassen die Korrektheit dieses Verfahrens allgemeine zu beweisen. Ein solcher Beweis findet sich sonst im Dahmen, Reusken in den Literaturhinweisen."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fb6d8c75-5a63-4888-8b88-95c89592e8ad",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Bestimmen Sie die LR-Zerlegung (ohne Pivotisierung) der folgenden Matrix A. Bestimmen Sie dabei explizit L und R und überlegen Sie sich, wie Sie die Informationen von L und R in einer gemeinsamen Matrix der gleichen Dimension aufschreiben könnten.\n",
    "    \n",
    "$$\n",
    "       A= \\begin{pmatrix} 2 & 3 & -5 \\\\ 4 & 8 & -3 \\\\ -6 & 1 & 4 \\end{pmatrix}\n",
    "$$\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c5f6ff4-5f9c-4bb0-acea-cd112847a526",
   "metadata": {},
   "source": [
    "Tatsächlich haben wir bisher ein Problem, was bei diesem Verfahren auftreten kann bewusst vernachlässigt. Betrachte etwa folgende alternative Matrix zu jener aus der Aufgabenstellung:\n",
    "$$\n",
    "       A= \\begin{pmatrix} 0 & 3 & -5 \\\\ 4 & -4 & -3 \\\\ -6 & 6 & 4 \\end{pmatrix}\n",
    "$$\n",
    "Sicherlich können durch Multiplikation von beliebigen Faktoren mit $0$ die anderen Einträge in der ersten Spalte nicht \"eliminiert\" werden. Daher müssen die Zeilen getauscht werden. Hierbei ist die Konvention, auch aus numerischen Gründen zur Verbesserung der Genauigkeit der Berechnungen am Computer, dass vor dem \"Eliminieren\" der andere Einträge einer Spalte, das betragsmäßig größte Element in die oberste aktuell interessante Zeile getauscht wird. <br>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "762d8586-136c-4857-8677-3ea43098ed8b",
   "metadata": {},
   "source": [
    "Hierfür möchten wir noch kurz klären, was wir mit Tauschen, bzw. Permutationsmatrix meinen:\n",
    "\n",
    "<div class=\"alert alert-block alert-info\">\n",
    "    <b> Definition Permutationsmatrix</b> <br>\n",
    "    Für ein $\\sigma \\in S_n$ nennen wir die invertierbare Matrix $A$ mit\n",
    "    $$\n",
    "        (A)_{i,j} = \\begin{cases} 1, & j = \\sigma(i) \\\\ 0, & \\text{sonst}\\end{cases}\n",
    "    $$\n",
    "    die Permutationsmatrix zu $\\sigma$ ($A_\\sigma$). <br> <br>\n",
    "    Hierbei ist $S_n$ die symmetrische Gruppe, also die Gruppe der bijektiven Abbildung zwischen den Zahlen von $1$ bis $n$ auf sich selbst mit der Hintereinanderausführung als Verknüpfung.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d879ad29-8fe8-414b-b30b-bd5ab3072447",
   "metadata": {},
   "source": [
    "So erhalten wir für $A$ eine Zerlegung:\n",
    "$$\n",
    "        L_2 \\cdot P_2 \\cdot L_1 \\cdot P_1 \\cdot A = R\n",
    "$$\n",
    "\n",
    "Wobei $L_i$ untere Dreiecksmatrizen, $P_i$ Permutationsmatrizen und $R$ eine obere Dreiecksmatrix ist.\n",
    "Nun ist es sogar möglich untere Dreiecksmatrizen $L_i'$ zu finden, sodass\n",
    "$$\n",
    "        L_2' \\cdot L_1' \\cdot P_2 \\cdot P_1 \\cdot A = R\n",
    "$$\n",
    "\n",
    "Also\n",
    "$$\n",
    "       P \\cdot A = L \\cdot R\n",
    "$$\n",
    "\n",
    "bzw.\n",
    "$$\n",
    "        A = P \\cdot L \\cdot R\n",
    "$$\n",
    "\n",
    "Für eine Permutationsmatrix $P$ und eine untere Dreiecksmatrix $L.$\n",
    "\n",
    "\n",
    "Dafür betrachte man etwa $P_2 \\cdot L_1.$ Konkret wollen wir $L_1$ und $P_2$ zunächst bestimmen. Mit der Permutation verfahren wir zunächst wie folgt: <br>\n",
    "\n",
    "Startmatrix:\n",
    "$$\n",
    "       A= \\begin{pmatrix} 0 & 3 & -5 \\\\ 4 & -4 & -3 \\\\ -6 & 6 & 4 \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "Tauschen des Betragsmäßig größten Elements der ersten Spalte in die erste Zeile:\n",
    "$$\n",
    "        P_1 \\cdot A = \\begin{pmatrix} 0 & 0 & 1 \\\\  0 & 1 & 0 \\\\ 1 & 0 & 0 \\end{pmatrix} \\cdot \\begin{pmatrix} 0 & 3 & -5 \\\\ 4 & -4 & -3 \\\\ -6 & 6 & 4 \\end{pmatrix} = \\begin{pmatrix}  -6 & 6 & 4 \\\\ 4 & -4 & -3 \\\\0 & 3 & -5  \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "Eliminieren der Einträge der ersten Spalte:\n",
    "$$\n",
    "        L_1 \\cdot (P_1 \\cdot A) = \\begin{pmatrix} 1 & 0 & 0 \\\\ \\frac{2}{3} & 1 & 0 \\\\ 0 & 0 & 1 \\end{pmatrix} \\cdot \\begin{pmatrix}  -6 & 6 & 4 \\\\ 4 & -4 & -3 \\\\0 & 3 & -5  \\end{pmatrix} = \\begin{pmatrix}  -6 & 6 & 4 \\\\ 0 & 0 & -\\frac{1}{3} \\\\0 & 3 & -5  \\end{pmatrix}\n",
    "$$\n",
    "\n",
    "Tauschen des Betragsmäßig größten Elements (unterhalb der ersten Zeile) der zweiten Spalte in die zweite Zeile:\n",
    "$$\n",
    "        P_2 \\cdot (L_1 \\cdot P_1 \\cdot A) = \\begin{pmatrix} 1 & 0 & 0 \\\\ 0 & 0 & 1 \\\\ 0 & 1 & 0 \\end{pmatrix} \\cdot \\begin{pmatrix}  -6 & 6 & 4 \\\\ 0 & 0 & -\\frac{1}{3} \\\\0 & 3 & -5  \\end{pmatrix} = \\begin{pmatrix}  -6 & 6 & 4\\\\0 & 3 & -5 \\\\ 0 & 0 & -\\frac{1}{3} \\end{pmatrix} =:R\n",
    "$$\n",
    "\n",
    "Nun haben wir bereits eine obere Dreiecksmatrix auf der rechten Seite. Allerdings wollen wir noch zeigen, dass tatsächlich eine untere Dreiecksmatrix $L_1 '$ gefunden werden kann, sodass $L_1 ' \\cdot P_2 \\cdot P_1 \\cdot A = R.$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8314a0a0-bcfe-4d9b-9053-cd15f50a4438",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Finden sie eine untere Dreiecksmatrix $L_1 '$ der Form:\n",
    "$$\n",
    "    L_1 ' = \\begin{pmatrix} 1 & 0 & 0 \\\\ * & 1 & 0 \\\\ * & * & 1 \\end{pmatrix}\n",
    "$$\n",
    "sodass $L_1' \\cdot P_2 = P_2 \\cdot L_1$ ($P_1$ und $L_1$ wie oben).\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8550601-2927-4264-8c70-2a3e82a7284c",
   "metadata": {},
   "source": [
    "Nun haben wir also eine Zerlegung der Form $L \\cdot P \\cdot A = R,$ bzw. äquivalenz $A = P \\cdot L \\cdot R.$ Hierbei ist anzumerken, dass allgemein gezeigt werden kann dass jede quadratische Matrix auf diese Form gebracht werden kann, wobei die Permutationsmatrix $P$ im allgemeinen zwingend notwendig ist, damit ggf. Zeilen getauscht werden können, falls wie oben eine $0$ an der falschen Stelle steht.\n",
    "\n",
    "Auch diese Zerlegung nützt uns bei dem eingeführten Beispiel. Nun können wir mehrere Gleichungssysteme der Form $Ax=b,$ $Ax=c,$ $Ax=d$ äquivalent wie folgt schreiben:\n",
    "$$(PLR)x = b \\hspace{0,5cm} (PLR)x = c \\hspace{0,5cm} (PLR)x = d $$ <br>\n",
    "bzw. äquivalent\n",
    "$$(LR)x = Pb \\hspace{0,5cm} (LR)x = Pc \\hspace{0,5cm} (LR)x = Pd $$ <br>\n",
    "Hierbei können wir, da $b,c,d$ und $P$ bekannt sind, $Pb,Pc,Pd$ einfach bestimmen und sind somit wieder beim Fall $LRx = b'$ von oben."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b219b729-d237-41bd-96db-32a27f705965",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Bestimmen sie für\n",
    "$$\n",
    "    A = \\begin{pmatrix} 3 & 1 & 2 \\\\ 1.5 & 2.5 & 4.25 \\\\ 0.6 & 4.2 & 2.9 \\end{pmatrix}\n",
    "$$\n",
    "    \n",
    "die LR-Zerlegung mit Pivotisierung $A = P L R$ von A (insbesondere explizit die Matrizen $P, L$ und $R$).\n",
    "\n",
    "Bestimmen Sie daraufhin den Lösungsvektor $x$ des linearen Gleichungssystems $Ax = b$ für \n",
    "$$\n",
    "    b = \\begin{pmatrix} -3 \\\\ 3 \\\\ 0.4 \\end{pmatrix}\n",
    "$$\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0c44ea8f-8516-4f11-96fb-b9b3e9a2cb09",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "33bcef02-aef5-45e0-914e-347a23ea3c09",
   "metadata": {},
   "source": [
    "### Singulärwertzerlegung"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90252450-789a-4853-bc55-1e4c4bde4b92",
   "metadata": {},
   "source": [
    "Im folgenden möchten wir uns mit einem sehr spannenden und äußerst nützlichem Satz, bzw. Resultat beschäftigen. Folgendem Satz (wie im Dahmen, Reusken):"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa9220f2-16f0-418a-89fe-06ee5a75cacd",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "<b>Satz über die Singulärwertzerlegung</b> \n",
    "\n",
    "Zu jeder Matrix $A \\in \\mathbb{R}^{m \\times n}$ existieren orthogonale Matrizen $U \\in \\mathbb{R}^{m \\times m}, V \\in \\mathbb{R} ^{n \\times n}$ und eine Diagonalmatrix\n",
    "$$\n",
    "    \\Sigma := \\text{diag}(\\sigma_1, \\ldots, \\sigma_p) \\in \\mathbb{R}^{m \\times n}, p = \\min(m,n)\n",
    "$$\n",
    "mit\n",
    "$$\n",
    "    \\sigma_1 \\geq \\sigma_2 \\geq \\ldots \\geq \\sigma_p \\geq 0\n",
    "$$\n",
    "so dass\n",
    "$$\n",
    "    U^T A V = \\Sigma\n",
    "$$\n",
    "bzw. äquivalent\n",
    "$$\n",
    "    A = U \\Sigma V^T\n",
    "$$\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5015b67b-ad84-4668-8ec0-503d403a4070",
   "metadata": {},
   "source": [
    "Dies mag zunächst (mehr oder weniger) verblüffend sein und ähnelt auf den ersten Blick der Diagonalisierbarkeit, bzw. Jordan Normalform aus der linearen Algebra II. Tatsächlich hatten wir dort gesehen, dass Matrizen unter bestimmten Voraussetzungen Diagonalisierbar sind, sodass $T^{-1} A T = D.$ Nun erhalten wir allerdings eine etwas \"schwächere\" Diagonalform, aber dafür für alle Matrizen, indem wir zulassen, dass $U$ und $V$ verschiedene Matrizen sind, wobei wir diese sogar auf orthogonale Matrizen einschränken können. In so fern wid die Singulärwertzerlegung als Verallgemeinerung der Diagonalisierung bezeichnet (da erstere insbesondere auch für nicht-quadratische Matrizen möglich ist). <br>\n",
    "\n",
    "Wir werden sehen, dass die Ideen die wir beim Diagonalisieren verwendet haben, wie Eigenvektorbasen, auch hier in ähnlicher Form Anwendung finden. Etwa die $\\sigma_i$ im obigen Satz (welche Singulärwerte genannt werden) eine vergleichbare Rolle wie Eigenwerte einnehmen."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4396d03-45bf-4b1a-8231-95e77def75d9",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Denkanstoß\n",
    "***\n",
    "Was waren in der linearen Algebra II die Voraussetzungen dafür, dass eine Matrix $A \\in \\mathbb{R}^{m \\times n}$ diagonalisierbar ist und in wie fern, sind die Voraussetzungen des obigen Satzes schwächer?\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a276b87b-f08d-4a6d-92b1-e86015acca1b",
   "metadata": {},
   "source": [
    "Um allerdings diesen Satz genauer zu verstehen, möchte wir nochmal kurz die Definition einer orthogonalen Matrix anführen:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c6804a72-78cb-4d0d-b599-b5eb80cf40ea",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "    <b> Definition orthogonale Matrix</b> <br>\n",
    "    Eine Matrix $A \\in \\mathbb{R}^{n \\times n}$ nennen wir orthogonal, falls $A \\cdot A^T = \\text{Id}_n$\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "011eaf7b-c69b-4121-a483-2f8491d33348",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Wieso gilt für eine orthogonale Matrix mit obiger Definition dann auch $A^T \\cdot A = \\text{Id}_n$?\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8b3d6f3d-9ce1-4c42-8c6f-7e1b16934b50",
   "metadata": {},
   "source": [
    "Weil der Beweis des obigen Satzes relativ technisch, wenn auch sehr elegant, ist, sei es den geneigten Lesenden überlassen, diesen z.B. im Dahmen, Reusken nachzuvollziehen. Stattdessen möchten wir uns zunächst ein besseres Verständnis der Zerlegung anhand einer geometrische Veranschaulichung machen (Bildquelle siehe unten):"
   ]
  },
  {
   "attachments": {
    "624a7bc6-37e7-45c3-b7b8-253445650b63.png": {
     "image/png": "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zz77LOCtt96KYCUYAIiIyImsXbs2cOPGjUEFBQVyVoMBgIiInEBDQ4N09+7dfnq9XvrOO++EsiIMAERE5ARWr14doNPppADwxRdfRBiNRhGrwgBAREQO7scffwxs/+/Kykrlp59+GsCqMAAQEZED02g0kt27d/udedtHH30UzsowABARkQNbtWpVYHv3f7vdu3f77dq1y53VYQAgIiIH9cMPPwSefZvVahWtWLGCgwEZAIiIyBFpNBrJ3r17/bq777vvvgurq6uTskoMAERE5GA+/vjjLt3/7Zqbm2Xvv/9+MKvEAEBERA7m+++/DwQAkej0rD9/f399+3+vXr06jFViACAiIgfS2NjY0f1/zTXXFLff/vjjj2eFhYW1AsCJEyfU33//vQ+rxQBAREQO4pNPPgnU6XTSsWPH1r344ot57bcHBwcb1q1bt689BKxcuZK9AAwARETkKH744YfA4OBg7TfffHNYLpdbz7wvKSlJ1x4CNm3aFJSfn8+rojIAEBGRvaurq5NmZGSoV65ceSQyMtLQ3WPaQ4C/v3/bW2+9xSmBDABERGTvPv3008CHHnoo55JLLmk83+OSkpJ0P//8877du3f78PoADABERGTnQkND9U888URpTx6bnJys+/DDDzN2797twco5Bi7uQETkpK699tq63jw+KSmpDUAbK8ceACIiImIAICIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiIgYAIiIiYgAgIiIiBgAiIiIaXlKWYGBt3brVs6qqSiYSiYT22/R6vTg4ONg4f/78prMff+TIEdXhw4fdlEqlBQCMRqM4JiambfLkyS1nP3b37t3u3d1ORETEADDMysrKZHv27FF/8sknUS0tLS7BwcHaBQsWVF1++eU13T2+vLxctnLlyvBdu3YFeHl5GRYtWlTm5+dXefbjDAaDaO7cuVN1Ot16VpmIiBgAbMxNN91Ue9NNN9Xm5uaqNm7cGLJ06dLS11577eS5Hr9w4cJGlUqV+4c//MEtPT19V3h4uOHM+xctWpRy9913l1566aWN0dHRzQDw448/en/++efBX3755XFWnIiIGABsSERERBsAFBcXu17osS+//HLU559/fvDsxh8Arrnmmqqnn3467uuvv26OiIjQ3XjjjUkFBQWqhx56KJ9VJiKivuIgwEESGRmpA4DS0lLl+R63evVqv7CwsLbp06c3d3f/H/7wh5pffvnlYGNjo2zr1q2BJpNJtHbt2kOLFy+uZ5WJiIg9ADYmJiZGBwAVFRXnDADNzc2SN998c8SWLVv2n+sxN910U+KuXbv8nn322RMAMG/evLrU1NTpF110UdVHH32UxUoT0XBqaWmRPPvssxEeHh7mM2+3Wq0iV1dXyyOPPFLWftuRI0dUX3/9tX/7oGcA0Ol0kltuuaUqPj6+jdVkD4BDGDlypA4AqqurXS0Wi6i7x9x3331xDz30UL5KpbKe63WmTp3aePjw4Z033nhj7dGjR73uvvvuqsOHD++cOnVqI6tMRMPeiIjFQnx8vE4ikeCZZ55J/vvf/55y5MgRT19fX2NKSkrrmY9VqVQWT09P8yeffBLx9NNPJx88eNDL29vb5OfnZ2Il2QPgSAGgTSwWC2azWXzy5EnF2el2x44dHk1NTS5Lly6tO9/rLFu2rBI4NQtAp9NJAcDf39905513VrHKRDTcVCqV9Y477qjKy8tT/PWvfxUplUrzZ599dlwulwtnPzY2Nlb/2GOPlYpEIuTm5qpWrlyZzQqyB8DhyOVywcfHRw8AWVlZnQYCWiwW0eOPPz7yrbfeyu7N69XU1GxmZYnIFq1bt84HAFJSUhq6a/zPdPjwYY9bb721nFVjAHBYwcHBbQCQl5fXaRzA008/HXnVVVdVhIWFGVklInIE27Zt8wGAyZMnX3CAcnZ2tsfkyZNbWTUGAIcVEhKiA4DCwsKOAJCfn6/Yvn27z0MPPVTGChGRo9i3b583AMybN6/hfI8rLS2VqdVqo0QiEVg1BgCHFRERoQOA4uLijgDwpz/9KfHVV1/NFolELBAROYTCwkJ5WVmZm1wut8yZM0dzvseuXbvWZ/r06ZzGzADg2CIjI9t+T7xKAFixYkVgYmJiy4QJE9j1RUQO46effvIBgOTk5EaFQmE932O3bNnie/HFFzMA2ADOAhhEsbGxOgCorKxUNjQ0SFesWBG5ffv2fawMETmS3pz/z8nJcZ80aRIvasYeAMfWvhZAfX29/K677kp85plncpVKpZWVISJHsn//fh8AmDt37nkDQEFBgdzf31/PU6AMAM7QA6CXSqWCIAgiAMJll13WwKoQkSMpKSmRl5aWuslkMuu8efOazvfYtWvX+k6bNo37QQYAxyeVSgU/P782tVpteOedd7jgBRE5nHXr1qkFQUBiYmLj+VY1BYDffvvN95JLLqlj1WykjWIJBtf8+fMr58yZUx8YGMilLonI4Zw8eVIFACkpKec9+tfr9eKioiJVWloaB0EzADiHjz/+mBfsISKHZTKZRAAQFRV13ov5PPfccxHXXXcd1z9hACAiIkcwbty4ZgCoqqqSn+sxO3fudN+yZYvftm3b9rNitoNjAIiIqM+WLl1aGxUV1bJhw4ZAg8HQZXj/zz//rL7//vuTvvzyyyNSqZSr/7EHgIiIHIFMJhO+++67/ZdffvnEGTNmTPzrX/+aFxcX13b06FG3zz77LFgkEmH9+vUHfH19zawWAwARETmQ1NRUXXZ29vb33nsvaNWqVaF6vV4yYsQI7V//+teCyZMnc9EfBgAiInJUSqXS+uCDD5Y/+OCDvMyvneAYACIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiIgYAIiIiYgAgIiIiBgAiIiJiACAiIiIGACIiImIAICIiIgYAGycIwpA8h4iIiAHAhjQ1NUmee+65iN4857XXXgtl5YiIiAHAjqnVaktOTo7qwQcfjOnJ41esWBFYUFCgZOWIiMheSVmCU+65557SadOmzfj96P7kuR63Z88et4cffjjlp59+2sOqERERewDs3KRJk1omTpxY+/rrr4+8//77u+0JaGhokN50001j/f399TNmzGhm1YiIiAHAAdx+++0lgiDgzTff7DYEXHPNNaPz8/M9LrrooipWi4iIGAAcxK233lodEhKibQ8Bjz76aHT7fWvWrAneunVrIABcf/31DABERMQA4CikUqmwePHiUuDUNL933303vv2+zZs3BwFAdHR08/Tp09n9T0REDACO5C9/+UupQqGwtIeAdoIgiABg/vz51awSERExADiYqKgow9y5cyvPdf8NN9xQySoREREDgANatmxZcXe3s/ufiIgYABzYwoULG5OSkhrPvv2iiy7i0T8RETEAOLIbb7yx9OzbrrvuOp7/JyIiBgBH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ERERAwARERExABAREREDABERETEAEBEREQMAERERMQAQERERAwARERExABAREREDABERETEAEBEREQMAERERMQAQERERAwARERExABAREREDABERETEAEBEREQMAERERAwARERExABAREREDABERETEAEBEREQMAERERMQAQERERAwARERExABAREdGwkrIEdLaSkhJ5Xl6e4szbRCIR4uLi2kJDQ419fd3S0lJZfn6+q8Vi6XR7QkJCW3BwsNHe67Z79253uVxulUqlgkgkgp+fn8lkMokaGxulAKDT6SQBAQHGqKgow9nP3bNnj7urq6tFJBLBy8vLIhKJhMbGRqkgCACA1NRUXX/eW35+vqKoqEg+EJ9TLpdbp02b1jJYddTpdOLMzEylh4eHxdPT0wwAZrNZ1NDQ0FHHkJAQQ1hY2Dm3Gb1eLz5w4IDKw8PD0v5dNDQ0SE0mk0gqlSIpKemc9dy5c6e7t7e3OTExsY17A3JkIkEQ1rIMdKaZM2eOz8rK8mppaZHq9fqOkDhixIiW/Pz8bX15zczMTOWkSZOmt7a2urTf5ubmZlKpVKbFixeXvv3223n2XLOioiL51KlTp2q1Wklra6vMYrGIzrzfzc3N5ObmZrryyivL33vvvZwz72toaJAmJCTMrKurU1it1k7Pk0qlwujRo+v379+/pz/vLzExcVpWVpZX+7+DgoLOGyiMRqPYYDBIzvy+2rm6upp1Ot36warlZ5995vfQQw+laDQamV6vl5xdD09PT8Odd95Z8OKLLxac6zW+/fZbn1tvvXV8S0uLy1nhxTJ58uTaLVu2HDjXc5OTk6dGRka2rl279ij3BsQAQE5JEASMHj16SnNzs0tRUZG7TCaz6nS6dRKJROjtay1YsGBMYWGhW15enqdKpTJv2rQpfdKkSS2OWLfc3FxFfHz8vPaGf8uWLenjx49vvdDzWlpaJHfccUfCmjVrIhMTExtfeeWVE3Pnzm2SyWRCf9/TV1995Xv99ddPau9ReO655zL+9re/lVzoeVqtVrx3717377//3n/VqlVRLS0tMgAoLy//dbB7bcxms2ju3Lnjtm/fHggAs2fPrvzmm2+OqtVqc0+33zvuuCPho48+ivb19dW/9NJLx2666aaas+tZVFQk9/PzM6lUKisAzJo1a3x0dHTrBx98kN0e0IxGoygwMNDEvQI5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"
    }
   },
   "cell_type": "markdown",
   "id": "dbc23703-3bf6-43db-96a5-8234f630409e",
   "metadata": {},
   "source": [
    "![Singulärwertzerlegung_Veranschaulichung](attachment:624a7bc6-37e7-45c3-b7b8-253445650b63.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b243a7a-ba35-4b29-813c-3b28ae69eb6f",
   "metadata": {},
   "source": [
    "Im obigen Bild ist zu sehen, wie die lineare Abbildung $M$ in drei Abbildung (oder auch Transformationen) aufgeteilt wurde. Hierbei handelt es sich bei $V*$ und $U$ jeweils um Rotationen, bzw. Drehungen im alltäglichen Sinne. Es wird also der Definitionsbereich - hier vereinfacht durch eine Scheibe - rotiert, bzw. geneigt. <br>\n",
    "$\\Sigma$ ist hierbei die für uns womöglich interessanteste Transformation. Bei dieser handelt es sich, wie wir auch an der Definition im obigen Satz erkennen können, um eine Skalierung. Der Einfachheit halber wurde vom unteren linken Bild zum unteren rechten Bild die Sicht auf die Scheibe gewechselt, sodass man die Streckung besser sieht, tatsächlich findet allerdings keine Rotation statt, wie der Perspektivenwechsel vermuten lassen könnte. Es lässt sich erkennen, dass durch $\\Sigma$ der Kreis in eine Richtung ($\\sigma_1$) stärker gestreckt wird und so eine Ellipsenform bekommt. <br>\n",
    "Die Singulärwertzerlegung besagt also, dass sich jede lineare Abbildung tatsächlich als Verknüpfung von Rotation, Skalierung und Rotation darstellen lässt."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e551eb5b-f24d-4faf-a1ce-5b92c786d18a",
   "metadata": {},
   "source": [
    "Nun wollen wir uns wieder den mathematisch, algebraischen Resultaten der Singulärwertzerlegung widmen: <br>\n",
    "Genauer, wollen wir den Zusammenhang zwischen Singulärwerten und Eigenwerten feststellen. Dafür betrachten wir für eine Matrix $A \\in \\mathbb{R}^{m \\times n}$ die Singulärwertzerlegung $A = U \\Sigma V^T.$ Seien weiter $v_i$ mit $i \\in \\{1, \\ldots, n\\}$ die Spalten der Matrix $V.$ Dann gilt sicherlich $V^T * v_i = e_i,$ wobei $e_i$ der i-te Einheitsvektor ist (Vektor mit Nullen in jeder Zeile außer einer Eins in der i-ten Zeile). <br>\n",
    "\n",
    "Dies kann man sich zunutze machen, denn so erhält man, dass\n",
    "$$\n",
    "    A v_i = U \\Sigma V^T v_i = U \\Sigma e_i = U \\sigma_i e_i = \\sigma_i u_i\n",
    "$$\n",
    "Wenn $u_i$ die i-te Spalte der Matrix $U$ ist (hier $i \\in \\{1, \\ldots, m\\}$). Wir sehen also, dass $A v_i = \\sigma_i u_i.$ Da $i$ hierbei (fast) beliebig gewählt war, erhalten wir (mit gewissen Einschränkungen):\n",
    "$$\n",
    "    A v_i = \\sigma_i u_i\n",
    "$$\n",
    "Für alle (interessanten) $i.$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3054ef2e-26da-4b17-8928-7ee92872e34e",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Denkanstoß\n",
    "***\n",
    "Welche Einschränkung wird in obiger Erklärung weggelassen? Anders gefragt: welche Bedingungen müssen an das $i$ gestellt werden, damit tatsächlich $A v_i = \\sigma_i u_i$ gilt.\n",
    "    \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58aec635-fdfd-49e5-9a60-d85f3d9dec97",
   "metadata": {},
   "source": [
    "Wir wollen uns nun einigen weiteren Eigenschaften widmen, die sich mit Hilfe obiger Eigenschaft zeigen lassen:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "413259d0-6dad-4b14-87f8-d6b1a372351d",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-info\">\n",
    "<b>Eigenschaften der Singulärwertzerlegung</b> \n",
    "\n",
    "Sei $U^T A V = \\Sigma$ eine Singulärwertzerlegung von $A \\in \\mathbb{R}^{m \\times n}$ mit Singulärwerten $\\sigma_1 \\geq \\ldots \\geq \\sigma_r > \\sigma_{r+1} = \\ldots = \\sigma_p = 0,$ $p = \\min\\{m,n\\}.$ Sei $v_i$ die i-te Spalte von $V,$ bzw. $u_i$ die i-te Spalte von $U.$ Dann gilt für $i \\in \\{1, \\ldots, p\\}$: <br>\n",
    "\n",
    "1. $Av_i = \\sigma_i u_i, \\hspace{0,2cm} A^T u_i = \\sigma_i v_i$ \n",
    "2. $\\text{Rang}(A) = r$\n",
    "3. $\\text{Bild}(A) = \\text{Span}\\{u_1, \\ldots, u_r\\}, \\hspace{0,2cm} \\text{Kern}(A) = \\text{Span}\\{v_{r+1}, \\ldots, v_n\\}$\n",
    "4. $\\text{Die strikt positiven Singulärwerte von } A \\text{ sind gerade die Wurzeln der strikt positiven Eigenwerte von } A^T A$\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4d19aee5-3fd6-491f-9e3e-2e7f2cafe332",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Zeigen Sie die 2., 3. und 4. Eigenschaft des obigen Lemmas über die Singulärwertzerlegung.\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e87c3608-74db-4704-9900-96f589b3ac45",
   "metadata": {},
   "source": [
    "Somit sehen wir, dass sich anhand der Singulärwertzerlegung schnell ablesen lässt, was der Rang einer Matrix ist, sowie diese auch zum bestimmen der Eigenwerte von $A^T A.$ Wie wir in der linearen Algebra gesehen haben, handelt es sich bei den nicht strikt positiven Eigenwerten von $A^T A,$ um den Eigenwert $0,$ womit man auf diese Art tatsächlich alle Eigenwerte von $A^T A$ bestimmen kann."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fff4134-0fa9-4f27-a9ef-9b915efd0bd4",
   "metadata": {},
   "source": [
    "Eine letztes sehr nützliches Resultat, was wir betrachten möchten, wird in der folgenden letzten Aufgabe formuliert:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91d49d4d-6603-43e0-a94e-cd1aafa876cf",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-success\">\n",
    "    \n",
    "### Aufgabe\n",
    "***\n",
    "Finden Sie mit Hilfe der Singulärwertzerlegung einer Matrix $A \\in \\mathbb{R}^{m \\times n}$ eine Matrix $A^\\dagger,$ sodass $A \\cdot A^\\dagger$  ähnlich zu $D$ ist, wobei $D = \\text{diag}(1, \\ldots, 1, 0, \\ldots) \\in \\mathbb{R}^{m \\times m},$ so dass $\\text{Rang}(D) = \\text{Rang}(A)$.\n",
    "\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e41a7bf-bffa-4947-8097-3d016359eaba",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-warning\">\n",
    "<b>Denkanstoß:</b>\n",
    "Offenbar gilt folgende Aussage: Falls $D = \\text{Id}_m,$ so ist $A$ invertierbar. Wieso gilt die Umkehrung der Aussage <i>nicht</i>?\n",
    "   \n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c7b1f00-4ae1-4c05-a13e-fe26155202df",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d68000e8-be77-4a2c-ae19-302c5c3936fe",
   "metadata": {},
   "source": [
    "Leider stellt sich heraus, dass das genaue bestimmen der Singulärwertzerlegung im Allgemeinen zu Aufwendig, bzw. nicht möglich, ist. Daher wird diese etwa mit Hilfe iterativer Verfahren ungefähr bestimmt. Hierbei kann sich mit folgendem Trick viel Aufwand gespart werden ohne zu große Fehler in Kauf zu nehmen:"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bc31fc10-2561-4e01-b880-a98251e5a93f",
   "metadata": {},
   "source": [
    "Wir wollen nun nicht die ganze Singulärwertzerlegung $A = U \\Sigma V^T$ einer Matrix $A \\in \\mathbb{R}^{m \\times n}$ betrachten, sondern stattdessen nur die ersten $k$ Singulärwerte betrachten. Dies notieren wir mit $U_k \\Sigma_k V_k ^T.$ Hierbei ist dann $U_k$ die Matrix $U,$ nur, dass die letzten $m-k$ Spalten $0$ Spalten sind (also Spalten mit nur Nullen). Analog für die letzten $n-k$ Spalten bei $V_k$ (und $m-k$ Spalten bei $\\Sigma_k$). Die so resultierenden Matrizen $U_k, \\Sigma_k, V_k$ benötigen wesentlich weniger Speicherplatz. Tatsächlich lässt sich zeigen, dass  eine solche \"Approximation\" der Matrix $A$ mit Hilfe der Singulärwertzerlegung eine gute Approximation der Matrix $A$ ist, in anbetracht des Rangverlusts, der mit der Approximation einhergeht. Solche Approximationen nennt man auch Niedrigrangapproximation und dies genau das Verfahren, was zur Bildkomprimierung verwendet werden kann und auf der oben verlinkten Website betrachtet werden kann."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "310990fd-3776-45a1-bbca-9c7c94a3c40b",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-block alert-danger\">\n",
    "    \n",
    "### Rückblick-Aufgabe\n",
    "***\n",
    "Als Motivation dieses Notebooks haben wir gesehen, wie man mit der Singulärwertzerlegung Bilder komprimieren kann. Weiterhin haben wir noch die LR-Zerlegung kennengelernt, mit der man lineare Gleichungssysteme lösen kann. Im letzten Abschnitt haben wir uns dann nochmal der Bildkompression vom Anfang und der Niedrigrangapproximation zugewandt. \n",
    "    \n",
    "Wieso trägt dieses Verfahren wohl den Namen Niedrigrangapproximation? Anders gefragt: Was passiert mit dem Rang der resuliterenden Matrix $U_k \\Sigma_k V_k ^T$ in Abhängigkeit von $k$?\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b80287c-44b3-457c-a93a-ba02ffe2bdf4",
   "metadata": {},
   "source": [
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f2438e1-fbf2-4614-9791-d905b204ed71",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "### Literaturhinweise\n",
    "- Wolfgang Dahmen, Arnold Reusken: Numerik für Ingenieure und Naturwissenschaftler\n",
    "- Sorting algorithm. (2023). In <i>Wikipedia, The free encyclopedia.</i> https://en.wikipedia.org\n",
    "- Georg-Johann, CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons https://commons.wikimedia.org/wiki/File:Singular-Value-Decomposition.svg"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Julia 1.4.2",
   "language": "julia",
   "name": "julia-1.4"
  },
  "language_info": {
   "file_extension": ".jl",
   "mimetype": "application/julia",
   "name": "julia",
   "version": "1.4.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
