Matlab ist eines der verbreitetsten Tools zur numerischen Lösung verschiedener
Problemstellungen, ist aber als komerzielles Produkt nicht kostenlos. Octave ist ein
weitgehend kompatibler Matlab-Klon unter der GPL und frei verfügbar.
Im Kurs sollen Grundlagen zum Umgang mit Matlab ( oder Octave ) gelegt werden.
Kompatibilitätsprobleme zwischen Matlab und Octave werden bei einfachen Anwendungen
noch nicht auftreten, Spezialfälle sind aber zu testen.
Tutorials, Informationsmaterial etc. zu Matlab und Octave:
Hierbei wird nicht mehr zwischen Matlab und Octave unterschieden, alle angeführten
Scripte, Tutorien lassen sich im Umfang der Kompatibilität sowohl auf Matlab als auch
auf Octave anwenden.
Machen Sie sich zunächst mit der Verwendung der Matlab-Befehle tic und toc vertraut.
Nun erstellen Sie Matlab-Programme, die die folgenden Aufgaben einmal mit selbstgeschriebenen Schleifen
und zum anderen mit geschickt gewählten Matlab-Befehlen oder Matrix/Vektor-Operationen ausführen.
Minimum/Maximum eines Vektors
Wert und Index des Vektorelementes mit minimalem Abstand zu einem festen Wert
Skalarprodukt zweier Vektoren
Summe aller Komponenten eines Vektors
Gleitender Mittelwert (Weichspüler ;-) ) mit Fenstergößen 3,5,7,9 angewandt auf einen Zufallsvektor
Variieren Sie dabei die Dimension des Vektors, z.B. n=10,100 , 1000 ... ca. 100 Millionen, messen Sie die Laufzeiten und stellen Sie
dies alles in geeigneten Plots dar. Fazit ?
Bauen Sie sich eine Matlab Funktion leap_year(y) , die als Argument eine Jahreszahl empfängt und
falls das Jahr ein Schaltjahr ist den Wert 1 , sonst 0 zurück liefert.
Erzeugen Sie nun ein Matlab-Script was folgendes leistet
Testen der Jahre 1999,2000,2004,2016 auf Schaltjahr.
Ermitteln der Anzahl der Schaltjahre vom Jahr 1000 bis heute.
Ermitteln der Jahreszahl des 1000. Schaltjahres ab heute.
Bitte beachten: Mit "heute" ist wirklich der Startzeitpunkt des Scripts gemeint.
Programmieren Sie es so, dass es auch in 100 Jahren gestartet werden kann und dann noch korrekte Ergebnisse liefert.
ASCII-Daten einlesen und verwenden
In einem FEM-Programm wurde das eindimensionale logistische Populationsmodell gerechnet.
Details dazu sind in
Population dispersal via diffusion-reaction equations nachzulesen, sind aber für den Kurs nicht wirklich wichtig.
Hier im Kurs sollen nun die erzeugten Ausgabedaten: trawa.zip
die aus einzelnen ASCII-Files zur Approximation von u(t,x) bestehen weiterverarbeitet
werden.
Dabei handelt es sich für jeden Zeitschritt um eine Datei mit Namenskonvention
u1-step-00000.txt
wobei hier 00000 die Nummer des Zeitschrittes darstellt.
Die im Programm verwendete Zeitschrittweite war tau=0.1.
In jedem File sind 2 Spalten der Art
wobei die erste Spalte die x-Koordinaten der Knotenpunkte und in der zweiten Spalte
die zugehörigen Werte u(t,x_i) stehen.
Entwickeln Sie ein Matlab-Programm welches die Daten einliest und folgende Plots erzeugt:
Plot u(x) zu festem t=1
4 Subplots in einem Plot u(x) zu festem t=1,10,100,1000
4 Subplots in einem Plot u(t) an fester Stelle x=0,0.5,1,2.0
Hinweis: Anhand der Anzahl der Datenfiles werden Sie schnell sehen, dass eine automatische
Namensgenerierung unabdingbar ist. Dazu ist der Befehl sprintf nützlich
Speichern Sie die Plots mittels einem Befehl als farbiges png- und pdf-File ab.
Binärdaten einlesen und verwenden
Innerhalb einer (fiktiven!!) statistischen Analyse wurden von einem C-Programm
Datensätze in einem File binär gespeichert. Jeder Datensatz hat dabei die Struktur
typedef struct
{
int index;
char name[256];
int pad;
double size;
int age;
int male_female;
} personaldata;
und das zugehörige Datenfile beginnt mit einem Integer, der die Anzahl der Records
angibt, gefolgt von den Records. Dabei codieren die Variablen Daten entsprechend ihres Namens,
male_female steht für 0==Mann / 1==Frau.