In den folgenden Abschnitten soll es um eine der wichtigsten Elemente der Programmierung gehen: die Kontrollstrukturen. Sie sollen dazu genutzt werden, um die geschriebenen Programme zu steuern, was zum einen mittels Verzweigungen also einer Art Entscheidungsbaum (if) und zum anderen über Schleifen (for, while) möglich ist.
Im ersten Teilkapitel werden Sie die Möglichkeit der Verzweigung kennenlernen. Dabei geht es über if (wenn, falls) darum bestimmte Bedingungen abzufragen und nur wenn diese erfüllt sind einen bestimmten Teil ihre Programms auszuführen. Dies lässt sich wieder leicht vergleichen mit dem Vorgang des Einloggens auf einer Website. Geben Sie dort ihren Benutzernamen und das Passwort ein und Ihnen unterläuft dabei ein Fehler, wird nicht die gesamte Seite mit einer Fehlermeldung abstürzen, sondern ihnen wird eine Meldung ausgegeben, dass etwas nicht stimmt. Dies erfolgt beispielsweise über einen solchen Entscheidungsbaum mithilfe der if-Bedingung. Klicken Sie auf den Button zum Einloggen, werden ihre Eingaben mit der Datenbank verglichen, falls (if) ihr Name existiert und das Passwort übereinstimmt, werden sie eingeloggt. Sonst (else) gibt es eine Fehlermeldung.
Dies können Sie nun ganz einfach in matlab implementieren, was vor allem dann Sinn macht, wenn es Eingaben sind, die vom Nutzer abhängen, wie Sie im Kapitel Interaktive Eingabe gelernt haben. Schließlich möchten Sie ihn auf seine fehlerhafte Eingabe hinweisen und Ihn nicht mit der im Falle einer falschen Eingabe auftretetenden Fehlermeldung matlabs allein lassen. Um ein Gefühl für notwendige Abfragen zu bekommen sollten Sie sich auch bei späteren Programmen überlegen, wo ein solches Problem auftreten könnte. Um dies zu verdeutlichen öffnen Sie das Skript und ändern Sie es wie folgt ab.

Rechnen

Nun überlegt man sich an welcher Stelle könnte ein Fehler durch eine falsche Eingabe des Nutzer auftreten. Da b nun nicht mehr über die Eingabe von a definiert wird, sondern ein fester Zeilenvektor (1x3 Matrix) ist, könnte es dann zu Problemen kommen, wenn a und b komponentenweise multipliziert werden oder das Skalarprodukt von a und b transponiert errechnet werden soll (Dimensionsfehler). Denn wann sind diese Operationen nur möglich? Wenn a eine 1x3 Matrix ist. Andernfalls stimmen die Dimensionen nicht überein. Um dies abzufangen, kann man nun eine Abfrage einbauen.

Rechnen

Führt man das Skript erneut aus und hält sich an die Aufforderung des Input-Befehls werden die Operationen wie gewünscht ausgeführt. Gibt man allerdings etwas anderes ein, erscheint der Text 'Falsche Eingabe' und das Skript ist beendet ohne das ein matlabeigener Error aufgetaucht ist. Natürlich lässt sich der gewünschte Text bei fehlerhafter Eingabe präzisieren, was später bei mehreren Eingaben notwendig ist, damit der Nutzer weiß, wo sein Fehler lag.

Rechnen

Damit wird deutlich, dass die if-Abfrage ein mächtiges und wichtiges Werkzeug ist, um verschachtelte Skripte zu bauen, die von Nutzereingaben abhängig sind. Da man somit alle Art von Fehler abfangen und den jeweiligen Nutzer entsprechend darauf hinweisen kann, dass etwas nicht stimmt.
Des Weiteren sieht man, dass hinter dem if eine bestimmte Bedingung steht, die erfüllt sein muss, um diesen Pfad abzulaufen. In jedem anderen Fall soll das ausgeführt werden, was unter else steht. Natürlich kann es auch passieren, dass man mehr als zwei Pfade hat, was sich dann über den Begriff elseif definieren lässt. Wie in den Bildern zu sehen, kann man also eine Verzweigung aufbauen mit verschiedenen Bedingungen. Zu beachten ist dabei stets, dass jede if-Abfrage, die man öffnet mit einem end geschlossen werden muss.

Rechnen
Rechnen

Ebenso ist es wichtig auf den Unterschied bei der Nutzung des Symbols = zu achten. Bisher war die Verwendung von einem Gleichheitszeichen bekannt. Dies gilt IMMER als Zuweisung. Möchte man zwei Elemente z.B. in einer if-Abfrage vergleichen, so setzt man ein doppeltes Gleichheitszeichen.

Neben dem Aufzählen verschiedener Zweige über if und elseif kann man auch einem Pfad verschiedene Bedingungen zuweisen indem man diese mit einem entsprechenden Operator verknüpft. In den nachstehenden Tabellen ist eine Übersicht der wichtigsten Vergleiche und Verknüpfungen.

Vergleichsoperator Bedeutung
== Prüft die Gleichheit der beiden Elemente.
~= Prüft die Ungleichheit der beiden Elemente.
<= Prüft ob das linke Element kleinergleich dem rechten ist.
>= Prüft ob das linke Element größergleich dem rechten ist.
< Prüft ob das linke Element kleiner dem rechten ist.
> Prüft ob das linke Element größer dem rechten ist.
&& Logisches Und. Wird genutzt um Bedingungen zu verknüpfen die gleichzeitig beide erfüllt sein müssen.
|| Logisches Oder. Wird genutzt um Bedingungen zu verknüpfen von denen mindestens eine erfüllt sein muss.

ACHTUNG: Vergleicht man wie im Skript zwei Vektoren miteinander gilt die Bedingung nur als erfüllt, wenn sie für alle Komponenten gilt. Das heißt a und b sind gleich, wenn a(1)=b(1), a(2)=b(2), ..., a(n)=b(n).
Das ist für == kein Problem, da zwei Vektoren ja nur dann gleich sind, wenn alle Komponenten gleich sind. Bei der Verwendung der Ungleichheit ~= führt dies allerdings zu einem Problem, da hier die Ungleichheit für matlab nur dann gilt, wenn alle Komponenten ungleich sind. Das heißt, wenn a = [1,2,3] und b = [1,2,3] erhält man bei der Frage, ob a==b von matlab die korrekte Antwort, dass dies der Fall ist.
Wenn c = [1,2,4] ist und man erfragt nun ob a==c, erhält man auch hier die korrekte Aussage, dass dies nicht stimmt. Wenn man allerdings a~=c abfragt, würde es zu einem Fehler kommen. Da a und c in der ersten und zweiten Komponente übereinstimmen, gilt für matlab keine komplette Ungleichheit der beiden Vektoren. Daher ist bei der Verwendung des Vergleichs ~= Vorsicht geboten und sollte immer nur für Skalare genutzt werden (Das heißt der komponentenweise Vergleich der Vektoren).

Rechnen
Rechnen

News

01. April 2015 | Grundversion verfügbar

Inhalt:

Marcus Bether, Michael Klöppel

Technische Umsetzung:

Marcus Bether, Michael Klöppel

Kontakt:

Jörg Wensch
E-Mail: