main > main: README aktualisiert

This commit is contained in:
RD 2023-10-18 22:09:49 +02:00
parent baef622fc5
commit 75931f67e2
No known key found for this signature in database
GPG Key ID: 2BE2CE55F397EF62
1 changed files with 160 additions and 135 deletions

295
README.md
View File

@ -1,4 +1,4 @@
# Repository für Lineare Algebra / Übungsgruppe # # Repository für Lineare Algebra / Übungsgruppe #
In diesem Repository werden Ressourcen hochgeladen, In diesem Repository werden Ressourcen hochgeladen,
zum Beispiel Skripte oder Dokumente für mathematische Argumente. zum Beispiel Skripte oder Dokumente für mathematische Argumente.
@ -9,10 +9,10 @@ Gründe hierfür:
Dieses Repo enthält Dieses Repo enthält
1. Code/Codeschnippsel: siehe [/code](./code). 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). 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). 3. Notizen/Kritzelei für mathematische Argumente, Berechnungen, usw.: siehe [notes](./notes).
4. Protokolle von den Übungsgruppen: siehe [/protocol](./protocol). 4. Protokolle von den Übungsgruppen: siehe [protocol](./protocol).
Im Rest dieses Dokuments werden _Einzelheiten zum Kurs_, das Thema _mathematisches Denken_, und Software-Tipps diskutiert. Im Rest dieses Dokuments werden _Einzelheiten zum Kurs_, das Thema _mathematisches Denken_, und Software-Tipps diskutiert.
@ -50,52 +50,42 @@ Klausurzulassung, wenn
### Klausur ### ### 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:0014:00**. **ANMERKUNG:** Folgende Punkte sind _nur_ als weitere Hinweise zu verstehen.
- 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.
Generell für eine Klausur muss man den ganzen in der VL behandelten Stoff gemeistert haben. 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. die auf jeden Fall für die Klausur wichtig sind.
Sie sind nicht unbedingt vollständig. Sie sind nicht unbedingt vollständig.
#### Themen / VL-Materialien ####
- Kapitel 1: Müsst ihr allgemein kennen. - Kapitel 1: Müsst ihr allgemein kennen.
- Konkrete Dinge wie Strecken, Ebenen, usw. kommen eher in Geometrie und hier nicht vor. - Konkrete Dinge wie Strecken, Ebenen, usw. kommen eher in Geometrie und hier nicht vor.
- Eliminationsverfahren und Lösbarkeit von LGS: - Eliminationsverfahren und Lösbarkeit von LGS:
- Lösung des homogenen Systems Ax = 0 - Lösung des homogenen Systems Ax = 0
- Lösung des inhomogenen Systems Ax = b - Lösung des inhomogenen Systems Ax = b
- Die Äquivalenzen in §6.4 fassen einiges hier viel kürzer zusammen. - Die Äquivalenzen in §6.4 fassen einiges hier viel kürzer zusammen.
- Kapitel 2: Müsst ihr generell können. Insbesondere Umgang mit - Kapitel 2: Müsst ihr generell können. Insbesondere Umgang mit
- Axiomen von (partiellen/totalen) Ordnungsrelationen - Axiomen von (partiellen/totalen) Ordnungsrelationen
- Axiomen von Äquivalenzrelationen - Axiomen von Äquivalenzrelationen
- Für Funktionen, ƒ : X ⟶ Y - Für Funktionen, ƒ : X ⟶ Y
- der Graph von ƒ - der Graph von ƒ
- Umkehrabbild ƒ¯¹ (wenn ƒ bijektiv ist). - Umkehrabbild ƒ¯¹ (wenn ƒ bijektiv ist).
- ƒ¯¹(B) für B ⊆ Y, d. h. Urbildmengen von B unter ƒ - ƒ¯¹(B) für B ⊆ Y, d. h. Urbildmengen von B unter ƒ
(!! und dass dies NICHT dasselbe wie das Inverse ƒ¯¹ : Y ⟶ X ist !!) (!! und dass dies NICHT dasselbe wie das Inverse ƒ¯¹ : Y ⟶ X ist !!)
- ƒ(A) für A ⊆ X, d. h. Bild von A unter ƒ - ƒ(A) für A ⊆ X, d. h. Bild von A unter ƒ
- Konzepte von Injektivität/Surjektivität/Bijektivität - Konzepte von Injektivität/Surjektivität/Bijektivität
(!! und dass sich diese NICHT gegenseitig ausschließen!!) (!! 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 - Kapitel 3: Müsst ihr generell können. Insbesondere Umgang mit
- /_n_ für konkrete Werte von _n_, - /_n_ für konkrete Werte von _n_,
- Berechnung von Addition, Multiplikation, und Inversen modulo _n_ (for konkrete Werte). - Berechnung von Addition, Multiplikation, und Inversen modulo _n_ (for konkrete Werte).
- Kapitel 4: - Kapitel 4:
- Grundkonzepte wie Inverses in Gruppentheorie. - Grundkonzepte wie Inverses in Gruppentheorie.
- Grundkonzepte von Körpern und Ringen. - Grundkonzepte von Körpern und Ringen.
- Umgang mit LGS über Vektorräume über einem Körper K (konkreter Umgang mit 𝔽ₚ für _p_ prim): - 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_). - 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, - man muss insbesondere Division durch 0 mod p vermeiden und es hilft,
die Werte immer als Werte aus {0, 1, 2, ..., p1} darzustellen. die Werte immer als Werte aus {0, 1, 2, ..., p1} darzustellen.
Z. B. in 𝔽₅ sollte man eine Matrix 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. damit man vor allem den Rang und die Zeilenstufen richtig erkennt.
- Kapitel 5: Hier müsst ihr generell alles meistern. - Kapitel 5: Hier müsst ihr generell alles meistern.
- dass man aus Vektorräumen andere Vektorräume konstruieren kann (z. B. durch Produkte) - dass man aus Vektorräumen andere Vektorräume konstruieren kann (z. B. durch Produkte)
- Unterräume - Unterräume
- Lin(A) für A ⊆ V, V ein Vektorraum - Lin(A) für A ⊆ V, V ein Vektorraum
- Basis: - Basis:
- lineare Unabhängigkeit, Erzeugendensysteme, Basis. - lineare Unabhängigkeit, Erzeugendensysteme, Basis.
- Überprüfung von linearer Unabhängigkeit - Überprüfung von linearer Unabhängigkeit
- Berechnung von Basen: - Berechnung von Basen:
- anhand einer Menge von Vektorren: - anhand einer Menge von Vektorren:
- Reduktion einer Menge von Vektoren auf eine (maximale) linear unabhängige Teilmenge - Reduktion einer Menge von Vektoren auf eine (maximale) linear unabhängige Teilmenge
- Erweiterung von Vektoren auf eine Basis - Erweiterung von Vektoren auf eine Basis
- Basis des Spaltenraums, Bild(A), für eine Matrix, A: - Basis des Spaltenraums, Bild(A), für eine Matrix, A:
- A ⟶ Zeilenstufenform ⟶ merke Spaltenpositionen j1, j2, ... wo Stufen sind - A ⟶ Zeilenstufenform ⟶ merke Spaltenpositionen j1, j2, ... wo Stufen sind
- Die Spalten j1, j2, ... von der Originalmatrix, A, bilden eine Basis von Bild(A) - Die Spalten j1, j2, ... von der Originalmatrix, A, bilden eine Basis von Bild(A)
- Konkrete Fälle: - Konkrete Fälle:
- „kanonische Basis“ von ℝⁿ für beliebige konkrete Werte von _n_. - „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. - „exotische“ Beispiele von Vektorräume wie der Raum der Polynomen, \[x\], und deren „kanonische“ Basen.
- Dimension, Dimensionsformel. - Dimension, Dimensionsformel.
- Rang: - Rang:
- Zeilenrang := #Stufen von A in Zeilenstufenform - Zeilenrang := #Stufen von A in Zeilenstufenform
- Spaltenrang := dim(Bild(A)) - Spaltenrang := dim(Bild(A))
- **Lemma:** Zeilenrang = Spaltenrang - **Lemma:** Zeilenrang = Spaltenrang
- **Definition:** Rang := Zeilenrang = Spaltenrang; - **Definition:** Rang := Zeilenrang = Spaltenrang;
- Kapitel 6 | 6.16.4: - Kapitel 6 | 6.16.4:
- lin. Abb - lin. Abb
- Kern, Bild - Kern, Bild
- Injektivität, Surjektivität, Bijektivität („Isomorphismus“) - Injektivität, Surjektivität, Bijektivität („Isomorphismus“)
- Zusammenhang zw. Dimension von U, V und Eigenschaften von einer linearen Abbildung φ : U ⟶ V. - Zusammenhang zw. Dimension von U, V und Eigenschaften von einer linearen Abbildung φ : U ⟶ V.
- !! Lineare Ausdehnung !! - !! Lineare Ausdehnung !!
- insbes. 6.1.13, nur bekommt ihr eine Situation, - insbes. 6.1.13, nur bekommt ihr eine Situation,
wo ihr eine Definition auf einer Basis + einem zusätzlichen linear abhängigen Element bekommt 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) - 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¯¹, - 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. und dass der Raum der invertierbaren Matrizen unter Multiplikation stabil sind.
- Kapitel 6 | 6.5+: nicht behandelt. - Kapitel 6 | 6.5+: nicht behandelt.
- Kapitel 7: 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 ## ## §2. Mathematisches Denken ##
Mathematik ist eine präzise aber abstrakte Kunst. 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: 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 - LaTeX
- Markdown, sowie die verschiedenen Kombinationen mit anderer Software: - Zeichenapps wie GoodNotes
- Pandocs (kombiniert so ziemlich alles!) - die guten alten Stift + Zettel/Heft ... Vorteil: man muss nicht aufladen ; )
- Rmd (R Markdown)
- pynb/JyPyter (Python notebooks)
- online Editors (siehe z. B. [stackedit](https://stackedit.io/editor)).
Am Rechner schreibe ich alles meistens in Markdown oder LaTeX-Dateien. Es lohnt sich, einen guten Allzweck-Editor wie [VSCode](https://code.visualstudio.com/download)
Wenn ich wirklich schnell schreiben will, und mir die Formattierung egal ist, zu installieren.
benutze ich sogar Notepad / TextEditor / rtf. Mit so etwas kann man etliche gratis Extensions finden,
Freunde benutzen Apps, in denen man zeichnen kann. Das ist auch sehr nützlich. die bspw. Syntax-Highlighting, Rendering, Code-Schnippsel für LaTeX, md, usw. bieten.
## Software zwecks Berechnungen und Anschauungen ## ## Software zwecks Berechnungen und Anschauungen ##
Es gibt einige Hilfsmittel, derer man sich bedienen kann, um entweder Konzepte zu visualisieren oder zu berechnen. Es gibt einige Hilfsmittel, derer man sich bedienen kann, um entweder Konzepte zu visualisieren oder zu berechnen.
**Diese Möglichkeiten sind keineswegs verpflichtend!** **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. <https://repl.it> -> `<>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 ### ### 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. 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: Eingabe von Matrizen und Vektoren:
``` ```bash
octave:1> A = [1 4; -7.1 3 + i; 0 8]; octave:1> A = [1 4; -7.1 3 + i; 0 8];
octave:2> disp(A); octave:2> disp(A);
1 4 1 4
@ -273,7 +337,7 @@ octave:6> disp(x);
Zeilenoperationen: Zeilenoperationen:
``` ```bash
octave:5> disp(A(2,:)); octave:5> disp(A(2,:));
4 3 + 1i 8 4 3 + 1i 8
octave:6> A(2,:) = A(2,:) - 4*A(1,:); octave:6> A(2,:) = A(2,:) - 4*A(1,:);
@ -284,7 +348,7 @@ octave:7> disp(A);
Matrixmultiplikation: Matrixmultiplikation:
``` ```bash
octave:1> A = [1 4 8; 3 6 -9]; x = [1 1 1].'; octave:1> A = [1 4 8; 3 6 -9]; x = [1 1 1].';
octave:2> b = A*x; octave:2> b = A*x;
octave:3> disp(b); octave:3> disp(b);
@ -300,6 +364,13 @@ octave:6> disp(A*x_); % wird bis auf machine-Fehler gleich b sein
1.5543e-15 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 ### ### R ###
Für **R** braucht man 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 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). (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. <https://repl.it> -> `<>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 ### ### Julia ###
Die **Julia**-Programmiersprache soll auch sehr gut sein und kann auf <https://julialang.org> gefunden werden. Die **Julia**-Programmiersprache soll auch sehr gut sein und kann auf <https://julialang.org> gefunden werden.