PDF-Druckversion - eTools

Transcription

PDF-Druckversion - eTools
Einführung in Matlab
Einführung in Matlab
Inhaltsverzeichnis
Anleitung ...................................................................................................................................................... 4
Voraussetzungen .................................................................................................................................. 7
Bedienungshinweise ............................................................................................................................. 9
Vorbereitung ........................................................................................................................................... 11
Installation von Matlab ...................................................................................................................... 12
Herunterladen der notwendigen Materialien ..................................................................................... 13
Konfiguration von Matlab ................................................................................................................. 14
Lektion 1: Grundlagen von Matlab ........................................................................................................... 17
Wozu kann man Matlab gebrauchen? ................................................................................................... 18
Einige Beispiele im Direktmodus ...................................................................................................... 20
Demonstrationsbeispiele von Matlab ................................................................................................. 23
Beispiel aus der psychologischen Forschungspraxis ......................................................................... 24
Die Benutzeroberfläche .......................................................................................................................... 26
Darstellungsmöglichkeiten des Desktops .......................................................................................... 27
Das «Command Window» ................................................................................................................. 29
Der «Workspace» ............................................................................................................................... 31
Der «Current Directory»-Browser ..................................................................................................... 33
Die «Command History» ................................................................................................................... 34
Benutzung des Hilfe-Systems ............................................................................................................ 35
Zusammenfassung .............................................................................................................................. 37
Zahlen und Variablen in Matlab ............................................................................................................ 38
Repräsentation von Zahlen ................................................................................................................ 39
Variablen ............................................................................................................................................ 40
Zusammenfassung .............................................................................................................................. 42
Repräsentation von Daten 1: Skalare, Vektoren und Matrizen ............................................................. 43
Skalare ................................................................................................................................................ 44
Vektoren ............................................................................................................................................. 45
Matrizen ............................................................................................................................................. 46
Zusammenfassung .............................................................................................................................. 48
Matrizenmanipulation ............................................................................................................................ 49
Matrizen zusammenfügen .................................................................................................................. 50
Vervielfältigung von Matrizen ........................................................................................................... 51
Erzeugen spezieller Matrizen ............................................................................................................. 52
Umformen von Matrizen ................................................................................................................... 53
Aufgabe 1: Erstellen einer komplexen Datenmatrix ......................................................................... 54
Zusammenfassung .............................................................................................................................. 56
Mathematische Operatoren und Funktionen .......................................................................................... 57
Operatoren .......................................................................................................................................... 58
Funktionen .......................................................................................................................................... 59
Aufgabe 2: Umsetzen einer mathematischen Formel ........................................................................ 60
Aufgabe 3: Überprüfung eines magischen Quadrates ....................................................................... 61
Zusammenfassung .............................................................................................................................. 62
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
1
Einführung in Matlab
Testfragen ............................................................................................................................................... 63
Glossar .................................................................................................................................................... 65
Lektion 2: Programmieren in Matlab ........................................................................................................ 66
m-Files: Skripte und Funktionen ........................................................................................................... 67
Der Editor/Debugger .......................................................................................................................... 68
Programmieren von Skripten ............................................................................................................. 70
Aufgabe 4: Programmieren eines Skriptes ........................................................................................ 72
Programmieren von Funktionen ........................................................................................................ 74
Spezialfälle ......................................................................................................................................... 77
Zusammenfassung .............................................................................................................................. 79
Programm-Kontrollstrukturen: Schleifen ............................................................................................... 80
Die for-Schleife .................................................................................................................................. 81
Die while-Schleife ............................................................................................................................. 82
Abbruch von Schleifen mit break ...................................................................................................... 83
Aufgabe 5: Gauss-Funktion für einen Vektor ................................................................................... 84
Vektorisierung von Schleifen ............................................................................................................ 85
Zusammenfassung .............................................................................................................................. 86
Programm-Kontrollstrukturen: bedingte Verzweigungen ...................................................................... 87
Die Verzweigungsstruktur if-elseif-else ............................................................................................ 88
Die switch-case-Struktur .................................................................................................................... 89
Vergleichsoperatoren und logische Verknüpfungen .......................................................................... 91
Aufgabe 6: Standardisierungsfunktion .............................................................................................. 93
Zusammenfassung .............................................................................................................................. 94
Repräsentation von Daten 2: Zeichenketten (Strings) ........................................................................... 95
Strings erzeugen und zusammenfügen .............................................................................................. 96
Strings untersuchen und vergleichen ................................................................................................. 97
Zusammenfassung .............................................................................................................................. 98
Testfragen ............................................................................................................................................... 99
Glossar .................................................................................................................................................. 100
Lektion 3: Arbeiten mit externen Dateien ............................................................................................... 101
Datenimport .......................................................................................................................................... 102
Einlesen von Daten aus externen Dateien: interaktiv ...................................................................... 103
Einlesen von Daten aus externen Dateien: programmiert ............................................................... 104
Beispiel: Routine zum Einlesen von Daten aus externer Datei ....................................................... 106
Zusammenfassung ............................................................................................................................ 110
Repräsentation von Daten 3: Cell Arrays ............................................................................................ 111
Datenrepräsentation in Cell Arrays ................................................................................................. 112
Erzeugen und referenzieren von Cell Arrays .................................................................................. 113
Zweites Beispiel zum Einlesen von Daten aus externer Datei ........................................................ 115
Zusammenfassung ............................................................................................................................ 116
Repräsentation von Daten 4: Structure Arrays .................................................................................... 117
Repräsentation von Daten in Structure Arrays ................................................................................ 118
Anwendungsbeispiel ........................................................................................................................ 119
Zusammenfassung ............................................................................................................................ 120
Eigenes Datenverarbeitungsprojekt ...................................................................................................... 121
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
2
Einführung in Matlab
Datenbasis ........................................................................................................................................
Grobstruktur .....................................................................................................................................
Datensatz EyeData Processing .........................................................................................................
Aufgabe P1: Einlesen der Daten .....................................................................................................
Interaktion mit dem Benutzer ..............................................................................................................
Auswahl von Dateien und Verzeichnissen ......................................................................................
Mustercode: Alle Dateien aus Verzeichnis wählen .........................................................................
Weitere Benutzereingaben ...............................................................................................................
Aufgabe P2: Benutzereingaben .......................................................................................................
Zusammenfassung ............................................................................................................................
Schreiben von Daten in externe Dateien .............................................................................................
Grundlegende Funktionen zum Schreiben in externen Dateien ......................................................
Aufgabe P3: Daten speichern ..........................................................................................................
Zusammenfassung ............................................................................................................................
Glossar ..................................................................................................................................................
Lektion 4: Verarbeitung und grafische Darstellung von Daten ...............................................................
Daten selektieren: Logisches Indizieren und die «find»-Funktion ......................................................
Logische Indizierung ........................................................................................................................
Die find-Funktion .............................................................................................................................
Eine hilfreiche Funktion: subM .......................................................................................................
Zusammenfassung ............................................................................................................................
Grundlegende Statistikfunktionen ........................................................................................................
Deskriptivstatistik .............................................................................................................................
Korrelation und Kovarianz ..............................................................................................................
Zufallsdaten mit bestimmten Verteilungen ......................................................................................
Aufgabe P4: Projektarbeit - Verarbeitung der Daten ......................................................................
Zusammenfassung ............................................................................................................................
Grafikgrundlagen: Figuren und Achsensysteme ..................................................................................
Erzeugung und Manipulation von Figuren ......................................................................................
Eigenschaften von Figuren ..............................................................................................................
Achsensysteme (Axes) .....................................................................................................................
Multiple Achsensysteme ..................................................................................................................
Zusammenfassung ............................................................................................................................
Grafikwerkzeuge ..................................................................................................................................
Die plot-Funktion .............................................................................................................................
Balkengrafiken .................................................................................................................................
Weitere Grafik-Funktionen kurz demonstriert .................................................................................
Grafiken beschriften und erweitern .................................................................................................
Aufgabe P5: Projektarbeit - Grafische Darstellung der Daten ........................................................
Zusammenfassung ............................................................................................................................
Schlussbemerkungen ............................................................................................................................
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
122
123
124
125
128
129
132
134
136
137
138
139
141
142
143
144
145
146
147
148
149
150
151
153
154
156
157
158
159
161
162
163
164
165
166
170
172
173
177
179
180
3
Einführung in Matlab
Anleitung
Was wird durch dieses Lernprogramm abgedeckt?
Dieser Einführungskurs soll eine praxisnahe Einführung
in die Arbeit mit dem Programm Matlab® der Firma The MathWorks bieten, mit besonderem
Augenmerk auf die Aspekte, die für die Verarbeitung von Daten im Rahmen psychologischer
Forschungstätigkeit relevant sind. Matlab wird häufig bei Experimenten eingesetzt, die mit psychophysischen
Methoden wie Elektroenzephalographie (EEG), Augenbewegungsregistrierung (eye tracking) oder
Hautleitfähigkeitsmessungen (GSR - galvanic skin response) arbeiten. Grundsätzlich ist Matlab bei der
Auswertung grosser, häufig automatisiert erfasster Datenmengen sehr nützlich, wie dies z.B. auch bei LogfileAnalysen oder Internet-Experimenten der Fall ist.
Wozu Matlab?
Matlab ist eine Programmiersprache, die in der psychologischen Forschungstätigkeit vielseitige Anwendung
findet. Sie eignet sich besonders für die Analyse der erzielten Daten, kann aber auch für die Programmierung
computergesteuerter Experimente eingesetzt werden. Ein besonderer Vorteil ist, dass Matlab im Gegensatz zu
den meisten anderen Programmiersprachen als «Interpreter» arbeitet: Eingegebene Befehle und Programme
werden sofort ausgeführt, ohne dass man vorher in einem zusätzlichen Schritt das Programm zuerst kompilieren
muss. Auf diese Weise kann man z.B. unkompliziert ausprobieren, wie die Syntax sein muss, damit der
Rechner das tut, was man von ihm will. Die so erprobten Befehle kann man dann per «copy-and-paste» in
Programmdateien übernehmen.
Umfang dieses Lernprogramms
Matlab ist ein sehr umfassendes Programmpaket, und die meisten Anwender nutzen nur einen kleinen Teil
davon. Dank einer sehr guten integrierten Dokumentation und Hilfe-Funktion ist es aber relativ einfach, weitere
Funktionen dazuzulernen, wenn man die Grundzüge einmal verstanden hat.
In diesem Sinne beschränkt sich dieses Lehrmittel auf die Grundfunktionalität von Matlab, also Matrizenbasierte Datenverarbeitung und Visualisierung.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
4
Einführung in Matlab
Die Funktionalität von SimuLink (Simulationsprogramm) wird nicht abgedeckt. Ebensowenig kann auf
Funktionen von spezialisierten Toolboxen (neural network toolbox, wavelet toolbox etc.) eingegangen werden,
welche im Rahmen der psychologischen Forschung kaum zur Anwendung kommen. Vielmehr soll eine Basis
vermittelt werden, von der ausgehend es möglich sein sollte, sich selbstständig weitere Kenntnisse anzueignen.
Übersicht über die Lerninhalte
•
Wozu kann man Matlab gebrauchen?
•
Arbeiten mit der Benutzeroberfläche
•
Grundlegendes: Zahlen, Datentypen, Operatoren, Funktionen etc.
•
Programmierung von Skripten und Funktionen
•
Programmkontrollstrukturen: Schleifen, Verzweigungen
•
Daten einlesen, bearbeiten und in Dateien schreiben
•
Interaktion mit dem Benutzer
•
Statistikfunktionen
•
Grafische Darstellungen
Die Lerninhalte können immer wieder direkt in kurzen Übungsaufgaben umgesetzt werden; zusätzlich stehen
Selbsttestfragen zur Verfügung, um den Lernfortschritt durch Überprüfung des Gelernten zu fördern.
Zudem erarbeiten Sie sich im Rahmen des Kurses ein etwas grösseres Programmprojekt, welches typisch
für Anwendungen in der psychologischen Forschung ist: Einlesen und Zusammenfügen von Daten aus
mehreren Datensätzen, Durchführen von Berechnungen mit diesen Daten, Abspeichern der Resultate einem
für die Weiterbearbeitung (z.B. mit SPSS oder Statistica) geeigneten Format sowie grafische Darstellung und
Visualisierung der Resultate.
Entwicklung
Dieses Lehrmittel wurde im Rahmen des Projektes edulap entwickelt.
Dr. phil. Roman von Wartburg
Inhalt, didaktisches Konzept, technische Umsetzung, Übersetzung, Animation
Sarah Steinbacher, dipl. Designerin FH
Grafisches Design
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
5
Einführung in Matlab
Radka Wittmer, M.Ed.
Beratung Mediendidaktik
Stephanie Schütze, Dipl. psych.
Beratung Usability Evaluation
Joël Fisler
Umsetzung Grafikdesign
Unterstützung
Dieses Projekt wurde durch folgende Institutionen unterstützt:
Lizenz/Copyright
«Einführung in Matlab» von Roman von Wartburg/Universitäre Fernstudien Schweiz ist unter
einer Creative Commons «Attribution/Non-Commercial/Share Alike» 2.5 Switzerland License lizenziert.
Das bedeutet, Sie dürfen das Werk vervielfältigen, verbreiten und öffentlich zugänglich machen, sowie
Bearbeitungen des Werkes anfertigen. Die Bedingungen dafür lauten: Namensnennung, keine kommerzielle
Nutzung, Weitergabe unter gleichen Bedingungen.
Weitere Informationen
Implementierung und Distribution
Dieses Tutorial wurde mit eLML umgesetzt. Der komplette eLML-Quellcode ist in den Lernpaketen enthalten,
die hier heruntergeladen werden können:
ZIP-Archiv der HTML-Version
Falls Sie keinen permanenten Internetzugang haben, können Sie dieses Archiv auf Ihre Festplatte extrahieren
und dann lokal mit Ihrem Webbrowser öffnen.
Lernpaket im IMS/CP-Format
Diese Version kann auf Lernplattformen wie OLAT, Moodle oder ILIAS verwendet werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
6
Einführung in Matlab
Voraussetzungen
Vorkenntnisse
Folgende Vorkenntnisse sind für das Bearbeiten dieses Einführungskurses hilfreich:
•
•
•
Grundlegende Erfahrung in der Arbeit mit Computern ist unabdingbar. Wer es gewohnt ist, mit
Programmpaketen wir z.B. SPSS, Excel oder E-Prime zu arbeiten, sollte mit den Basics von Matlab, wie
sie in diesem Kurs gelehrt werden, keine nennenswerten Probleme haben.
Statistisch-methodisches Grundlagenwissen auf Bachelor-Niveau der Psychologie ist vor allem
hilfreich, um die praktischen Beispiele nachvollziehen zu können. Darüber hinausgehende
mathematischen Vorkenntnisse sind nicht nötig.
Vorkenntnisse in der Computerprogrammierung sind zwar sehr hilfreich, aber nicht zwingend.
Zielsetzung
Wir haben versucht, diesen Kurs so zu gestalten, dass sowohl Leute mit Programmiererfahrung als
auch EinsteigerInnen davon profitieren können. Realistisch betrachtet wird sich die Zielsetzung und das
Anspruchsniveau für diese beiden Gruppen allerdings unterscheiden.
•
•
Wer Erfahrung mit anderen modernen Programmiersprachen hat und daher bereits mit der Denkweise
und den grundlegenden Konzepten der Programmierung vertraut ist, sollte den Kurs ohne grosse
Schwierigkeiten durcharbeiten können. Damit sollte man anschliessend in der Lage sein, selbstständig
Matlab-Programme von Grund auf neu zu erstellen. Die Grundstrukturen von Matlab unterscheiden sich
nicht wesentlich von denjenigen anderer (prozeduraler) Sprachen.
Für Leute mit gar keinen oder nur rudimentären Programmierkenntnisse wird dieser Kurs relativ
anspruchsvoll sein. Wir gehen davon aus, dass diese Gruppe nach dem Kurs in der Lage ist, vorhandene
Programme zu verstehen und modifizieren zu können, oder einfache Routinen, die den im Kurs
bearbeiteten Beispielen ähnlich sind, zu schreiben.
Hard- und Software
Da dieser Kurs als wesentlichen Teil auch praktische Übungen umfasst, ist es unabdingbar, das MatlabProgrammpaket auf demselben Computer installiert zu haben. Matlab ist verfügbar für Macintosh, Windows,
verschiedene Linux-Distributionen und Solaris (UNIX-Betriebssystem, früher SunOS).
Matlab ist eine kommerzielle Software und muss käuflich erworben werden. Eine
Lizenz für Studierende wird für USD 99 von Mathworks angeboten. Von einigen
Institutionen (z.B. Universität Bern) wird Matlab für Mitarbeitende und Studierende
gratis zur Benutzung angeboten. Bitte wenden Sie sich an die Informatikabteilung Ihrer
Institution.
Die allermeisten handelsüblichen Computer, die nicht älter als 5-8 Jahre sind, haben genügend Ressourcen
für die Arbeit mit Matlab. Falls Sie im Zweifel sind, ob dies bei Ihnen der Fall ist, konsultieren Sie bitte die
Angaben von Mathworks zu den Systemvoraussetzungen.
Hinweise zur Installation von Matlab finden Sie im Abschnitt Installation.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
7
Einführung in Matlab
Anforderung an den Web-Browser
In diesem Kurs werden gewisse Inhalte in Pop-up-Fenstern angezeigt. Damit dies möglich ist, dürfen die Popup-Fenster für die Website bzw. die Lernplattform, auf der dieser Kurs läuft, nicht gesperrt sein. Zum Test
klicken Sie hier. Wenn danach kein neues Fenster erscheint, sind Pop-up-Fenster gesperrt, und sie müssen
dies in Ihren Browser-Einstellungen korrigieren.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
8
Einführung in Matlab
Bedienungshinweise
Der Kurs ist vom Stil her als «hands-on»-Kurs oder geführtes «learning by doing» zu verstehen: Alles, was
vermittelt wird, soll sogleich im parallel laufenden Matlab-Programm selbst ausprobiert und umgesetzt werden.
So lernt man am Effizientesten.
Alle Textbereiche, welche zu konkreten Aktivitäten mit Matlab auffordern, sind grün hinterlegt und
mit diesem Icon gekennzeichnet.
Alle Anweisungen zum Eintippen im «Command Window» von Matlab werden wie folgt dargestellt
(die Eingabeaufforderung >> muss dabei nicht eingegeben werden):
>> a = sin(2)
Erläuterungen sind in Kursivschrift notiert und werden nicht mit eingegeben:
>> 23.5 * pi
pi ist intern vordefiniert
Wichtige Informationen, Merkpunkte und Zusammenfassungen werden in einer solchen
Box angezeigt und mit dem entsprechenden Icon gekennzeichnet.
Weitere Hinweis-Icons
Bestimmte Bereiche im Text werden mit weiteren Icons markiert, die folgende Bedeutung haben:
Hinweis: Damit werden ergänzende Informationen gekennzeichnet.
Hilfe: Bezeichnet Hinweise auf weiterführende Informationen im Matlab-Hilfe-System.
Popup: Werden so gekennzeichnete Links angeklickt, öffnet sich eine Box oder ein neues Fenster mit
den Inhalten.
Besondere Schreibweisen
Matlab-Ausdrücke wie Anweisungen, Funktionen und andere Code-Bestandteile werden im Text mit folgender
Schrift hervorgehoben:
matlab_code
Aufrufe von Matlab-Menufunktionen werden wie im folgenden Beispiel notiert:
Desktop > Desktop Layout > Default
Dies entspricht also folgendem Bedienungsvorgang:
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
9
Einführung in Matlab
Weitere Features
In diesem Kurs stehen Ihnen unterstützend zwei weitere Funktionen zur Verfügung. Diese können Sie über die
zusätzlichen Menupunkte unter der Hauptnavigation (für die HTML-Version) oder über die Fusszeile (Version
in einem Learning Management System wie OLAT) aufrufen.
•
•
PDF-Version: Sie können den gesamten Kurs als PDF-Dokument herunterladen. Dieses können Sie
auch ohne Internetverbindung lesen, oder sich Teile davon ausdrucken.
Befehlsliste: Darin sind alle verwendeten Befehle aufgelistet. Diese Liste öffnet sich in einem neuen,
schmalen Fenster, das Sie neben den anderen Fenstern anordnen können.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
10
Einführung in Matlab
Vorbereitung
Dieser Abschnitt beschreibt die vorbereitenden Schritte, die für das Bearbeiten dieses Kurses notwendig sind:
•
Installation von Matlab auf Ihrem Computer
•
Herunterladen und Ablegen der notwendigen Materialien wie Beispieldateien, Aufgaben, Materialien
und Musterlösungen
Konfiguration von Matlab
•
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
11
Einführung in Matlab
Installation von Matlab
Welche Version von Matlab brauche ich?
Die Version 7.2 / R2006a oder höher wird empfohlen; auch das Arbeiten mit älteren Versionen ist möglich,
nur können sich einige Details in der Bedienung der Benutzeroberfläche unterscheiden. Grundsätzlich ist
das Arbeiten insbesondere dank sinnvoller Erweiterungen besonders des Editors mit den neueren Versionen
bedeutend angenehmer.
Matlab muss käuflich erworben werden; für Studierende bietet Mathworks Lizenzen für USD 99 an. Von
einigen Institutionen (z.B. Universität Bern) wird Matlab für Mitarbeitende und Studierende gratis zur
Benutzung angeboten. Bitte wenden Sie sich an die Informatikabteilung Ihrer Institution.
Falls Matlab noch nicht auf Ihrem Computer installiert ist, tun Sie dies jetzt. Folgen Sie dazu den
Anleitungen des Installationsprogrammes.
Wichtig: Bei manchen Versionen von Matlab werden Sie während der Installation aufgefordert zu entscheiden,
was Sie alles installieren wollen: Das Matlab-Programm, die Dokumentation oder beides. Wählen Sie
beides, denn die Dokumentation ist ein unverzichtbares Hilfsmittel bei der Arbeit mit diesem komplexen
Programmpaket.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
12
Einführung in Matlab
Herunterladen der notwendigen Materialien
Zur Bearbeitung dieses Kurses benötigen Sie verschiedene Dateien wie Codebeispiele, Musterlösungen oder
Datenfiles zur Erprobung selbst geschriebener Programme. Diese müssen Sie zuerst auf Ihren Computer
herunterladen.
Bitte laden Sie die benötigten Dateien, die als komprimierte ZIP-Dateien vorliegen, jetzt herunter, wie
dies im folgenden beschrieben ist:
Beispiele und Musterlösungen
Diese Programm-Dateien finden Sie in der Datei examples.zip. Bitte diese Inhalte anschliessend in ein neues
Verzeichnis entpacken , z.B. My Documents\matlab-kurs\m\ oder d:\m\. Es ist sinnvoll, sich
das Verzeichnis zu merken oder zu notieren, da wir dieses gleich anschliessend in Matlab konfigurieren müssen
(vgl. hier).
Wichtig: Dieses Verzeichnis wird auch Ihr Arbeitsverzeichnis für die selbst verfassten Programme sein.
Daten
Einige Beispiele und Übungsaufgaben benötigen Datenfiles, welche in der Datei data.zip zusammengefasst
sind. Entpacken Sie diese bitte an einen anderen Ort, z.B. My Documents\matlab-kurs\data\.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
13
Einführung in Matlab
Konfiguration von Matlab
Einige Einstellungen sind notwendig bzw. hilfreich, um Matlab «einsatzfähig» zu machen:
•
die Einstellung des Suchpfades für die erstellten Programme
•
das Konfigurieren eines allfälligen Proxy-Servers für den Internetzugang
•
Der Tabulatorabstand des Editors kann den eigenen Wünschen angepasst werden.
Diese Schritte können Sie mit den folgenden Anleitungen nachvollziehen. Anschliessend sind Sie bereit, die
Arbeit mit Matlab zu beginnen.
Nehmen Sie folgende Einstellungen vor, falls dies nicht bereits so konfiguriert ist:
Pfadeinstellung
Matlab muss mitgeteilt werden, wo es nach Programmen suchen soll. Die Pfade für die internen/mitgelieferten
Funktionen und Toolboxen sind bereits konfiguriert, aber wir müssen dem Programm den Speicherort der selbst
erstellten Programme (die sogenannten «m-Files») mitteilen. In unserem Fall ist dies der Ort, wohin Sie die
Beispielprogramme aus der heruntergeladenen ZIP-Datei gespeichert haben (siehe Abschnitt «Materialien»,
hier). Gehen Sie wie folgt vor:
•
Menupunkt File > Set Path anwählen
•
Schaltfläche Add Folder... anklicken
•
Im Datei-Browser das entsprechende Verzeichnis suchen und anwählen, mit OK bestätigen
•
Save und Close betätigen
Die Dialogbox zur Einstellung des Pfades für m-Files
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
14
Einführung in Matlab
Proxy-Server für den Internetzugang
Für gewisse Funktionen des Hilfe-Systems ist ein Internetzugang notwendig. Falls sich Ihr Computer in einem
lokalen Netzwerk befindet, der mit einem sogenannten «Proxy-Server» arbeitet, muss dies Matlab mitgeteilt
werden. Wenden Sie sich an den Informatik-Support, wenn Sie nicht wissen, ob überhaupt ein Proxy-Server
verwendet wird, oder seine Adresse nicht kennen.Tip: Es ist die gleiche Adresse, die auch in Ihrem InternetBrowser als Proxy-Server eingestellt ist.
Diese Einstellmöglichkeiten finden Sie unter dem Menupunkt File > Preferences... (siehe untenstehende
Abbildung). Falls kein Proxy-Server vorhanden ist, entfernen Sie den Haken im Feld «Use a proxy server to
connect to the Internet». Andernfalls nehmen Sie die Einstellungen gemäss folgender Abbildung vor. Anstelle
von «proxy.unibe.ch / 80» muss Adresse und Port des Proxy-Servers Ihres Netzwerkes eingegeben werden.
Einstellungen für den Proxy-Server
Tabulatorabstand für den Editor
Diese Einstellung beinflusst die Darstellung des Programmcodes im Editor und bewirkt eine mehr oder weniger
kompakte Darstellung Ihrer Programme. Ein Wert von 2 hat sich für die meisten Benutzer als ideal erwiesen,
ist aber Geschmackssache (s. Lektion 2, Abschnitt m-Files -> Editor/Debugger) .
Sie können dies wie folgt einstellen: Menupunkt File > Preferences... anwählen, dann die Einstellung gemäss
folgender Abbildung vornehmen; es ist zweckmässig, «Tab size» und «Indent size» auf den gleichen Wert zu
setzen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
15
Einführung in Matlab
Tabulatoreinstellung für den Editor
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
16
Einführung in Matlab
Lektion 1: Grundlagen von Matlab
In dieser Lerneinheit lernen Sie, was für Möglichkeiten Matlab überhaupt bietet und wie man mit
der Benutzeroberfläche von Matlab arbeitet. Dazu werden grundlegende Fakten zur Repräsentation und
Manipulation von Daten vermittelt.
Lernziele
•
•
•
•
•
•
Sie erhalten einen Einblick in die Möglichkeiten von Matlab
Sie kennen die verschiedenen Bereiche der Benutzeroberfläche
Sie können diese an Ihre Bedürfnisse anpassen
Sie können im Direktmodus Berechnungen anstellen
Sie kennen die grundlegende Methode von Matlab, Daten zu repräsentieren (Skalare, Vektoren,
Matrizen)
Sie können diese Daten manipulieren und mathematische Funktionen und Operationen darauf anwenden
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
17
Einführung in Matlab
Wozu kann man Matlab gebrauchen?
Im folgenden erhalten Sie eine Übersicht über die Möglichkeiten von Matlab. Sollten Sie bereits wissen,
was man alles mit Matlab anstellen kann, können Sie diese Abschnitte auch überspringen und direkt zu Die
Benutzeroberfläche gehen.
Matlab steht für Matrix laboratory. Es handelt sich dabei um eine Programmiersprache und -umgebung, die
mit speziellen Datentypen (insbesondere eben Matrizen 1) arbeitet.
Wann bietet Matlab Vorteile?
Kleine, nur einmal zu erfassende und auszuwertende Datenmengen lassen sich problemlos mit
Tabellenverarbeitungsprogrammen wie MS Excel oder OpenOffice Calc vorverarbeiten und dann in
Statistiksprogrammen wie Statistica oder SPSS inferenzstatistisch auswerten. Dafür lohnt sich der Einsatz von
Matlab kaum.
Matlab wird in folgenden Fällen interessant:
•
•
•
•
Wenn es sich um die Auswertung grösserer, häufig automatisiert erfasster Datenmengen handelt, wie sie
u.a. auch bei der Durchführung von psychophysiologischen Experimenten (EEG 2, fMRI 3, Registrierung
von Augenbewegungen, Hautleitfähigkeit u.ä.) oder bei Internet-Experimenten und Logfile-Analysen
etc. anfallen. Jeden neu erfassten Datensatz in der Tabellenverarbeitungssoftware manuell zu bearbeiten
und dann in ein Statistikprogramm zu exportieren wird dann schnell sehr aufwendig, sodass eine
Automatisierung mittels eines Matlab-Programmes lohnend wird.
Die Arbeit mit programmierten Auswertungsroutinen ist auch dann effizienter, wenn die Auswertung
mehrmals verändert werden muss und dann der ganze Datensatz immer wieder neu durchgerechnet
werden soll.
Matlab bietet zudem umfangreiche Grafikfunktionen, spezielle Statistikfunktionen und weitere
interessante Features, die in den gängigen Softwarepaketen nicht oder in zu wenig flexibler Form
vorhanden sind.
Es lassen sich benutzerfreundliche Bedieneroberflächen programmieren, die die Auswertung von Daten
auch Mitarbeitenden erlaubt, die weniger gut ausgebildete Computerkenntnisse besitzen.
Auswertungsprogramme kann man natürlich auch mit anderen Sprachen wie Visual Basic, C++ oder
Java schreiben. Matlab ist aber speziell auf die Verarbeitung, Auswertung und grafische Darstellung
numerischer Daten ausgelegt. Ein besonderer Vorteil ist, dass Matlab im Gegensatz zu den meisten anderen
Programmiersprachen als «Interpreter» bedient werden kann: Man kann Befehle einzeln eingeben und sofort
ausführen lassen, und auf diese Weise ausprobieren, wie die Syntax sein muss, damit der Computer das tut,
was man von ihm will. Die so erprobten Befehle kann man dann per «copy-and-paste» in Programmdateien
übernehmen. Auch um ein Programm auszuführen, muss es nicht vorher «kompiliert» werden, wie das in
anderen Sprachen notwendig ist.
Bemerkung für Programmierer: Trotz dieser bedienungsfreundlichen Oberfläche laufen MatlabProgramme fast genauso schnell wie solche, die mit «kompilierten» Programmiersprachen wie C
++ oder Pascal erstellt wurden. Zudem besteht auch die Möglichkeit, ein Matlab-Programm zu
kompilieren und als «stand alone»-Programm laufen zu lassen.
1
Die wichtigste Art der Repräsentation von Daten in Matlab. In der Mathematik ist eine Matrix (Plural: Matrizen) eine Tabelle von Zahlen
oder anderen Größen. Matrizen unterscheiden sich von einfachen Tabellen dadurch, dass mit ihnen gerechnet werden kann. Mit dem
Ausdruck Matrix ist meist eine zwei- oder höherdimensionale Matrix gemeint (vgl. Skalar, Vektor).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
18
Einführung in Matlab
Beispielhafter Ablauf der Datenverarbeitung
Im folgenden sehen Sie eine schematische Darstellung eines typischen Projektes. Daraus wird ersichtlich,
welche Schritte der Datenverarbeitung oft mit Matlab realisiert werden.
Beispiel des Datenflusses in einem Projekt
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
19
Einführung in Matlab
Einige Beispiele im Direktmodus
Direktmodus bedeutet, dass Anweisungen direkt im «Command Window» auf der
«Command Line», also direkt nach dem Prompt >> eingegeben werden. Matlab führt
diese dann sofort aus. Dies steht im Gegensatz zum Programmier-Modus, d.h. wenn
zuerst ein Programm geschrieben wird, das dann später immer wieder ausgeführt werden
kann (dazu mehr in der Lektion 2).
Im folgenden können Sie selbst einige Möglichkeiten von Matlab ausprobieren. Starten Sie dazu Matlab,
geben Sie im «Command Window» hinter der Eingabeaufforderung >> die in den untenstehenden Beispielen
notierten Kommandos ein, und schauen, was passiert. Im Moment müssen Sie noch nicht jedes Kommando im
Detail verstehen, all dies wird später nochmals genauer erläutert.
Beispiel 1: Benutzen von Matlab als (etwas überdimensionierten) «Taschenrechner»
>> 27*5
>> 2^10
>> durchmesser=14.6
>> umfang=durchmesser*pi
>> flaeche=durchmesser^2*pi/4
>> ans
Erläuterungen: Einfache Berechnungen können im Direktmodus gemacht werden. Wird kein Variablenname
wie durchmesser angegeben, wird das Resultat in ans (answer) gespeichert. pi ist eine intern
vordefinierte Konstante, die jederzeit verwendet werden kann.
Beispiel 2: Erstellen einer Grafik im Direktmodus
>> x = -pi:.01:pi
>> y = sin(x)
>> plot(x,y)
>> hold on
>> z = cos(x)
>> plot(x,z,'r')
Erläuterungen: Zuerst wird eine Folge von Werten zwischen -pi und pi mit dem Abstand 0,01 generiert. Davon
werden die Sinuswerte berechnet, und die Daten anschliessend mit plot gezeichnet. hold on «fixiert»
die Grafik, damit sie von der nächsten plot-Anweisung nicht gelöscht wird. Zusätzlich wird der Cosinus
berechnet und in rot in dieselbe Grafik geplottet.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
20
Einführung in Matlab
Anschliessend das Grafikfenster schliessen: Entweder direkt so, wie man jedes Windows-Fenster schliesst,
oder mit der Eingabe von close.
Beispiel 3: Einige Statistikfunktionen
>> data = randn(1, 1000);
>> plot(data)
>> hist(data)
>> mean(data)
>> std(data)
Erläuterungen: Im ersten Schritt werden mittels der Funktion randn 1000 normalverteilte Zufallswerte
erzeugt (der Strichpunkt am Ende der Zeile verhindert die Ausgabe der Werte im Command Window). Mit
plot werden diese Rohdaten in einem neuen Grafikfenster angezeigt. hist erzeugt ein Histogramm,
in dem man die Normalverteilung sehen kann (eventuell muss man hier das Ausgabefenster wieder in den
Vordergrund holen). mean und std berechnen den Mittelwert und die Standardabweichung. Wie man sieht,
erzeugt randn Werte mit dem Mittelwert 0 und der Standardabweichung 1.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
21
Einführung in Matlab
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
22
Einführung in Matlab
Demonstrationsbeispiele von Matlab
Matlab stellt in seiner Dokumentation zahlreiche eindrückliche Demos zur Verfügung. Im folgenden können
Sie einige davon durchspielen, um ein besseres Bild der Mächtigkeit von Matlab zu erhalten.
Wählen Sie die Demos über den Start-Button von Matlab oder über das Hilfe-Menu an.
Zwei Möglichkeiten, die Demos zu starten
Nun wird das Hilfe-System gestartet. Öffnen Sie im linken Fensterteil (help browser) die Verzeichnisstruktur
«MATLAB» (auf das «+»-Zeichen clicken). Nun können Sie z.B. unter «Graphics» einige Demos anschauen.
Empfohlen:
•
2-D Plots
•
3-D Plots
•
Vibrating Logo
•
Earth's Topography
Nach dem Auswählen muss zum Starten oben rechts Run in the Command Window (und anschliessend
wiederholt Next zum weiterfahren) bzw. Run this demo angeclickt werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
23
Einführung in Matlab
Beispiel aus der psychologischen Forschungspraxis
Die nachfolgenden Grafiken zeigen einige Möglichkeiten, Augenbewegungsdaten mittels Matlab-Routinen zu
visualisieren (Quelle: Labor für Perzeption und Okulomotorik, Neurologie, Universitätsspital Bern).
Zum Vergrössern bitte die Bilder anklicken.
Darstellung des Abtastpfades: Auswertungsroutine mit grafischem Benutzerinterface
Dichtedarstellung der Fixationen: 2D density plot
Dichtedarstellung der Fixationen: 3D density plot
Darstellung von Sakkadenamplitude und -häufigkeit je Richtung
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
24
Einführung in Matlab
Dieses Element (Animation, Video etc.) kann nicht dargestellt werden und ist nur in der
Onlineversion sichtbar. [link]
Animierte Darstellung des Abtastpfades
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
25
Einführung in Matlab
Die Benutzeroberfläche
Übersicht
Die Matlab-Benutzeroberfläche, kurz «Desktop» (engl. Arbeitsfläche, Schreibtisch) genannt, ist in
verschiedene Bereiche aufgeteilt. Für ein effizentes Arbeiten mit Matlab ist das Verständnis ihrer Funktionen
grundlegend. Die wichtigsten davon werden daher in dieser Lerneinheit besprochen, nämlich
•
das Command Window
•
der Workspace
•
der Current Directory Browser
•
die Command History
Des weiteren ist es wichtig zu wissen, was das Hilfe-System von Matlab an Informationen zur Verfügung stellt.
Die Matlab-Benutzeroberfläche (Desktop)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
26
Einführung in Matlab
Darstellungsmöglichkeiten des Desktops
Der Desktop ist in verschiedene Bereiche aufgeteilt. Untenstehendes Bild zeigt die «DefaultEinstellung» (Voreinstellung).
Default-Darstellung des Desktops
Die neuesten Versionen von Matlab (ca. ab Version 2008a) haben ein etwas anderes Default-Layout.
Es ist also kein Fehler, wenn Ihr Bildschirm nicht genauso aussieht, wie in der Abbildung gezeigt.
Weitere Bereiche lassen sich über den Menupunkt Desktop dazuschalten bzw. entfernen. Die verschiedenen
Bereiche lassen sich auf vielfältige Weise anordnen, Fensterteile in der Grösse und Position verändern, aus
dem Verbund mit den anderen herauslösen, und sie können die Begrenzungslinien zwischen den Teilfenstern
verschieben. Benutzen Sie dazu die Buttons in der rechten oberen Ecke des jeweiligen Subfensters sowie
verschiedene Optionen unter dem Menupunkt Desktop benutzen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
27
Einführung in Matlab
Andere Möglichkeit der Darstellung
Falls Sie genauer wissen wollen, welche Möglichkeiten es dazu gibt, können Sie sich im Hilfesystem
kundig machen. Dieses ruft man mit über das Menu Help > Product Help auf. Die Informationen zum
Desktop finden Sie wie in der folgenden Abbildung gezeigt.
Sollte Ihr Matlab-Desktop nicht der Default-Einstellung entsprechen, stellen Sie bitte diese
Grundeinstellung her: Desktop > Desktop Layout > Default
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
28
Einführung in Matlab
Das «Command Window»
Der Bereich des «Command Windows» (Kommandofenster) ist der Kommunikationskanal zwischen dem
Benutzer und Matlab. Sie haben ihn bei der Eingabe der ersten Beispiele bereits benutzt. Er dient zur
Eingabe von Anweisungen, und Programme können Resultate in dieses Fenster ausgeben. Auch Warnungen,
Fehlermeldungen etc. erscheinen hier.
Früher eingegebene Befehle lassen sich mit den Tasten <Pfeil aufwärts> und <Pfeil
abwärts> wieder hervorholen, und dann allenfalls abändern und nochmals ausführen.
Das «Command Window» von Matlab
Einige Einstellungen des Command Windows
Mit folgenden Kommandos können Sie die Ausgabe im Command Window beeinflussen:
>> pi
>> format compact
>> pi
>> home
PI anzeigen
Ausgabeformat 'compact' einstellen
nun ist's tatsächlich kompakter
nach oben links gehen, aber Inhalt des Command Windows nicht löschen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
29
Einführung in Matlab
>> clc
löscht das Command Window komplett (clear command window)
Erläuterungen: Der Befehl format ermöglicht, die Ausgabe von Werten im Command Window auf
vielfältige Weise zu beeinflussen. format compact verhindert die Ausgabe von überflüssigen Leerzeilen.
Für weitere Möglichkeiten sehen Sie bitte die Angaben im Hilfe-System (z.B. durch die Eingabe von
docsearch format im Command Window).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
30
Einführung in Matlab
Der «Workspace»
Der Workspace ist quasi das Arbeitsgedächtnis von Matlab. Hier werden alle verwendeten Variablen
gespeichert, und darauf kann das Programm direkt zugreifen. In der untenstehenden Abbildung finden Sie
dort die Variablen vor, die wir bei den Demonstrationsbeispielen benutzt haben. Hier kann z.B. direkt auf die
Variablen zugegriffen werden, um sie anzuzeigen oder zu verändern.
Der "Workspace" von Matlab
Tools im Workspace
Markieren Sie eine Variable im Workspace und schauen Sie sich die in der Werkzeugleiste des
Workspaces vorhandenen Werkzeuge an. Am häufigsten verwendet werden Open und die GrafikTools.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
31
Einführung in Matlab
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
32
Einführung in Matlab
Der «Current Directory»-Browser
Dieser liegt im gleichen Fensterteil wie der Workspace und kann über den «Register-Reiter» hervorgeholt
werden. Er dient dazu, sich im Dateisystem des Computers zurechtzufinden, und damit das aktuelle
Verzeichnis für Lade- und Speichervorgänge von Daten sowie das Stammverzeichnis des Editors zu
wählen. Letzteres wird im Eingabefeld «Current Directory» rechts oben angezeigt und kann alternativ auch
dort gewählt werden.
Dies ist nicht zu verwechseln mit dem «path», mit dem Matlab mitgeteilt wird, wo die
Programmdateien liegen, vgl. Abschnitt Konfiguration von Matlab.
Das «Current Directory»-Fenster von Matlab
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
33
Einführung in Matlab
Die «Command History»
In diesem Unterfenster finden Sie die Geschichte Ihrer Benutzung von Matlab, d.h. die in letzter Zeit
im Command Window eingegebenen Befehle. Diese Liste lässt sich durchsuchen, einzelne Befehle erneut
aufrufen, oder es ist möglich, aus mehreren selektierten Befehlen direkt ein Programm (Skript) zu erstellen.
Die "Command History" von Matlab
Nochmaliges Ausführen von früher verwendeten Befehlen
Finden und markieren (z.B. mit Shift-Click oder Ctrl-Click) Sie in Ihrer Command History die in
der obenstehenden Abbildung umrahmten Befehle, die aus den Beispielen aus dem ersten Abschnitt
stammen (falls Sie diese nicht gemacht haben, markieren Sie einige andere Befehle). Wählen Sie dann
über das Context-Menu (rechte Maustaste) den Punkt «Evaluate Selection» (oder drücken Sie F9). So
werden die markierten Befehle nochmals ausgeführt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
34
Einführung in Matlab
Benutzung des Hilfe-Systems
Das Hilfe-System von Matlab ist äusserst gut ausgebaut und macht jedes gedruckte Handbuch überflüssig.
Es ist sowohl beim Erlernen von Matlab wie auch bei der täglichen Arbeit für fortgeschrittene Anwender
ein unverzichtbares Hilfsmittel. Neben der eigentlichen Dokumentation des Matlab-Hauptprogrammes und
allfälliger Toolboxen beinhaltet es - wie wir gesehen haben - auch eine Fülle von Beispielen und einige
Tutorials, um den Einstieg zu erleichtern, sowie Links zu Online-Ressourcen von Mathworks.
Aufruf des Hilfe-Systems
Das Hilfe-System kann auf verschiedene Arten aufgerufen werden. Die wichtigsten davon sind
folgende (bitte direkt im Programm ausprobieren):
•
•
•
•
•
Über Help > Product Help. Auf diese Weise wird der Help Browser/Help Navigator geöffnet (s. Bild
unten)
Mit der Taste F1. Wenn man sich dabei im Command Window befindet, wird eine reduzierte Version
aufgerufen, ähnlich einem der anderen Unterfenster des Desktops. Unten links befindet sich ein Link
«Open Help Browser», mit dem man in die Volldarstellung wechseln kann.
Hilfe zu bestimmten Funktionen: doc funktionsname, z.B. doc sin. So wird direkt der
Eintrag für die betreffende Funktion angezeigt.
Ähnlich kann man auch im Command Window einen bereits getippten Befehl markieren und über das
Kontextmenu (rechte Maustaste) Help on Selection die Hilfe dazu aufrufen (oder mit der Taste F1).
Wenn man den Hilfeeintrag noch nicht genau kennt, kann man mittels direktem Befehl in die HilfeSuchfunktion einsteigen, z.B. docsearch operators
Inhalte finden
Matlab bietet im wesentlichen drei Möglichkeiten, Hilfe zu bestimmten Fragen zu finden. Diese sind im linken
Teil, im Help Navigator, zu finden.
1.
2.
3.
Contents: Darstellung als logisch gegliedertes Inhaltsverzeichnis.
Index: alphabetisch geordneter Index der Hilfethemen
Suchfunktion: Im Feld Search for: kann nach Stichwörtern gesucht werden. Die gefundenen Einträge
werden dann in den Search Results angezeigt, und der erste Eintrag im Hauptfenster.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
35
Einführung in Matlab
Das Hilfesystem von Matlab
Zudem werden unmittelbar nach dem Start des Hilfesystems auch im Hauptfenster verschiedene
Möglichkeiten angeboten: Suchen in Kategorien, alphabetisch, nach Objekteigenschaften, sowie Links zu
druckbaren Versionen der Dokumentation (pdf) und externen Ressourcen auf der Mathworks-Homepage.
Im Hauptfenster kann man - ähnlich wie in einem Internet-Browser - komfortabel in den Inhalten vor- und
zurückblättern, suchen, Favoriten anlegen oder drucken.
Übernehmen von Beispielcode aus dem Hilfe-System
Code-Beispiele, die in Hilfe-Einträgen erscheinen, kann man ganz einfach mittels Copy-and-Paste in
das Command Window (oder in ein Programm) kopieren und dort ausprobieren.
•
Im Help Navigator plot3 eingeben und Go clicken (alternativ: im Command Window doc plot3)
•
runterscrollen und die vier Programmzeilen nach «Examples: Plot a three-dimensional helix» selektieren
•
Edit > Copy oder Ctrl-C
•
Wechseln in das Command Window, und dort Edit > Paste oder CTRL-V ausführen
•
Die Enter-Taste zum Ausführen drücken, und... WOW!
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
36
Einführung in Matlab
Zusammenfassung
Die wichtigsten Punkte des Abschnittes «Benutzeroberfläche» finden Sie im folgenden
kurz zusammengefasst.
•
•
•
•
•
•
Der Bereich des «Command Windows» (Kommandofenster) ist der
Kommunikationskanal zwischen dem Benutzer und Matlab. Hier können Sie
Anweisungen eingeben, und Programme können Resultate in dieses Fenster
ausgeben. Auch Warnungen, Fehlermeldungen etc. erscheinen hier.
Früher eingegebene Befehle im Command Window lassen sich mit den Tasten
<Pfeil aufwärts> und <Pfeil abwärts> wieder hervorholen, und dann allenfalls
abändern und nochmals ausführen.
Der «Workspace» ist das Arbeitsgedächtnis von Matlab. Hier werden die
verwendeten Variablen gespeichert. Programme arbeiten mit diesen Variablen.
Der «Current Directory Browser» erlaubt den Zugriff auf das Dateisystem
des Computers. Man kann damit das aktuelle Verzeichnis für Lade- und
Speichervorgänge von Daten sowie das Stammverzeichnis des Editors zu wählen
Im Fenster «Command History» finden Sie die in letzter Zeit im Command
Window eingegebenen Befehle.
Das Hilfe-System von Matlab ist ein unverzichtbares Hilfsmittel für Anfänger wie
Profis. Es macht ein gedrucktes Handbuch überflüssig.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
37
Einführung in Matlab
Zahlen und Variablen in Matlab
Wie Sie bereits im Abschnitt Wozu Matlab? gesehen haben, können Berechnung, grafische Darstellungen etc.
auf simple Art im sogenannten Direktmodus - d.h. direkte Eingabe von Kommandos im Command Window
- vorgenommen werden.
In den folgenden Lerneinheiten erlernen Sie die Grundlagen, um im Direktmodus arbeiten zu können:
•
Wie werden Zahlen in Matlab dargestellt?
•
Was sind Variablen?
•
Der wichtigste Datentyp: Matrizen
•
Wie geht man mit Matrizen um?
•
Mit welchen Operatoren und Funktionen kann man rechnen?
All dies ist nicht nur im Direktmodus relevant, sondern gilt auch für selbst geschriebene Programme, wie Sie
in der Lektion Programmieren in Matlab erfahren werden.
Dies erlaubt, die Anweisungen, die in ein Programm eingefügt werden sollen, zuerst im Direktmodus
auszuprobieren, wenn man sich über deren Syntax oder Funktion im unklaren ist, bevor man sie dann ins
Programm übernimmt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
38
Einführung in Matlab
Repräsentation von Zahlen
Gemäss der Konvention im angelsächsischen Sprachraum werden Zahlen mit Dezimalstellen mit Punkt notiert.
Das Komma dient in Matlab der Trennung aufeinanderfolgender Anweisungen auf derselben Zeile. Das
Resultat einer Berechnung (hier nur die Eingabe einer Zahl) wird der vordefinierten Variablen ans (answer)
zugewiesen, sofern keine Zuweisung zu einer Variablen erfolgt.
Geben Sie die nachfolgenden Kommandos im Command Window ein und versuchen Sie
nachzuvollziehen, was Matlab damit anfängt.
>> format compact
>> 23.736
>> 7,43
>> pi
kompaktere Darstellung aktivieren
korrekte Eingabe einer Zahl
wird als zwei Zahlen interpretiert, durch das Komma getrennt
pi ist eine vordefinierte Konstante, die jederzeit verwendet werden kann
Für Zahlen in Exponentialnotation wird der Buchstabe e benutzt, um den Exponenten abzutrennen. Beispiele:
>> 1.746e5
>> 584e-11
für 1,746 x 105
auch negative Exponenten sind natürlich möglich
Im Gegensatz zu anderen Programmiersprachen verfügt Matlab auch über eine Repräsentation von zwei
besonderen Zahlenwerten: unendlich (inf, infinite) und «keine Zahl» (NaN, Not a Number). Diese können als
Resultat von Berechnungen entstehen, wie z.B. Division durch Null, und auch einer Variablen zugewiesen
werden.
Probieren Sie folgende Kommandos aus, die dies illustrieren.
>> 2/0
>> -5/0
>> 0/0
>> inf/inf
>> 0*inf
Division durch 0 gibt inf
auch minus unendlich ist möglich
0 dividiert durch 0 gibt NaN
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
39
Einführung in Matlab
Variablen
Daten werden im Arbeitsspeicher von Matlab (dem Workspace) als Variablen gespeichert.
Eine Variable ist ein reservierter Speicherplatz im Hauptspeicher des Computers,
welcher mit einem eindeutigen Namen angesprochen werden kann.
Eine Variable kann verschiedene Arten von Daten enthalten. Dieser Umstand wird
ausgedrückt, indem man sagt, dass die Variable von einem bestimmten «Datentyp» ist.
Beispiele von Datentypen sind einfache Zahlen, Matrizen, Zeichenketten (Strings), strukturierte Daten etc.
In den folgenden Beispielen arbeiten wir mit einfachen Zahlen. Weitere Datentypen werden Sie im späteren
Verlauf kennenlernen.
Im Gegensatz zu vielen anderen Programmiersprachen müssen Variablen in Matlab nicht vordefiniert - d.h.
ihnen ein Speicherplatz zugewiesen - werden. Matlab reserviert ihren Speicherplatz bei der ersten Verwendung
(d.h. bei der ersten Zuweisung eines Wertes) automatisch.
Konventionen für Variablennamen
Eine Variable wird durch einen eindeutigen Namen gekennzeichnet. Dieser muss mit einem Buchstaben
beginnen, und kann danach Buchstaben, Zahlen oder den «underscore» _ enthalten.
Variablennamen sind case-sensitive, d.h. Gross- und Kleinschreibung ist relevant.
An den folgenden Beispielen sehen Sie, welche Variablennamen möglich sind und wie diese mit
Inhalten befüllt und diese auch wieder abgerufen werden können.
>> Speed = 63
>> g65_fubar = 3
>> Speed
>> speed
>> 6test = 2
>> _foo = 1
>> hallo$du
>> pi = 11
>> sin = 0
das Gleichzeichen weist der Variablen einen Wert zu
auch ein gültiger Name
den Wert wieder abrufen
klein geschrieben geht's nicht
am Anfang kein Buchstabe ist ungültig
ebenso
nur das Sonderzeichen _ ist erlaubt
Auch das Umdefinieren von vordef. Konstanten wie pi oder Funktionsnamen
(hier die Sinus-Funktion sin) ist möglich, aber mit Vorsicht zu verwenden...
Laden und Speichern der Variablen im Workspace
Alle einmal verwendeten Variablen sind im Workspace sichtbar. Der Inhalt des Workspaces kann mit save
auf die Festplatte gespeichert werden (in dasjenige Verzeichnis, das im Current Directory Browser-Fenster
angewählt ist) und mit load wieder geladen werden.
Einzelne Variablen können mit dem Kommando clear aus dem Workspace entfernt werden.
Probieren Sie auch dies bitte selbst aus:
>> save daten
>> clear Speed
>> clear
>> load daten
speichert alle Variablen in der Datei daten.mat
die Variable Speed ist nicht mehr im Workspace sichtbar
löscht alle Variablen (siehe Workspace-Fenster)
lädt die Variablen wieder zurück (siehe Workspace-Fenster)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
40
Einführung in Matlab
Speichern und laden von Workspace-Variablen ist auch über die Menu-Buttons des Workspace-Fensters
möglich. Einzelne Variablen lassen sich direkt im Workspace löschen (Markieren und 'delete'-Taste oder
Kontextmenu > delete).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
41
Einführung in Matlab
Zusammenfassung
Die wichtigsten Punkte des Abschnittes «Zahlen und Variablen» finden Sie im folgenden
kurz zusammengefasst.
•
Die Dezimalstellen einer Zahl werden mit Punkt (nicht Komma) notiert.
•
Die Exponentialnotation erfolgt mit e, also zum Beispiel 2.7e6 für 2,7 x 106.
Operationen wie Division durch Null, die in anderen Programmiersprachen und
Anwendungen nicht zulässig sind, ergeben in Matlab definierte Werte wie inf
für unendlich oder NaN für «keine Zahl».
Eine Variable wird durch einen eindeutigen Namen gekennzeichnet. Dieser muss
mit einem Buchstaben beginnen, und kann danach Buchstaben, Zahlen oder den
«underscore» _ enthalten.
Variablennamen sind case-sensitive, d.h. Gross- und Kleinschreibung ist relevant.
•
•
•
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
42
Einführung in Matlab
Repräsentation von Daten 1: Skalare, Vektoren und Matrizen
Matlab kennt verschiedene Repräsentationen von Daten. Die wichtigste ist die Darstellung als Matrix, daher
ja auch der Name Matlab (Matrix Laboratory).
Die geläufigste Form einer Matrix ist diejenige einer zweidimensionalen Matrix, vergleichbar einer
Tabelle. Matrizen enthalten ausschliesslich numerische Werte (Ausnahme: Zeichenketten, vgl. Abschnitt
Repräsentation von Daten 2: Zeichenketten (Strings) in der nächsten Lektion.
Eine Matrix ist sehr gut geeignet, Daten abzuspeichern, wie sie auch sonst in Tabellenform erfasst werden
könnten - z.B. um schnell einen Datensatz zu erstellen, oder maschinell erfasste Daten zu repräsentieren.
Beispiel: Ein einfacher Datensatz, der in der ersten Spalte die Versuchspersonennummer enthält, in der zweiten
das Geschlecht (z.B. 1 = weiblich, 2 = männlich), in der dritten das Alter der Vp, und in Spalte vier und fünf
die Messwerte zweier abhängiger Variablen.
Einfache Datenmatrix mit Daten von fünf Versuchspersonen
Gemäss der Terminologie der linearen Algebra werden gewisse Sonderfälle von Matrizen, entsprechend ihrer
Anzahl Dimensionen, wie folgt bezeichnet:
•
Skalar: «nulldimensionale» Matrix, d.h. nur ein Element
•
Vektor: eindimensionale Matrix
•
Matrix: zwei- oder höherdimensionale Matrix. Diese werden oft auch als Array bezeichnet.
Diese werden Sie im folgenden genauer kennenlernen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
43
Einführung in Matlab
Skalare
Ein Skalar ist eine Matrix mit einer Zeile und einer Spalte, also mit nur einem einzigen numerischen Wert.
Die Schreibweise mit eckigen Klammern [
] bezeichnet immer eine Matrix,
inkl. Skalare und Vektoren! (mit einer Ausnahme, s. Abschnitt Programmieren von
Funktionen, Beispiel 3).
Bitte probieren Sie's aus:
>> sk = 93
>> sk2 = [13]
>> sk(1,1)
>> isscalar(sk)
Dies ist ein Skalar. Dafür sind die eckigen Klammern also nicht zwingend.
allgemeinere Schreibweise als 1x1-Matrix
ist identisch mit sk - das Element in Zeile 1, Spalte 1
bestimmt, ob sk ein Skalar ist (1 = ja, 0 = nein)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
44
Einführung in Matlab
Vektoren
Ein Vektor enthält mehr als ein numerisches Element, die quasi nebeneinander oder untereinander angeordnet
werden.
Abhängig davon, ob die Elemente des Vektors nebeneinander oder untereinander angeordnet sind, spricht man
von:
•
Spaltenvektoren (eine Spalte, beliebig viele Zeilen)
•
Zeilenvektoren (eine Zeile, beliebig viele Spalten)
Anders gesagt ist ein Vektor also eine Matrix mit nur einer einzigen Zeile oder einer Spalte.
Bitte versuchen Sie die folgenden Beispiele nachzuvollziehen:
>> zvekt = [1 4 8]
>> zvekt = [1,4,8]
>> zvekt(2)
>> zvekt(0)
>> svekt = [12; 55; inf]
>> svekt(1:2)
>> folge = 0:2:10
>> folge2 = 20:30
>> folge3 = pi:-.1:-pi
>> folge2'
>> isvector(folge2)
>> length(folge3)
ein Zeilenvektor mit drei Elementen
die Elemente können mit Leerschlag oder Komma getrennt werden
Das zweite Element des Vektors abrufen
Wichtig: Es gibt es kein «nulltes» Element!
ein Spaltenvektor. Der Strichpunkt trennt die Zeilen
das erste bis zweite Element des Vektors abrufen
erzeugt einen Vektor mit Zahlen in gleichem Abstand.
wird der mittlere Wert weggelassen, beträgt der Abstand 1
auch negative und gebrochene Schrittweiten sind möglich
Der Apostroph transponiert eine Matrix.
Hier: Umwandlung Zeilen- zu Spaltenvektor
ist das ein Vektor?
bestimmt die Länge eines Vektors
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
45
Einführung in Matlab
Matrizen
In der Mathematik ist eine Matrix (Plural: Matrizen) eine Tabelle von Zahlen oder anderen Größen. Die
gebräuchlichste Matrix ist sicher die zweidimensionale (m Zeilen, n Spalten), sie entspricht einer Tabelle,
wie man sie z.B. aus MS Excel kennt (allerdings kann sie nur Zahlen enthalten). Matlab erlaubt aber auch
höherdimensionale Matrizen, also solche mit drei oder mehr Dimensionen.
Demonstrationsbeispiel: Die Matrix in «Melancholia» von Dürer
>> load durer
>> image(X)
>> colormap(map)
>> load detail
>> image(X), colormap(map)
>> m4 = magic(4)
lädt einen vordefinierten Datensatz in den Workspace (Variable X)
stellt ihn als Bild dar
lädt die richtige Farbpalette dazu. Finden Sie die Matrix?
ein anderer Datensatz mit dem Bilddetail
Ein magisches Quadrat!
das kann Matlab auch (finden Sie den Unterschied!)
Matrizen können auf vielfältige Weise erzeugt werden, und auch der Zugriff auf ihre Elemente ist sehr variabel
möglich, wie Sie in den folgenden Beispielen sehen können.
Erzeugen von Matrizen und Zugreifen auf ihre Inhalte und Eigenschaften.
>> M3=[12 13 10;3 5 8;3 2 1]
>> M3(2, 3)
>> M3(:, 3)
>> M4 = [1:4; 6:2:12]
>> M4(1, 2:end)
>> M4(3, 4)
>> M4(3, 4) = 55
>> M5 = M4(1:2, 2:3)
>> M4(1:2, 2:3) = -1
>> mag = magic(4)
>> mag = mag(:, [1 3 2 4])
>> M4(1, 1, 3) = 100
>> groesse = size(M4)
>> size(M4, 1)
>> ndims(M4)
>> numel(M4)
>> leer = [];
>> isempty(leer)
>> isempty(mag)
>> p = pascal(8)
>> p(3, :) = []
>> p(:, 6) = []
eine 3x3-Matrix
einzelne Elemente ansprechen (Zeile, Spalte)
die ganze 3. Spalte; der : bezeichnet alle Elemente
auch die Notation für Zahlenfolgen ist möglich
end bezeichnet das letzte Element
liegt «ausserhalb» der Matrix
Matlab erweitert die Matrix automatisch und füllt mit 0 auf
eine Teilmatrix einer neuen Variablen zuweisen
einen Teil der Matrix belegen
nochmals das magische Quadrat
durch vertauschen der 2. & 3. Spalte in Dürers Quadrat verwandeln
d.h. Indizierung durch Vektor
die Matrize M4 auf eine dreidimensionale erweitern
ergibt die Grösse der Matrix (als Vektor!)
nur die Anzahl Zeilen abfragen (2 ergibt die Spalten)
Anzahl Dimensionen (number of dimensions)
Anzahl Elemente (number of elements)
leere Matrix erzeugen
Abfrage, ob Matrix leer ist
noch eine Matrix erzeugen (Pascal'sches Dreieck)
So kann man eine Zeile aus der Matrix entfernen
analog für eine Spalte
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
46
Einführung in Matlab
Lineare Indizierung
Die lineare Indizierung ermöglicht eine etwas andere Art des Zugriffs auf
die Elemente einer Matrix. Anstatt das Element mit Zeile und Spalte zu adressieren, kann man eine Matrix
auch quasi «durchnumerieren» (zuerst in Spalten, dann in Zeilen). Mit einem einzelnen Argument adressiert
man also das x-te Element der Matrix.
In der abgebildeteten Matrix ist das Element data(2, 4) also identisch mit data(17) mit dem Inhalt 14.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
47
Einführung in Matlab
Zusammenfassung
Unten finden Sie die wichtigsten Merkpunkte wieder in einer kurzen Zusammenfassung.
Zusätzlich werden auch die häufig gebrauchten Matlab-Anweisungen aufgelistet.
Merkpunkte
•
•
•
•
•
•
•
•
•
•
•
Ein Skalar ist eine Matrix mit einer Zeile und einer Spalte, also mit nur einem
einzigen numerischen Wert.
Ein Vektor ist eine Matrix mit nur einer einzigen Zeile (Zeilenvektor) oder einer
Spalte (Spaltenvektor).
Die gebräuchlichste Matrix ist die zweidimensionale (m Zeilen, n Spalten). Matlab
erlaubt aber auch höherdimensionale Matrizen, also z.B. mit m Zeilen, n Spalten
und p Ebenen.
Matrizen und Vektoren werden bei der Definition mit eckigen Klammern [ ]
notiert. Bei Skalaren sind die Klammern optional.
Die Elemente von Matrizen und Vektoren werden in der Zeile mit Leerschlag oder
Komma getrennt. Der Strichpunkt ergibt eine neue Zeile.
Zahlenfolgen (= Vektoren) können mit der : - Notation erzeugt werden, z.B.
10:2:50 für alle geraden Zahlen von 10 bis 50.
Ein alleine stehender Doppelpunkt bezeichnet alle Elemente in einer Zeile bzw.
Spalte, z.B. daten(:, 12) für alle Zeilen, aber nur Spalte 12 der Matrix.
Beim Zugriff auf einzelne Elemente einer Matrix werden die Indices in runden
Klammern ( ) eingeschlossen.
Die Indices gehen immer von 1 bis n, der Index 0 (ein «nulltes» Element) existiert
in Matlab nicht.
Bei zweidimensionalen Matrizen ist der erste Index ist immer die Zeile (row), der
zweite die Spalte (column).
Lineare Indizierung: Anstatt das Element mit Zeile und Spalte zu adressieren, kann
man eine Matrix auch quasi «durchnumerieren» (zuerst in Spalten, dann in Zeilen).
Mit dem linearen Index adressiert man dann das x-te Element der Matrix.
Anweisungen
•
isscalar, isvector: prüft, ob eine Variable ein Skalar bzw. ein Vektor
ist
•
•
•
•
•
length bestimmt die Länge eines Vektors
ndims ergibt die Anzahl Dimensionen einer Matrix
numel berechnet die Anzahl Elemente einer Matrix
size gibt die Grösse der Matrix zurück
isempty bestimmt, ob die Matrix leer ist
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
48
Einführung in Matlab
Matrizenmanipulation
Im folgenden erlernen Sie verschiedene Möglichkeiten, Matrizen zu manipulieren:
•
Zusammenfügen von Matrizen
•
Vervielfältigen von Matrizen
•
Erzeugen spezieller Matrizen
•
Umformen von Matrizen
Diese Lerneinheit wird mit einer ersten praktischen Übungsaufgabe abgeschlossen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
49
Einführung in Matlab
Matrizen zusammenfügen
Matrizen können mittels der normalen [ ] -Notation zusammengefügt werden.
Versuchen Sie dies anhand der folgenden Beispiele nachzuvollziehen:
>> a = magic(5);
>> b = randn(5,3);
>> c = [a b]
>> d = [a; b]
>> b = randn(5,5);
>> d = [a; b]
>> e = [a, d, a]
der Strichpunkt verhindert die Ausgabe von a im Command Window
Zufallszahlen, 5 Zeilen, 3 Spalten
horizontales Zusammenfügen
vertikales Zus.fügen: geht so nicht, weil die Anz. Spalten nicht übereinstimmen
also machen wir eine 5x5-Matrix aus b
nun funktioniert's
auch mehrere Matrizen gleichzeitig zusammenfügen ist möglich
Aus den obigen Beispielen wird ersichtlich, dass der Strichpunkt am Ende einer
Anweisung dazu dient, die Ausgabe der erzeugten Zahlenwerte bzw. die Inhalte der
Variablen im Command Window zu unterdrücken.
Matlab stellt neben der eben besprochenen Möglichkeit auch spezielle Funktionen zum Zusammenfügen von
Matrizen zur Verfügung.
Auch dies wieder an Beispielen gezeigt:
>> horzcat(a, b)
>> vertcat(a, b, a)
horizontal concatenation: horizontales Zusammenfügen
vertical concatenation: vertikales Zusammenfügen;
auch mehr als zwei Matrizen sind möglich
Eine Übersicht über die grundlegenden Befehle zur Matrizenmanipulation finden Sie im Hilfe-System,
z.B. durch Eingabe von doc elmat (elementary matrices and matrix manipulation.)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
50
Einführung in Matlab
Vervielfältigung von Matrizen
Die wichtigsten beiden Funktion zur Vervielfältigung von Matrizen lauten repmat (repetition of matrices)
und cat (concatenation).
Bitte studieren Sie die Anwendung dieser beiden Befehle anhand der folgenden Manipulationen. Die
Variablen a und b aus den vorherigen Beispielen sollten Sie noch im Workspace haben.
>> m = magic(3);
>> n = repmat(m,2,3)
>> cat(1, a, b)
>> cat(2, a, b)
Matrizen vervielfältigen. Hier 2mal vertikal und 3mal horizontal
Allgemeine Funktion: entlang der Dimension n (1. Argument) zusammenfügen.
1 = vertikal, 2 = horizontal, 3 = "Ebene"
Illustration zur cat-Funktion
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
51
Einführung in Matlab
Erzeugen spezieller Matrizen
Gewisse spezielle Matrizen werden immer wieder benötigt, daher stellt Matlab Funktionen zur Verfügung, um
diese zu erzeugen. Einige Beispiele:
•
Matrizen mit Nullen oder Einsen gefüllt
•
Matrizen von Zufallszahlen mit verschiedenen Verteilungen. Dies kann manchmal zum Testen
statistischer Funktionen oder zum Erstellen von Testdatensätzen hilfreich sein. Siehe hiezu auch
Abschnitt Zufallsdaten in Lektion 4
Besondere Matrizen für die lineare Algebra: Identitätsmatrix, Pascal'sches Dreieck etc.
•
Die wichtigsten dieser Funktionen können Sie aus folgenden Beispielen ersehen.
>> zeros(7, 3)
>> alleseins = ones(4)
>> a(1:5, 1:10) = 3.5
>> b = ones(7, 3) * 81
>> rand(1, 8)
>> randn(2, 6)
>> eye(5)
>> pascal(7)
>> magic(8)
Matrix mit Nullen
Matrix mit Einsen. Wird nur ein Argument angegeben,
resultiert eine quadratische Matrix
Braucht man Matrizen mit anderen Werten, gibt es versch. Methoden
zufallsverteilte Zahlen zwischen 0 und 1
normalverteilte Zufallszahlen mit Mittelwert 0 und Standardabweichung
1
sog. Identitätsmatrix (nur quadratisch möglich), für lineare Algebra
Pascal-Matrix, auch eher was für MathematikerInnen
magische Quadrate
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
52
Einführung in Matlab
Umformen von Matrizen
Die wichtigsten Umformungen sind:
•
Spiegeln (horizontal oder vertikal)
•
Rotieren
•
Transponieren (Zeilen und Spalten vertauschen)
Beispiele zum Ausprobieren:
>> a = [1 2 4 8 16; 0 1 2 3 4; -1 -6 0 1 6];
>> fliplr(a)
>> flipud(a)
>> rot90(a)
>> rot90(a, 3)
>> a'
flip left-right: an der vertikalen Achse spiegeln
flip up-down: an der horizontalen Achse spiegeln
um 90 Grad im Gegenuhrzeigersinn rotieren (default: 1mal)
3-mal um 90 Grad rotieren
Matrix transponieren (Zeilen und Spalten vertauschen)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
53
Einführung in Matlab
Aufgabe 1: Erstellen einer komplexen Datenmatrix
Sie haben nun die Grundlagen erlernt, um verschiedenste Arten von Matrizen zu erzeugen und zu verändern.
Für den Lernerfolg ist es sehr wichtig, dass Sie versuchen, dieses theoretische Wissen konkret in die Praxis
umzusetzen, indem Sie selbstständig ein Beispiel lösen.
Aufgabenstellung
Manchmal ist es hilfreich, zum Testen einer Auswertungsroutine für Experimentaldaten einen Testdatensatz
erzeugen zu können, wenn man noch keine "echten" Daten erhoben hat. Versuche Sie dies anhand der folgenden
Aufgabe umzusetzen.
Am Ende der Aufgabenstellung finden Sie den Link zu einer Musterlösung, die Sie konsultieren können, falls
Sie nicht weiterkommen. Es ist aber wichtig zu erkennen, dass es nicht nur eine mögliche Lösung gibt.
Greifen Sie nicht zu rasch auf die Musterlösung zurück, sondern versuchen Sie auch, das Hilfe-System
von Matlab zu rate zu ziehen.
Bilden Sie die unten abgebildete Matrix testdata mit hypothetischen Testdaten im Workspace
nach. Versuchen Sie dies mit möglichst wenigen Anweisungen zu erreichen.
Erläuterungen zu den Daten:
Spalte 1: Versuchspersonennummer
Spalte 2: 1. oder 2. Durchführung des Experimentes
Spalten 3-12: markieren verschiedene Experimentalbedingungen
Spalte 13: normalverteilte Zufallsdaten (sie müssen nicht identisch mit den abgebildeten Werten sein). Vier
Werte werden durch NaN als "missing data" gekennzeichnet".
Tips für verwendbare Funktionen: eye, repmat, randn
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
54
Einführung in Matlab
Musterlösung
>> testdata = (27:36)' % Vp-Nummern obere Hälfte
>> testdata = [testdata ones(1, 10)' eye(10)] % Gruppennrn. Gruppe 1 und Diagonale
>> testdata = repmat(testdata, 2, 1) % ganze Matrix vertikal verdoppeln
>> testdata(11:20, 2) = 2 % Gruppe 2 eintragen
>> testdata(:, 13) = randn(20, 1) % zufallsverteilte Daten
>> testdata([4, 11:13], 13) = NaN % missing values eintragen
Alle Zeilen können zusammen durch Copy/Paste in das Command Window übernommen
werden.
Alles, was nach dem %-Zeichen kommt, ist Kommentar und wird von Matlab nicht interpretiert.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
55
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
•
Ein Strichpunkt am Ende einer Anweisung im Direktmodus dient dazu, die
Ausgabe der erzeugten Zahlenwerte im Command Window zu unterdrücken.
Matrizen können mittels der normalen [ ]-Notation horizontal oder vertikal
zusammengefügt werden. Statt einzelner Zahlen werden dafür einfach ganze
Matrizen eingesetzt, z.B. d = [a; b]. Dabei müssen die Dimensionen
der Matrizen übereinstimmen, also die Anzahl Zeilen beim horizontalen
Zusammenfügen, und die Anzahl Spalten beim vertikalen Zusammenfügen.
Anweisungen
•
•
•
•
•
horzcat,
vertcat: Horizontales oder vertikales Zusammenfügen von
Matrizen
cat: Allgemeine Anweisung zum Zusammenfügen von Matrizen in Zeile, Spalte,
Ebene etc.
repmat: Eine Matrix vervielfältigen
zeros, ones erzeugt eine Matrix mit Nullen bzw. Einsen
rand,
randn erzeugt Matrizen mit gleich- oder normalverteilten
Zufallszahlen
•
•
•
fliplr, flipud: Spiegeln von Matrizen links/rechts bzw. oben/unten
rot90: Rotation um 90 Grad
data': Transponierung der Matrix data, d.h. Vertauschung von Zeilen und
Spalten
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
56
Einführung in Matlab
Mathematische Operatoren und Funktionen
In dieser Lerneinheit werden mathematischen Operatoren und Funktionen erläutert.
Unter mathematischen Operatoren versteht man Funktionszeichen wie:
•
Addition +, Subtraktion -, Vorzeichen etc.
•
Multiplikation * und Division /
•
Exponentialfunktionen wie Quadrierung ^2
•
Damit verbunden sind auch die Prioritäten der Operationen und die Klammerregeln
Andere mathematische Manipulationen sind als Funktionen realisiert, z.B.
•
trigonometrische Funktionen wie Sinus, Cosinus, Tangens etc.
•
deskriptive Funktionen wie Minimum, Maximum, Mittelwerte u.ä.
•
mathematische Grundfunktionen wie Quadratwurzel, Logarithmus, Summe, Rundung etc.
•
und sehr viel anderes mehr...
Der Funktionsumfang von Matlab ist immens, daher kann hier nur ein Einblick in die wichtigsten Funktionen
gegeben werden.
Der Umgang mit Funktionen und Operatoren kann anschliessend an zwei Übungsaufgaben erprobt werden.
Das Hilfe-System gibt Auskunft über weitere verfügbare Funktionen, z.B. indem man im Suchfeld des
Hilfe-Fensters elementary math eingibt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
57
Einführung in Matlab
Operatoren
Das Hilfesystem gibt einen guten Überblick über die mathematischen Operatoren und deren
Schreibweise: Entweder gibt man im Help Navigator arithmetic operators ein, oder im Command
Window docsearch 'arithmetic operators' (die Hochkommata sind nötig, weil der
Suchbegriff einen Leerschlag enthält).
Beim Ausführen von Berechnungen kommen einige Besonderheiten von Matlab zum tragen. Solange
man ausschliesslich mit Skalaren
4
arbeitet, funktioniert alles, wie es auch ein Taschenrechner
ausführen würde. Operationen mit Matrizen (und Vektoren 5) dagegen gehorchen z.T. anderen Regeln
(lineare Algebra).
Bitte versuchen Sie die nachfolgenden Beispiele zu verstehen:
>> magic(3) + ones(3)
>> a(1:3, 1:3) = 5;
>> a * magic(3)
>> a .* magic(3)
>> magic(3) * 5
Die Addition erfolgt immer Element für Element. Die beiden Matrizen
müssen die gleiche Grösse haben.
Die Multiplikation von zwei Matrizen erfolgt nicht Element für Element
(lineare Algebra, für Anwendungen in unserem Fachgebiet in der Regel
nicht relevant).
Um dies zu erreichen, verwendet man den Operator .*
(array multiplication, element-by-element product)
Um jedes Element einer Matrix mit 5 zu multiplizieren, kann man sie auch
einfach mit einem Skalar (also hier 5) multiplizieren. Dieses Verfahren
nennt sich «scalar expansion»
Wenn man sich über die Funktion eines Operators unsicher ist, probiert man es am besten einfach im
Direktmodus aus, bevor man die Operation ins Programm einfügt.
Die Rangfolge für die Ausführung verschiedener Operationen gehorcht den allgemeinen mathematischen
Regeln (z.B. «Punkt vor Strich»), wie üblich muss hier mit Klammern gearbeitet werden, wenn eine andere
Rangfolge notwendig ist.
Die Hilfe dazu erhält man mit dem Stichwort operator precedence im Hilfesystem.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
58
Einführung in Matlab
Funktionen
Matlab bietet eine Unmenge an vordefinierten mathematischen Funktionen (z.B. Sinus, Mittelwert, Wurzel
etc.).
Hilfe dazu findet man im Hilfesystem bei "Contents" unter Function reference > Mathematics >
Elementary math
Einige Beispiele für mathematische Funktionen:
>> data = magic(10);
>> sum(data)
>> sum(sum(data))
>> min(data)
>> max(data)
>> std(data)
>> sin(data)
>> round(pi)
>> why
sum bildet die Summe in Spalten
Für die Gesamtsumme kann man zwei Statements verschachteln
Minimum und Maximum pro Spalte
Standardabweichung in Spalten
Funktionen wie Sinus berechnen das Resultat für jedes Element separat
Rundungsfunktion
Auch eine Funktion: Antwort auf alle möglichen Fragen...
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
59
Einführung in Matlab
Aufgabe 2: Umsetzen einer mathematischen Formel
Setzen Sie folgende Formel der Gauss'schen Glockenkurve 6 um.
m ist der Mittelwert oder Erwartungswert (Peak der Kurve)
s ist die Standardabweichung ("Breite" der Kurve)
x ist der unabhängige Wert
e ist die Exponentialfunktion, in Matlab mit exp ausführbar. Die Wurzelfunktion heisst sqrt (Engl: square
root)
>> m = 3; s = 5; x = 2;
>> y = ...
Definition der Eingabewerte
Wie muss die Formel notiert werden? Als Resultat sollte man 0.0782 erhalten.
Musterlösung
>> m = 3; s = 5; x = 2;
>> y = 1/(s*sqrt(2*pi))*exp(-1/2*((x-m)/s)^2)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
60
Einführung in Matlab
Aufgabe 3: Überprüfung eines magischen Quadrates
Überprüfen Sie die Korrektheit eines 7x7 magischen Quadrates: Die Summe aller Zeilen, Spalten und
der beiden Diagonalen müssen gleich sein.
>> m = magic(7);
>> ...
Musterlösung
>> m = magic(7);
>> sum(m) % Summe in Spalten
>> sum(m') % m transponieren, um die Zeilensummen zu erhalten
>> sum(diag(m)) % Summe in der Hauptdiagonalen
>> sum(diag(fliplr(m))) % die andere Diagonale
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
61
Einführung in Matlab
Zusammenfassung
Die wichtigsten Merkpunkte und Befehle finden Sie wie gewohnt in der
Zusammenfassung.
Merkpunkte
•
•
Die Rangfolge für die Ausführung verschiedener Operationen gehorcht den
allgemeinen mathematischen Regeln (z.B. «Punkt vor Strich»), wie üblich muss
hier mit Klammern gearbeitet werden, wenn eine andere Rangfolge notwendig ist.
Die Übersicht über die Operatoren finden Sie mit docsearch
'arithmetic operators'
•
Addition und Subtraktion ganzer Matrizen erfolgt Element für Element.
•
Will man ganze Matrizen Element für Element multiplizieren oder dividieren, ist
eine spezielle Notation notwendig: a .* b beziehungsweise a ./ b
Andernfalls führt Matlab eine Matrizenmultiplikation bzw. -division aus, die
gemäss linearer Algebra etwas anderes (und für Anwendungen in der Psychologie
kaum relevant) ist.
Hilfesystem: In "Contents" unter Function reference > Mathematics >
Elementary math findet man die Funktionsübersicht.
•
Anweisungen
•
•
•
•
•
sum: Summe
min, max: Minimum und Maximum
std: Standardabweichung
sin, cos, tan etc.: trigonometrische Funktionen
round: Rundung
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
62
Einführung in Matlab
Testfragen
Bitte versuchen Sie zur Überprüfung ihres Verständnisses folgende Fragen zu beantworten.
Benutzeroberfläche
Mit welchem Befehl können Sie das Command Window löschen?
❍ clear
❍ clc
❍
home
❍
clrcmd
Was können Sie im Workspace-Fenster NICHT tun?
❍ Variablen aus dem Workspace entfernen
❍ Den Inhalt von Variablen verändern
❍
Daten aus externen Quellen einlesen
❍
Berechnungen vornehmen
Wie wählen Sie die Verzeichnisse aus, in denen Matlab nach Funktionen (m-Files) sucht?
❍ Über den Current Directory-Browser
❍ mit cd (change directory)
❍
Über den Menupunkt File > Set Path
Hilfe-System
Finden Sie im Hilfe-System die Antwort auf folgende Frage:
Die Funktion zum Zeichnen eines dreidimensionalen Scatterplots lautet ___________ .
Matrizen
Welcher Befehl erzeugt die folgende Matrix a?
❍
❍
❍
❍
a
a
a
a
=
=
=
=
[
[
(
[
1
1
1
1
5
5
5
6
8 3,
8 3;
8 3;
0; 5
6
6
6
6
6 7 1,
6 7 1;
6 7 1;
1; 8 7
0 1 0 8]
0 1 0 8]
0 1 0 8)
0; 3 1 8 ]
Welche Anweisungsfolge bewirkt, dass die abgebildete Matrix im Command Window ausgegeben wird?
❍
❍
a=[0 8 3;3 5 5]; b=a'; b(1,:)=NaN; [a b]
a=[0 8 3;3 5 5]; b=transpond(a); b(1,:)=[]; [a b]
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
63
Einführung in Matlab
❍
❍
a=[0 8 3;3 5 5]; b=a'; b(1,:)=[]; [a b]
a=[0 8 3;3 5 5]; b=a'; b=b(2:3,:); [a; b]
Mathematische Operationen
Welcher Code entspricht der folgenden Formel?
❍
❍
❍
❍
y
y
y
y
=
=
=
=
2*exp(-t/tau)/sqrt(x+1*x-1)
2*exp(-t/tau)/sqrt((x+1)*(x-1))
2(exp(-t/tau)/sqrt((x+1)*(x-1)))
2*e^(-t/tau)/sqrt((x+1)*(x-1))
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
64
Einführung in Matlab
Glossar
EEG:
Elektro-Enzephalographie: Registrierung der Gehirnströme
fMRI:
Funktionale Magnetresonanztomographie (functional magnetic resonance imaging)
Glockenkurve:
Dichtefunktion normalverteilter Daten
Matrix:
Die wichtigste Art der Repräsentation von Daten in Matlab. In der Mathematik ist eine Matrix (Plural:
Matrizen) eine Tabelle von Zahlen oder anderen Größen. Matrizen unterscheiden sich von einfachen
Tabellen dadurch, dass mit ihnen gerechnet werden kann.
Mit dem Ausdruck Matrix ist meist eine zwei- oder höherdimensionale Matrix gemeint (vgl. Skalar,
Vektor).
Skalar:
«nulldimensionale» Matrix, d.h. nur ein Element
Vektor:
eindimensionale Matrix, also nur eine Zeile bzw. eine Spalte
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
65
Einführung in Matlab
Lektion 2: Programmieren in Matlab
Grundsätzlich wird unter einem Programm eine Folge von Anweisungen verstanden, die bei der
Ausführung des Programmes abgearbeitet werden. Die Reihenfolge der Ausführung der Anweisungen
wird durch Programm-Kontrollstrukturen wie Schleifen oder bedingte Verzweigungen bestimmt. Diese
Anweisungsfolge ist in einer Datei gespeichert und kann dadurch immer wieder aufgerufen werden.
Lernziele
•
•
•
•
•
Sie kennen die wichtigsten Funktionen des Editors
Verständnis der Unterschiede zwischen Skripten und Funktionen
Sie können einfache Skripte und Funktionen schreiben
Sie kennen die wichtigsten Schleifen- und Verzweigungsstrukturen
Sie wissen, wie man mit Zeichenketten arbeitet
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
66
Einführung in Matlab
m-Files: Skripte und Funktionen
Alle in Matlab erstellten Programme liegen als sogenannte m-Files mit der Dateiendung .m vor - dies gilt
auch für die meisten bei Matlab mitgelieferten Funktionen. Wie diese erstellt und ausgeführt werden können,
erfahren Sie in dieser Lerneinheit.
Es existieren zwei Arten von Programm- oder m-Files: Skripte und Funktionen.
Skripte
Ein Skript enthält eine Folge von Anweisungen, die genauso arbeitet, wie wenn diese Anweisungen direkt
nacheinander im Command Window eingegeben würden. Entsprechend können Skripte auf alle Variablen im
Workspace zugreifen, und die von Skripten erzeugten Variablen werden im Workspace abgelegt.
Funktionen
Eine Funktion zeichnet sich dadurch aus, dass ihr (meistens) Werte übergeben werden, die sie verarbeiten soll,
und dass sie die Resultate an den «Aufrufer» (aus dem Command Window oder aus einem anderen Skript bzw.
Funktion) zurückgibt. Dies ist also gleich wie bei den Standardfunktionen wie z.B. der Mittelwertberechnung a
= mean(b). Der Funktion wird die Matrix b übergeben, und sie retourniert den berechneten Mittelwert a.
Der Editor/Debugger
Damit Sie überhaupt beginnen können, Skripte und Funktionen zu erstellen, müssen Sie zuerst das
entsprechende «Werkzeug» kennenlernen, nämlich den Editor. Wie der Name sagt, kann man damit Dateien oder eben m-Files - editieren. Dies geschieht im nächsten Abschnitt.
Gleichzeitig dient dieses Programm als sogenannter «Debugger», also als Hilfsmittel, um im geschriebenen
Programm Fehler (bugs) zu suchen und beheben (engl. debugging). Dies wird erst später in der Lektion 3 im
Abschnitt Anwendung: Externe Dateien demonstriert.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
67
Einführung in Matlab
Der Editor/Debugger
Um Programme zu schreiben, wird der in Matlab eingebaute Editor verwendet. Dieser ist gleichzeitig der sog.
Debugger, also das Werkzeug, das die Fehlersuche in Programmen unterstützt.
Der Debugger wird in Lektion 3 im Beispiel: Daten Einlesen demonstriert.
Der Editor kann auf verschiedene Arten aufgerufen werden:
•
Durch Eingabe von edit oder edit funktionsname (bzw. skriptname)
•
durch Markieren eines Funktionsnamens im Command Window und Anwahl von open über das
Kontextmenu (rechte Maustaste bzw. ctrl-Klich auf Macs mit Eintasten-Maus)
oder dasselbe im Directory Browser.
•
Bitte beachten (für einige ältere Versionen von Matlab): Wenn man aus dem Dateimanager von
Windows heraus ein m-File (ein Matlab-Programmfile mit der Endung .m) doppelclickt, wird ebenfalls
der Editor von Matlab aktiviert, aber ohne Debug-Funktionen.
Demonstration des Editors: Bitte führen Sie die nachfolgenden Schritte aus, um das Prinzip des
Erstellens von Programmen im Editor zu erfahren.
•
•
Starten Sie den Editor durch Eingabe von edit im Command Window. Dabei öffnet der Editor auch
gerade ein «leeres» m-File.
Kopieren Sie die nachfolgenden Befehle mittels Copy/Paste in das Editor-Fenster.
[X,Y,Z] = peaks(30);
surfc(X,Y,Z)
colormap hsv
axis([-3 3 -3 3 -10 5])
•
•
Speichern Sie das Programm mittels File > Save as... unter dem Namen editordemo.m. Speicherort
ist dasjenige Verzeichnis, das Sie früher im Schritt Konfiguration von Matlab als Pfad für m-Files
definiert haben.
Gehen Sie ins Command Window und geben Sie editordemo ein; nun wird das Programm
ausgeführt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
68
Einführung in Matlab
So sollte das ungefähr auf Ihrem Bildschirm aussehen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
69
Einführung in Matlab
Programmieren von Skripten
Ein Skript ist eine externe Datei, die eine Folge von Anweisungen enthält. Matlab arbeitet diesen Skript genauso
ab, wie wenn diese Anweisungen direkt nacheinander «von Hand» im Command Window eingegeben würden.
Skripte können auf alle Variablen im Workspace zugreifen, und die von Skripten
erzeugten Variablen werden entsprechend im Workspace abgelegt.
Struktur eines Skriptes
•
•
•
•
•
Programmzeilen: Meistens wird man auf jeder Programmzeile nur einen Befehl notieren. Ein
Strichpunkt nach dem Befehl verhindert, dass die erzeugten Werte im Command Window ausgegeben
werden.
Es ist aber auch möglich, mehrere Befehle pro Zeile zu schreiben; diese werden dann mittels Komma
getrennt, oder mittels Strichpunkt, wenn man zugleich die Ausgabe ins Command Window verhindern
will.
Kommentare werden mit dem Prozentzeichen % gekennzeichnet. Alles, was auf einer Programmzeile
nach diesem Zeichen erscheint, wird von Matlab nicht interpretiert.
Kopfzeilen/Hilfetext: Wie in der nachfolgenden Abbildung gezeigt, beginnt ein Skript in gutem
Programmierstil mit einigen Kommentarzeilen, die die Funktion des Skriptes beschreiben.
Diese Zeilen (bis zur ersten Leerzeile) werden ausgegeben, wenn man im Command Window mit help
skriptname)die Hilfe zu diesem Skript aufruft.
Leerzeilen: Zur visuellen Strukturierung eines Programmes lassen sich beliebig Leerzeilen einfügen,
diese beeinflussen den Programmablauf nicht.
Erstellen von Skripten
Wie im Beispiel im vorhergehenden Abschnitt gezeigt, geht das Erstellen von Skripten wie folgt vor sich:
•
Öffnen des Editors. Dabei wird eine leere Datei eröffnet.
•
Schreiben der Anweisungen im Editorfenster
•
Abspeichern des Skriptes als m-File unter einem neuen Namen
Ausführung eines Skriptes
Durch Eingabe des Skriptnamens (= Dateiname, ohne .m) im Command Window oder aus einem anderen
Skript oder einer Funktion heraus.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
70
Einführung in Matlab
Ein einfacher Skript. Im Command Window sieht man die Ausgabe beim Aufruf des Skriptes sowie der Hilfe dazu
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
71
Einführung in Matlab
Aufgabe 4: Programmieren eines Skriptes
In dieser Aufgabe geht es darum, aus den Kommandos, die Sie in der Aufgabe 1 gefunden haben, einen Skript
1
zu erstellen, der dann immer wieder aufgerufen werden kann. Wie das geht, haben Sie im vorangehenden
Abschnitt bereits gesehen.
Verfassen Sie einen Skript, der die Datenmatrix aus Aufgabe 1 erzeugt (aber ohne die NaN-Werte!),
Mittelwert und Standardabweichung der Daten in Spalte 13 pro Gruppe berechnet und diese Werte im
Command Window ausgibt.
Spalte 1: Versuchspersonennummer
Spalte 2: 1. oder 2. Durchführung des Experimentes
Spalten 3-12: markieren verschiedene Experimentalbedingungen
Spalte 13: normalverteilte Zufallsdaten (sie müssen nicht identisch mit den abgebildeten Werten sein).
Zu erzeugende Datenmatrix
Speichern Sie den Skript z.B. unter dem Namen exercise4.m in Ihrem Arbeitsverzeichnis (dasjenige, das Sie
im Abschnitt Vorbereitung/Materialien angelegt haben). Die Erzeugung der Datenmatrix können Sie aus
Ihrer eigenen Lösung von Aufgabe 1 übernehmen, oder aus dem untenstehenden Kasten.
Hinweise: Die Ausgabe ins Command Window erfolgt entweder mit der Notierung des Variablennamens (wie
im Direktmodus) bzw. des Weglassens des Strichpunktes am Ende einer Berechnung, oder mit der Funktion
disp(Variablenname). Weitere benötigte Funktionen: mean, std
% Aufgabe 4: Dieser Skript erzeugt die Datenmatrix aus Aufgabe 1,
1
Ein Skript ist eine in einer Datei (m-File) abgespeicherte Folge von Anweisungen. Diese werden genauso argearbeitet, wie wenn diese
Anweisungen Command Window eingegeben würden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
72
Einführung in Matlab
% berechnet Mittelwert und Standardabweichung pro Gruppe und gibt
% diese Werte im Command Window aus.
% Matrix erzeugen
testdata = (27:36)';
testdata = [testdata ones(1, 10)' eye(10)];
testdata = repmat(testdata, 2, 1);
testdata(11:20, 2) = 2;
testdata(:,13) = randn(20,1);
% Berechnungen und Ausgabe
...
Musterlösung (öffnet in neuem Fenster)
Die Lösung ist auch im m-File exercise4_sol.m (aus dem heruntergeladenen File examples.zip) zu finden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
73
Einführung in Matlab
Programmieren von Funktionen
Selbst erstellte Funktions-m-Files 2 werden auf die gleiche Weise angewandt wie die von Matlab
bereitgestellten Funktionen wie z.B. sin (Sinusfunktion), d.h. sie werden mit ihrem Namen (= Name des mFiles) und entsprechenden Argumenten aufgerufen, also z.B.
y = sin(x)
Eine Funktion zeichnet sich dadurch aus, dass ihr (meistens) Werte übergeben werden, die sie verarbeiten soll,
und dass sie die Resultate an den «Aufrufer» (aus dem Command Window oder aus einem anderen Skript bzw.
Funktion) zurückgibt.
Der Hauptvorteil von Funktionen ist ihre Wiederverwendbarkeit. Aufgaben, die in verschiedenen
Anwendungen immer wieder ausgeführt werden sollen, müssen so nur einmal geschrieben werden. Gibt
es Änderungen, müssen diese nur einmal in der Funktion gemacht werden; automatisch wird sie für jedes
Programm relevant, das die Funktion aufruft.
Funktionen ermöglichen so effizienteres Programmieren, und die Programme selbst werden kompakter und
damit auch besser les- und wartbar.
Funktionen sind datenmässig «gekapselt» (encapsulated), d.h. sie haben nur auf
diejenigen Variablen Zugriff, die ihnen beim Aufruf übergeben werden. Der Workspace,
wie Sie ihn bis jetzt kennen, ist für die Funktion «unsichtbar». Während der
Ausführung einer Funktion erhält sie quasi einen eigenen temporären Workspace, der die
übergebenen, zurückzugebenden und allfälligen funktions-intern definierten Variablen
enthält. Dieser wird nach der Beendigung der Funktion wieder gelöscht.
Struktur einer Funktion
Eine Funktion unterscheidet sich formal nur durch die erste Zeile von einem Skript. Sie enthält die sogenannte
Funktionsdefinition. Dadurch wird folgendes festgelegt:
•
•
•
Name der Funktion. Dieser muss identisch mit dem Dateinamen sein, unter dem die Funktion als mFile gespeichert wird.
Eingabeparameter: Sie legen fest, welche Werte der Funktion übergeben werden können.
Rückgabeparameter: Sie spezifizieren die Werte, durch die die Funktion die Berechnungsresultate
zurückgeben kann.
Beispiel 1: m-File gauss1.m
Einfache Funktion mit je einem Eingabe- und Rückgabeparameter.
Bitte öffnen Sie diese Funktion im Editor. Sie sollte ihn Ihrem Verzeichnis für m-Files liegen, und stammt aus
dem Zip-File examples.zip.
function y = gauss1(x)
% Berechnet den Wert der Gauss'schen Glockenkurve, mit fixem Mittelwert
% und Standardabweichung
% noch ein Kommentar (wird bei Eingabe von help gauss1 NICHT angezeigt)
2
Eine Datei mit der Endung .m, welche eine Folge von Matlab-Befehlen enthält. Es kann sich dabei um einen Skript oder eine Funktion
handeln.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
74
Einführung in Matlab
s = 5; % Sigma
m = 3; % Mittelwert
y = 1/(s*sqrt(2*pi))*exp(-1/2*((x-m)/s)^2);
Erläuterungen
•
Zur Gauss-Funktion siehe Aufgabe 2 in Lektion 1.
•
Zeile 1: Hier wird die Funktion mit den Ein- und Ausgabe-Parametern definiert. gauss1 ist der
Funktionsname und muss mit dem Namen des m-Files übereinstimmen. x bezeichnet den Wert, der der
Funktion übergeben wird. y ist der Wert, der das berechnete Resultat an den Aufrufer zurückgibt.
Zeile 2 und 3 enthalten eine Kurzbeschreibung der Funktion als Kommentar. Es entspricht gutem
Programmierstil, alle Funktionen mit entsprechenden Erklärungen zu versehen, damit man auch nach
einem halben Jahr noch weiss, was sie tun, oder jemand anderes die Funktion verstehen kann. Alle
Kommentarzeilen bis zur ersten Leerzeile werden ausgegeben, wenn im Command Window help
gauss1 eingegeben wird.
in der letzten Zeile wird die Berechnung ausgeführt. Als x wird also der Wert übernommen, der der
Funktion beim Aufruf übergeben wird, y wird zurückgegeben.
•
•
Anwendung der Funktion:
>> resultat = gauss1(2)
Beispiel 2: m-File gauss2.m
Funktion mit mehreren an die Funktion übergebenen Parametern.
function y = gauss2(x, m, s)
% Berechnet den Wert der Gauss'schen Glockenkurve mit variablem Mittelwert
% und Standardabweichung
y = 1/(s*sqrt(2*pi))*exp(-1/2*((x-m)/s)^2);
Erläuterungen: Nun sind auch m und s variabel und müssen der Funktion beim Aufruf übergeben werden.
Anwendung der Funktion:
>> resultat = gauss2(2, 3, 5)
Beispiel 3: m-File stats.m
Funktion mit mehreren an den Aufrufer zurückgegebenen Parametern. Diese werden in eckigen Klammern
notiert.
Dies ist der einzige Fall, in dem die eckigen Klammern [ ] nicht eine Matrix bezeichnen, sondern
einfach eine Liste von Rückgabeparametern.
% Berechnet statistische Kennwerte für einen Zeilenvektor
%
% INPUT : M_in - Eingangsvektor mit Daten
% OUTPUT: mittelw - Mittelwert
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
75
Einführung in Matlab
% stdabw - Standardabweichung
% minimum - Minimalwert
% maximum - Maximalwert
function [mittelw, stdabw, minimum, maximum] = stats(M_in)
% Bemerkung: Der Funktionsname kann am Anfang der Datei stehen, oder
% auch erst nach den Hilfe-Zeilen.
mittelw = mean(M_in);
stdabw = std(M_in);
minimum = min(M_in);
maximum = max(M_in);
Anwendung der Funktion:
>> M_in = randn(1, 300)*100+100
>> [m, s, mnm, mxm] =
stats(M_in)
>> stats(M_in)
>> a = stats(M_in)
>> [s1, s2, s3] = stats(M_in)
Zeilenvektor mit Zufallszahlen erzeugen
alle 4 Rückgabeparameter abfragen
Es ist auch möglich, nicht alle 4 Rückgabeparameter abzuholen dann wird einfach "von vorne nach hinten" aufgefüllt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
76
Einführung in Matlab
Spezialfälle
Spezialfall 1: Funktionen ohne Parameter
Soll eine Funktion geschrieben werden, die keine Eingabewerte benötigt (z.B. eine Funktion, die spezielle
Zufallszahlen generiert), oder keine Werte zurückliefert (sondern z.B. eine Grafik erzeugt), sieht die Notation
wie folgt aus:
>> function zahlen = randomx()
Keine Eingabeparameter: einfach die Klammer leer lassen
>>
function
[]
= keine Rückgabeparameter, zwei Möglichkeiten
draw_graph(M_in)
>> function draw_graph(M_in)
Spezialfall 2: Variable Anzahl Parameter
Es ist gelegentlich notwendig, Funktionen zu haben, bei denen nicht fix vorgegeben ist, wieviele Ein- oder
Rückgabeparameter vorkommen.
function string = strxcat(varargin) variable Anzahl Eingabeparameter
varargout = readsomenumbers(fid) variable Anzahl Rückgabeparameter
Die Variablen varargin (variable number of arguments IN) bzw. varargout (variable number of
arguments OUT) sind Cell arrays, ein spezieller Datentyp, der Daten verschiedenster Art enthalten kann. Mehr
über Cell arrays 3 erfahren Sie in der Lektion 4, Kapitel Cell arrays.
Als Beispiel für eine Funktion mit variabler Anzahl Eingabeparameter mag die Funktion strxcat dienen,
die auch an anderer Stelle erwähnt wird:
function string = strxcat(varargin)
% A variable number of strings or numbers are concatenated into the output string.
%
% INPUT : n strings or numbers
% OUTPUT: string
string = [];
nbarg = length(varargin);
if nbarg == 0
return
end
for arg_i = 1:nbarg
substr = varargin{arg_i}(:)';
string = [string num2str(substr)];
end
Erläuterungen: Als erstes wird mit length die Anzahl übergebener Zeichenketten (Strings 4) nbarg
ermittelt.
3
«Zellen-Felder». In jedem Feld eines Cell Arrays können unterschiedliche Datentypen abgelegt werden, z.B. Matrizen unterschiedlicher
Grösse.
4
Zeichenkette. Ein Vektor bzw. eine Matrix deren Elemente ASCII-codierte Zeichen (character) interpretiert werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
77
Einführung in Matlab
Eine Schleife mit arg_i wird dann entsprechend oft durchlaufen. Darin wird das arg_i-te Element
extrahiert, wenn nötig von einer Zahl in einen String umgewandelt, und auf der zweitletzten Zeile zu den
vorherigen Strings hinzugefügt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
78
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
•
•
•
•
•
Ein Skript enthält eine Folge von Anweisungen, die genauso arbeitet, wie
wenn diese Anweisungen direkt nacheinander im Command Window eingegeben
würden.
Ein Skript wird im Command Window aufgerufen, indem man seinen Dateinamen
(ohne .m) eingibt. Auf dieselbe Weise kann ein Skript aus einem anderen Skript
oder einer Funktion aufgerufen werden.
Skripte können auf alle Variablen im Workspace zugreifen, und die von Skripten
erzeugten Variablen werden wiederum im Workspace abgelegt.
Eine Funktion unterscheidet sich von einem Skript dadurch, dass ihr (meistens)
Werte übergeben werden, die sie verarbeiten soll, und dass sie Resultate an den
«Aufrufer» zurückgibt.
Im Gegensatz zu Skripten sind Funktionen sind datenmässig «gekapselt», d.h. sie
haben auf die Variablen im allgemeinen Workspace keinen Zugang, sondern nur
auf diejenigen Variablen, die ihnen beim Aufruf übergeben werden.
Während der Ausführung einer Funktion erhält sie quasi einen eigenen temporären
Workspace, der die übergebenen, zurückzugebenden und allfälligen funktionsintern definierten Variablen enthält.
Ein Strichpunkt am Ende einer Anweisung auf einer Programmzeile verhindert die
Ausgabe der erzeugten Zahlenwerte im Command Window.
Anweisungen
•
•
function
[Rückgabevariablen]
Funktionsname(Variablen für übergebene Werte)
=
Definitionszeile einer Funktion mit Übergabe- und Rückgabevariablen
disp(): Ausgabe von Werten ins Command Window
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
79
Einführung in Matlab
Programm-Kontrollstrukturen: Schleifen
Schleifen ermöglichen, eine Reihe von Anweisungen für eine bestimmte Anzahl von Durchläufen zu
wiederholen. Es gibt zwei Arten von Schleifen:
•
die for-Schleife: Sie wird angewandt, wenn vorbestimmt ist, wie oft sie durchlaufen werden muss
•
die while-Schleife: Damit kann die Anzahl der Wiederholungen von einem Vergleich innerhalb der
Schleife abhängig gemacht werden
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
80
Einführung in Matlab
Die for-Schleife
Die for-Schleife wird immer dann eingesetzt, wenn vorbestimmt ist, wie oft eine Folge
von Anweisungen durchgeführt werden soll.
Die Syntax der for-Schleife lautet schematisch:
for indexvar = range
anweisung 1
...
anweisung n
end
indexvar - der sog. Schleifenindex. Dieser wird bei jedem Durchlauf auf den jeweils nächsten Wert von
range gesetzt und kann als normale Variable innerhalb der Schleife verwendet werden. Dafür kann man
einen beliebigen Variablennamen verwenden.
range - Zeilenvektor oder Matrix. Bestimmt, welche Werte indexvar annimmt.
Beispiele für for-Schleifen
Bitte versuchen Sie, die Funktionsweise der for-Schleife anhand der Beispiele nachzuvollziehen.
Einfache for-Schleife:
>> for index = 1:30
>> facts = factor(index);
>> disp(facts)
>> summe = sum(facts);
>> end
Matlab tut nichts, bis es auf end trifft
die Primfaktoren des Schleifenindex' berechnen
ausgeben
weitere Anweisungen
hiermit wird die Schleife abgeschlossen und ausgeführt
Grundsätzlich sind für den Schleifenindex alle Notationen von Vektoren verwendbar:
>> for i = pi:-.3:-pi, i, end
>> for i = [1 4 7 11 13 17 3 5], i, end
>> for i = rand(1,10) * 20, i, end
beliebige Zahlenreihe
Aufzählung
durch Funktion erzeugter Vektor,
aber nur Zeilenvektoren
Wird eine Matrix als range angegeben, wird dem Schleifenindex jeweils eine Spalte von range
zugewiesen. D.h. die Schleife wird so oft durchlaufen, wie die Matrix Spalten besitzt.
>> for i = magic(7), i, end
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
81
Einführung in Matlab
Die while-Schleife
Die while-Schleife wird eingesetzt, wenn die Anzahl Wiederholungen von einem
Vergleich abhängig gemacht werden soll, der jedes Mal ausgewertet wird, wenn die
Schleife durchlaufen wird (gewöhnlich am Anfang der Schleife).
Die Syntax der while-Schleife lautet in Pseudo-Code:
while vergleich
anweisung 1
...
anweisung n
end
Die Schleife wird solange durchlaufen, wie der vergleich wahr (true, Wert > 0) ist. Der Vergleich
wird immer am Anfang der Schleife vorgenommen. Wird er das erste mal falsch (false, Wert = 0),
wird die Schleife abgebrochen, und die Ausführung geht bei der ersten Anweisung nach der Schleife
(korrespondierendes end) weiter.
Detaillierte Informationen dazu, wie man Vergleiche formulieren kann, erhalten Sie später im Abschnitt
Vergleichsoperatoren und logische Verknüpfungen.
Eine einfache while-Schleife:
>> index = 1;
>> while index <= 30
>> disp(factor(index))
>> index = index + 1;
>> end
Schleife durchlaufen, solange index kleiner oder gleich 30 ist
Primfaktoren ausgeben
index inkrementieren
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
82
Einführung in Matlab
Abbruch von Schleifen mit break
Es ist möglich, for- und while-Schleifen durch die Anweisung break zu verlassen, auch wenn sie eigentlich
noch nicht «fertig» ist.
Auf diese Weise kann zum Beispiel eine while-Schleife geschrieben werden, deren Vergleichsoperation am
Ende der Schleife oder irgendwo mittendrin ausgeführt wird, statt am Anfang. Oder man kann eine for-Schleife
bedingt verlassen, bevor der Schleifenindex den letzten Wert erreicht hat.
Beispiel 1: for-Schleife mit vorzeitigem Abbruch
>> for index = 1:30
>> disp(sum(factor(index)))
>> if index == 20, break, end
>> end
schon abbrechen, wenn der Index 20 ist
Beispiel 2: while-Schleife mit break
index = 1;
while true
disp(factor(index))
if index > 30
break
end
index = index + 1;
end
Erläuterung
true (oder auch 1) heisst im while-Statement: Vergleich wahr, hier also: IMMER (Gegenstück: false
oder 0).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
83
Einführung in Matlab
Aufgabe 5: Gauss-Funktion für einen Vektor
Schreiben Sie die Gauss-Funktion Version 2 (m-File gauss2.m) mittels einer Schleife so um (als
gauss3.m speichern), dass sie die Werte für einen Zeilenvektor berechnet, und als Vektor wieder
ausgibt. Also:
function Moutput = gauss3(Minput, m, s)
% Berechnet die Werte der Gauss'schen Glockenkurve für den Zeilenvektor
% Minput, mit dem Mittelwert m und der Standardabweichung s
...
Dann die Funktion mit den Werten -5 bis 5 (Schrittweite 0,1) aufrufen, und die resultierenden Werte mit plot
grafisch darstellen.
Musterlösung (öffnet in neuem Fenster)
Die Lösung ist auch im m-File gauss3_sol.m zu finden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
84
Einführung in Matlab
Vektorisierung von Schleifen
Dank der Datenrepräsentation als Matrizen ist es in Matlab in vielen Fällen möglich, Berechnungen von ganzen
Datensätzen sehr viel effizienter durchzuführen, als das mittels Schleifen möglich wäre.
Bitte schauen Sie sich das an folgendem Beispiel an:
Eine Möglichkeit, mit den bisher bekannten Mitteln den Sinus von 1001 Werten von 0 bis 10 zu berechnen
und im Zeilenvektor y abzuspeichern, ist:
>> i = 0;
>> for t = 0:.01:10
>> i = i + 1;
>> y(i) = sin(t);
>> end
Die «vektorisierte» Version ist viel einfacher und schneller:
>> t = 0:.01:10;
>> y = sin(t);
Oder noch kompakter:
>> y = sin(0:.01:10);
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
85
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
•
Die for-Schleife wird immer dann eingesetzt, wenn vorbestimmt ist, wie oft eine
Folge von Anweisungen durchgeführt werden soll.
Die while-Schleife wird eingesetzt, wenn die Anzahl Wiederholungen von einem
Vergleich abhängig gemacht werden soll.
Anweisungen
•
•
•
for index=1:n
(div. Anweisungen)
end
Wiederholungsschleife. Für 1:n kann ein beliebiger Vektor eingesetzt werden.
while (Bedingung)
(div. Anweisungen)
end
Schleife mit bedingtem Abbruch. Die Anweisungen werden solange durchlaufen,
wie die Bedingung erfüllt (true, Wert > 0) ist. Der Vergleich wird immer am
Anfang der Schleife vorgenommen.
break: Damit können for- und while-Schleifen abgebrochen werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
86
Einführung in Matlab
Programm-Kontrollstrukturen: bedingte Verzweigungen
In fast jedem Programm ist es notwendig, Anweisungen nur unter bestimmten Bedingungen auszuführen. Dafür
verwendet man sogenannte bedingte Verzweigungen.
Matlab stellt dafür zwei Konstrukte zur Verfügung:
•
die if-elseif-else-Struktur, und
•
die switch-case-Struktur.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
87
Einführung in Matlab
Die Verzweigungsstruktur if-elseif-else
Die Anwendung dieser Programmstruktur können Sie anhand folgender Beispiele erschliessen.
Beispiel 1: if-else-Struktur mit zwei Fällen
Laden Sie dazu das m-File example_if.m in den Editor. Dort können Sie es mit der Taste F5 ausführen lassen,
oder aus dem Command Window example_if eingeben, um den Skript auszuführen.
% Beispiel 1 für if-else
a = rand(20) * 100 - 20; % Zufallszahlen erzeugen
for i = 1:length(a)
if a(i) < 0
disp([num2str(a(i)) ': Zahl unter Null'])
else
disp([num2str(a(i)) ': Zahl über Null'])
end
end
Erläuterungen: Der zusammengesetzte Ausdruck nach disp bewirkt, dass die entsprechende Zahl mit dem
Text zusammen ausgegeben wird. Die Funktion num2str werden wir später genauer anschauen (s. hier).
Beispiel 2: if-else-Struktur mit mehreren Fällen
Sie können dazu wiederum das entsprechende m-File example_if_elseif.m in den Editor laden.
%% Beispiel 2 für if-elseif-else
a = rand(20) * 100 - 20;
for i = 1:length(a)
if a(i) < 0
disp([num2str(a(i)) ': Zahl unter Null'])
elseif a(i) >= 0 && a(i) <= 20 % ist die Zahl >= 0 UND <= 20?
disp([num2str(a(i)) ': kleine Zahl'])
else
disp([num2str(a(i)) ': grosse Zahl'])
end
end
Erläuterungen: Es ist natürlich möglich, beliebig viele elseif-Vergleiche einzufügen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
88
Einführung in Matlab
Die switch-case-Struktur
Wenn im Rahmen einer if-elseif-else-Struktur sehr viele Einzelvergleiche mit derselben Variablen gemacht
werden müssen, bietet sich die switch-case-Struktur an:
Ihre Syntax lautet schematisch:
switch indicator
case expr
anweisung, ..., anweisung
case {expr1, expr2, expr3, ...}
anweisung, ..., anweisung
otherwise
anweisung, ..., anweisung
end
indicator ist die Variable, welche die verschiedene Bedingungen enthalten kann. Sie kann sowohl ein
Skalar als auch ein String (Character Array) sein.
Die case-Anweisung vergleicht indicator mit expr. Stimmen diese überein, werden die
nachfolgenden Anweisungen innerhalb des entsprechenden case-Abschnittes durchlaufen. Anschliessend
wird das Programm nach dem end fortgesetzt.
expr enthalten die Vergleichswerte (Skalare oder Strings). Es kann sowohl ein einzelner Wert verwendet
werden, wie auch ein Cell Array mit mehreren Werten.
Nach otherwise folgen die Anweisungen, die durchlaufen werden, falls keiner der vorgängigen Vergleiche
zutraf.
Beispiel: Ersetzen eines Mehrfachvergleiches durch eine switch-case-Struktur
Betrachten Sie die folgende Umsetzung eines Mehrfachvergleiches mit if-elseif-else:
if strcmp(designator,'date')
% Anweisungen...
elseif strcmp(designator,'start')
% Anweisungen...
elseif strcmp(designator,'endtrial')
% Anweisungen...
elseif strcmp(designator,'fix') || strcmp(designator,'sacc') || strcmp(designator,'blink')
% Anweisungen...
else
% alles andere
end
Dies lässt sich eleganter und besser lesbar so formulieren:
switch designator
case 'date'
% Anweisungen...
case 'starttrial'
% Anweisungen...
case 'endtrial'
% Anweisungen...
case {'fix', 'sacc', 'blink'}
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
89
Einführung in Matlab
% Anweisungen...
otherwise
% alles andere
end
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
90
Einführung in Matlab
Vergleichsoperatoren und logische Verknüpfungen
In den beiden vorangehenden Beispielen haben Sie bereits verschiedene Vergleichsoperationen wie «kleiner
als» oder «grösser oder gleich als» gesehen.
Vergleichsoperatoren
Nachfolgend sind die grundlegenden Vergleichsmöglichkeiten dargestellt:
A
A
A
A
== B
~= B
< B bzw. A > B
<= B bzw. A >= B
Test auf Gleichheit (doppeltes Gleichzeichen!
Nicht zu verwechseln mit =, das wäre eine Zuweisung)
Test auf Ungleichheit. Die Tilde ~ bedeutet immer eine
logische Inversion, also NICHT
Test auf «kleiner» oder «grösser»
Test auf «kleiner oder gleich» bzw. «grösser oder gleich»
Als Resultat liefern Vergleichsoperationen entweder den Wert true (intern vordefiniert als 1, aber jeder Wert
> 0 wird als "wahr" interpretiert) oder false (intern vordefiniert als 0, Null).
Eine Übersicht über alle Möglichkeiten finden Sie im Hilfesystem unter dem Stichwort 'relational
operators'.
Verknüpfung von Vergleichen
Mehrere Vergleiche lassen sich auch logisch verknüpfen. Dafür stehen zwei logische Operatoren zur
Verfügung:
•
&& als UND-Verknüpfung: Der Ausdruck wird nur dann wahr, wenn Bedingung 1 und Bedingung 2
•
wahr sind.
|| als ODER-Verknüpfung: Diese bedeutet im Gegensatz zur Alltagssprache "A oder B oder beides"!
Beispiele:
>> true
>> false
>> x = 77; y = 12;
>> x < y
>> x ~= y
>> x <= 77 && y > 0
>> v = x == y
>> ~v
>> a=1:4; b=[1 3 5 7];
>> length(a)==4 || ~isempty(b)
>> a == b
die vordefinierten Werte
ist x kleiner als y?
ist x nicht gleich y?
&& und || kommen in der Reihenfolge zuletzt -> keine Klammern nötig
v enthält jetzt den Wahrheitswert 'false' oder 0
das ~ «invertiert» den Wahrheitswert (NOT-Funktion)
Vergleiche von Vektoren und Matrizen geschehen Element für Element!
Das geht nur, wenn die beiden gleich gross sind.
Solche Vergleiche stehen meist nach einem if-Statement, wie im vorherigen Abschnitt gezeigt.
>> if (x < y || y ~= 0) && (v == true || numel(a) == 4)
>> disp('das ist wahr')
>> else
>> disp('das ist falsch')
>> end
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
91
Einführung in Matlab
Übrigens: Falls eine Programmzeile so lang wird, dass sie unübersichtlich wird oder nicht
mehr ins Editorfenster passt, kann man sie mit ... aufteilen:
if (x < y || y ~= 0) ...
&& (v == true || numel(a) == 4)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
92
Einführung in Matlab
Aufgabe 6: Standardisierungsfunktion
Schreiben Sie eine Funktion mit dem Namen standardize, welche die Daten in einer maximal
zweidimensionalen Matrix von Daten z-standardisiert (also auch Vektoren, jedoch keine Skalare, weil
mindestens zwei Datenpunkte vorhanden sein müssen).
Die Formel dafür lautet:
Die Funktion soll eine gleichgrosse Matrix mit den transformierten Werten zurückgeben, und auch den
Mittelwert und die Standardabweichung der Daten. Verwenden Sie für die Umsetzung mehrere for- oder whileSchleifen (überlegen Sie sich eventuell auch, ob und wie eine «vektorisierte» Lösung – also ohne Schleifen
– möglich wäre).
Die der Funktion übergebene Matrix soll vor der Berechnung auf Gültigkeit geprüft werden:
•
•
Ist sie leer oder enthält sie nur ein Element, soll die Funktion eine leere Matrix [ ] sowie den berechneten
Mittelwert und die Standardabweichung (die dann 0 beträgt oder NaN) zurückgeben und eine Warnung
ins Command Window schreiben.
Ist die Matrix mehr als zweidimensional, soll die Funktion abbrechen und eine entsprechende
Fehlermeldung ausgeben.
Tips für möglicherweise nützliche Funktionen (Funktion allenfalls im Hilfe-System nachschlagen):
mean, std, reshape, isempty, ndims, size, numel, disp, error, return
Musterlösung (öffnet in neuem Fenster)
Die Lösung finden Sie auch im m-File standardize_sol.m, die «vektorisierte» Lösung heisst
standardize_vect.m
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
93
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Punkte:
•
•
Verzweigungsstruktur mit mehrfachen Vergleichen:
if (Bedingung 1)
(Anweisungen)
elseif (Bedingung 2)
(Anweisungen)
else
(Anweisungen)
end
Verzweigungsstruktur mit Fallverzweigung:
switch indicator
case (Wert 1)
(Anweisungen)
case {Wert 2, Wert 3, Wert 4, ...}
(Anweisungen)
otherwise
(Anweisungen)
end
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
94
Einführung in Matlab
Repräsentation von Daten 2: Zeichenketten (Strings)
Bis anhin haben wir ausschliesslich mit Matrizen gearbeitet, welche Zahlen enthielten. Oft wird man aber auch
mit Texten arbeiten müssen, also «Zeichenketten» oder «Strings» (character strings). Ein Beispiel wäre, wenn
Sie Daten aus einer ASCII 5-Datei (z.B. Tabulator-getrennte Daten) einlesen und weiterverarbeiten wollen.
Oder wenn Sie Resultate oder Benutzungshinweise für den Anwender im Klartext ausgeben wollen.
Dafür bietet Matlab die Möglichkeit, in Matrizen auch Texte abzuspeichern. Dabei wird jede Zahl in einem
Element der Matrix als ASCII-codiertes Zeichen (character) interpretiert.
Dies ist eine oft verwendete, aber nicht die einzige und auch nicht immer die eleganteste Möglichkeit
zum Arbeiten mit Texten, wird aber der besseren Verständlichkeit halber als erstes eingeführt (vgl.
Lektion 3: Cell Arrays).
5
American Standard Code for Information Interchange, die gebräuchlichste Norm, um alphanumerische Zeichen zu repräsentieren.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
95
Einführung in Matlab
Strings erzeugen und zusammenfügen
Als erstes müssen Sie wissen, wie man Zeichenketten (im folgenden auch als Strings bezeichnet) erzeugt. Meist
ist es auch notwendig, mehrere Strings zusammenzufügen, oder numerische Resultate in Strings umzuwandeln
und an einen anderen String anzuhängen.
Gehen Sie die folgenden Beispiele durch, um zu erfahren, wie das geht.
>> t1 = 'The quick brown fox jumps '
>> t2 = 'over the lazy dog.'
>> n = num2str(23.28)
>> ischar(t1)
>> m = str2num('3.1415926')
>> t3 = [t1 t2]
>> t4 = strcat(t1, t2)
Fixe Texte werden mit Hochkommata eingegeben
Umwandlung einer Zahl in einen String
ergibt true, wenn es sich um eine
Matrix mit Zeichen (characters) handelt
Umwandlung einer in einem String gespeicherten
Zahl in einen Skalar
Zusammenhängen von Texten wie bei
'normalen' Vektoren
so geht's auch. strcat = string concatenation
Will man mehrere Zeichenketten in einer Matrix abspeichern (also in Zeilen), ergeben sich die ersten
Komplikationen: Wie Sie wissen, müssen verschiedene Zeilen einer Matrix immer gleich lang sein. Matlab
wird also die Zeilen von kürzeren Texten mit Leerzeichen auffüllen (Funktion strvcat = string vertical
concatenation)!
>> z=['eins';'zwei';'drei']
>> z=['eins';'zwei';'drei';'sechs']
>> z=strvcat('eins','zwei','drei','sechs')
>> z1 = z(1, :)
>> length(z1)
>> z2 = deblank(z1), length(z2)
So geht's, alle sind gleich lang
So nicht, weil 'sechs' länger ist
korrekte Variante
erste Zeile abrufen
ist aber fünf Zeichen lang, ein
Leerzeichen wurde angefügt
deblank entfernt Leerzeichen am
Ende eines Strings
Eine hilfreiche Funktion: strxcat
Will man mehrere Strings und numerische Resultate zusammenfügen, führt das rasch zu relativ
unübersichtlichem und umständlichem Code. Um dies zu vermeiden, können Sie auf eine extra dafür
ausgelegte Funktion zurückgreifen (diese ist nicht im Matlab-Funktionsumfang enthalten, sie finden Sie in den
heruntergeladenen Beispielen).
Die Funktion strxcat ist wie folgt definiert:
function string = strxcat(varargin)
Sie dient dazu, eine beliebige Anzahl von Strings und Zahlen zu einem einzigen String zusammenzufügen.
Beispiel:
>> summe = fix(sum(rand(1, 3000)))/100
>> ausgabe = strxcat('Der Endbetrag lautet: ', summe, ' SFr.')
strxcat ist ein einfaches Beispiel für eine Funktion mit einer variablen Anzahl von
Eingabeparametern (vgl. Abschnitt Spezialfälle). Wenn Sie das interessiert, können Sie sich diese
Funktion im Editor genauer anschauen: edit strxcat
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
96
Einführung in Matlab
Strings untersuchen und vergleichen
Untersuchen von Strings auf bestimmte Inhalte
Oft wird man in Abhängigkeit des Inhaltes eines Strings Daten auf unterschiedliche Weise bearbeiten müssen.
Daher benötigen wir Operationen, die uns die Untersuchung der Inhalte von Strings erlauben.
Zu diesem Zweck stellt Matlab die leicht zu verwechselnden Funktionen strfind und findstr zur
Verfügung.
Diese lassen sich wieder am einfachsten anhand von Beispielen demonstrieren. Die Variablen der
vorhergehenden Beispiele dieser Lektion sollten sich dazu noch im Workspace befinden.
>> findstr(t3, 'fox')
>> findstr(t3, 'cat')
>> pos = strfind(t3, ' ')
Findet einen String in einem anderen.
Resultat: Startposition(en) der gefundenen Übereinstimmungen
Position aller Leerzeichen
Erläuterung: findstr vergleicht zwei Strings und schaut, ob der kürzere im längeren enthalten ist.
strfind findet ein Muster (zweites Argument) in einem String (erstes Argument). Sie können diese
Unterschiede im Hilfe-System nachschlagen.
Vergleichen von Strings
Ob zwei Strings identisch sind oder nicht, kann leider nicht einfach mittels der
bekannten Vergleichsoperationen == bzw. ~= herausgefunden werden, sondern es
müssen spezielle Funktionen verwendet werden.
Die Grundfunktion lautet strcmp (string comparison). Diese Funktion gibt es in verschiedenen Varianten
strcmpi, strncmp, strncmpi welche zusätzlich zum simplen Vergleich auf Gleichheit oder
Ungleichheit auch erlauben, nur eine bestimmte Anzahl von Zeichen zu vergleichen, oder beim Vergleich
Unterschiede in der Gross-/Kleinschreibung zu ignorieren.
Um dies zu sehen, probieren Sie bitte folgende Zeilen aus. Die Variablen der vorhergehenden Beispiele
dieser Lektion sollten sich dazu noch im Workspace befinden.
>> strcmp(z2, 'eins')
>> E = 'Eins';
>> strcmp(z2, E)
>> strcmpi(z2, E)
>> strncmp(t2, 'over it', 4)
Vergleich
falsch, da der Vergleich case-sensitive ist
wird dies nicht gewünscht, strcmpi verwenden
(i steht für case-insensitive)
vergleicht nur die ersten n Zeichen (ist auch
case-insensitive möglich - strncmpi)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
97
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
•
Zeichenketten bzw. Strings sind Matrizen, deren Elemente ASCII-codierte
Zeichen (character) interpretiert werden.
Wörtliche Texte werden im Unterschied zu Variablennamen mittels
Hochkommata notiert: a = 'Hello'.
Hello ist also nicht eine Variable, sondern ein wörtlicher Text.
Anweisungen
•
•
length: Bestimmt die Länge eines Strings (wie bei Vektoren)
str2num: Umwandlung einer in einem String gespeicherten Zahl in einen
Skalar
•
•
num2str: Umwandlung einer Zahl in einen String
ischar: ergibt true, wenn es sich um eine Matrix mit Zeichen (characters)
handelt
•
•
•
•
•
•
strcat: String concatenation, Zeichenketten zusammenhängen
strvcat: vertikales Zusammenfügen von Strings
deblank: Entfernen von Leerzeichen am Ende des Strings
findstr, strfind: Findet einen String in einem anderen
strcmp, strcmpi: Strings vergleichen, mit i: case-insensitive
strncmp, strncmpi: die ersten n Zeichen von Strings vergleichen, mit i:
case-insensitive
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
98
Einführung in Matlab
Testfragen
Bitte versuchen Sie zur Überprüfung ihres Verständnisses folgende Fragen zu beantworten.
Programmierung
Welche Definition(en) einer Funktion ist/sind korrekt? Mehrere richtige Antworten sind möglich.
❏ function hallo()
❏
❏
❏
function (zahlen, anzahl) = generiere(nummer, modus)
function [vpn, name, age] = getsubject(1, 6)
function [] = startprocess(grunz)
Welche der Codezeilen erfüllen folgenden Zweck: Ausgeben der Zahlen 7 bis 21 und deren Quadrate im
Command Window? Mehrere richtige Antworten sind möglich.
❏ for i = 7:21, disp(i, i^2), end
❏
❏
❏
i=7;while i <22, disp(i, i^2), end
i=6; while true, i=i+1, disp(i^2), if i==21, break, end, end
for i = 7:28, disp(i, i^2), if i>20, break, end, end
Welches Resultat ergibt die folgende Programmanweisung:
4 >= sqrt(9) && ~false
❍
3
❍
0
❍
false
❍
1
Welche Anweisung muss man einfügen, um in q das Resultat 1 bzw. true zu erhalten?
m = 'Wenn der Computer alles kann, kann er mich mal kreuzweise';
q = ___________ (m(10:17), 'computer')
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
99
Einführung in Matlab
Glossar
ASCII:
American Standard Code for Information Interchange, die gebräuchlichste Norm, um alphanumerische
Zeichen zu repräsentieren.
Cell Array:
«Zellen-Felder». In jedem Feld eines Cell Arrays können unterschiedliche Datentypen abgelegt werden,
z.B. Matrizen unterschiedlicher Grösse.
Funktion:
Eine Folge von Anweisungen ähnlich einem Skript. Einer Funktion können aber Werte übergeben werden,
und sie gibt Resultate zurück. Sie kann nicht auf Variablen im allgemeinen Workspace zugreifen.
m-File:
Eine Datei mit der Endung .m, welche eine Folge von Matlab-Befehlen enthält. Es kann sich dabei um
einen Skript oder eine Funktion handeln.
Skript:
Ein Skript ist eine in einer Datei (m-File) abgespeicherte Folge von Anweisungen. Diese werden genauso
argearbeitet, wie wenn diese Anweisungen Command Window eingegeben würden.
String:
Zeichenkette. Ein Vektor bzw. eine Matrix deren Elemente ASCII-codierte Zeichen (character) interpretiert
werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
100
Einführung in Matlab
Lektion 3: Arbeiten mit externen Dateien
In dieser Lektion erlernen Sie wichtige Funktionen, welche ganz konkret in Anwendungen der psychologischen
Forschung benötigt werden.
•
•
•
•
Typischerweise werden zuerst die Rohdaten eingelesen, wie sie andere Programme (E-Prime,
Presentation) oder technische Systeme (MRI, EEG, Eye Tracker etc.) erstellen.
Diese Daten müssen Matlab-intern in für die Weiterbearbeitung (Zusammenfassen, Umformen,
Umrechnen, Aggregieren, rechnerische Auswertung, Statistik, grafische Darstellung etc.) geeigneten
Formen gespeichert werden.
Oft kann der Benutzer die Verarbeitung auch über eine direkte Interaktion mit dem Programm
beeinflussen.
Schlussendlich sollen die Daten meist wieder in einem Format extern abgespeichert werden, sodass
sie anschliessend ausserhalb von Matlab weiterbearbeitet werden können, z.B. mit Excel, SPSS oder
Statistica.
Diese verschiedenen Verarbeitungsschritte können Sie in dieser und der folgenden Lektion an einer
umfangreicheren Übungsarbeit in mehreren Phasen konkret umsetzen lernen.
Zur Erinnerung hier nochmals die schematische Darstellung eines Projektes:
Lernziele
•
•
•
•
•
Sie können Daten auf verschiedene Weisen in Matlab importieren.
Sie lernen weitere Datentypen kennen.
Sie kennen die wichtigsten Arten, wie ein Programm mit dem Benutzer interagieren kann.
Sie sind in der Lage, die verarbeiteten Daten in einer externen Datei zu speichern.
Sie sehen, wie diese Schritte in einer beispielhaften Anwendung zusammen integriert werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
101
Einführung in Matlab
Datenimport
Um mit Matlab Daten zu verarbeiten und darzustellen, muss man sie zuerst überhaupt «ins Programm
reinkriegen». Heutzutage ist es glücklicherweise so, dass fast alle Systeme und Programme zur Erhebung von
psychophysiologischen und verhaltenspsychologischen Daten die Speicherung als Text-Dateien ermöglicht.
Für das Einlesen solcher Daten ist Matlab bestens gerüstet. Es bietet im wesentlichen zwei Möglichkeiten dafür
an:
•
•
Komfortable Programmfunktionen, um Daten «manuell» aus verschiedenen Standardapplikationen
einzulesen. Diese Variante ist geeignet, um einen einzelnen Datensatz zu explorieren oder grafisch
darzustellen.
Einlesen von Daten durch ein Matlab-Programm. Diese Methode wird man wählen, wenn immer wieder
neue Datensätze im gleichen Format verarbeitet werden sollen - also die typische Anwendung in der
Forschung.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
102
Einführung in Matlab
Einlesen von Daten aus externen Dateien: interaktiv
Zum raschen «Reinschauen» in einen Datensatz bietet Matlab komfortable Funktionen an, welche ermöglichen,
Daten aus der Zwischenablage (Clipboard) oder aus Text-, Excel-, XML- oder Lotus-Dateien zu importieren,
ohne dafür gleich ein Programm schreiben zu müssen. Anschliessend können sie weiterbearbeitet oder z.B.
graphisch dargestellt werden.
Import mittels copy-paste
Die simpelste, aber nicht sehr vielseitige Methode: Kreieren einer Matrix in der benötigten Grösse im
Workspace, öffnen derselben im «Variable Editor» (Doppelclick auf die Variable im Workspace), und
übertragen der Daten z.B. aus Excel, SPSS oder ähnlich, mittels copy-and-paste 1.
Import aus Dateien - der «Import Wizard»
Importieren Sie die Datei exp1.xls (dieses ist im zip-File data.zip enthalten und sollte sich in Ihrem
Arbeitsverzeichnis befinden), indem Sie sie im Directory Browser anwählen und im Context Menu
«Import data» anwählen, oder über File > Import Data... aktivieren.
Wie Sie sehen, erzeugt der Import Wizard zwei Datensätze: eine Matrix mit den numerischen Daten, und ein
«cell array» (siehe hier), welches die Text-Daten enthält.
Auch aus einem Programm kann man den Import Wizard aufrufen: uiimport (s. auch import)
Das Stichwort, um im Hilfe-System weitere Informationen dazu zu erhalten, lautet import wizard.
Import von Inhalten aus der Zwischenablage
Auch aus der Zwischenablage (Clipboard) können Sie Daten importieren, die Sie vorher in einer anderen
Applikation mit Edit > Copy oder CTRL-C / CTRL-X gespeichert haben. Folgende Möglichkeiten stehen zur
Verfügung und rufen wiederum den Import Wizard auf.
•
mit Edit > Paste to Workspace...
•
uiimport -pastespecial im Command Window eingeben
oder einfach uiimport, dann bei Select Data Source Clipboard auswählen
•
1
Auf PC/Windows: CTRL-C und CTRL-V. Auf Mac OS: cmd-C und cmd-V
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
103
Einführung in Matlab
Einlesen von Daten aus externen Dateien: programmiert
Wie funktioniert eine Datei?
Eigentlich ganz simpel, eine Datei kann man einfach als serielle Folge von Datenelementen (im Falle von Daten
im ASCII-Format also einzelne alphanumerische Zeichen) ansehen, die mit dem ersten Zeichen beginnt, und
mit einem Marker für das Dateiende (EOF - end of file) endet. Beim Lesen einer Datei wird ein «Lesezeiger»
von vorne nach hinten durch die Datei geschoben - mit jedem Lesevorgang rückt er entsprechend weiter vor.
Dieser Zeiger kann zwar auch wieder zurückgeschoben werden, aber meist ist das nicht notwendig und sinnvoll.
Erreicht der Zeiger die EOF-Marke, ist der Vorgang abgeschlossen.
Schematische Darstellung des sequentiellen Zugriffs auf die Elemente einer Datei
Schematischer Ablauf von Dateioperationen
1.
2.
3.
Damit aus einer Datei gelesen oder hineingeschrieben werden kann, muss sie zuerst «geöffnet» werden:
Funktion fopen.
Anschliessend kann geschrieben oder gelesen werden: fgetl, fscanf, fprintf etc.
Am Schluss muss die Datei wieder «geschlossen» werden: fclose.
Die für die Arbeit mit Dateien notwendigen Funktionen lassen sich am einfachsten an einem Beispiel erläutern.
Wir arbeiten zuerst mit den grundlegendsten Anweisungen - vieles davon liesse sich mit komplexeren (und
neueren) Befehlen einfacher lösen, für das grundlegende Verständnis des Vorgehens erscheint dieses Vorgehen
aber geeigneter.
Grundlegende Funktionen zum Lesen aus externen Dateien
Hier wird davon ausgegangen, dass es sich um ASCII 2-Daten (z.B. Tab- oder Komma-separierte Text-Dateien
*.txt, *.tab, *.csv etc.) handelt. Zum Arbeiten mit rein binären Daten gibt es spezielle Befehle (fread).
Die im folgenden beschriebenen Befehle haben zum Teil noch weitere Parameter - sehen Sie dazu die
Angaben in der Hilfe.
fid = fopen(filename, mode)
Öffnen einer Datei.
Wird als filename nur ein Dateiname angegeben, wird sie im aktuellen Verzeichnis gesucht. Alternativ
kann auch ein kompletter Pfad angegen werden, z.B. d:\daten\jan08\data.txt . fid ist die
«Identifikationsnummer» der geöffneten Datei. Diese wird bei allen nachfolgenden Operationen mit dieser
Datei angegeben, damit diese bei mehreren offenen Dateien klar referenziert werden kann. Kann die Datei
nicht geöffnet werden, erhält fid den Wert -1.
mode ist der Arbeitsmodus, die wichtigsten Möglichkeiten sind 'r' (read - Datei nur zum Lesen öffnen) und
'w' (write - Datei zum schreiben öffnen bzw. neu erstellen).
2
American Standard Code for Information Interchange, die gebräuchlichste Norm, um alphanumerische Zeichen zu repräsentieren.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
104
Einführung in Matlab
data = fgetl(fid)
Liest eine ganze Zeile ein, also bis zum nächsten Zeilenumbruch (CR, LF). Ist der «Lesezeiger» bereits in der
Mitte einer Zeile, wird sie einfach bis zum Ende eingelesen. Es resultiert ein String 3 (Vektor 4 mit char).
data = fscanf(fid, format, n)
Liest eine durch n bestimmte Anzahl von Dateneinheiten in einem bestimmten Format ein, welches in
format spezifiziert ist. Für die Formatangaben und alle weiteren Möglichkeiten siehe nachfolgendes Beispiel
sowie die Angaben im Hilfe-System.
fclose(fid)
Schliesst die Datei. Erst danach können andere Anwendungen voll auf die Datei zugreifen.
feof(fid)
Prüft, ob das Dateiende erreicht wurde (eof = end of file), ergibt true, falls dies der Fall ist.
3
Zeichenkette. Ein Vektor bzw. eine Matrix deren Elemente ASCII-codierte Zeichen (character) interpretiert werden.
4
eindimensionale Matrix, also nur eine Zeile bzw. eine Spalte
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
105
Einführung in Matlab
Beispiel: Routine zum Einlesen von Daten aus externer Datei
Dieses Beispiel demonstriert eine typische Funktion, wie sie zum Einlesen von Daten aus einer Text-Datei
verwendet wird. Gleichzeitig können Sie daran auch die wichtigsten Funktionen des Debuggers 5 kennenlernen.
Der einzulesende Datensatz sieht wie folgt aus (s. Datei exp1.dat)
Die Funktion ist wie folgt definiert:
function [Mdata, Mfirstname, Mfamilyname] = load_data1('exp1.dat')
Die Daten werden von der Funktion wie folgt in den drei Variablen Mdata, Mfirstname und
Mfamilyname zurückgegeben:
5
Funktionen des Editors, um im geschriebenen Programm Fehler zu suchen und beheben.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
106
Einführung in Matlab
Explorieren der Funktion im Debugger
Schauen Sie sich als erstes folgendes Lernvideo an, das demonstriert, wie man ein Programm im
Debugger untersuchen und von Fehlern befreien kann. Anschliessend können Sie den Ablauf selbst
in Matlab durchspielen.
Dieses Element (Animation, Video etc.) kann nicht dargestellt werden und ist nur in der
Onlineversion sichtbar. [link]
Vorschau auf die Blockstruktur von load_data1: Die Funktion liest zuerst die Informationen im
«Dateikopf», also die ersten drei Zeilen. Der Tabellenkopf wird überlesen, anschliessend werden die
eigentlichen Datenzeilen eingelesen, bis das Dateiende erreicht wird. Die Daten werden einerseits als zwei
separate String-Matrizen für die Vor- und Nachnamen extrahiert, die anderen Spalten werden wenn nötig
numerisch umcodiert und in eine Matrix gepackt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
107
Einführung in Matlab
Spielen Sie den ganzen Ablauf nun bitte selbst durch. Dabei erhalten Sie weitere Hinweise auf die
detaillierte Funktion des Programmes.
•
Vergewissern Sie sich, dass als «current directory» dasjenige Verzeichnis gewählt ist, welches die
Beispieldaten enthält.
Öffnen der Funktion load_data1.m im Editor
•
Setzen eines sog. «break points» auf Zeile 17 - Mausclick auf den Strich nach der Zeilennummer
•
Matlab wird Sie jetzt darauf hinweisen, dass kein Breakpoint gesetzt werden kann, weil im Programm
noch ein Syntaxfehler vorliegt (Zeile 39). Versuchen Sie diesen zu korrigieren und speichern Sie die
Funktion.
Modernere Versionen von Matlab weisen schon vorher darauf hin, dass in der betreffenden Zeile ein
Fehler vorzuliegen scheint.
•
Lösung
Es fehlt eine schliessende Klammer am Schluss der Zeile 39:
datestring = rdata(pos(1) + 1:length(rdata) );
Der Breakpoint hat nun (je nach Matlab-Version) seine Farbe auf rot gewechselt, was bedeutet, dass er
aktiv ist. Falls nicht, setzen Sie ihn nochmals.
Rufen sie die Funktion aus dem Command Window wie folgt auf:
•
•
>> [Mdata, Mfirstname, Mfamilyname] = load_data1('exp1.dat')
Die Programmausführung wird dank des Breakpoints schon auf Zeile 17 angehalten, und zwar bevor
die betreffende Zeile ausgeführt wird.
Von nun an können Sie schrittweise mit Debug > Step (oder F10) weitermachen, weiter unten
einen Breakpoint setzen und Debug > Continue (F5) wählen, oder Debug > Go Until Cursor die
Programmausführung bis zur Schreibmarke fortsetzen.
Indem Sie den Mauszeiger über eine Variable führen, können Sie sich deren Wert anschauen. Sie können
sie aber auch im Command Window abfragen oder im Workspace ansehen.
•
•
•
Erläuterungen zur Programmfunktion
•
Zeilen 17-20: Laden der Datei und Fehlermeldung, falls sie nicht gefunden wird. fid zeigt dies
mit dem Wert -1 an.
Zeilen 22-33: Einlesen der 1. Zeile, dekodieren des Dateinamens und prüfen, ob es keinen
Konflikt mit dem eigentlichen Filenamen gibt
Zeilen 35-40: Einlesen der 2. Zeile und dekodieren des Datums
•
Zeilen 42-43: "Überlesen" des Aufzeichnungssystems und des Tabellenkopfes
•
Zeile 52: Beginn der Hauptschleife, die läuft, bis EOF (end of file) erreicht ist
•
Zeilen 53-60: Eine komplette Datenzeile wird eingelesen
•
Zeilen 62-81: Die drei im alphanumerischen Klartext registrierten Datenwerte der Spalten 3, 5
und 11 werden in rein numerische Daten umgewandelt (so kann man sie dann in einer einzigen
numerischen Matrix speichern)
Zeilen 84-86: Die drei Rückgabevariablen werden mit den Daten gefüllt
•
•
•
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
108
Einführung in Matlab
•
Auf der Zeile 86 wird die Programmausführung abbrechen, weil folgender Fehler vorliegt:
??? Error using ==> horzcat
CAT arguments dimensions are not consistent.
•
•
Um den Fehler genauer anzuschauen, machen wir uns die Möglichkeit von Fehler-Breakpoints zunutze.
Über Debug > Stop if Errors/Warnings... aktivieren wir «Always stop if error» und rufen die Funktion
erneut auf. Die Programmausführung bleibt dann beim Fehler stehen, und Sie haben die Möglichkeit,
sich die beteiligten Variablen genauer anzusehen (Mauszeiger über die Variable im Editor, Doppelclick
im Workspace, oder Aufruf im Command Window).
Finden Sie den Fehler? Wie kann man ihn korrigieren?
Lösung
Das Problem liegt auf der Zeile 86:
Mdata = vertcat(Mdata,
calibn]);
[gendern
age
condn
data
Erinnern Sie sich daran, dass beim horizontalen Zusammenfügen die Anzahl Zeilen
der beteiligten Matrizen identisch sein müssen. Wenn Sie mit dem Mauszeiger auf die
verschiedenen Variablen in der eckigen Klammer in der vertcat-Anweisung zeigen,
sehen Sie, dass alle ausser data Skalare sind, also nur eine Zeile haben. data dagegen
hat fünf Datenpunkte vertikal angeordnet, also fünf Zeilen - das kann so nicht gehen. Wir
wollen die Datenwerte ja nebeneinander angeordnet haben. Dies können wir korrigieren,
indem wir data transponieren, also data' notieren.
•
Beim erneuten Aufruf sollte die Funktion nun korrekt ablaufen und die eingelesenen Werte zurückgeben.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
109
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Anweisungen:
•
•
•
fid = fopen(filename, mode): Öffnen einer Datei
data = fgetl(fid): Einlesen einer Zeile
data = fscanf(fid, format, n): Liest eine durch n bestimmte
Anzahl von Dateneinheiten in einem bestimmten Format ein, welches in format
spezifiziert ist.
•
•
fclose(fid): Schliessen einer Datei
feof(fid): Prüft, ob das Dateiende erreicht wurde (eof = end of file)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
110
Einführung in Matlab
Repräsentation von Daten 3: Cell Arrays
In diesem Kapitel erlernen Sie eine weitere, komfortable Art, in Matlab Daten zu repräsentieren: in sogenannten
Cell Arrays (grob übersetzt «Zellen-Felder»).
Während in Matrizen ausschliesslich Zahlen und - mit gewissen Einschränkungen - Strings gespeichert werden
können, erlauben Cell Arrays, in jedem Feld unterschiedliche Datentypen abzulegen, insbesondere Matrizen
unterschiedlicher Grösse.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
111
Einführung in Matlab
Datenrepräsentation in Cell Arrays
Wie im folgenden Bild ersichtlich ist, besteht ein Cell Array aus mehreren Zellen (cells). Jede Zelle kann
verschiedenste Daten enthalten:
•
numerische Matrizen, d.h. Skalare 6, Vektoren, oder n-dimensionale Matrizen 7 verschiedener Grösse
(cell 1,1 / cell 1,3 / cell 2,1 / cell 2,2)
Matrizen mit Strings (cell 1,2)
•
weitere Cell Arrays (cell 2,3)
•
Structure Arrays 8 (noch nicht behandelt und nicht abgebildet, vgl. Abschnitt Repräsentation von Daten
4: Structure Arrays).
•
Schematisches Beispiel eines Cell Arrays
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
112
Einführung in Matlab
Erzeugen und referenzieren von Cell Arrays
Cell Arrays sind daran erkennbar, dass ihre Indices nicht wie bei Matrizen in runden
Klammern, sondern in geschweiften Klammern { } notiert werden.
In den folgenden Beispielen sehen Sie, wie mit Cell Arrays gearbeitet werden kann. Als Grundlage dient das
abgebildete Cell Array:
Erzeugen des Cell Arrays: Im folgenden sehen Sie, wie das oben abgebildete Cell Array erzeugt
werden kann. Bitte versuchen Sie, die Funktion der nachfolgenden Anweisungen nachzuvollziehen.
>> A = cell(2, 2)
Damit wird ein leeres Cell Array mit m x n Zellen vordefiniert. Dies ist optional. Tut man es nicht, so wird das
Cell Array gleich wie Matrizen dynamisch erweitert, sobald neue Zellen dazukommen. Auch ein Cell Array
muss immer «rechteckig» sein (und sinngemäss bei mehr als zwei Dimensionen). Noch nicht definierte Zellen
sind einfach leer.
Nun werden die Zellen mit Inhalten gefüllt:
>> A{1,1} = [1 4 3; 0 5 8; 7 2 9];
>> A{1,2} = 'Anne Smith';
>> A{2,1} = 3+7i;
>> A{2,2} = -pi:pi/4:pi;
Möglich, wenn auch weniger übersichtlich, ist, alles auf einmal zu definieren:
A = {[1 4 3; 0 5 8; 7 2 9], 'Anne Smith'; 3+7i, -pi:pi/4:pi};
Referenzieren und umwandeln
>> A
>> A{1,1}
>> A{1,1}(2,3)
>> ischar(A{1,2})
>> cellplot(A)
>> m = randn(60,50);
>> b = num2cell(m);
>> c = mat2cell(m,[20 40],[25 25])
>> c{2,1}
>> d = cell2mat(c)
ganzes Cell Array abrufen
Zelle 1,1 anwählen
ein einzelnes Element der Matrix in Zelle 1,1 referenzieren
das ist tatsächlich ein String
Visualisierung der Struktur
irgendeine Matrix
Matrix in Cell Array umwandeln, ein Element pro Zelle
Matrix aufteilen, in Submatrizen pro Zelle
Cell Array wieder in Matrix umwandeln
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
113
Einführung in Matlab
Beispiel für Strings in Cell Arrays
Cell Arrays werden insbesondere gerne verwendet, um unterschiedlich lange Zeichenketten zu speichern, ohne
dass man sich um das Problem der unterschiedlichen Länge kümmern muss. Dazu speichert man in jeder Zelle
genau eine Zeichenkette. Diese Methode wird auch von verschiedenen Matlab-Funktionen unterstützt.
Auch hierzu ein kurzes Beispiel:
>> texte={'Hello world','The quick brown fox',num2str(pi),'jumps over the lazy dog'}
>> texte{4}
>> length(texte{3})
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
114
Einführung in Matlab
Zweites Beispiel zum Einlesen von Daten aus externer Datei
Das vorhergehende Beispiel wird nun so verändert, dass es einerseits die Namensinformationen als Cell
Arrays zurückgibt, und andererseits die eigentlichen Daten nicht mehr mit einer Schleife und fscanf einliest,
sondern mit einem einmaligen Aufruf von textscan, welcher die Daten ebenfalls als Cell Array zurückgibt.
Bitte schauen Sie sich die Funktion load_data2.m anhand der folgenden Schritte aufmerksam an.
•
Öffnen Sie die Funktion load_data2.m im Editor
•
Auf Zeile 47 sehen Sie die Anwendung von textscan.
Cdata = textscan(fid, '%s %s %s %f %s %f %f %f %f %f %s');
Dieser Befehl liest entsprechend des vorgegebenen Formats (%s sind Strings, %f Fliesskommazahlen)
Daten in ein Cell Array ein, bis das Ende der Datei erreicht ist. Cdata{x} wird dann alle Daten aus
•
der x-ten Spalte der eingelesenen Datei enthalten. Alphanumerische Daten werden als Cell Array im
Cell Array gespeichert, numerische Daten als Matrizen.
(was die Bearbeitung der Daten betrifft, ist die Funktion unvollständig)
•
auf den Zeilen 59-61 werden die Daten entsprechend den Erfordernissen umgeordnet:
Cfirstname = Cdata{1};
Cfamilyname = Cdata{2};
Mdata = [Cdata{4} Cdata{6:10}];
[Mdata,
Cfirstname,
load_data2('exp1.dat') aufgerufen werden.
Die
Funktion
kann
mit
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
Cfamilyname]
=
115
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
•
Ein Cell Array besteht aus mehreren matrix-förmig angeordneten Zellen (cells).
Jede Zelle kann nicht nur eine Zahl, sondern verschiedenste Daten wie ganze
Matrizen, Strings, weitere Cell Arrays oder Structure Arrays enthalten.
Cell Arrays sind daran erkennbar, dass ihre Indices nicht wie bei Matrizen in
runden Klammern, sondern in geschweiften Klammern { } notiert werden.
Anweisungen
•
•
•
•
•
cellplot: Visualisieren der Struktur eines Cell Arrays
num2cell: Matrix in Cell Array umwandeln, ein Element pro Zelle
mat2cell: Matrix aufteilen, in Submatrizen pro Zelle
cell2mat: Cell Array in Matrix umwandeln
textscan: Einlesen von Daten aus einer Datei in ein Cell Array
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
116
Einführung in Matlab
Repräsentation von Daten 4: Structure Arrays
Eine weitere, oftmals nützliche Möglichkeit der Datenrepräsentation sind die sogenannten Structure Arrays.
Jedes Element eines Structure Arrays enthält dieselbe Struktur von verschiedenen, mit eigenen Namen
ansprechbaren «Datencontainern». Im Gegensatz zu Cell Arrays 9 ist hier jeweils klarer ersichtlich, was der
Inhalt eines angesprochenen Datenfeldes ist.
9
Eine Datenstruktur, der aus mehreren matrix-förmig angeordneten Zellen besteht. Jede Zelle kann verschiedenste Daten wie ganze
Matrizen, Strings, weitere Cell Arrays etc. enthalten.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
117
Einführung in Matlab
Repräsentation von Daten in Structure Arrays
Jedes Element eines Structure Arrays enthält dieselbe Struktur verschiedener, mit eigenen Namen
ansprechbaren Unterelementen, genannt Felder (fields). Diese Felder kann man auch als «Datencontainer»
betrachten, die ähnlich einer Zelle eines Cell Arrays alle möglichen Inhalte haben können.
Zum Beispiel könnte ein Element eines Structure Arrays eine Zeichenkette mit einem Namen enthalten, einen
Skalar für einen Kostenbetrag, und eine Matrix mit den medizinischen Testdaten.
Beispiele zum Ausprobieren:
>> screensize.x = 800
>> screensize.y = 600
>> screensize.x
>> screensize(2).x = 1024
>> screensize(2).y = 768
screensize hat nun zwei Unterelemente
diese lassen sich genauso ansprechen
ein weiteres Element erzeugen;
dieses hat automatisch dieselbe Struktur
Erzeugen des obenstehenden Beispiels (Patientendaten):
>> patient.name = 'John Doe';
>> patient.billing = 127.00;
>> patient.test = [79 75 73; 180 178 177.5; 220 210 205]
>> fieldnames(patient)
>> lower(patient.name)
>> sum(patient.test(2, :))
>> patient(3).name='Alan Johnson'
>> patient(2)
Abruf der Feldnamen
Element abrufen und bearbeiten
Elemente der Matrix ansprechen
ein neuer Eintrag
patient(2) wurde dabei mit leeren Feldern gefüllt
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
118
Einführung in Matlab
Anwendungsbeispiel
Eine Funktion zum Einlesen von Experimentaldaten könnte alle allgemeinen Informationen zum
Versuchsdurchgang in einem Structure Array mit nur einem Element speichern. Dadurch erspart man sich,
allzuviele individuelle Variablen übergeben zu müssen.
Also statt:
function [Mdata, sex, age, eye, date, time] = loaddata(filename)
könnte man folgendes implementieren:
function [Mdata, expinfo] = loaddata(filename)
wobei expinfo aus den folgenden Feldern bestünde:
expinfo.sex
expinfo.age
expinfo.eye
expinfo.date
expinfo.time
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
119
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Punkte:
•
•
Jedes Element eines Structure Arrays enthält dieselbe Struktur von verschiedenen,
mit eigenen Namen ansprechbaren «Datencontainer». Im Gegensatz zu Cell
Arrays ist hier jeweils klarer ersichtlich, was der Inhalt eines angesprochenen
Datenfeldes ist.
Die Felder werden angesprochen, indem man nach dem Variablennamen des
Arrays den Feldnamen, durch einen Punkt abgetrennt, notiert: patient.name
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
120
Einführung in Matlab
Eigenes Datenverarbeitungsprojekt
Sie kennen nun eigentlich alle Bausteine, um damit beginnen zu können, eine eigene Routine zum Verarbeiten
von Daten zu schreiben.
Das Ziel ist, am Schluss ein Programm zu haben, welches Daten einliest, verarbeitet (Zusammenfassung,
Umrechnung, grafische Darstellung etc.) und die Resultate wieder abspeichern kann.
Das Projekt wird im Rahmen verschiedener Teilaufgaben Px (P für Projekt) umgesetzt:
•
Aufgabe P1: Erstellen des Hauptprogramms und der Funktion zum Einlesen der Daten
•
Aufgabe P2: Benutzereingaben abfragen
•
Aufgabe P3: Bearbeiten und Abspeichern der Daten in eine externe Datei
•
Aufgabe P4: Verarbeitung der Daten
•
Aufgabe P5: Grafische Darstellung der Daten
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
121
Einführung in Matlab
Datenbasis
Folgende Möglichkeiten bestehen für dieses Projekt:
•
Sie haben Daten aus einem eigenen Forschungsprojekt, die Sie bearbeiten möchten.
•
Falls Sie im Moment nicht über solche Daten verfügen, können Sie mit der weiter unten
erläuterten Beispielaufgabe «EyeData Processing» dieses Kurses arbeiten (dieses wird später genauer
beschrieben).
Sie können sich so eine Vorlage erarbeiten, die Ihnen von Nutzen sein kann, falls Sie zu einem späteren
Zeitpunkt eine ähnliche Routine erstellen wollen.
Alternativ können Sie selbst einen hypothetischen Übungsdatensatz erstellen (z.B. in MS Excel), ähnlich
exp1.dat
•
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
122
Einführung in Matlab
Grobstruktur
Eine Datenverarbeitungsroutine besteht in der Regel aus einem Hauptprogramm (Skript oder Funktion), welche
den Gesamtablauf des Programms steuert - also wenn nötig mit dem Benutzer interagiert, Funktionen zum
Laden und Speichern von Daten aufruft und die Daten bearbeitet, visualisiert etc. All dies kann natürlich auch
wieder durch den Aufruf geeigneter Funktionen erfolgen.
Als Rahmenstruktur mag folgendes Skript dienen: mainprog1.m
Dieses liegt wiederum bei den heruntergeladenen Beispielprogrammen vor.
Falls es für Ihre Anwendung notwendig ist, diesem Hauptprogramm direkt Parameter zu übergeben, kann sie
natürlich auch später noch in eine Funktion umgewandelt werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
123
Einführung in Matlab
Datensatz EyeData Processing
Übungsaufgabe, falls Sie keine eigenen Daten haben
Die zu bearbeitenden Daten stammen aus einem Eyetracking-Experiment. Die Versuchspersonen (Vp)
bekamen am Bildschirm Bilder natürlicher Szenen in verschiedenen Grössen präsentiert und sollten diese
im Rahmen einer Rekognitionsaufgabe während je 5,5 Sekunden betrachten (die Rekognitionsleistung wurde
jedoch nicht ausgewertet). Dabei wurden die Augenbewegungen gemessen und als Fixationen erfasst.
Obere Zeile: Beispielbilder (im Experiment in Farbe gezeigt). Untere Zeile: Die verschiedenen Bildgrössen
Das Ziel der Aufgabe ist, Augenbewegungsdaten mehrerer Vpn zu laden und diese in einer einzigen
Ausgabedatei so zusammenzufassen (merging), dass man sie anschliessend z.B. mit SPSS weiterverarbeiten
könnte. Dies erfordert beispielsweise das Hinzufügen neuer Spalten, welche die Vp-Nummer und weitere
Informationen der Versuchsdurchgangs enthalten, welche in den einzelnen Dateien nur im Dateikopf stehen.
Zudem sollen die Daten aggregiert werden, d.h. pro Vp die Mittelwerte berechnet und so gespeichert werden,
dass pro Vp nur mehr eine Datenzeile vorliegt (Vorbereitung zum Rechnen einer ANOVA etc.).
Des weiteren soll das Programm auch Funktionen enthalten, welche die Daten graphisch darstellen (z.B.
Balkendiagramme von Fixationsdauern per Bedingung oder Plots der räumlichen Fixationsverteilung auf den
Bildern).
Die Übungsdaten sind im zip-File data.zip enthalten (dieses haben Sie wahrscheinlich bereits am Anfang
heruntergeladen) und heissen vnsize x.fix (vn sind die Initialen der Vp, x bezeichnet den Trialblock 1-6).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
124
Einführung in Matlab
Aufgabe P1: Einlesen der Daten
Übernehmen Sie die oben dargestellte Rahmenstruktur für das Hauptprogramm mainprog1.m und
speichern Sie sie unter einem passenden Namen für Ihr Projekt (eyedata.m für die Aufgabe «EyeData
Processing», ist als Musterbeispiel auch unter eyedata_sol1.m zu finden).
Erstellen Sie eine neue Funktion, um Ihre Daten aus den externen Dateien einzulesen. Sie können dafür
entweder ganz neu beginnen, oder aber auf load_data1.m aus dem früheren Beispiel basieren und diese
Funktion (unter anderem Namen) entsprechend modifizieren und erweitern.
Falls Sie eigene Daten haben, überlegen Sie sich zuerst, was Sie mit den Daten später tun möchten. Davon wird
abhängen, in welcher Form Ihre Funktion die eingelesenen Daten dem aufrufenden Skript übergeben muss.
Dies betrifft Fragen wie:
•
Welche der vorhandenen Daten sind überhaupt für die Weiterverarbeitung notwendig?
•
Müssen gewisse Einträge vielleicht umcodiert werden (typischer Fall: Umwandlung von im Klartext
codierten Bedingungen in numerische Codes)?
Welche Datenstrukturen eignen sich am besten für die weitere Verarbeitung - Einzelwerte, Matrizen,
Cell Arrays oder Structure Arrays?
•
Angaben zur Aufgabe «EyeData Processing»
Versuchen Sie eine Funktion readfixdata.m zu programmieren, welche ein einzelnes Datenfile einliest und
die Daten in geeigneter Form zurückliefert, z.B. als Struktur mit den Einträgen Studienname, Vp-Nummer,
Aufzeichnungsdatum, linkes/rechtes Auge, Anzahl Bilder und Bildschirmauflösung, ein Cell Array mit den
Bildnamen plus eine Matrix mit den Augenbewegungsdaten.
Diese Angaben beziehen sich auf die Musterlösung, aber es gibt natürlich nicht nur eine einzige richtige
Lösung, man könnte z.B. genausogut alles in einem Cell Array verpacken.
Die zu bearbeitenden Dateien haben folgende Struktur (afsize1.fix, tab-separierte Datei):
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
125
Einführung in Matlab
Die meisten Angaben im Dateikopf sind selbsterklärend, und einige Angaben sind für unser Projekt irrelevant
(Binocular, Mousedata). Side bezeichnet das Auge, von dem die Bewegungsdaten aufgezeichnet wurden (1
= links, 2 = rechts).
In der Haupttabelle (diese geht so weiter bis zum Dateiende) bedeuten:
•
eventnb - Fixationen durchnumeriert innerhalb eines Trials
•
bmpnb - Nummer des Bildes = Trial-Nummer
•
bmpname - Name des Bildes. Die letzte Zahl bezeichnet die Bildgrösse (vgl. Abbildung)
•
start - Startzeit einer Fixation relativ zum Trial-Beginn in ms
•
dur - Fixationsdauer [ms]
•
x, y - Koordinaten in Pixels
•
skipcode - Marker für Datenfilterung aufgrund Kalibrationsproblemen. -1 = ok, alles andere ist
beeinträchtigt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
126
Einführung in Matlab
Musterlösung (öffnet in neuem Fenster)
Die Lösung ist auch im m-File readfixdata_sol.m zu finden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
127
Einführung in Matlab
Interaktion mit dem Benutzer
Die meisten grösseren Anwendungen erfordern ein gewisses Mass an Interaktion mit dem Benutzer. Typische
Beispiele dafür sind:
•
Auswahl der zu bearbeitenden Dateien
•
Eingabe von verschiedenen Parametern (Grenzwerte, Filtereinstellungen, Auswahl der Grafikoptionen
etc.)
Grafische Eingaben, z.B. Definition von «Regions of Interest» (ROIs) oder Kalibrationspunkten mittels
Mausclicks
Eingabe von Speicherort und -format von Daten oder Graphiken
•
•
Im folgenden werden die Wichtigsten dieser interaktiven Elemente eingeführt. Das Erstellen von integrierten
grafischen Benutzerinterfaces (graphical user interfaces, GUIs) wird hier jedoch noch nicht diskutiert.
Vgl. dazu das Hilfesystem unter MATLAB > Function Reference > Creating Graphical User
Interfaces.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
128
Einführung in Matlab
Auswahl von Dateien und Verzeichnissen
Die von anderen Anwendungen bekannten Standard-Dialogboxen zum Auswählen von Dateien,
Verzeichnissen oder dem Speicherort für eine erstellte Datei stehen auch in Matlab zu Verfügung.
Alle drei haben eine grosse Anzahl von Einstellungsmöglichkeiten, die hier nicht alle im Detail
diskutiert werden können, daher werden nur einige typische Anwendungsbeispiele gezeigt. Für die
weiteren Optionen konsultieren Sie bitte das Hilfe-System.
Datei auswählen: uigetfile
[FileName, PathName] = uigetfile('*.m', 'Select the M-file');
Öffnet die Dialogbox zum Auswählen von Dateien. Die Funktion gibt den Dateinamen und den Pfad zurück.
Falls «Cancel» gedrückt wird, resultiert FileName = 0
Das erste Argument '*.m' ist ein Filter, d.h. nur Dateien mit dieser Endung werden angezeigt. Will man alle
Dateien sehen, gibt man '*.*' ein. Das zweite Argument gibt den Text an, der im Fensterkopf erscheint.
Die Auswahl der Datei beginnt im aktuellen Pfad, wie er in Matlab als «Current Directory» eingestellt ist.
Will man mit der Auswahl an einem bestimmten Ort im Dateisystem beginnen, kann man das wie folgt angeben:
[FileName,PathName] = ...
uigetfile('d:\matlab\daten\*.txt', 'Datensatz auswählen');
Sollen mehrere Dateitypen zur Auswahl stehen, gibt man dies mithilfe eines Cell Arrays an. Die möglichen
Dateiendungen stehen also in der erste Spalte des Cell Arrays:
[filename, pathname] = ...
uigetfile({'*.m'; '*.mdl'; '*.mat'; '*.*'}, 'File Selector');
Beispiel für einen Dateiauswahl-Dialog mit Ausgabe des Resultates. Kopieren Sie diese Zeilen ins
Command Window (>> kann mitkopiert werden).
>> [filename, pathname] = uigetfile('*.txt', 'Pick a text file');
>> if isequal(filename, 0)
>> disp('User selected ''Cancel''')
>> else
>> disp(['User selected ', fullfile(pathname, filename)])
>> end
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
129
Einführung in Matlab
Resultierendes Auswahlfenster für Dateien
Verzeichnis auswählen: uigetdir
directory_name = uigetdir('c:\data\', 'Bitte Verzeichnis wählen')
Öffnet eine Dialogbox zum Anwählen eines Verzeichnisses. directory_name enthält den gewählten
Pfad. Drückt der Benutzer «Cancel», wird der Wert 0 zurückgegeben.
Das erste Argument bezeichnet den Pfad, wo die Auswahl beginnt, das zweite den Titeltext an, der im
Fensterkopf erscheint.
Auswahlfenster für Verzeichnisse
Verzeichnis/Dateiname zum Speichern auswählen: uiputfile
[FileName, PathName] = uiputfile('*.dat', 'Speichern als...')
[FileName, PathName] = uiputfile('vp27data.dat', 'Speichern als...')
Dialogbox zum Auswählen des Speicherortes. Die Funktion gibt den gewählten Dateinamen und den Pfad
zurück. Falls «Cancel» gedrückt wird, resultiert FileName = 0.
Das erste Argument gibt den Dateityp an, bzw. im zweiten Beispiel wird direkt ein Dateiname vorgeschlagen.
Das zweite bezeichnet wiederum den Titeltext.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
130
Einführung in Matlab
Auswahlfenster zum Auswählen eines Dateispeicherortes
Zwei nützliche Funktionen zum Hantieren mit Datei- und Pfadnamen
Meist muss man abgefragte Dateinamen irgendwie in ihre Bestandteile zerlegen, oder aus Eingaben einen
kompletten Dateipfad zu Speichern zusammensetzen. Dazu gibt es praktische Funktionen:
Bitte probieren Sie es direkt selbst aus.
Zerlegen einer kompletten Pfadangabe in seine Bestandteile: fileparts
>> [pathstr, name, ext] = fileparts('c:\data\new\myfile.txt')
Und die Umkehrung davon: Erzeugen einer kompletten Pfadangabe aus den Bestandteilen: fullfile
>> filepath = fullfile(pathstr, [name ext])
>> filepath = fullfile('C:', 'data', 'new', 'myfile.txt')
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
131
Einführung in Matlab
Mustercode: Alle Dateien aus Verzeichnis wählen
Im folgenden finden Sie den Mustercode für eine Funktion, die Ihnen vielleicht einmal von Nutzen sein kann.
Häufig kommt es in Datenauswertungsprojekten vor, dass man alle auszuwertenden Dateien einfach in einem
Verzeichnis ablegen kann. Im Auswertungsprogramm wählt man nur das betreffende Verzeichnis aus, anstelle
einzelner Dateien.
Der unten gezeigte Code erlaubt genau dies: Der Benutzer kann ein Verzeichnis auswählen, das Programm liest
die Inhalte dieses Verzeichnisses aus und liefert eine Liste mit allen gefundenen Dateien, die eine bestimmte
Endung (z.B. .tab für Tabulator-getrennte ASCII-Dateien) haben. Diese kann man dann später in einer Schleife
nacheinander einlesen und verarbeiten.
Diesen Code-Ausschnitt können Sie in eigene Programme übernehmen. Dazu müssen Sie für die meisten
Anwendungen nur die gewünschte Dateiendung anpassen. Die Dateinamen werden in der Matrix Mfiles
zurückgegeben, die Anzahl enthaltener Namen in nbfiles.
pathname = uigetdir('', 'Verzeichnis
wählen');
if pathname == 0
return
end
Mdir = dir(pathname);
nbentries = size(Mdir, 1);
Mfiles = [];
for entry_i = 1:nbentries
if Mdir(entry_i).isdir == false
filename = Mdir(entry_i).name;
if filename(1) ~= '.'
[p, n, ext] = fileparts(filename);
if strcmpi(ext, '.tab')
Mfiles = strvcat(Mfiles, filename);
end
end
end
end
nbfiles = size(Mfiles, 1);
wenn der Benutzer 'cancel' drückt...
... das Programm verlassen
alle Verzeichniseinträge einlesen (*)
ihre Anzahl bestimmen
Resultatmatrix als leer vordefinieren
Schleife über alle Verzeichniseinträge
ist dies nicht ein Verzeichniseintrag?
--> dann ist es ein Dateiname
den aktuellen Dateinamen extrahieren
Einträge '.' und '..' ausschliessen (**)
Extension des Dateinamens bestimmen
mit der gewünschten Endung vergleichen
bei Übereinstimmung den Dateinamen
speichern
Anzahl gefundener Dateinamen bestimmen
Weitere Erläuterungen
(*) Die Funktion dir gibt den Inhalt des Verzeichnisses als Structure Array mit folgenden Feldern zurück
(für uns sind nur die Felder .isdir und .name relevant):
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
132
Einführung in Matlab
(**) Mdir(...).name enthält immer auch zwei spezielle Einträge, die zur Navigation im Dateisystem
dienen: '..' (Verzeichnis aufwärts) und '.' (aktuelles Verzeichnis).
Typischer Output von dir:
. aggr.dat jlsize3.fix rrsize4.fix slsize6.fix
.. bhsize1.fix jlsize4.fix rrsize5.fix tlsize1.fix
afsize1.fix bhsize2.fix jlsize5.fix rrsize6.fix tlsize2.fix
afsize2.fix bhsize3.fix jlsize6.fix slsize1.fix tlsize3.fix
afsize3.fix bhsize4.fix rawall.dat slsize2.fix tlsize4.fix
afsize4.fix bhsize5.fix rrsize1.fix slsize3.fix tlsize5.fix
afsize5.fix jlsize1.fix rrsize2.fix slsize4.fix tlsize6.fix
afsize6.fix jlsize2.fix rrsize3.fix slsize5.fix
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
133
Einführung in Matlab
Weitere Benutzereingaben
Dialogbox zur Eingabe von Werten: inputdlg
Auch diese Funktion hat viele Möglichkeiten zur Konfiguration, hier sind nur exemplarische Beispiele
gezeigt - Details siehe Hilfe-System.
>> answer = inputdlg('Durchmesser:', 'Bitte Wert eingeben')
answer enthält den eingegebenen Wert oder {} (leeres Cell Array), wenn «Cancel» gedrückt wurde.
Bitte beachten: Der eingegebene Wert wird als Zeichenkette zurückgegeben! Matlab weiss nicht, ob
man eine Zahl oder einen Text eingeben soll. Will man mit der Zahl weiterarbeiten, muss man die
Eingabe mit str2double oder str2num umwandeln!
Es können auch mehrere Werte auf einmal abgefragt und Default-Werte vorgeben werden:
>> prompt = {'Enter matrix size:','Enter colormap name:'};
>> dlg_title = 'Input for peaks function';
>> num_lines = 1;
>> def = {'20','hsv'};
>> answer = inputdlg(prompt,dlg_title,num_lines,def)
Die Eingaben werden dann in einem Cell Array zurückgegeben.
Eingabeaufforderung mit Buttons: questdlg
>> button = questdlg('Älter als 30?', 'Bitte antworten', ...
'Noch nicht', 'Leider ja', 'Noch nicht')
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
134
Einführung in Matlab
Erläuterung: Das letzte Argument bezeichnet, welche Schaltfläche dem "default" entspricht, also bereits
aktiviert ist (und mit der Enter-Taste übernommen werden kann). Es kann nicht weggelassen werden.
button enthält anschliessend den Klartext der gewählten Schaltfläche. Es können auch mehr als zwei
Auswahlbuttons erzeugt werden.
Viele weitere Möglichkeiten finden Sie im Hilfe-System unter dem Stichwort «Predefined Dialog
Boxes».
Grafische Eingabe von Koordinaten: ginput
Mit dieser Funktion können Koordinaten in einer vorhandenen Grafik eingegeben werden.
Bitte sehen Sie sich dies anhand des Beispiels an:
>> plot(peaks) % irgendeine Grafik erzeugen
>> hold on
>> [x, y] = ginput(3)
>> plot(x, y, '.-r')
Mit diesem Beispiel werden 3 Werte eingelesen. Mit der Return-Taste kann die Eingabe aber auch vorzeitig
abgebrochen werden. Die Koordinaten werden in den Spaltenvektoren x und y zurückgegeben.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
135
Einführung in Matlab
Aufgabe P2: Benutzereingaben
Integrieren Sie die notwendigen Benutzereingaben in Ihr Projekt-Hauptprogramm. Je nach
Aufgabenstellung kann es sich dabei um folgendes handeln:
•
Auswahl der zu bearbeitenden Datei(en) bzw. des Verzeichnisses, in dem sie liegen.
•
Abfrage von allfälligen Parametern für die Verarbeitung der Daten (z.B. Filter).
•
Auswahl des Dateinamens und/oder des Speicherortes für die Speicherung der Daten.
•
Abfragen, ob bestimmte Auswertungen oder graphische Ausgaben gewünscht werden.
Falls bei der Dateiauswahl keine Datei gewählt wird ("Cancel" wurde bei der Dateiauswahl gedrückt), soll das
Programm abbrechen und eine entsprechende Meldung ausgeben. Auch andere Fehleingaben sollten entweder
zum Vornherein verhindert werden oder aber zu einer entsprechenden Fehlermeldung führen.
Für das Projekt EyeData Processing
•
Als erstes soll der Benutzer eine zu bearbeitende Fixationsdatei (also ein .fix-File) anwählen können.
•
Als Parameter soll der Benutzer angeben können, ob die Daten aufgrund der skipcode-Spalte in den
Daten gefiltert werden sollen.
Es soll auch angeben werden können, wo und unter welchem Namen die Daten (zusammengezogenes
Rohdaten-File, aggregierte Daten) gespeichert werden sollen.
•
Die Musterlösung finden Sie im m-File eyedata_sol2.m
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
136
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Anweisungen:
•
•
•
•
•
•
•
•
•
uigetfile: Dialogbox zum Auswählen von Dateien
uigetdir: Dialogbox zum Anwählen eines Verzeichnisses
uiputfile: Dialogbox zum Auswählen des Speicherortes einer Datei
fileparts: Zerlegen einer kompletten Pfadangabe in seine Bestandteile
fullfile: Erzeugen einer kompletten Pfadangabe aus den Bestandteilen
inputdlg: Dialogbox zur Eingabe von Werten
questdlg: Eingabeaufforderung mit Buttons
ginput: Grafische Eingabe von Koordinaten
dir: Verzeichniseinträge der Festplatte einlesen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
137
Einführung in Matlab
Schreiben von Daten in externe Dateien
Grundsätzlich ist das Vorgehen analog dem Lesen aus externen Dateien: Zuerst wird die Datei mit fopen
geöffnet, dann wird geschrieben, und am Schluss muss die Datei mit fclose wieder geschlossen werden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
138
Einführung in Matlab
Grundlegende Funktionen zum Schreiben in externen Dateien
Die im folgenden beschriebenen Befehle haben zum Teil noch weitere Parameter - sehen Sie dazu die
Angaben im Hilfe-System.
fid = fopen(filename, mode)
Öffnen einer Datei. Hier muss für mode nun 'w' (write - Datei zum schreiben öffnen bzw. neu erstellen)
oder 'a' (append - Daten an bestehende Datei anhängen) gewählt werden.
fprintf(fid, format, M, ...)
Schreibt die Daten, die in Matrix M (und allfälligen weiteren Matrizen) enthalten sind, unter der Kontrolle des
format-Strings in die Datei.
Die Möglichkeiten zur Formatierung der Ausgabedaten mittels Format-String sind sehr umfangreich.
Einige grundlegende Formate finden Sie im nachfolgenden Beispiel, für die detaillierten
Formatangaben und alle weiteren Möglichkeiten konsultieren Sie bitte die Angaben im Hilfe-System.
fclose(fid)
Schliesst die Datei.
Beispiel: Schreiben in Datei
Sehen Sie auch das m-File writedatafile.m
% Datei im Schreibmodus öffnen
fid = fopen('C:\m\testdaten.txt', 'w');
% Schreiben von Text:
% %s heisst String, \n erzeugt einen Zeilenumbruch
fprintf(fid, '%s\n', 'Irgendein Text');
% Schreiben von numerischen Daten:
% %g ist Fixkomma-Notation, mehrere Werte werden geschrieben
% und mit Tabulator getrennt (\t).
fprintf(fid, '%g\t', pi, [7.5:3:13.5]);
fprintf(fid, '\n'); % nun fehlt noch der Zeilenumbruch
% Ausgabe mit max. 6 Vorkomma- und 2 Nachkommastellen
fprintf(fid, '%6.2f\t', [737.5:3234.273:20000]);
% Datei schliessen
fclose(fid);
Dies führt zu folgender Datei C:\m\testdaten.txt (Ansicht in MS Excel):
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
139
Einführung in Matlab
Weitere Dateifunktionen finden Sie in der Hilfe z.B. unter: MATLAB > Function Reference > File
I/O > Text files
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
140
Einführung in Matlab
Aufgabe P3: Daten speichern
Schreiben Sie den Programmcode, der es Ihnen ermöglicht, die eingelesenen und bearbeiteten Daten
in eine externe Datei zu speichern.
Die Zwischenschritte der Bearbeitung der Daten hängen natürlich von Ihrer spezifischen Aufgabenstellung ab.
Sie können damit beginnen, die Daten zuerst mal unverändert oder mit einfacheren Anpassungen übungshalber
wieder zu speichern.
Für das Projekt EyeData Processing
•
•
Die vom Benutzer gewählte Fixationsdatei soll eingelesen werden. Die Daten müssen intern so
gespeichert werden, dass sie anschliessend für das Speichern wieder abgerufen werden können.
Das Programm soll die eingelesenen Daten anschliessend wieder speichern. Gemäss untenstehender
Abbildung sollen die Kopfzeilen nicht mit abgespeichert werden. Stattdessen werden zwei zusätzliche
Spalten hinzugefügt: Spalte 1 soll nun die Vp-Nummer (Subject) enthalten, Spalte 2 den Studiennamen
(Study).
Die Musterlösung ist im m-File eyedata_sol3.m zu finden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
141
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
Das Vorgehen beim Schreiben in Dateien verläuft analog dem Lesen aus externen
Dateien: Zuerst wird die Datei mit fopen geöffnet, dann wird mit fprintf
geschrieben, und am Schluss muss die Datei mit fclose wieder geschlossen
werden.
Anweisungen
•
fid = fopen(filename, mode): Öffnen einer Datei
fprintf(fid, format, M): Schreibt die Daten der Matrix M enthalten
•
sind, gemäss format-String in die Datei
fclose(fid): Schliessen einer Datei
•
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
142
Einführung in Matlab
Glossar
ASCII:
American Standard Code for Information Interchange, die gebräuchlichste Norm, um alphanumerische
Zeichen zu repräsentieren.
Cell Array:
Eine Datenstruktur, der aus mehreren matrix-förmig angeordneten Zellen besteht. Jede Zelle kann
verschiedenste Daten wie ganze Matrizen, Strings, weitere Cell Arrays etc. enthalten.
copy-and-paste:
Auf PC/Windows: CTRL-C und CTRL-V. Auf Mac OS: cmd-C und cmd-V
Debugger:
Funktionen des Editors, um im geschriebenen Programm Fehler zu suchen und beheben.
Matrix:
Die wichtigste Art der Repräsentation von Daten in Matlab. In der Mathematik ist eine Matrix (Plural:
Matrizen) eine Tabelle von Zahlen oder anderen Größen. Matrizen unterscheiden sich von einfachen
Tabellen dadurch, dass mit ihnen gerechnet werden kann.
Mit dem Ausdruck Matrix ist meist eine zwei- oder höherdimensionale Matrix gemeint (vgl. Skalar,
Vektor).
Skalar:
«nulldimensionale» Matrix, d.h. nur ein Element
String:
Zeichenkette. Ein Vektor bzw. eine Matrix deren Elemente ASCII-codierte Zeichen (character) interpretiert
werden.
Structure Array:
Jedes Element eines Structure Arrays enthält dieselbe Struktur verschiedener, mit eigenen Namen
ansprechbaren Unterelementen, genannt Felder (fields). Diese Felder kann man auch als «Datencontainer»
betrachten, die alle möglichen Inhalte haben können.
Vektor:
eindimensionale Matrix, also nur eine Zeile bzw. eine Spalte
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
143
Einführung in Matlab
Lektion 4: Verarbeitung und grafische Darstellung
von Daten
In dieser Lektion geht es darum, wie man in Matlab die Daten weiterverarbeiten kann. Einerseits geht es um
das Transformieren, Umrechnen oder Aggregieren von Daten und das Bestimmen statistischer Kenngrössen.
Andererseits werden grundlegende Möglichkeiten der Visualisierung von Messwerten besprochen.
Lernziele
•
•
•
•
Sie kennen die Möglichkeiten von Matlab, selektiv auf Daten zuzugreifen.
Sie kennen die wichtigsten Statistikfunktionen.
Sie wissen, wie man grafische Figuren mit einer oder mehreren Darstellungen erzeugt und an die
Erfordernisse anpasst.
Sie kennen die wichtigsten Grafikfunktionen und können diese auf Ihre Daten anwenden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
144
Einführung in Matlab
Daten selektieren: Logisches Indizieren und die «find»Funktion
In diesem Kapitel geht es um wichtige Möglichkeiten, selektiv bestimmte Daten aus grösseren Datenfeldern
zu extrahieren. Dazu stehen folgende Verfahren zur Verfügung:
•
logische Indizierung
•
die Funktion find
•
eine spezielle Hilfsfunktion subM, die diesem Zweck dient
Anschliessend wird Ihr Datenverarbeitungsprojekt um die Auswertungsfunktionen ergänzt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
145
Einführung in Matlab
Logische Indizierung
Diese Methode des Datenzugriffs ermöglicht, Elemente einer Matrix aufgrund logischer Vergleichsoperationen
anzusprechen. Einfacher gesagt, kann man damit alle Elemente auf einmal ansprechen, die eine bestimmte
Bedingung erfüllen. Beispielsweise:
>> a = magic(7);
>> a(a < 10) = 0
Was passiert? Alle Elemente von a, die kleiner als 10 sind, werden auf 0 gesetzt.
Und wie funktioniert das? Der Vergleich a < 10 ergibt eine gleichgrosse Matrix mit den Wahrheitswerten
des Vergleichs für jedes Element, denn Vergleichsoperatoren können auch auf ganze Vektoren oder Matrizen
angewandt werden (vgl. Abschnitt Vergleichsoperatoren in Lektion 2). Diese kann als logischer Index
verwendet werden.
Probieren Sie's bitte selbst aus:
>> a = magic(7);
>> a < 10
>> b = a(a > 20)
Ergebnis der Vergleichsoperation
Extrahiert alle Elemente von a, die der Bedingung genügen
Oft kommt es vor, dass man aus einer grösseren Datenmatrix Daten nach bestimmten Kriterien extrahieren
muss, z.B. die Werte aus Spalte 7 aus allen Zeilen der Matrix Mdata, in deren Spalte 3 ein Wert grösser als
0,5 steht. Eine naheliegende Lösung dafür ist, dass man eine Schleife schreibt und Zeile für Zeile mit einem
if-Statement prüft, ob dies der Fall ist und dann den Wert ausliest:
Mdata = rand(50, 7);
Mselect = [];
[nbrows, nbcols] = size(Mdata);
for row_i = 1:nbrows
if Mdata(row_i, 3) > .5
Mselect = vertcat(Mselect, Mdata(row_i, 7));
end
end
Sehr viel kürzer und damit eleganter (und auch schneller) geht dies mit der logischen Indizierung:
>> Mdata = rand(50, 7);
>> Mselect = Mdata(Mdata(:,3)>.5, 7)
Um zu sehen, wie das funktioniert, schauen wir uns den "inneren" Ausdruck genauer an:
>> Mdata(:,3)>.5
Wie Sie sehen, ergibt dies einen Vektor mit den Wahrheitswerten des Vergleiches aller Werte in Spalte 3 mit
0,5. Dieser kann wiederum als logischer Index in eine Matrix gebraucht werden. D.h. es werden alle Zeilen
genommen, deren korrespondierender Eintrag true (numerischer Wert 1) enthält.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
146
Einführung in Matlab
Die find-Funktion
Die find-Funktion eröffnet ähnliche Möglichkeiten wie die eben besprochene logische Indizierung. Sie
liefert als Resultat aber keine Matrix mit logischen Vergleichswerten, sondern einen Vektor mit den «linearen
Indices» (vgl. Lektion 1, Abschnitt Matrizen, Unterabschnitt «Lineare Indizierung» ganz unten auf der Seite).
Am Besten probieren Sie auch dies gleich selbst aus:
>> a = magic(10);
>> selected = find(a > 50)
>> length(selected)
alle Elemente von a finden, die > 50 sind
Anzahl gefundener Elemente
Dies ergibt einen Vektor mit den linearen Indizes der entsprechenden Elemente. Dieser kann nun für weitere
Operationen gebraucht werden.
>> b = a(selected)
>> a(selected) = inf
die entsprechenden Elemente extrahieren
die Elemente in a auf inf setzen
In den meisten Fällen lässt sich find durch eine logische Indizierung ersetzen, was auch sinnvoll ist,
weil dies schneller ausgeführt wird.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
147
Einführung in Matlab
Eine hilfreiche Funktion: subM
Sie finden diese praktische Hilfsfunktion (sie gehört nicht zum Funktionsumfang von Matlab) bei den
Beispielprogrammen (zip-File). Sie ist wie folgt definiert:
function Mselected = subM(Min, col, min, max)
subM ist eine Funktion, die alle Zeilen aus einer Matrix Min extrahiert, in denen der Wert in einer bestimmten
Spalte col in einem definierten Bereich von min bis max (inklusive) liegt.
>> M1 = magic(10);
>> column = 3; minvalue = 10; maxvalue = 30;
>> Mneu = subM(M1, column, minvalue, maxvalue)
Natürlich kann man das mithilfe der logischen Indizierung auch direkt programmieren, dies ist aber weniger
komfortabel und ergibt schlechter lesbaren Programmcode:
>> Mneu = M1(M1(:, column) >= minvalue & M1(:, column) <= maxvalue, :)
Erläuterung: Die Ergebnisse der beiden Teilvergleiche werden mit & logisch verknüpft (AND-Verknüpfung).
Nochmals im Detail angeschaut:
>> M1(:, column) >= minvalue
>> M1(:, column) <= maxvalue
>> M1(:, column) >= minvalue & M1(:, column) <= maxvalue
Wenn man sich die Funktion subM im Editor anschaut (mit edit subM), sieht man, dass sie ausser einem
Plausibilitätscheck eigentlich nichts Anderes macht. Trotzdem kann es hilfreich sein, solche oft verwendeten
Operationen als Funktionen zu schreiben. So spart man später beim Programmieren Zeit und erhält besser
lesbaren Code.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
148
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
Logische Indizierung: Eine Methode des Datenzugriffs, mit welcher gleichzeitigh
alle Elemente einer Matrix angesprochen werden können, die eine bestimmte
Bedingung erfüllen.
z.B. alle Elemente aus a auslesen, die kleiner als 10 sind: b = a(a < 10)
Anweisungen
•
•
find: Elemente in einer Matrix finden. Resultat sind die linearen Indices auf die
betreffenden Elemente.
subM: Hilfsfunktion (nicht aus dem Funktionsumfang von Matlab). Extrahiert
alle Zeilen aus einer Matrix, in denen der Wert in einer bestimmten Spalte in einem
definierten Wertebereich liegt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
149
Einführung in Matlab
Grundlegende Statistikfunktionen
In diesem Kapitel werden die grundlegenden statistischen Funktionen besprochen, die bereits in der
Grundversion von Matlab enthalten sind. Es handelt sich dabei um
•
Funktionen zum Berechnen statistischer Kennwerte (Deskriptivstatistik)
•
Berechnung von Korrelations- und Kovarianzwerten
•
Funktionen zum Erstellen von Zufallsdatensätzen mit bestimmten statistischen Verteilungen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
150
Einführung in Matlab
Deskriptivstatistik
Bereits die Grundversion von Matlab bietet eine Anzahl an hauptsächlich deskriptiven Statistikfunktionen.
Weitere Funktionen sind in der Statistik-Toolbox zu Matlab enthalten, die separat lizensiert werden muss. Ihre
Funktionen werden daher hier nicht besprochen.
Falls Sie über die Statistik-Toolbox verfügen, finden Sie alle notwendigen Informationen im HilfeSystem unter Statistics Toolbox (Hauptkategorie im Contents-Teil)
Minimum und Maximum
Die Funktionen dazu heissen min und max. Sie besitzen dieselben Möglichkeiten der Anwendung:
Probieren Sie's aus:
>> a = magic(5);
>> min(a)
>> max(max(a))
>> b=fix(rand(5)*25)
>> max(a, b)
>> min(a, [], 2)
So werden die Minima in Spalten berechnet.
So erhält man das Minimum oder Maximum der ganzen Tabelle
eine zweite Matrix definieren
Vergleicht a und b Element für Element
und schreibt das jeweilige Maximum in eine gleichgrosse Matrix.
a und b müssen natürlich die gleichen Dimensionen haben.
Mit diesem Schreibweise kann man die Dimension der Berechnung angeben.
1 sind Spalten (default), 2 die Zeilen, 3 die Ebenen etc.
Mittelwert, Median etc.
Zur Berechnung dieser Werte gibt es drei Funktionen, die wiederum dieselbe Struktur besitzen: mean,
median und mode.
Auch hier erfahren Sie es am Besten selbst:
>> m=fix(randn(200,6)*18+48);
>> mean(m)
>> modeval=mode(m)
>> [vals,freq]=mode(m)
>> median(m,2)
Matrix mit normalverteilten Werten
Mittelwert der Spalten
Modalwert, d.h. der häufigste Wert
So erhält man auch die Anzahl der entsprechenden Werte
So kann man wieder die Dimension angeben
Will man den Wert für ein ganzes Array bestimmen, muss man dieses zuerst in einen Spaltenvektor umwandeln.
Eine «logische Lösung» dafür wäre z.B.:
m1 = reshape(m, numel(m), 1);
Es gibt aber eine «Abkürzung»:
>> m1 = m(:)
>> mode(m1)
>> mean(m(:))
m(:) heisst: einfach alle Werte von m nehmen
oder auch einfach direkt
Varianz und Standardabweichung
Die beiden Funktionen var und std werden meist in der einfachsten Form verwendet (Details siehe HilfeSystem). Diese berechnet die Werte ebenfalls in Spalten:
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
151
Einführung in Matlab
Auch hier bitte wieder selbst nachvollziehen:
>> var(m)
>> std(m)
>> std(m1)
Varianz
Standardabweichung
oder über das einspaltige Array
Perzentile
Die Funktion prctile(data,
percvalues) erlaubt die Berechnung von Perzentilen auf
komfortable Weise. Auch diese Berechnung läuft über die Spalten einer Matrix data. Der Parameter
percvalues ist ein Zeilenvektor, der die gewünschten Prozentwerte enthält.
Perzentilberechnung:
>> prctile(m, [5 50 95])
>> prctile(m, [25 75], 2)
Berechnet das 5%-, 50%- und 95%-Perzentil für jede Spalte.
Jede Zeile des Resultates enthält die drei Perzentilwerte einer Spalte.
auch hier kann man die Dimension angeben
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
152
Einführung in Matlab
Korrelation und Kovarianz
Die einzige inferenzstatistische Funktion der Matlab-Grundversion ist die Berechnung von Korrelationen
mittels corrcoef. Die wichtigsten Formen lauten wie folgt:
R = corrcoef(X)
Dies ergibt eine Matrix R mit den Korrelationskoeffizienten. Die Funktion arbeitet über eine zweidimensionale
Matrix. Diese wird so interpretiert, dass die Spalten den abhängigen Variablen AV entsprechen, und die
Zeilen die individuellen Beobachtungen (also Messwerte) repräsentieren.
R = corrcoef(x, y)
x und y sind Spaltenvektoren, die zwei abhängigen Variablen entsprechen. Genauer gesagt, falls x und y nicht
Spaltenvektoren sind, werden sie automatisch in solche umgewandelt. Natürlich muss die Anzahl Elemente
in beiden Arrays gleich sein.
[R, P, RLO, RUP] = corrcoef(X, 'alpha', .01)
So erhält man weitere Werte. P enthält die Signifikanzwerte auf der Basis des spezifizierten alpha Wertes. Die Angabe von alpha kann auch weggelassen werden, dann ist der default-Wert .05 für 95%Konfidenzintervalle.
RLO und RUP enthalten die unteren (RLO) und oberen (RUP) Grenzen für ein 95%-Konfidenzintervall für
jeden Korrelationskoeffizient.
Details dazu sowie zu weiteren Parametern erhalten Sie wie üblich im Hilfe-System.
Dazu ein Beispiel aus dem Matlab-Hilfesystem. Dabei wird eine Datenmatrix erzeugt, die eine
Korrelation zwischen Spalte 4 und den anderen Spalten aufweist.
>> x = randn(30, 4);
>> x(:, 4) = sum(x, 2);
>> [r, p] = corrcoef(x)
>> [i, j] = find(p < 0.05);
>> [i, j]
unkorrelierte Zufallsdaten
nun bauen wir eine Korrelation ein
Korrelationskoeffiziente und p-Werte berechnen
signifikante Korrelationen finden (Spalten, Zeilen)
ihre Spalten und Zeilen anzeigen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
153
Einführung in Matlab
Zufallsdaten mit bestimmten Verteilungen
Oft ist die Möglichkeit hilfreich, zum Testen von Auswertungsfunktionen zufällige Daten mit bestimmten
Verteilungen erzeugen zu können.
Permutation
Um eine zufällig geordnete Folge von Zahlen in einen bestimmten Bereich zu erhalten, verwenden Sie die
Funktion randperm (random permutation).
randperm(n)
Dies erzeugt eine zufällig geordnete Reihe der Zahlen von 1 bis n als Zeilenvektor, z.B. [3 2 6 4 1 5].
Indem man dazu eine Konstante addiert, kann man diese Folge in einen bestimmten Bereich «verschieben».
Gleichverteilte Zufallszahlen
Die Grundfunktion, um gleichmässig verteilte zufällige Zahlen zu erzeugen, heisst rand. Sie erzeugt Zahlen
zwischen 0 und 1. Ihre Syntax lautet:
a = rand(rows, cols)
Dies erzeugt eine Matrix mit rows Zeilen und cols Spalten.
Meist braucht man aber Zufallszahlen in einem bestimmten Zahlenbereich. Um Daten im Bereich von
LowerBound bis UpperBound zu erzeugen, verwenden Sie folgende Methode:
data = rand(rows, cols) * (UpperBound - LowerBound) + LowerBound;
Ergebnis von data = rand(4000, 1) * (37 - 12) + 12
Für die meisten Anwendungen genügt diese Form. Falls Sie sicher sein müssen, dass jedesmal
eine andere Zahlenfolge erzeugt wird bzw. Sie immer die gleiche Folge haben wollen, oder den
Algorithmus der Zufallszahlenerzeugung genau kennen müssen, seien Sie auf das Hilfe-System zu
rand verwiesen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
154
Einführung in Matlab
Normalverteilte Zufallsdaten
Mit der Funktion randn erhalten Sie normalverteilte Zufallsdaten mit dem Mittelwert 0 und der
Standardabweichung 1.
data = randn(rows, cols)
Um Daten mit beliebigem Mittelwert und Standardabweichung zu generieren, geht man wie folgt vor:
>> M = 27;
>> SD = 10;
>> data = randn(4000, 1) * SD + M;
>> mean(data)
>> std(data)
Mittelwert definieren
Standardabweichung definieren
Daten erzeugen
Mittelwert nachprüfen
Standardabweichung nachprüfen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
155
Einführung in Matlab
Aufgabe P4: Projektarbeit - Verarbeitung der Daten
Implementieren Sie in Ihrem Projekt die Verarbeitung der Daten. Die Art der Bearbeitung der
Daten hängen natürlich von Ihrer spezifischen Aufgabenstellung ab; es kann sich beispielsweise
um Transformationen, Aggregation, Berechnen von Mittelwerten oder Zusammenziehen und
Umgruppieren von Daten handeln.
Für das Projekt EyeData Processing
1.
2.
3.
4.
5.
Erweitern Sie die Eingabefunktion zur Abfrage der zu bearbeitenden Dateien wie folgt: In einer Schleife
sollen nun mehrere Datenfiles (also .fix-Files) anwählbar sein (Abbruch des Vorgangs, wenn der
Benutzer "cancel" / "Abbrechen" drückt.
Alternativ kann auch folgendes realisiert werden: Der Benutzer kann ein Verzeichnis auswählen, aus
dem dann anschliessend alle vorhandenen .fix-Files eingelesen werden. Beispielcode siehe Lektion 3
Mustercode: Alle Dateien aus Verzeichnis wählen (realisiert in der Musterlösung zu Aufgabe P5,
eyedata_sol5.m).
In einer Schleife sollen nun alle vom Benutzer gewählten Fixationsdateien eingelesen werden. Die Daten
müssen intern so gespeichert werden, dass sie anschliessend für das Speichern wieder abgerufen werden
können.
Das Programm soll die Daten (entsprechend der Benutzereingabe) aufgrund der Spalte "Skipcode"
filtern. Alle Daten mit -1 sind ok, die anderen sind aus dem Datensatz zu entfernen.
Die gefilterten Daten aller Versuchspersonen sollen in ein einziges Datenfile gespeichert werden
(zusammengezogenes Rohdaten-File). Das Format bleibt das gleiche wie bei der Aufgabe P3, nur sind
jetzt halt die Daten mehrere Personen nacheinander enthalten.
Pro Versuchsperson und Bildgrösse soll folgendes berechnet werden: (1) die mittlere Anzahl von
Fixationen pro Bild, (2) der Median der Dauer (da schiefe Verteilung!) der Fixationen, die auf allen
Bildern einer bestimmten Grösse gemacht wurden. Die Bildgrösse ergibt sich aus den letzten Zeichen
des Bildnamens (1 bis 4). Diese Werte sollen dann gemäss untenstehender Abbildung als Daten mit
Messwiederholung in das Datenfile "aggregierte Daten" gespeichert werden.
Die Musterlösung ist im m-File eyedata_sol4.m zu finden.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
156
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Anweisungen:
•
•
•
•
•
•
•
•
min, max: Minimum und Maximum
mean, mode, median: Mittelwert, Modalwert, Median
var, std: Varianz und Standardabweichung
prctile: Perzenzilberechnung
corrcoef: Korrelationskoeffizienten
randperm: Zufällig geordnete Reihe der Zahlen von 1 bis n
rand: gleichverteilte Zufallszahlen zwischen 0 und 1
randn: normalverteilte Zufallszahlen mit Mittelwert 0 und Standardabweichung
1
•
data = rand(rows, cols) * (UpperBound - LowerBound)
+ LowerBound;
Erzeugen von Zufallszahlen in einem bestimmten Zahlenbereich
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
157
Einführung in Matlab
Grafikgrundlagen: Figuren und Achsensysteme
Allgemeines zum Thema Grafik in Matlab
Matlab bietet sehr umfangreiche Möglichkeiten der grafischen Darstellung an. Es ist hier nicht möglich, eine
auch nur annähernd vollständige Übersicht davon zu geben. Stattdessen werden wieder die grundlegenden
Mechanismen eingeführt, zusammen mit einer Demonstration der in unserem Fachgebiet am häufigsten
verwendeten Grafiken.
•
der Umgang mit Figur-Fenstern
•
interaktives Bearbeiten von Grafiken
•
Achsensystemen
•
Universelle Plots
•
Balkengrafiken
•
Weitere Grafiktypen kurz demonstriert
•
Beschriften und erweitern von Grafiken
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
158
Einführung in Matlab
Erzeugung und Manipulation von Figuren
Jede Grafikausgabe spielt sich in einem speziellen Fenster ab, einem sogenannten figure graphics object, im
folgenden kurz «Figur» genannt. Im Direktmodus ist das explizite Kreieren einer Figur oft nicht notwendig,
da Matlab automatisch eine solche erzeugt, falls noch keine vorhanden ist. Allerdings werden dazu DefaultEinstellungen (Fenstergrösse, Hintergrundfarbe etc.) verwendet, die den Anforderungen der Aufgabe oft nicht
entsprechen. Daher wird man in einem Programm, welches Grafikausgaben verwendet, die Figuren i.d.R.
explizit erzeugen und deren Eigenschaften gezielt einstellen.
Zum Verständnis der Arbeitsweise von Matlab im Zusammenhang mit Grafikausgaben sehen Sie sich
bitte folgende Beispiele an:
>> plot(sin(-pi:.1:pi))
>> plot(cos(-pi:.1:pi))
>> hold on
>> plot(sin(-pi:.1:pi),'r')
Matlab erzeugt selbstständig eine Figur mit den
Default-Einstellungen
die neue Grafikausgabe ersetzt die alte
fixiert die Grafik (Gegenstück ist hold off)
nochmals den Sinus plotten, diesmal in rot - nun wird die
vorherige Kurve nicht mehr überschrieben
Wie man sieht, geht jede Grafikausgabe in das momentan aktive (also im Vordergrund stehende bzw. zuletzt
benutzte) Grafikfenster. Will man eine zusätzliche Grafik erstellen, muss man eine neue Figur erzeugen:
>> figure
>> bar(rand(10,4))
Eine zusätzliche Figur kann man auch erzeugen, indem man im Menu der vorhandenen Figur File > New >
Figure wählt.
Die Darstellungseigenschaften jeder Grafik können mit den im Grafik-Fenster eingebauten Tools nachträglich
verändert werden. So kann man eine Grafik nach eigenen Bedürfnissen modifizieren und anschliessend
ausdrucken oder in verschiedenen Formaten speichern.
Aufgabe: Schauen Sie sich die Funktion der verschiedenen Plotting-Tools direkt an; Sie können sich
auch im Hilfe-System (docsearch 'interactive plotting') über die Möglichkeiten
informieren.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
159
Einführung in Matlab
Aber was, wenn Sie jetzt wieder in die erste Figur zeichnen wollen? Solange Sie im Direktmodus
arbeiten, können Sie dazu das erste Fenster «von Hand» in den Vordergrund holen, und dann mit den
Grafikanweisungen weitermachen:
>> bar(rand(10,1))
>> close all
nun wird wieder in das erste Fenster gezeichnet
damit schliesst man alle offenen Figuren
Wenn man in einem Programm mit mehreren Figuren arbeiten will, geht man wie folgt vor: Jede benötigte
Figur wird separat erzeugt und erhält einen sog. figure handle, was soviel wie «Griff» oder «Henkel» bedeutet.
Damit kann man sich später immer wieder auf eine bestimmte Figur beziehen.
>> fig1=figure('Name','bar graphs');
>> bar3(rand(10,3))
>> fig2=figure('Name','line graphs');
>> plot(sin(-pi:.1:pi),'r')
>> figure(fig1)
>> grid off
>> clf
die Parameter bestimmen den Titel des
Fensters (optional)
eine zweite Figur
so wechselt man wieder zur 1. Figur
z.B. das Raster ausschalten
ganze Grafik löschen (clear figure)
Bei Funktionen wie clf, close etc. kann man auch direkt angeben, welche Figur man ansprechen will,
ohne dass diese aktiv sein muss (also ohne dass man sie vorher mit z.B. mit figure(fig1) zur aktiven
Figur gemacht hat). Also zum Beispiel clf(fig2) oder close(fig1).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
160
Einführung in Matlab
Eigenschaften von Figuren
Das Verändern der Eigenschaften von Figuren erfolgt über Argument-Paare, wie im
obigen Beispiel mit dem Fenstertitel bereits gesehen. Das erste Argument eines Paares
gibt an, welche Eigenschaft man verändern will (also z.B. 'Name'), das zweite enthält
die konkreten Einstellungen.
Für Figuren stehen eine Unmenge von veränderbaren Eigenschaften zur Verfügung. Die komplette
Übersicht finden Sie in der Hilfe z.B. unter dem Stichwort 'figure properties' (docsearch 'figure
properties'). Die wichtigsten davon werden im nächsten Abschnitt kurz beschrieben.
Die Eigenschaften können entweder direkt beim Erzeugen einer Figur gesetzt werden, wie oben bereits
gesehen:
>> fig2=figure('Name','line graphs');
Sie können aber auch später jederzeit mit set verändert werden. Dafür benötigt man den handle der
anzusprechenden Figur. Entweder notiert man direkt den entsprechenden Handle (also fig2), oder man ruft
mit gcf (get current figure) den handle der gerade aktiven Figur ab. Beispiel:
>> set(fig2, 'Name', 'Ein anderer Name');
>> set(gcf, 'Name', 'Ein anderer Name');
Die wichtigsten Figur-Eigenschaften
'Name', 'titeltext'
Titel des Figur-Windows
'Color', ColorSpec
Hintergrundfarbe. Informationen dazu, wie die Farben spezifiziert werden können, finden Sie z.B. mit doc
colorspec. Beispiele:
>> set(gcf,'Color','yellow')
>> set(gcf,'Color','r')
>> set(gcf,'Color',[.8 .8 .8])
'yellow' ist eine der vordefinierten Farben
'r' ist eine Kurzform für 'red'
RGB-Farbtripel, ergibt Hellgrau
'Position', [left, bottom, width, height]
Position und Grösse des Fensters.
left, bottom: Abstand in Pixels vom linken bzw. unteren Rand
width, height: Breite und Höhe des Fensters
Beispiel:
>> fig=figure('Position', [100 100 800 600]);
Nützliche Funktion dazu: Abrufen der Bildschirmgrösse, falls man das Fenster relativ dazu dimensionieren
möchte
>> ss=get(0,'ScreenSize')
'Resize', 'on' oder 'off'
Bestimmt, ob der Benutzer die Fenstergrösse manuell verändern kann.
'Toolbar', 'none' oder 'auto'
Bestimmt, ob die Toolbar (Werkzeugleiste) des Figur-Windows sichtbar ist. Default ist 'auto', also sichtbar.
'Visible', 'on' oder 'off'
Mit 'off' kann das Fenster versteckt werden, es ist aber weiterhin intern vorhanden und für Grafikausgaben
brauchbar.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
161
Einführung in Matlab
Achsensysteme (Axes)
Jede Grafikausgabe geht genau genommen nicht in eine Figur, sondern in das darin enthaltene Achsensystem.
Dies wird in der Matlab-Terminologie als Axes (Achsen, Mz. von axis) bezeichnet, also eben ein System aus
zwei (x, y) oder drei (x, y, z) Achsen - nicht zu verwechseln mit axis, womit Einstellungen der eigentlichen
Achsen (z.B. der Skalen) vorgenommen werden können (s. unten).
Auch Achsensysteme haben wieder eine Vielzahl von Eigenschaften (docsearch 'axes
properties'), mit Ausnahme von 'Color' werden die meisten davon für unsere
Anwendungsfälle kaum gebraucht.
Alle anderen Eigenschaften der Achsen können über separate Befehle verändert werden. Für die
Demonstration schliessen Sie mal wieder alle Figuren und erzeugen eine neue Grafik (am Einfachsten
mit copy/paste):
>> close all
>> figure('Position', [100 100 800 600])
>> plot(peaks)
Nun können wir die Eigenschaften verändern:
>> title('Die peaks-Funktion')
>> grid off
>> grid on
>> axis off
>> axis on
>> axis([0 100 -20 20])
>> axis tight
>> set(gca,'Color','blue')
Titel der Grafik
Raster ausschalten
und wieder ein
Achsen entfernen
Skalen verändern: [xmin xmax ymin ymax]
Skalen eng an die Daten anpassen
Hintergrundfarbe setzen. gca = get current axes
Weitere Möglichkeiten von axis: siehe Hilfe-System doc axis
>> box on
>> xlabel('Abszisse')
>> ylabel('Ordinate')
Rahmen um die Grafik
Achsen beschriften
Eine weitere nützliche Funktion ist waitforbuttonpress: Damit kann mit der weiteren
Programmausführung gewartet werden, bis der Benutzer in die Grafik hineinclickt bzw. bei aktiver Grafik eine
Taste drückt:
>> figure, plot(peaks), waitforbuttonpress, bar(peaks)
Eine andere Möglichkeit für Benutzereingaben: die Figur-Eigenschaft currentcharacter (s.
Hilfe-System).
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
162
Einführung in Matlab
Multiple Achsensysteme
Oft ist es nützlich, in einer Figur mehrere Untergrafiken oder Panels zu haben. Mit der Funktion subplot
kann man zu diesem Zweck mehrere Achsensysteme in einer Figur erzeugen.
Multiple Achsensysteme
Bitte spielen Sie folgendes Beispiel durch.
>> close all, figure('Position', [100 100 800 600])
>> subplot(2,2,1)
>> plot(sin(-pi:.1:pi))
>> subplot(2,2,2)
>> barh(rand(10,3))
>> subplot(2,2,3)
>> plot(peaks)
>> subplot(2,2,4)
>>
scatter(randn(1,40),
randn(1,40))
>> subplot(2,2,1)
>> cla
erzeugt 2x2 Untergrafiken und aktiviert die erste davon
plotten in die erste Subgrafik
die zweite Subgrafik anwählen
horizontale Balkengrafik
Subgrafik unten rechts
und die letzte
wieder die erste anwählen
löscht nur die Inhalte der aktuellen Untergrafik (clear axes).
clf würde alle Achsensysteme aus der Figur entfernen.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
163
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Merkpunkte und Anweisungen:
Merkpunkte
•
Jede Grafikausgabe spielt sich in einem speziellen Figurfenster ab.
•
Noch genauer: Jede Grafikausgabe geht eigentlich nicht in die Figur, sondern in
das darin enthaltene Achsensystem, von denen eine Figur auch mehrere enthalten
kann.
Das Verändern der meisten Eigenschaften von Figuren erfolgt über ArgumentPaare. Das erste Argument eines Paares gibt an, welche Eigenschaft man
verändern will (also z.B. 'Name'), das zweite enthält die konkreten Einstellungen.
•
Anweisungen: Figur-Eigenschaften
•
•
•
•
figure: Erzeugen eines Figurfensters
clf: Inhalt des Figurfensters löschen
close, close all: Figur(en) schliessen
set(gcf, 'Eigenschaft', Parameter);
Verändern der Eigenschaften eines Figurfensters mittels Argument-Paaren
Einige Eigenschaften: Name, Color, Position, Toolbar,
•
Visible
gcf = get current figure handle
waitforbuttonpress: Auf Tastendruck oder Mausclick warten
Anweisungen: Achsensysteme
•
•
•
•
•
•
•
•
•
•
•
title: Titel des Achsensystems setzen
xlabel, ylabel, zlabel: Achsen beschriften
grid on, grid off: Raster ein- und ausblenden
axis on, axis off: Achsen ein- und ausblenden
axis tight: Skalen eng an Daten anpassen
axis([xmin xmax ymin ymax]): Skalen setzen
box on, box off: Rahmen um die Achsen ein- und ausblenden
hold on, hold off: Grafikausgabe fixieren bzw. Fixierung aufheben
set(gca,'Color','blue') :
Eigenschaften des Achsensystems verändern; gca = get current axes handle
subplot: Untergrafiken (= Achsensysteme) erzeugen und ansprechen
cla: Aktuelles Achsensystem löschen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
164
Einführung in Matlab
Grafikwerkzeuge
Im folgenden werden Sie einige wichtige Grafikwerkzeuge kennenlernen. Auch hier gilt wieder: Matlab
stellt eine Unmenge von Grafikmöglichkeiten zur Verfügung, und es ist nicht möglich, im Rahmen dieses
Lehrmittels alle davon zu besprechen. Wie immer seien Sie auf das Hilfesystem verwiesen.
Einen Überblick über alle Grafikbefehle finden Sie im Hilfesystem unter Function reference >
graphics > basic plots and graphs
An der Funktionsweise von plot wird exemplarisch das Prinzip der meisten Grafikbefehle gezeigt.
Anschliessend werden weitere häufig gebrauchte Grafiktypen in kurzen Demonstrationen gezeigt.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
165
Einführung in Matlab
Die plot-Funktion
Die plot-Anweisung erzeugt zweidimensionale Liniengrafiken. Die Daten müssen als Spaltenvektoren
übergeben werden. Die Datenpunkte werden in der Reihenfolge miteinander verbunden, wie sie in den
übergebenen Vektoren stehen.
Die beiden Formen der plot-Funktion sehen Sie in den folgenden Beispielen:
Form 1: plot(Y)
Wird nur ein Vektor übergeben, werden die Daten als Y-Werte interpretiert, und gegen ihren Index (auf der
X-Achse) geplottet.
>> ydata = sin(-pi:.1:pi);
>> plot(ydata)
Form 2: plot(X, Y)
Werden zwei Vektoren übergeben, werden sie als X und Y interpretiert.
>> xdata = 20:39; ydata = rand(20, 1);
>> plot(xdata, ydata)
>> figure
>> plot(sin(-pi:.1:pi), cos(-pi:.1:pi))
LineSpec: Linieneigenschaften einstellen
plot(X1, Y1, LineSpec, ...)
Die Plot-Funktion erlaubt ein Argument, womit drei Eigenschaften der Kurve angegeben werden können,
nämlich:
•
Line style specifier: die Art der Linie (durchgezogen, gestrichelt, gepunktet etc.)
•
Marker specifier: die Art der Datenpunkt-Marker (Punkt, Kreis, Dreieck, Stern etc.)
•
Color specifier: die Farbe der Kurve
Beispiel: Um Daten mit einer roten, gestrichelten Linie und Kreuzen als Marker zu plotten, notiert man
folgendes:
plot(x, y, '--xr')
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
166
Einführung in Matlab
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
167
Einführung in Matlab
Es ist auch möglich, Plots ohne Linien oder ohne Marker zu zeichnen, indem man die entsprechenden Specifiers
einfach weglässt.
Siehe auch die Angaben im Hilfesystem (doc linespec).
Folgendes Beispiel zeigt auch, wie in einem Plot-Befehl mehrere Datensätze auf einmal angegeben
werden können:
>> t = 0:pi/100:2*pi;
>> y1 = sin(t);
>> y2 = sin(t-0.25);
>> y3 = sin(t-0.5);
>> plot(t, y1, '-', t, y2, '--', t, y3, ':')
Weitere Eigenschaften
Weitere Eigenschaften der Linie und der Marker können wiederum mit paarweisen Argumenten beeinflusst
werden:
plot(..., 'PropertyName', PropertyValue,...)
•
MarkerFaceColor - Füllfarbe der Marker
•
MarkerEdgeColor - Farbe der Marker-Umrandung
•
MarkerSize - Grösse der Marker
•
LineWidth - Breite der Linie
•
Color - Farbe der Linie
Beispiel:
>> clf
>> x = -pi:pi/10:pi;
>> y = tan(sin(x)) - sin(tan(x));
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
168
Einführung in Matlab
>> plot(x, y, '--rs', 'LineWidth', 2,...
'MarkerEdgeColor', 'k', ...
'MarkerFaceColor', 'g', ...
'MarkerSize', 10)
Weitere Optionen finden Sie mit doc plot.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
169
Einführung in Matlab
Balkengrafiken
Auch häufig verwendet werden Balkengrafiken. Die zweidimensionale Grundform mit vertikalen Balken heisst
bar, barh zeichnet horizontale Balken, und bar3 bzw. bar3h dasselbe dreidimensional.
Beispiele für zweidimensionale Balkengrafiken:
>> figure
>> data=rand(10,3)*20+5;
>> bar(data(:,1))
>> bar(data(:,1),0.5)
>> bar(10:10:100,data(:,1))
>> bar(data)
eine Datenspalte
andere Balkenbreite (default ist 0.8)
x-Achse anders beschriften
mehrere Gruppen von Daten
Beispiele für 3D-Balkengrafiken in verschiedenen Varianten. Kopieren Sie alle Zeilen aufs Mal ins
Command Window.
Y = cool(7);
subplot(2,3,1)
bar3(Y,'detached')
title('Detached')
subplot(2,3,2)
bar3(Y,0.25,'detached')
title('Width = 0.25')
subplot(2,3,3)
bar3(Y,'grouped')
title('Grouped')
subplot(2,3,4)
bar3(Y,0.5,'grouped')
title('Width = 0.5')
subplot(2,3,5)
bar3(Y,'stacked')
title('Stacked')
subplot(2,3,6)
bar3(Y,0.3,'stacked')
title('Width = 0.3')
colormap([1 0 0;0 1 0;0 0 1])
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
170
Einführung in Matlab
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
171
Einführung in Matlab
Weitere Grafik-Funktionen kurz demonstriert
Im folgenden werden Ihnen mit einem Skript weitere interessante Grafikmöglichkeiten von Matlab
demonstriert.
Bitte wechseln Sie in den Matlab-Editor, laden Sie den Skript graph_examples.m und starten
Sie ihn mit der Taste F5. Mit einem Tastendruck oder Mausclick ins Grafikfenster (Funktion
waitforbuttonpress) wechseln Sie jeweils zur nächsten Grafik.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
172
Einführung in Matlab
Grafiken beschriften und erweitern
Meist ist es sinnvoll, Grafiken mit zusätzlichen Beschriftungen, Pfeilen, Linien und Legenden zu versehen. Im
folgenden erhalten Sie einen Überblick über die wichtigsten Funktionen.
Legenden
Die Funktion legend versieht eine Grafik mit einer Legende. In der einfachsten Form lautet der
Funktionsaufruf:
h = legend('string1', 'string2', ...)
h ist der «handle» der Legende, die Strings sind die Texte, die die einzelnen Kurven beschreiben. Beispiel:
>> x = -pi:pi/20:pi;
>> plot(x, cos(x), '-ro', x, sin(x), '-.b')
>> h = legend('cos_x', 'sin_x', 2);
>> set(h, 'Interpreter', 'none')
Erläuterung: Die letzte Zeile bezieht sich auf den von Matlab verwendeten Text-Interpreter. Dieser ist per
Default TeX - dies hat zur Folge, dass z.B. ein _ im Text so interpretiert wird, dass das folgende Zeichen als
Subscript dargestellt wird. Da dies hier nicht gewünscht ist, schalten wir diesen Interpreter aus. Weitere Details
finden Sie im Hilfe-System.
Ein nettes Feature: In der Grafik können Sie die Legende einfach mit der Maus aufgreifen und
frei verschieben, falls sie relevante Teile der Grafik verdeckt. Anschliessend können Sie die Grafik
speichern.
Die legend-Funktion hat unzählige weitere Optionen und Möglichkeiten, s. Hilfe-System.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
173
Einführung in Matlab
Grafik mit Text versehen
Mit der text-Funktion können Sie Texte an beliebigen Orten in der aktuellen Grafik plazieren. Die
Koordinaten für die Plazierung entsprechen denjenigen der Daten (wie in den Skalen eingestellt).
Im folgenden Beispiel sehen Sie die Anwendung des TeX-Interpreters, um eine Formel anzuzeigen. Mit einem
weiteren Parameter wird die Textgrösse eingestellt.
>> plot(0:pi/20:2*pi, sin(0:pi/20:2*pi))
>> text(pi, 0, ' \leftarrow sin(\pi)', 'FontSize', 18)
Auch hier muss wieder auf das Hilfe-System verwiesen werden, da eine ausführliche Beschreibung
aller Text-Optionen den Rahmen dieses Kapitels sprengen würden.
Geometrische Elemente
Mit den folgenden beiden Elementen kann man direkt in die Grafik zeichnen. Die Koordinaten entsprechen
wiederum denjenigen der Achsen.
Linien
Mit der line-Funktion kann man beliebige Linien in die Grafik zeichnen. Die Grundform dieser Funktion
lautet für die zweidimensionale Anwendung:
line(X, Y, 'PropertyName', propertyvalue,...)
X und Y sind Vektoren, die zwei oder mehr Koordinaten spezifizieren, welche von der Funktion durch gerade
Linien verbunden werden. Die Properties müssen auch hier als Argument-Paare notiert werden. Beispiel:
>> line([0 1 .5], [0 1 .8], 'LineStyle', '--', 'Color', 'blue', 'LineWidth', 5)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
174
Einführung in Matlab
Rechtecke und Ellipsen
Mit der Funktion rectangle können Rechtecke (auch mit beliebig abgerundeten Ecken) und Ellipsen
konstruiert werden. Diese können auch gefüllt werden.
rectangle('Position', [x,y,w,h], 'PropertyName', 'PropertyValue', ...)
x und y sind die Koordinaten der linken unteren Ecke, w und h sind Breite und Höhe des Rechtecks. Mittels
dem Property Curvature kann man die Ecken abrunden.
Einige Beispiele:
>> figure, axis([0 16 0 8])
>> rectangle('Position', [1 1 4 3], 'LineWidth', 2) % default:schwarz
>> rectangle('Position', [11 2 4 3], 'Curvature', .2, 'EdgeColor', 'red')
>> rectangle('Position', [6 .5 4 6], 'Curvature', [1 1], 'FaceColor', [.4 .4 .8])
Annotations
Die sog. «Annotations» (engl. Anmerkung, Kommentar, Vermerk) sind eine weitere Möglichkeit, Grafiken mit
Texten und geometrischen Elementen zu versehen. Auch mit Annotations kann man Texte, Linien, Rechtecke
und Ellipsen zeichnen, zusätzlich auch Pfeile/Textpfeile.
Der Unterschied zu text/line/rectangle ist, dass die Koordinaten für die Plazierung von
Annotations nicht diejenigen der Achsen sind, sondern «normalisierte» Koordinaten, also zwischen 0
und 1 für die ganze Figur (nicht die Achsen). 0,0 ist die linke untere Ecke, 1,1 die rechte obere.
Annotations werden in einen eigenen «Layer» gezeichnet. Dieser wird nicht verändert, auch wenn die
eigentliche Grafik z.B. in den Skalen verändert oder gelöscht wird.
Alle Annotations werden über die gleiche Funktion annotation und den entsprechenden Parametern
verwendet. Das Grundformat sieht wie folgt aus:
annotation(type, parameters)
Es gibt folgende Typen von Annotations, wobei x und y die normalisierten Koordinaten sind, w und h sind
Breite bzw. Höhe, ebenfalls normalisiert.
annotation('line', x, y)
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
175
Einführung in Matlab
annotation('arrow', x, y)
annotation('doublearrow', x, y)
annotation('textarrow', x, y)
annotation('textbox', [x y w h])
annotation('ellipse', [x y w h])
annotation('rectangle', [x y w h])
Beispiele zum Ausprobieren:
>> figure, scatter(rand(100, 1) * 20 + 12, rand(100, 1) * 30 - 10)
>> annotation('rectangle', [.05 .05 .9 .9], 'EdgeColor', 'r');
>> annotation('line', [.2 .8], [.9 .9], 'LineStyle', '-.', 'color', 'b');
>> annotation('ellipse', [.5 .5 .2 .2], 'FaceColor', 'g');
>> annotation('arrow', [0 1], [.5 .5]);
>> annotation('textarrow',[.8 .5],[.3 .5],'String','Textpfeil','HeadStyle','plain');
>> annotation('textbox', [.2 .2 .3 .15 ], 'String', 'Dies ist eine Textbox');
Bemerkung: annotation gibt immer einen Handle zurück, daher wird am Ende der Zeile ein Strichpunkt
benötigt, um die Ausgabe desselben im Command Window zu verhindern.
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
176
Einführung in Matlab
Aufgabe P5: Projektarbeit - Grafische Darstellung der Daten
Realisieren Sie in Ihrem Projekt die grafische Darstellung der Daten. Entsprechend Ihrer spezifischen
Problemstellung kann es sich dabei um Linien, Balkendiagramme etc. handeln. Oft ist es sinnvoll, die
Grafiken auch automatisch auf die Festplatte zu speichern (an einen fixen Ort, oder vom Anwender
ausgewählt).
Für das Projekt EyeData Processing
•
•
•
Erstellen Sie eine Balkengrafik, in der die Fixationsdauern über alle Vpn pro Bedingung (Bildgrösse)
dargestellt werden (die bereits berechneten gemittelten Medianwerte). Fügen Sie eine Legende und
Fehlerbalken mit der Standardabweichung hinzu.
Zeichnen Sie für jede Bildgrösse einen Scatterplot aller Fixationen. Markieren Sie mit rectangle
den Bereich des Bildes, wie unten dargestellt.
Die Eckpunkte der Bildausschnitte sind: (startx, starty, stopx, stopy)
Size 1: volle Grösse 1600 x 1200
Size 2: 196, 148, 1402, 1052
Size 3: 385, 289, 1213, 909
Size 4: 571, 429, 1028, 771
Speichern Sie die Grafiken auf die Festplatte, entweder an einen fixen Ort mit vorgegebenen Dateinamen,
oder an einen vom Anwender ausgewählten Ort mit entsprechend frei wählbaren Dateinamen.
So ungefähr sollte die Balkengrafik der Fixationsdauern aussehen
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
177
Einführung in Matlab
Beispiel für einen Scatterplot der Fixationsdaten pro Bildgrösse
Die Musterlösung finden Sie im m-File eyedata_sol5.m
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
178
Einführung in Matlab
Zusammenfassung
Zusammenfassung der wichtigsten Anweisungen:
•
plot: Plotten von Daten
bar, barh, bar3, bar3h: Balkengrafiken normal, horizontal, bzw. 3D
•
und 3D horizontal
legend: Legende einblenden
•
text,
•
•
line,
rectangle: Text, Linie, Rechteck im aktuellen
Achsensystem der Figur zeichnen
annotation: Grafische Elemente in relativen Koordinaten der ganzen Figur
zeichnen,
z.B. annotation('rectangle',
[.05 .05 .9 .9],
'EdgeColor', 'r');
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
179
Einführung in Matlab
Schlussbemerkungen
Sie sind nun am Ende dieses Lehrmittels angekommen. Wir hoffen, dass es Ihnen geholfen hat, einen
Einstieg in Matlab zu finden. Es ist uns bewusst, dass das Erlernen einer neuen Programmiersprache eine sehr
anspruchsvolles Unterfangen ist, besonders falls Sie vorher noch nie programmiert hatten.
Dieses Element (Animation, Video etc.) kann nicht dargestellt werden und ist nur in der
Onlineversion sichtbar. [link]
Deshalb sind wir auch um eine fortlaufende Verbesserung dieses Lehrmittels bemüht. Falls sie Rückmeldungen
zu Problemen oder Fehlern haben, zögern Sie bitte nicht, uns zu kontaktieren!
http://etools.fernuni.ch/matlab/ - Stand vom: 20.12.2011
180