diff --git a/README.md b/README.md index 1b4ed78..a8291a8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Repository für Lineare Algebra / Übungsgruppe # +# Repository für Lineare Algebra / Übungsgruppe # In diesem Repository werden Ressourcen hochgeladen, zum Beispiel Skripte oder Dokumente für mathematische Argumente. @@ -9,10 +9,10 @@ Gründe hierfür: Dieses Repo enthält -1. Code/Codeschnippsel: siehe [/code](./code). -2. Dokument inklusive meiner Lösungen zu den Übungsblättern (die nach dem Abgabetermin hochgeladen werden): siehe [/docs](./docs) und [/docs/loesungen.pdf](./docs/loesungen.pdf). -3. Notizen/Kritzelei für mathematische Argumente, Berechnungen, usw.: siehe [/notes](./notes). -4. Protokolle von den Übungsgruppen: siehe [/protocol](./protocol). +1. Code/Codeschnippsel: siehe [code](./code). +2. Dokument inklusive meiner Lösungen zu den Übungsblättern (die nach dem Abgabetermin hochgeladen werden): siehe [docs](./docs) und [docs/loesungen.pdf](./docs/loesungen.pdf). +3. Notizen/Kritzelei für mathematische Argumente, Berechnungen, usw.: siehe [notes](./notes). +4. Protokolle von den Übungsgruppen: siehe [protocol](./protocol). Im Rest dieses Dokuments werden _Einzelheiten zum Kurs_, das Thema _mathematisches Denken_, und Software-Tipps diskutiert. @@ -50,52 +50,42 @@ Klausurzulassung, wenn ### Klausur ### -Allgemeine Infos: +Siehe bitte zuerst das **Hinweise**-Blatt auf dem Kurs-Moodle im Beitrag über die Klausurvorbereitung. +Dies enthält Hinweise über relevante Inhalte sowie nützliche Aufgaben zur Wiederholung. -- am **12.02.2021** zw. **12:00–14:00**. -- Geplante Schreibdauer: **90 min** (30min Pufferzeit eingebaut, damit man Dateien herunter und hochladen kann). -- 6 Aufgaben - -Im folgenden Abschnitt werden empfohlenes Material zur Vorbereitung stichpunktartig aufgelist. - -**ANMERKUNG 1:** Siehe bitte zuerst das **Hinweise** Blatt auf dem Kurs-Moodle im Beitrag von Professor Sinn über die Klausurvorbereitung. -Das enthält Hinweise über relevanten Inhalt sowie nützliche Aufgaben zur Wiederholung. - -**ANMERKUNG 2:** Dies ist als Hinweis zu verstehen. +**ANMERKUNG:** Folgende Punkte sind _nur_ als weitere Hinweise zu verstehen. Generell für eine Klausur muss man den ganzen in der VL behandelten Stoff gemeistert haben. -Diese sind als minimalistische Listen von Aspekten gedacht, +Folgendes listet nur minimalistisch Aspekte auf, die auf jeden Fall für die Klausur wichtig sind. Sie sind nicht unbedingt vollständig. -#### Themen / VL-Materialien #### - - Kapitel 1: Müsst ihr allgemein kennen. - - Konkrete Dinge wie Strecken, Ebenen, usw. kommen eher in Geometrie und hier nicht vor. - - Eliminationsverfahren und Lösbarkeit von LGS: - - Lösung des homogenen Systems Ax = 0 - - Lösung des inhomogenen Systems Ax = b - - Die Äquivalenzen in §6.4 fassen einiges hier viel kürzer zusammen. + - Konkrete Dinge wie Strecken, Ebenen, usw. kommen eher in Geometrie und hier nicht vor. + - Eliminationsverfahren und Lösbarkeit von LGS: + - Lösung des homogenen Systems Ax = 0 + - Lösung des inhomogenen Systems Ax = b + - Die Äquivalenzen in §6.4 fassen einiges hier viel kürzer zusammen. - Kapitel 2: Müsst ihr generell können. Insbesondere Umgang mit - - Axiomen von (partiellen/totalen) Ordnungsrelationen - - Axiomen von Äquivalenzrelationen - - Für Funktionen, ƒ : X ⟶ Y - - der Graph von ƒ - - Umkehrabbild ƒ¯¹ (wenn ƒ bijektiv ist). - - ƒ¯¹(B) für B ⊆ Y, d. h. Urbildmengen von B unter ƒ + - Axiomen von (partiellen/totalen) Ordnungsrelationen + - Axiomen von Äquivalenzrelationen + - Für Funktionen, ƒ : X ⟶ Y + - der Graph von ƒ + - Umkehrabbild ƒ¯¹ (wenn ƒ bijektiv ist). + - ƒ¯¹(B) für B ⊆ Y, d. h. Urbildmengen von B unter ƒ (!! und dass dies NICHT dasselbe wie das Inverse ƒ¯¹ : Y ⟶ X ist !!) - - ƒ(A) für A ⊆ X, d. h. Bild von A unter ƒ - - Konzepte von Injektivität/Surjektivität/Bijektivität + - ƒ(A) für A ⊆ X, d. h. Bild von A unter ƒ + - Konzepte von Injektivität/Surjektivität/Bijektivität (!! und dass sich diese NICHT gegenseitig ausschließen!!) - - Komposition von Funktionen + - Komposition von Funktionen - Kapitel 3: Müsst ihr generell können. Insbesondere Umgang mit - - ℤ/_n_ für konkrete Werte von _n_, - - Berechnung von Addition, Multiplikation, und Inversen modulo _n_ (for konkrete Werte). + - ℤ/_n_ für konkrete Werte von _n_, + - Berechnung von Addition, Multiplikation, und Inversen modulo _n_ (for konkrete Werte). - Kapitel 4: - - Grundkonzepte wie Inverses in Gruppentheorie. - - Grundkonzepte von Körpern und Ringen. - - Umgang mit LGS über Vektorräume über einem Körper K (konkreter Umgang mit 𝔽ₚ für _p_ prim): - - genau wie bei ℝ-wertigen Matrizen nur mit Addition/Multiplikation/Inversen in 𝔽ₚ (d. h. ℤ/_p_). - - man muss insbesondere Division durch 0 mod p vermeiden und es hilft, + - Grundkonzepte wie Inverses in Gruppentheorie. + - Grundkonzepte von Körpern und Ringen. + - Umgang mit LGS über Vektorräume über einem Körper K (konkreter Umgang mit 𝔽ₚ für _p_ prim): + - genau wie bei ℝ-wertigen Matrizen nur mit Addition/Multiplikation/Inversen in 𝔽ₚ (d. h. ℤ/_p_). + - man muss insbesondere Division durch 0 mod p vermeiden und es hilft, die Werte immer als Werte aus {0, 1, 2, ..., p–1} darzustellen. Z. B. in 𝔽₅ sollte man eine Matrix @@ -109,49 +99,42 @@ Sie sind nicht unbedingt vollständig. damit man vor allem den Rang und die Zeilenstufen richtig erkennt. - Kapitel 5: Hier müsst ihr generell alles meistern. - - dass man aus Vektorräumen andere Vektorräume konstruieren kann (z. B. durch Produkte) - - Unterräume - - Lin(A) für A ⊆ V, V ein Vektorraum - - Basis: - - lineare Unabhängigkeit, Erzeugendensysteme, Basis. - - Überprüfung von linearer Unabhängigkeit - - Berechnung von Basen: - - anhand einer Menge von Vektorren: - - Reduktion einer Menge von Vektoren auf eine (maximale) linear unabhängige Teilmenge - - Erweiterung von Vektoren auf eine Basis - - Basis des Spaltenraums, Bild(A), für eine Matrix, A: - - A ⟶ Zeilenstufenform ⟶ merke Spaltenpositionen j1, j2, ... wo Stufen sind - - Die Spalten j1, j2, ... von der Originalmatrix, A, bilden eine Basis von Bild(A) - - Konkrete Fälle: - - „kanonische Basis“ von ℝⁿ für beliebige konkrete Werte von _n_. - - „exotische“ Beispiele von Vektorräume wie der Raum der Polynomen, ℝ\[x\], und deren „kanonische“ Basen. - - Dimension, Dimensionsformel. - - Rang: - - Zeilenrang := #Stufen von A in Zeilenstufenform - - Spaltenrang := dim(Bild(A)) - - **Lemma:** Zeilenrang = Spaltenrang - - **Definition:** Rang := Zeilenrang = Spaltenrang; + - dass man aus Vektorräumen andere Vektorräume konstruieren kann (z. B. durch Produkte) + - Unterräume + - Lin(A) für A ⊆ V, V ein Vektorraum + - Basis: + - lineare Unabhängigkeit, Erzeugendensysteme, Basis. + - Überprüfung von linearer Unabhängigkeit + - Berechnung von Basen: + - anhand einer Menge von Vektorren: + - Reduktion einer Menge von Vektoren auf eine (maximale) linear unabhängige Teilmenge + - Erweiterung von Vektoren auf eine Basis + - Basis des Spaltenraums, Bild(A), für eine Matrix, A: + - A ⟶ Zeilenstufenform ⟶ merke Spaltenpositionen j1, j2, ... wo Stufen sind + - Die Spalten j1, j2, ... von der Originalmatrix, A, bilden eine Basis von Bild(A) + - Konkrete Fälle: + - „kanonische Basis“ von ℝⁿ für beliebige konkrete Werte von _n_. + - „exotische“ Beispiele von Vektorräume wie der Raum der Polynomen, ℝ\[x\], und deren „kanonische“ Basen. + - Dimension, Dimensionsformel. + - Rang: + - Zeilenrang := #Stufen von A in Zeilenstufenform + - Spaltenrang := dim(Bild(A)) + - **Lemma:** Zeilenrang = Spaltenrang + - **Definition:** Rang := Zeilenrang = Spaltenrang; - Kapitel 6 | 6.1–6.4: - - lin. Abb - - Kern, Bild - - Injektivität, Surjektivität, Bijektivität („Isomorphismus“) - - Zusammenhang zw. Dimension von U, V und Eigenschaften von einer linearen Abbildung φ : U ⟶ V. - - !! Lineare Ausdehnung !! - - insbes. 6.1.13, nur bekommt ihr eine Situation, + - lin. Abb + - Kern, Bild + - Injektivität, Surjektivität, Bijektivität („Isomorphismus“) + - Zusammenhang zw. Dimension von U, V und Eigenschaften von einer linearen Abbildung φ : U ⟶ V. + - !! Lineare Ausdehnung !! + - insbes. 6.1.13, nur bekommt ihr eine Situation, wo ihr eine Definition auf einer Basis + einem zusätzlichen linear abhängigen Element bekommt - - Das Konzept von Darstellungsmatrizen (aber nicht die Berechnung von Basiswechseln) - - Invertierbare Matrizen (musst algebraisch/symbolisch damit umgehen können, aber ihr müsst keine Inversen explizit ausrechnen). Ihr müsst aber Konzepte anwenden wie (AB)¯¹ = B¯¹A¯¹, + - Das Konzept von Darstellungsmatrizen (aber nicht die Berechnung von Basiswechseln) + - Invertierbare Matrizen (musst algebraisch/symbolisch damit umgehen können, aber ihr müsst keine Inversen explizit ausrechnen). Ihr müsst aber Konzepte anwenden wie (AB)¯¹ = B¯¹A¯¹, und dass der Raum der invertierbaren Matrizen unter Multiplikation stabil sind. - Kapitel 6 | 6.5+: nicht behandelt. - Kapitel 7: nicht behandelt -#### Was _anscheindend_ nicht in der Klausur vorkommt #### - -- _Räume_ von linearen Operatoren, also die Vektorräume der Form L(V, W). (Aber ihr müsst natürlich mit linearen Operatoren umgehen können!) -- Basiswechseln -- Koordinatenwecheln -- Inverse von Matrizen explizit berechnen. - ## §2. Mathematisches Denken ## Mathematik ist eine präzise aber abstrakte Kunst. @@ -216,23 +199,104 @@ Gründlich die Definitionen und Resultate durchgehen. Unter Mathematikern, Wissenschaftlern, (womöglich auch Ingenieuren), und Informatikern sind folgende Optionen sehr beliebt: +- Markdown (+ rendering software od. Extensions auf Editoren wie VSCode) +- sehr einfachen "plain" Texteditoren - LaTeX -- Markdown, sowie die verschiedenen Kombinationen mit anderer Software: - - Pandocs (kombiniert so ziemlich alles!) - - Rmd (R Markdown) - - pynb/JyPyter (Python notebooks) - - online Editors (siehe z. B. [stackedit](https://stackedit.io/editor)). +- Zeichenapps wie GoodNotes +- die guten alten Stift + Zettel/Heft ... Vorteil: man muss nicht aufladen ; ) -Am Rechner schreibe ich alles meistens in Markdown oder LaTeX-Dateien. -Wenn ich wirklich schnell schreiben will, und mir die Formattierung egal ist, -benutze ich sogar Notepad / TextEditor / rtf. -Freunde benutzen Apps, in denen man zeichnen kann. Das ist auch sehr nützlich. +Es lohnt sich, einen guten Allzweck-Editor wie [VSCode](https://code.visualstudio.com/download) +zu installieren. +Mit so etwas kann man etliche gratis Extensions finden, +die bspw. Syntax-Highlighting, Rendering, Code-Schnippsel für LaTeX, md, usw. bieten. ## Software zwecks Berechnungen und Anschauungen ## Es gibt einige Hilfsmittel, derer man sich bedienen kann, um entweder Konzepte zu visualisieren oder zu berechnen. **Diese Möglichkeiten sind keineswegs verpflichtend!** +### Python ### + +[Hier](https://www.python.org/downloads) kann man den Compiler herunterladen. +Man kann auch ohne Installation python Skripte ausführen: +einfach nach »python compiler online« googeln (oder z. B. -> `<>Start coding` —> Sprache auswählen). + +**Vorteile:** Da man kein Memory-Allocation o. Ä., oder Typisierung pflegen muss, kann man mit grundlegenden Programmierkenntnissen sehr leicht in Python einsteigen. +Es gibt eine immense Community für Python und man kann sehr schnell online durch Foren u. Ä. Hilfe holen. +Die Python-Dokumentation ist sehr ausführlich und alles ist gut versioniert. +Möglicherweise werden einige von euch etwas im Bereich Data Science machen. +Dafür ist python (aktuell) mit das gängigste Tool. +Generell (nicht nur wegen DS) lohnt es sich, Python (samt Modulen wie **numpy**/**numpy.linalg**, **pandas**, usw.) zu können. + +**Nachteile:** Python ist nicht sonderlich schnell, aber bzgl. Geschwindigkeit definitiv besser als Geogebra. +Für Programmierer gibts an Python viel Grund zu meckern (z. B. keine echten privat/public/protected access modifiers, unsauberer Umgang mit Typing.). + +Für Visualisierungen von Vektoren wäre Python nicht die beste Option. +Für unseren Kurs würde ich dies nur für die Ausführung von Algorithmen Empfehlen. + +**Anmerkung:** Um mit komplexen Zahlen in Python umzugehen, muss man `j` statt `i` für die imaginäre Zahl verwenden. +Diese muss stets mit einem Koeffizienten versehen werden, +d. h. + +```py +x = 5 + 8j; +x = 5 + 8*1j; +x = 5 + 1j; +x = 5 - 1j; +x = 5 + 0j; +x = 5; +``` + +usw. sind erlaubt, aber + +```py +x = 5 + 8*j; +x = 5 + j; +x = 5 - j; +``` + +usw. nicht, weil hier logischerweise `j` als Variable interpretiert wird. + +So kann man mit Matrizen umgehen (am besten hierfür ein Skript anlegen und dieses über eine Terminal ausführen): + +```py +import math +import numpy as np +import numpy.linalg as la + +A = np.asarray([ + [1, 2, 3, 7], + [0.5, 0, 0, 2 + 1j] + [0, 0, 0, math.sqrt(2)] +]) + +x = np.asarray([10, 100, 0, -1]) + +print(A) +print(A.T) +print(A @ x) # Matrixmultiplikation +print(la.det(A)) # Determinante + +B = A @ A.T # eine quadratische (sogar positive!) Matrix +values, vectors = la.eig(B) + +print(values) # da B "positiv" ist, sind diese Werte alle reellwertig und ≥ 0 +print(vector) # eine Matrix, deren Spalten Eigenvektoren von B sind (entsprechend den Eigenwerten) + +Z = np.zeros((4, 2)) # eine 4 x 2 Matrix + +print(Z) +``` + +Es gibt _etliches_, was man mit den `numpy` (und `scipy`) Bibliothek und Vektoren/Matrizen/Tensoren machen kann. +Lass dir niemanden sagen, dass man "besser mit MatLab" (oder `R`) mit Matrizen umgehen kann. +Da _gerade_ diese Sprache für KI optimiert wird, kann man sicher davon ausgehen, +dass die zugrunde liegenden Bibliotheken mit `C` o. Ä. geschrieben und schnell sind. + +Natürlich kann und m. E. sollte man kompilierende Sprachen lernen wie `C++` od. `golang`/`Rustlang`/`vlang`, usw. +Aber für Prototypen von komplexen Problemen, mit vielen Möglichkeiten für sauberes Programmieren +bleibt Python unschlagbar. + ### Geogebra ### Diese App ist ein lustiges aber sehr nützliches Programm, um schnell im 2-d Raum ($\mathbb{R}^{2}$) oder 3-d Raum ($\mathbb{R}^{3}$) geometrische Objekte und Konzepte zu realisieren. @@ -254,7 +318,7 @@ Hier ein paar Beispiele in der Sprache: Eingabe von Matrizen und Vektoren: -``` +```bash octave:1> A = [1 4; -7.1 3 + i; 0 8]; octave:2> disp(A); 1 4 @@ -273,7 +337,7 @@ octave:6> disp(x); Zeilenoperationen: -``` +```bash octave:5> disp(A(2,:)); 4 3 + 1i 8 octave:6> A(2,:) = A(2,:) - 4*A(1,:); @@ -284,7 +348,7 @@ octave:7> disp(A); Matrixmultiplikation: -``` +```bash octave:1> A = [1 4 8; 3 6 -9]; x = [1 1 1].'; octave:2> b = A*x; octave:3> disp(b); @@ -300,6 +364,13 @@ octave:6> disp(A*x_); % wird bis auf machine-Fehler gleich b sein 1.5543e-15 ``` +**Nachteile:** +Octave/MatLab fördern einen äußerst schlechten Programmierstil. +Gut für kurze Berechnungen aber bis heute gibt es Unternehmen, +die diese Sprache/n für größere Projekte benutzen, was einfach fatal ist. +Octave/MatLab bieten keinen sauberen Umgang mit Typen od. Modulen an. +MatLab ist außerdem sehr teuer und **nicht open source**. + ### R ### Für **R** braucht man @@ -321,52 +392,6 @@ Für die Logiker und Informatiker unter euch, wird es bspw. nerven, dass in **R* Für Programmierer, wird stören, dass **R** keine saubere Implementierung von Klassen, (lokalen) Imports, usw. anbietet (diese Dinge existieren, aber sind sehr umständlich). -### Python ### - -_„Pfft! Python ist nichts anderes als glorifiziertes Bash!“_ — ein ehem. Arbeitskollege - -Von diesem Zitat abgesehen ich persönlich liebe diese Sprache. -Man kann den Python-Compiler [hier](https://www.python.org/downloads/) herunterladen. -(ACHTUNG! Version 3.9.0 scheint mit C-libraries Probleme zu haben. Ich persönlich hatte Schwierigkeiten gewisse mathe-Module dafür zu installieren. Ich würde deshalb erstmals v3.8.xx empfehlen.) - -Man kann auch ohne Installation python Skripte ausführen: einfach nach »python compiler online« googeln (oder z. B. -> `<>Start coding` —> Sprache auswählen). - -**Vorteile:** Da man kein Memory-Allocation o. Ä., oder Typisierung pflegen muss, kann man mit grundlegenden Programmierkenntnissen sehr leicht in Python einsteigen. -Es gibt eine immense Community für Python und man kann sehr schnell online durch Foren u. Ä. Hilfe holen. -Die Python-Dokumentation ist sehr ausführlich und alles ist gut versioniert. -Möglicherweise werden einige von euch etwas im Bereich Data Science machen. -Dafür ist python (aktuell) mit das gängigste Tool. -Generell (nicht nur wegen DS) lohnt es sich, Python (samt Modulen wie **numpy**/**numpy.linalg**, **pandas**, usw.) zu können. - -**Nachteile:** Python ist nicht sonderlich schnell, aber bzgl. Geschwindigkeit definitiv besser als Geogebra. -Für Programmierer gibts an Python viel Grund zu meckern (z. B. keine echten privat/public/protected access modifiers, unsauberer Umgang mit Typing.). - -Für Visualisierungen von Vektoren wäre Python nicht die beste Option. -Für unseren Kurs würde ich dies nur für die Ausführung von Algorithmen Empfehlen. - -**Anmerkung:** Um mit komplexen Zahlen in Python umzugehen, muss man `j` statt `i` für die imaginäre Zahl verwenden. -Diese muss stets mit einem Koeffizienten versehen werden, -d. h. - -``` python -x = 5 + 8j; -x = 5 + 8*1j; -x = 5 + 1j; -x = 5 - 1j; -x = 5 + 0j; -x = 5; -``` - -usw. sind erlaubt, aber - -``` python -x = 5 + 8*j; -x = 5 + j; -x = 5 - j; -``` - -usw. nicht, weil hier logischerweise `j` als Variable interpretiert wird. - ### Julia ### Die **Julia**-Programmiersprache soll auch sehr gut sein und kann auf gefunden werden.