238 lines
10 KiB
Markdown
238 lines
10 KiB
Markdown
# Repository für Lineare Algebra / Übungsgruppe #
|
|
|
|
In diesem Repository werden Ressourcen hochgeladen,
|
|
zum Beispiel Skripte oder Dokumente für mathematische Argumente.
|
|
Gründe hierfür:
|
|
|
|
- um den Umstand zu vermeiden, per Email, Moodle, BBB, usw. Dateien zu schicken.
|
|
- technische Kritzelei irgendwo festzuhalten.
|
|
|
|
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).
|
|
|
|
## Mathematisches Denken ##
|
|
|
|
Mathematik ist eine präzise aber abstrakte Kunst.
|
|
Pflegen muss man den Umgang mit zwei Aspekten:
|
|
|
|
- Anschauung,
|
|
- Formalismen.
|
|
|
|
Es gibt ein Zwischenspiel zwischen beiden dieser Aspekte.
|
|
|
|
### Anschauung ###
|
|
|
|
Stichwörter: **Konzepte** (en: _notion_), **Vorstellung**, **Visualisierung**, **Intuition**, ...
|
|
|
|
Mit _Anschauung_ meinen wir nicht bloß _Visualisierung_,
|
|
sondern vielmehr das intuitive Begreifen von mathematischen Konzepten.
|
|
Mit Intuition nun ist _nicht_ »common sense« gemeint,
|
|
sondern eine Fähigkeit, die man antrainieren muss,
|
|
um abstrakte Sachverhalte zu visualisieren und internalisieren,
|
|
und um sich mit den mathematischen »Gegenständen« vertraut zu machen.
|
|
|
|
### Formalismen ###
|
|
|
|
Stichwörter: **Symbole**, **Notation**, **Axiome**, **Rahmen**, **Aussagen**, **Beweise**, **Argumentation**, ...
|
|
|
|
Kurz gesagt, die _formalen_ Aspekte bestehen aus technischen Symbolen,
|
|
mithilfe derer wir Aussagen schreiben, und der Struktur von Argumenten.
|
|
|
|
Der Begriff _Formalismus_ geht eigentlich auf die Grundlagen der Mathematik ab der Mitte des 19. Jh zurück.
|
|
Ab dieser Zeit fingen Mathematiker an, nicht mehr lose zu berechnen, sondern Erkenntnisse in _formalen Systemen_ aufzuschreiben.
|
|
Im Grunde (und im Falle von Church, Turing, Kleene, usw.) legten sie die Bausteine für das moderne Konzept von Berechenbarkeit, Algorithmen, und Rechnern.
|
|
Es stellt sich heraus (siehe insbesondere das Löwenheim-Skolem-Tarski Paradoxon),
|
|
dass mathematische Aussagen komplett unabhängig von Anschauungen ausgelegt und bewiesen werden können.
|
|
Mit anderen Worten, man kann einen »seelenlosen« Rechner mit mathematischen Aufgaben beauftragen,
|
|
und dieser wäre ohne jegliche Vorstellungskraft in der Lage,
|
|
_richtige_ Berechnungen durchzuführen und Schlüsse zu ziehen.
|
|
|
|
### Die Rolle von beiden Aspekten ###
|
|
|
|
Einerseits sind formale Mitteln notwendig,
|
|
um Aussagen _klar und eindeutig_ zu formulieren,
|
|
und notwendig und hinreichend, um diese zu beweisen.
|
|
Andererseits benötigen wir als _denkende Menschen_ aber auch Anschauungen,
|
|
|
|
1. um formale Aussagen _deuten_ zu können und deren Informationsgehalt zu _begreifen_,
|
|
2. damit einem Ideen und Ansätze einfallen, um Behauptungen zu beweisen.
|
|
|
|
Wir brauchen also die formale Seite, um **präzis** zu kommunizieren und richtig zu argumentieren,
|
|
und die anschauliche Seite, um uns überhaupt orientieren zu können.
|
|
|
|
### Wie trainiere ich das? ###
|
|
|
|
Es gibt einige Möglichkeiten für verschiedene Lerntypen:
|
|
|
|
- Selbstlernen: sich alleine mit dem Skript auseinandersetzen. Am besten ein paar Stunden in einem ruhigen Ort wie einem Café, der Bibliothek, zu Hause.
|
|
Gründlich die Definitionen und Resultate durchgehen.
|
|
- Durch Gruppenarbeit.
|
|
- Austausch von konkreten Fragen in eurer Chat-Gruppe oder in online Foren wie stackexchange, math.hashcode, usw..
|
|
- In der Übungsgruppe. Bei wichtigen Fragen, die wir gemeinsam bearbeiten, werde ich versuchen, diese in dem Repository festzuhalten.
|
|
|
|
## Software für Text/Notizen ##
|
|
|
|
Unter Mathematikern, Wissenschaftlern, (womöglich auch Ingenieuren), und Informatikern sind folgende Optionen sehr beliebt:
|
|
|
|
- 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)).
|
|
|
|
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.
|
|
|
|
## 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!**
|
|
|
|
### 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.
|
|
Man kann GeoGebra [hier](https://www.geogebra.org/download?lang=de) herunterladen.
|
|
|
|
**Vorteile:** man braucht hier _null_ Programmierkenntnisse. Mit der App kann man ohne Weiteres direkt loslegen.
|
|
|
|
**Nachteile:** Man sollte es aber nicht zu weit betreiben, denn diese App wird schnell überfordert.
|
|
Es scheint, dass man nicht mehr Dateien lokal speichern kann (?!).
|
|
Anscheinend wollen die „klugen“ Betreiber dieser App einen rein online Gebrauch erzwingen 🤦.
|
|
|
|
### Octave / MatLab ###
|
|
|
|
**MatLab** (Matrix Laboratory) ist eine in dem Ingenieurwesen bekannte Programmiersprache
|
|
zum einfachen Umgang mit Matrizen und allgemein diskreten Methoden.
|
|
GNU **Octave** ist lediglich die gratis Variante davon und kann [hier](https://www.gnu.org/software/octave) gefunden werden.
|
|
Ich kann dies auf jeden Fall empfehlen, um intuitiv und schnell mit Matrixberechnungen (v. a. mit komplexen Einträgen) umzugehen.
|
|
Hier ein paar Beispiele in der Sprache:
|
|
|
|
Eingabe von Matrizen und Vektoren:
|
|
|
|
```
|
|
octave:1> A = [1 4; -7.1 3 + i; 0 8];
|
|
octave:2> disp(A);
|
|
1 4
|
|
-7.1 3 + 1i
|
|
0 8
|
|
octave:3> A = [1 4; -7.1 3 + i; 0 8].';
|
|
octave:4> disp(A);
|
|
1 -7.1 0
|
|
4 3 + 1i 8
|
|
octave:5> x = [1 40 3].';
|
|
octave:6> disp(x);
|
|
1
|
|
40
|
|
3
|
|
```
|
|
|
|
Zeilenoperationen:
|
|
|
|
```
|
|
octave:5> disp(A(2,:));
|
|
4 3 + 1i 8
|
|
octave:6> A(2,:) = A(2,:) - 4*A(1,:);
|
|
octave:7> disp(A);
|
|
1 -7.1 0
|
|
0 31.4 + 1i 8
|
|
```
|
|
|
|
Matrixmultiplikation:
|
|
|
|
```
|
|
octave:1> A = [1 4 8; 3 6 -9]; x = [1 1 1].';
|
|
octave:2> b = A*x;
|
|
octave:3> disp(b);
|
|
13
|
|
0
|
|
octave:4> x_ = A \ b; % äquivalent zu „finde (irgend)eine Lösung zu Ax=b“
|
|
octave:5> disp(x_);
|
|
0.41474
|
|
1.22992
|
|
0.95820
|
|
octave:6> disp(A*x_); % wird bis auf machine-Fehler gleich b sein
|
|
1.3000e+01
|
|
1.5543e-15
|
|
```
|
|
|
|
### R ###
|
|
|
|
Für **R** braucht man
|
|
|
|
- Den **R** Compiler (siehe z. B. [hier](https://cran.rstudio.com))
|
|
- (optional) einen Editor wie **RStudio** (siehe [hier](https://rstudio.com/products/rstudio/download/#download)).
|
|
|
|
Man kann auch ohne Installation R-Skripte ausführen: einfach nach »R compiler online« googeln (oder z. B. <https://repl.it> -> `<>Start coding` —> Sprache auswählen).
|
|
|
|
**Vorteile:** man braucht hier nur _sehr minimale_ Programmierkenntnisse.
|
|
Diese Sprache wurde für Naturwissenschaftler und Statistiker entwickelt, und Menschen rund um den Globus entwickeln immer neue Packages für alles Mögliche in dieser Sprache.
|
|
Es gibt eine große Community und damit kann man für alle Probleme Hilfe finden.
|
|
Visualisierung mag zwar umständlicher als mit Geogebra sein, aber ist nicht so schwer.
|
|
|
|
**Nachteile:**
|
|
Man sollte im Laufe seines Studiums **R** nicht _ausschließlich_ bedienen,
|
|
denn diese Sprache fördert einen richtig schlechten Programmierstil.
|
|
Für die Logiker und Informatiker unter euch, wird es bspw. nerven, dass in **R**-Arrays (sog. lists/vectors) Indexes mit `1` anfangen.
|
|
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. <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 ###
|
|
|
|
Die **Julia**-Programmiersprache soll auch sehr gut sein und kann auf <https://julialang.org> gefunden werden.
|
|
Es bedarf hier zumindest Grundkenntnisse von Programmiersprachen.
|
|
**Julia** hat den Vorteil von Geschwindigkeit (für kleine Matrixberechnungen irrelevant, aber sobald man mit größeren Datensets umgeht wird dies wichtig sein).
|
|
Hierfür muss man sich den Umgang mit Typen aneignen, was generell zu saubererem Code führt.
|