Praktikum zur Vorlesung: Numerische Mathematik für Lehramt SS 6 Linux Matlab: eine kleine Einführung Jan Mayer 27. April 6 Matlab: eine kleine Einführung 2 Matlab starten: Linux 1. Konsole öffnen (Bildschirm-Icon auf Menüleiste unten); 2. matlab & und return eingeben; 3. Konsole dauerhaft geöffnet lassen. Weitere Programme: Konqueror: Datei-Explorer (Häuschen auf Menüleiste) Firefox: Internet Browser (Blaue Weltkugel umzingelt von rotem Feuer) Alles weitere im Menü unten links Matlab: eine kleine Einführung 3 Linux Besonderheiten Einfacher Klick, linke Maustaste startet ein Programm bzw. öffnet ein Verzeichnis. Einfacher Klick, rechte Maustaste zeigt Menü mit Optionen an. Verzeichnisse anlegen: Im Konqueror rechter Mausklick auf freiem Gebiet, dann Neu erstellen und Ordner auswählen. strg+x, strg+c, strg+v Cut, Copy, Paste wie unter Windows, auch im Konqueror. Bei Matlab nur wenn Option Windows eingestellt ist unter File Preferences Editor/Debugger Keyboard & Indenting Key Bindings. Matlab: eine kleine Einführung 4
Benutzeroberfläche Matlab als Taschenrechner Erzeugen von Matrizen: [1 2 3 ; 4 6] zeros(2,3) eye() Erzeugen von speziellen Zeilenvektoren: 1:3 ergibt den Vektor ( 1 2 3 ). 1:.2:2 ergibt ( 1. 1.2 1.4 1.6 1.8 ) 2.. Zuweisung (um Werte in einer Variablen abzuspeichern): c1 = 6 A = [1 2 3 ; 4 6] v = 1:1 Matlab: eine kleine Einführung Befehle stets mit Return been. Abbruch: strg+c. Matlab: eine kleine Einführung 6 Verkleben von Matrizen: [A, zeros(2,2)] ergibt Matlab als Taschenrechner ( ) 1 2 3 4 6 und B = [A, zeros(2,2); eye(2), A] speichert die Matrix in der Variablen B ab. 1 2 3 4 6 1 1 2 3. 1 4 6 Matlab: eine kleine Einführung 7 Matlab als Taschenrechner Elementauswahl für Zugriff und Zuweisung: A(1,2) A(1:2,2) A(1:2,1:3) A(:,[1 3]) Elementweise artithmetische Operationen: + -.*./.^ Elementweise boolsche Operationen: Das Ergebnis ist (false) bzw. 1 (true). == = < > <= >= & Elementweise Funktionen: abs sin cos exp sqrt min max... Operationen und Funktionen der linearen Algebra: + - * / \ ^ det trace inv eig... Matlab: eine kleine Einführung 8
Skripte Die Datei magicrank.m lässt sich durch Eingabe im Befehlsfenster von magicrank ausführen. Auf aktives Verzeichnis achten! Matlab: eine kleine Einführung 1 Skripte Eine Datei, welche eine Abfolge von Befehlen enthält, heißt Skript. Namen der Datei beliebig, Dateierweiterung muss.m sein. Aufruf des Skripts (ohne Dateierweiterung) führt Skript sequenziell aus. Semicolon unterdrückt die Ausgabe. Kommentare beginnen mit eine Prozentzeichen. Matlab: eine kleine Einführung 11 Matlab: eine kleine Einführung 12
Skripte Funktionen Einschränkungen bei Namen von Variablen und Dateien alle Namen müssen sich unterscheiden; Groß- und Kleinbuchstaben sind unterschiedlich; Namen müssen mit einem Buchstaben beginnen; Namen dürfen keine Sonderzeichen enthalten. Skripte bieten keine: Übergabe von Parametern Rückgabe von Werten, Ergebnisse Lösung: Funktionen. Weiterer Unterschied: alle Parameter müssen werden! übergeben Matlab: eine kleine Einführung 13 Matlab: eine kleine Einführung 14 Funktionen Funktionen Dateiname und Funktionsname müssen übereinstimmen! Die Dateierweiterung muss.m sein. Alle Variablen sind lokal. Die Funktion function r = mrank(n) bedarf eines Eingabeparameters und gibt eine Variable as Ergebnis zurück. Rückgabe mehrerer Variablen: function [r,k] = mrank(n) Die Eingabe von mrank(1) liefert dasselbe Ergebnis. Matlab: eine kleine Einführung 1 Aufruf: [z,m] = mrank(1); Matlab: eine kleine Einführung 16
Aufruf: Funktionen 1. mrank(1) führt die Funktion aus und gibt den Rückgabewert aus. 2. mrank(1); führt die Funktion aus und gibt den Rückgabewert nicht aus. 3. z = mrank(1); führt die Funktion aus und speichert den Rückgabewert in z. 4. z = mrank(1) führt die Funktion aus, speichert den Rückgabewert in z und gibt ihn aus. Matlab: eine kleine Einführung 17 for k = 4:n Befehle Die for-schleife 1. Zunächst ist k = 4 und es werden alle Befehle zwischenfor und mit dem Wert k = 4 ausgeführt. 2. Es wird k = gesetzt und alle Befehle zwischen for und mit dem Wert k = ausgeführt, usw. 3. Es werden alle Werte von k durchlaufen, bis einschließlich k = n. Genauer: for k = Vektor k durchläuft den Vektor von Anfang bis Ende. Matlab: eine kleine Einführung 18 while t > Befehle Die while-schleife Anmerkungen: Die while-schleife Gilt t > am Anfang nicht, so werden alle Befehle übersprungen. 1. Falls t > gilt, so werden alle Befehle zwischen while und ausgeführt. 2. Es wird wieder geprüft, ob t > gilt. Falls dies erfüllt ist, so werden wieder alle Befehle zwischen while und ausgeführt. 3. Dies wiederholt sich solange bis t > nicht erfüllt ist. Matlab: eine kleine Einführung 19 Man muss t vor while t > einen Wert zuweisen. Gilt t > immer, so bricht der Programmablauf niemals ab. Deswegen wird der Wert von t normalerweise innerhalb der Schleife geändert. Erlaubt ist auch z.b. while (t>) & (t<1). Genauer: t > liefert als Ergebnis entweder (false) oder 1 (true). Die Schleife wird solange durchlaufen, bis der Wert (false) ist. Matlab: eine kleine Einführung
Verzweigung: if-elseif-else- Verzweigung: if-elseif-else- if n == 1 Befehle1 elseif n == 2 Befehle2 elseif n == 3 Befehle3. elseif n == N BefehleN else BefehleAlt elseif und else mit den darauf folgen Befehlen sind optional. if n == 1 Befehle if n == 1 Befehle else BefehleAlt Falls n = 1 gilt, so werden Befehle1 ausgeführt, sonst keine. Falls n = 1 gilt, so werden Befehle1 ausgeführt, sonst BefehleAlt. Matlab: eine kleine Einführung 21 Matlab: eine kleine Einführung 22 Verzweigung: if-elseif-else- Beispiel: Spiel des Lebens if n == 1 Befehle1 elseif n == 2 Befehle2 elseif n == N BefehleN else BefehleAlt Falls n = 1 ist, so werden Befehle1 ausgeführt. Falls n = 1 falsch ist und n = 2 gilt, so werden Befehle2 ausgeführt. Falls sowohl n = 1 und n = 2 falsch sind und n = N gilt, werden BefehleN ausgeführt. In allen anderen Fällen werden BefehleAlt ausgeführt. Gegeben: Gebiet der Größe N N besteh aus 1 1 Zellen. Jede Zelle ist in dem Zustand leb oder tot. Zum Zeitpunkt T = besteht ein Anfangszustand, z.b. ein leber 4 4 Block in der Mitte. Übergang der Generation zum Zeitpunkt T = t in eine neue Generation zum Zeitpunkt T = t + 1: 1. Zu viele oder zu wenige lebe Nachbarn: Zelle ist tot. z.b., 1, 7, 8 Nachbarn. 2. Optimale Anzahl von Nachbarn: Zelle lebt. z.b. 3, 4, Nachbarn. 3. Sonst: keine Veränderung z.b. 2, 6 Nachbarn. Matlab: eine kleine Einführung 23 Matlab: eine kleine Einführung 24
main.m Beispiel: Spiel des Lebens Beispiel: Spiel des Lebens % Hauptprogramm parameter; M = init(n); % Parameter laden % Initialisieren for t = 1:Tmax display([ Schritt,num2str(t)]); spy(m); % Visualisieren pause; M = neue generation(m,tot,gleich,leben); spy(m); % Visualisieren parameter.m % Parameter N = ; % Dimension Tmax = 1; % Anzahl der Zeitschritte tot = [ 1 7 8]; % #Nachbarn -> sterben gleich = [2 6]; % #Nachbarn -> unverändert leben = [3 4 ]; % #Nachbarn -> leben Matlab: eine kleine Einführung 2 Matlab: eine kleine Einführung 26 init.m function A = init(n) Beispiel: Spiel des Lebens % Bevölkerungsmatrix mit Anfangsbevölkerung erzeugen A = zeros(n,n); k = floor(n/2); A(k-1:k+2,k-1:k+2) = ones(4,4); function A = neue generation(a,tot,gleich,leben); % neue Generation berechnen. B = A; % Kopie von A anlegen. [M,N] = size(a); for j = 1:N for k = 1:N anz nachbarn = nachbarzahl(b,j,k); if length(find(tot == anz nachbarn)) A(j,k) = ; elseif length(find(leben == anz nachbarn)) A(j,k) = 1; % sonst: ändert sich nichts. Matlab: eine kleine Einführung 27
function n = nachbarzahl(a,j,k); % berechnet die Anzahl der Nachbarn von Zelle (j,k). [M,N] = size(a); if (j == 1) & (k == 1) n = A(1,2) + A(2,2) + A(2,1); elseif (j == N) & (k == 1) n = A(N,2) + A(N-1,1) + A(N-1,2); elseif (j == 1) & (k == N) n = A(2,N) + A(1,N-1) + A(2,N-1); elseif (j == N) & (k == N) n = A(N,N-1) + A(N-1,N) + A(N-1,N-1); elseif j == 1 n = A(2,k-1) + A(2,k) + A(2,k+1) +... A(1,k-1) + A(1,k+1); elseif j == N n = A(N-1,k-1) + A(N-1,k) + A(N-1,k+1) +... A(N,k-1) + A(N,k+1); elseif k == 1 n = A(j-1,2) + A(j,2) + A(j+1,2) +... A(j-1,1) + A(j+1,1); elseif k == N n = A(j-1,N-1) + A(j,N-1) + A(j+1,N-1) +... A(j-1,N) + A(j+1,N); else n = sum(a(j-1:j+1,k-1)) +... sum(a(j-1:j+1,k+1)) + A(j-1,k) + A(j+1,k); Spiel des Lebens Spiel des Lebens 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 nz = 16 1 nz = 1 nz = 32 1 nz = 88 1 nz = 288 1 nz = 1396 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 nz = 28 1 nz = 48 1 nz = 48 1 nz = 136 1 nz = 1484 1 nz = 144 Die ersten 6 Generationen Matlab: eine kleine Einführung 31 Die Generationen 1,, 6, 7, 76, 77. Matlab: eine kleine Einführung 32
Weitere Informationen Umfangreiche Matlab Hilfsdateien mit F1 aufrufbar. Diese beinhalten: 1. Informationen zu den einzelnen Befehlen; 2. Demonstrationsprogramme. Viele Links zu Literatur auf der Webseite zum Praktikum. Matlab: eine kleine Einführung 33