Zweiter Teil des Tutorials ● Workspace ● M-files ● Matrizen ● Flow Control ● Weitere Datenstrukturen ● Gemeinsames Beispiel erarbeiten Workspace Im Workspace sind die Variablen mit ihrem jeweiligen Wert gespeichert. Hier zwei nützliche Commands: * clear Löscht alle gespeichteren Variablen Wichtig in der 'Ausprobierphase' (Fehlerquelle!) * save dateiname Speichert alle Variablen in einem Textfile für spätere Verwendung M-Files * Skripts: Aneinanderreihung von Befehlen die der Reihe nach abgearbeitet werden * Funktionen: Ähnlich wie Skripts, mit dem Zusatz von Argumenten und Rückgabewerten Anonymous Functions Definition einer Funktion ohne eigenes Function m-file: quadrat = @(x) x*x; Verwendung mit Argument: quadrat(2) Rückgabe 4 Als Variable: x = [ 1 2 3 quadrat(2) ] Matrizen Weitere nützliche Funktionen: Funktion Rückgabe det(A) rref(A) inv(A) eig(A) linsolve(A,b) poly(A) Determinate reduzierte Zeilenstufenform Inverse von A Spaltenvektor mit den Eigenwerten Lösungsvektor x mit A*x = b Zeilenvektor mit Koeffizienten des char. Polynoms help matfun für vollständige Liste Operationen Die Standard Rechenoperationen (+,-,*,^ ... ) lassen sich in Matlab - soweit sinnvoll mathematisch definiert - auch auf Matrizen anwenden: A*B errechnet das Produkt der Matrizen A und B sofern die Dimensionen kompatibel sind A/B berechnet A * inv(B) A-8 berechnet A[i,j] - 8 für alle i,j wie bereits erwähnt erhält man mit dem . das komponentenweise Analogon Beispiel Vandermonde Matrix erstellen: x = (1:4)' V = [x.^0 x.^1 x.^2 x.^3] linsolve(A,x) Logische Ausdrücke Unter Logischen Ausdrücken versteht man Variablen die entweder die Werte true (1) oder false (0) annehmen. In aller Regel benötigen wir dazu die bekannten Relationen: < > kleiner größer <= >= kleiner/gleich größer/gleich == ~= gleich (beachte den Unterschied von 'a = b' und 'a == b') ungleich If Um den Fluss unseres Programmes abhängig von berechneten Größen (während des Ausführens) zu steuern benutzen wir if: if (Bedingung 1) Code der ausgeführt wird, falls Bedingung 1 wahr ist elseif (Bedingung 2) Code der ausgeführt wird, falls Bedingung 1 falsch und Bedingungen 2 wahr ist else Code der ausgeführt wird, falls Bedingung 1&2 falsch sind end Ein einfaches Beispiel if (rem(n,2) == 0) 'n ist gerade' elseif (rem(n,2) == 1) 'n ist ungerade' else 'n ist keine ganze Zahl' end Switch & Case Folgendes Programm leistet das Selbe wie das vorangegangene Beispiel: switch (rem(n,2)) case 0 'n ist gerade' case 1 'n ist ungerade' otherwise 'n ist keine ganze Zahl' end Verknüpfung Logischer Ausdrücke || logisches oder && logisches und Beispiel: if( (rem(n,2) == 0) && (rem(n,3) == 0) ) 'n ist durch 6 teilbar' While Schleife Die While Schleife funktioniert ähnlich wie das if- Statement, allerdings wird der Code solange ausgeführt, wie die ursprüngliche Bedingung erfüllt ist: k=1; while(k <= n) if(rem(n,k) == 0) disp(k); end; k = k+1; end; For Schleife Hier das selbe Programm wie zuvor mit Hilfe der for Schleife: for (k=1:n) if(rem(n,k) == 0) disp(k); end; end; k=1; while(k <= n) if(rem(n,k) == 0) disp(k); end; k = k+1; end; Break Statement break führt dazu, dass die Schleife in der es steht, verlassen wird: k=1; while(1) if(rem(n,k) == 0) disp(k); end; k = k + 1; if(k > n) break; end; k=1; while(k <= n) if(rem(n,k) == 0) disp(k); end; k = k+1; end; Weitere Datenstrukturen Multidimensionale Arrays A(i,j,k) entspricht A(i,j) der k-ten Matrix Cell Arrays: B = { A_1 x_1; A_2 x_2; A_3 x_3 } String (bereits verwendet): a = 'Hallo Welt'; Ein erstes Programm Zum Abschluss der Einführung entwickeln wir gemeinsam Schritt für Schritt ein kleines Programm. Versucht euch erstmal eigenständig (mit Partner) an dem ersten Teil des Programmes: Function m.file prim.m: prim: |N → { 0 , 1 } prim(n) = 1 falls n prim 0 sonst 2. Teil Schreibe eine Funktion, die einen Vektor mit allen Primzahlen kleiner/gleich n zurückgibt 3. Teil Schreibe ein M-file, in dem allen Zahlen von 1 bis 1000 die Anzahl der Primzahlen kleiner gleich dieser Zahl zugeordnet wird. (d.h. Eine 1000 x 1 Matrix) Plotte die Ergebnisse zusammen mit dem Graphen von x/log(x) Hinweis: behandele die Zahlen 1 & 2 einzeln