Zyklen: break und continue Innerhalb eines Zyklus: break beendet vorzeitig die zyklische Verarbeitung Beispiel: a = [1 2 3 4 5 6 0 1 2]; n = length(a); s=0; nn=0; for i=1:1:n if a(i)==0 break; end s= s + a(i); nn = nn +1; end; mw=s/nn; Wenn 0 gefunden wird, so wird der Zyklus verlassen und die Mittelwertbildung beendet Achtung: Programm würde abstürzen, wenn eine 0 am Anfang des Feldes stehen würde. Peter Sobe 25
Innerhalb eines Zyklus: continue vorzeitiger Übergang zum nächsten Schleifendurchlauf Beispiel: a = [1 2 3 4 5 6 0 1 2]; n = length(a); s=0; nn=0; for i=1:1:n if a(i)==0 continue; end s= s + a(i); nn = nn +1; end; mw=s/nn; Zyklen: break und continue Für alle gefundenen 0-Werte wird der Rest des Zyklusinneren übergangen, d.h die Nullen werden für die Mittelwertbildung ignoriert Achtung: Diese Programm würde abstürzen, wenn ausschließlich Nullen im Feld enthalten sind. Peter Sobe 26
Mehrfachauswahl: if-elseif Alternativen mit mehreren Zweigen (mehr als 2) können mittel if-elsif-else realisiert werden. if Bedingung1 Anw1 elseif Bedingung2 Anw2 else Anw3 end; Beispiel: if alter<10 auswahl= Limonade ; elseif alter<16 auswahl= Cola ; elsif alter<75 auswahl= Bier ; else auswahl= Kamillentee ; end Peter Sobe 27
Mehrfachauswahl: switch-case Alternativen mit mehreren Zweigen (mehr als 2) können auch per switch-case-konstruktion programmiert werden. Das kann u.u. übersichtlicher sein. Beispiel: switch Ausdruck switch note case wert1 case1 Anweisung1; auswahl= sehr gut ; case wert2 case 2 Anweisung2; auswahl= gut ; case 3 otherwise auswahl= befriedigend ; Anweisung3; case 4 end; auswahl= ausreichend ; otherwise auswahl= nicht erfolgreich; end Peter Sobe 28
Ein- und Ausgabe Neben der interaktiven Eingabe der Werte in Kommando-Fenster ist auch eine gezielte Nutzerabfrage durch Skripte und Funktionen möglich. input-funktion zur Eingabeaufforderung wert = input( Bitte Wert eingeben: ); Nach Ausgabe eines Erläuterungstextes wird dem Nutzer die Eingabe erlaubt. Der Typ des eingegebenen Werts hängt von der Eingabe ab und kann ein String, eine einzelne numerische Variable, ein Vektor oder eine Matrix sein. Zum Erzwingen einer String-Eingabe: nachricht = input( Geben Sie hier Ihren Text ein:, s ); Peter Sobe 29
Ein- und Ausgabe fprintf-funktion zur Ausgabe in Kommandofenster Die Funktion fprintf gibt den als ersten Parameter übergebenen String aus. fprintf( einfacher Text ); es erscheint einfacher Text Beispiel: j = input( Jahrsezahl: ); if mod(j,4)==0 && (mod(j,100)~=0 mod(j,400)==0) fprintf( ist ein Schaltjahr \n ); else fprintf( ist kein Schaltjahr \n ); end; Peter Sobe 30
Ein- und Ausgabe Die Funktion fprintf kann darüberhinaus Variablen formatiert ausgeben. Dazu müssen im übergebenen String s.g. Umwandlungsangaben (%s, %f u.ä.) angegeben werden. An deren Stelle werden die Werte der danach als weitere Parameter angegebenen Variablen ausgegeben. z=7; fprintf( Das Doppelte von %f ist %f \n, z, 2*z); es erscheint Das Doppelte von 7 ist 14 Die Reihenfolge der weiteren Parameter gibt die Zuordnung zu den Umwandlungsangaben an. Peter Sobe 31
fprintf - Umwandlungen fprintf dient der formatierten Ausgabe von Texten und Variablen auf der Konsole, oder in eine Datei (wird später behandelt). fprintf(formatstring, Variablen ); Die Umwandlungsangaben in einem fprintf-formatstring beginnen immer mit einem %-Zeichen. Der dann folgende Buchstabe gibt an, wie die Ausgabe erfolgen soll. %s Einsetzen des Variableninhalts als String %d Einsetzen des Variablenwerts als ganze Zahl (ohne Nachkommastellen) %f Einsetzen des Variablenwerts als Fließkommawert %e Fließkommawert im wissenschaftlichen Format %g automatische Auswahl der kompakteren Form aus %f und %e Peter Sobe 32
Beispiel, z.b. als Skript: fprintf - Umwandlungen radiofrequenzen=[ 89.6 95.8 100.6 102.6 ]; for i=1:4 fprintf( Radioprogramm %d: %f MHz \n,i,radiofrequenzen(i)) end Ausgabe: Radioprogramm 1: 89.600000 MHz Radioprogramm 2: 95.800000 MHz Radioprogramm 3: 100.600000 MHz Radioprogramm 4: 102.600000 MHz Peter Sobe 33
fprintf - Umwandlungen Beispiel (auszugsweise) mit Format-/Präzisionsangabe: fprintf( Radioprogramm %d: %.1f MHz \n,i,radiofrequenzen(i)) Ausgabe: Radioprogramm 1: 89.6 MHz Radioprogramm 2: 95.8 MHz Radioprogramm 3: 100.6 MHz Radioprogramm 4: 102.6 MHz fprintf( Radioprogramm %d: %5.1f MHz \n,i,radiofrequenzen(i)) Ausgabe: Radioprogramm 1: 89.6 MHz Radioprogramm 2: 95.8 MHz Radioprogramm 3: 100.6 MHz Radioprogramm 4: 102.6 MHz Peter Sobe 34
Format-/Präzisionsangabe: %vl.pu fprintf - Umwandlungen v Vorzeichen (+,- oder weggelassen) l Länge, d.h. Anzahl Zeichen, die für die Ausgabe reserviert sind p Anzahl Stellen nach dem Dezimalpunkt u Umwandlungsangabe (s,d,f,e,g) Weggelassen werden können: v,l,p dann werden Standardformatierungen benutzt Zur weiteren Formatierung können benutzt werden: \n Zeilenumbruch \t Tabulator Peter Sobe 35
fprintf und disp fprintf-umwandlungen und Formatierungen sind auf einzelne Werte bezogen. Vektoren und Matrizen können per disp()-funktion ausgegeben werden. disp() gibt die angegebene Variable im Kommandofenster aus, ohne jedoch den Variablennamen voranzustellen. Beispiel: v1 = [1 2 3 4 5 6]; fprintf( Vektor v1\n'); disp(v1); m2 = [v1; v1; 0 0 0 0 0 0]; fprintf('matrix m2\n'); disp(m2); Ausgabe: Vektor v1 1 2 3 4 5 6 Matrix m2 1 2 3 4 5 6 1 2 3 4 5 6 0 0 0 0 0 0 Peter Sobe 36
Relations-Operatoren in Matlab Einzelne Werte, Vektoren und Matrizen können verglichen werden. Es entsteht ein logischer Wert (0 oder 1), bzw. ein Vektor logischer Werte, oder eine Matrix logischer Werte. Operator Bedeutung < kleiner als <= kleinergleich > größer als >= größer oder gleich als == gleich ~= Ungleich Achtung: Unterschied gegenüber = Peter Sobe 37
Logische Ausdrücke in Matlab Bisher hatten wir die Operationen AND, OR, NOT innerhalb aussagenlogischer Ausdrücke benutzt. Diese Operation besitzen in Matlab spezielle Symbole: Operation Matlab-Symbol Beispiel AND && if a>0 && a<100 OR if monat==4 monat==6 NOT ~ if ~(a<=0 a>=100 ) Eine weitere logische Operation XOR: entwederaoderb=xor(a,b); % ginge auch anders, und zwar so entwederaoderb=(a && ~B) (~A && B); Peter Sobe 38
Logische Ausdrücke in Matlab Jede Relation und jeder aussagenlogische Ausdruck kann auf skalare Variable (1x1), Vektoren(1xn) oder Matrizen (mxn) angewendet werden. m1 = [1 2 3; 4 5 6; 7 8 9]; m2 = [3 2 1; 5 6 4; 7 9 8]; vgl = m1 < m2; vgl = 1 0 0 1 1 0 0 1 0 m1 = [1 2 3; 4 5 6; 7 8 9]; vgl = m1 < 5; vgl = 1 1 1 1 0 0 0 0 0 Peter Sobe 39
Logische Ausdrücke in Matlab Jede Relation und jeder aussagenlogische Ausdruck kann auf skalare Variable (1x1), Vektoren(1xn) oder Matrizen (mxn) angewendet werden. Geschickte Ausnutzung für die Bildung einer elementweisem absoluten Differenz m1 = [1 2 3; 4 5 6; 7 8 9]; m2 = [3 2 1; 5 6 4; 7 9 8]; m1_kl_m2 = m1 < m2; m3p1 = (m1_kl_m2.* (m2 - m1)); m3p2 = (~m1_kl_m2.* (m1 - m2)); m3 = m3p1 + m3p2; Peter Sobe 40
Nützliche Funktionen Summe über Vektoren V = [0.5 1.2 3.4]; S = sum(v); % summiert die Elemente eines Vektors M = [1 2 3; 4 5 6]; SS = sum(m); % summiert spaltenweise und liefert Vektor der Spaltensummen Minima über Vektoren ( Maxima ähnlich) V = [0.5 1.2 3.4]; mi = min(v); % kleinstes Element des Vektors M = [1 2 3; 4 5 6]; smi = min(m); % spaltenweises Minima Peter Sobe 41
Nützliche Funktionen Arithmetisches Mittel über Vektoren V = [0.5 1.2 3.4]; mw = mean(v); M = [1 2 3; 4 5 6]; smw = mean(m); % mittelt spaltenweise Zum Nachdenken: Wie bildet man eine Summe über alle Elemente einer Matrix? Wie findet man den maximalen, bzw. minimalen Wert in einer Matrix? Wie berechnet man das arithmetische Mittel aller Werte in einer Matrix? Peter Sobe 42