Matlab/Octave

22.10.2015
Crash-Kurs in Matlab/Octave
Der Crash-Kurs soll Studierenden, die noch keine Erfahrungen mit haben, eine kurze
Einführung geben. Ziel des Kurses ist es, dass jeder Studierende anschließend in der Lage ist, folgende Arbeitsschritte mit zu absolvieren:
• Der Umgang mit den wichtigsten Konzepten wie for-Schleifen, if/else-Abfragen, sowie
der Darstellung von Vektoren und Matrizen in Matlab/Octave.
• Das Programmieren von einfachen Programmen/Algorithmen als Skriptdatei
• Das Programmieren von Funktionen
• Das Formatieren von Ausgaben
• Das Plotten von Funktionen
Anmerkung: Diese Einführung folgt dem Prinzip “learning by doing”. Ein Großteil des hier
angegebenen Codes wird nicht explizit erklärt.
Die Benutzeroberfläche von Matlab/Octave
Die Benutzeroberfläche von Matlab/Octave ist je nach Version und Einrichtung des Benutzers
verschieden aufgebaut. Machen Sie sich mit den folgenden Elementen vertraut:
• Der Pfad/Current Directory, der den aktuellen Ordner auf der Festplatte angibt,
in dem man sich befindet
• Unter Current Folder/File Browser werden die Dateien in diesem Ordner angezeigt
• In Workspace werden alle Variablen und Daten, die Matlab/Octave bei der aktuellen
Sitzung gespeichert hat, angezeigt
• In dem Fenster Command History werden die letzten durchgeführten Befehle angezeigt
• In dem großen Fenster Command Window befindet sich die Befehlszeile zum Eingeben von Befehlen und die Ausgabe.
Einfache Befehle und Variablen
Geben Sie folgende Befehle nacheinander in der Befehlszeile ein. Die einzelnen Befehle
sind durch “,” getrennt, an dieser Stelle muss zum Ausführen des Befehls die Enter-Taste
gedrückt werden. Betrachten Sie für jeden Befehl das Ergebnis.
2+3, 3*5, a=10, b=2^5, a*b
Mit Hilfe des “=” können Variablen definiert werden, denen direkt ein Wert zugeordnet
wird. Hier z.B. hat die Variable a den Wert 10, auf den später zugegriffen wird.
Vektoren und Matrizen
Geben Sie folgende Befehle jeweils in der Befehlszeile ein, drücken Sie Enter und betrachten
Sie die Ausgabe:
x=[1;1], A=[2,3;4,5], b=A*x, y=A\b, x=x*2, x.^3, ones(2,1), zeros(1,2),
Mit Hilfe von [. . . ] können Matrizen (und somit Vektoren) definiert werden. Ein “;” steht
für eine neue Zeile, ein “,” steht für eine neue Spalte. Vektoren lassen sich einfach als Matrix
mit nur einer Spalte darstellen.
Aufgabe: Definieren Sie zwei beliebige 2 × 2-Matrizen A und B. Was ist der Unterschied
zwischen den Befehlen A*B und A.*B?
Skriptdateien
Skriptdateien sind nichts anderes als eine Sammlung von Befehlen, die nacheinander durchgeführt werden. Navigieren Sie in ihr Home-Verzeichnis und erstellen Sie eine Skriptdatei
durch einen Rechtsklick in Current Folder und Klick auf New File - Script. Nennen Sie
die Datei “MyFile.m” und öffnen Sie sie.
Schreiben Sie einen Befehl wie oben in die erste Zeile und führen Sie die Datei aus, indem
Sie oben auf “Run” klicken oder einfach F5 drücken.
Schreiben Sie mehrere Befehle in die Datei, wie zum Beispiel
A=eye(3,3)
A(1,1)=2
A(2,1)=4
% A(3,3)=5
A*[1;2;3]
Was bewirken die einzelnen Befehle (insbesondere das %)?
Wenn Sie die Datei ausführen, wird jede Rechenoperation ausgegeben, was sehr
unübersichtlich ist. Es ist sinnvoll, bei den meisten Code-Zeilen ein “;” am Ende einzufügen,
um die Ausgabe dieser Zeile zu unterdrücken.
Funktionsdateien
Funktionsdateien sind so ähnlich wie Skriptdateien, nur haben sie noch die Eigenschaft, dass
Eingabedaten und Ausgabedaten angegeben werden, wie bei einer Funktion im mathematischen Sinne. Die Funktion selbst kann beliebig komplex sein.
Erstellen Sie eine zusätzliche Datei mit “New File - Function”, nennen Sie diese “myFunction.m” und öffnen Sie sie:
In der ersten Zeile steht bereits
function [output args]=myFunction(input args)
Hier gilt:
• function ist ein Schlüsselwort zum Definieren einer Funktion
2
• [output args] ist die Ausgabe der Funktion
• myFunction ist der Name der Funktion, der gleich dem Dateinamen sein muss
• (input args) ist die Eingabe der Funktion.
• Die Funktion wird durch das Wort end beendet.
Aufgabe: Schreiben Sie eine Funktion bestehen aus den drei Zeilen
function [b]=myFunction(A,x)
b=A*x;
end
Rufen Sie jetzt die Funktion in der Befehlszeile von Matlab/Octave auf mit dem Befehl
myFunction([1,0;0,2],[1;2]) .
Beispiel-Codes for-Schleifen und if/else Abfragen
Aufgabe: Schreiben Sie folgende Programme (am besten in eine neue Skriptdatei) und führen
Sie diese aus.
• x=0;
for i=1:10
x=x+i
end
• x=zeros(10,1);
for i=1:10
x(i)=i;
if(i>8)
disp(’i ist groesser als 8’);
else
disp(’i ist kleiner oder gleich 8’);
end
end
Aufgabe: Schreiben Sie eine Funktion, die als Eingabe eine ganze Zahl n erhält und die ersten
n Fibonacci-Zahlen in einem Vektor ausgibt.
Weitere Befehle
Mit Hilfe des Befehles “help” erhält man eine Beschreibung von Matlab/Octave-Funktionen.
Geben Sie in der Befehlszeile “help clear” ein. Finden Sie heraus, was die folgenden Befehle
bewirken und probieren Sie sie ggf. aus:
clear, inv, rand, linspace, zeros, while, disp, sort, size, length, norm, abs, format
3
Weitere Aufgaben
Plotten einer mathematischen Funktion mit formatierter Ausgabe
• Schreiben Sie eine function squareFunction , die für jeden Eingabewert x den Wert
y=x.^2-2 ausgibt. (der “.” bewirkt, dass die Operation Komponentenweise durchgeführt
wird, falls x ein Vektor ist.
• Schreiben Sie eine neue Skriptdatei, die mit den Befehlen clear und close anfängt
• In der Skriptdatei soll ein Vektor x erstellt werden, der 100 äquidistante Einträge im Intervall
[0, 5] hat (benutzen Sie “linspace”)
• Anschliessend soll der Vektor y=squareFunction(x) berechnet werden
• Danach soll die Funktion geplottet werden mit dem Befehl plot(x,y,’g’) .
• Anschliessend soll eine formatierte Ausgabe eingefügt werden mit dem Befehl
disp(sprintf(’Die Funktion besitzt im Intervall [%2.2f,%2.2f] den höchsten
Wert %2.2f’,x(1),x(end),max(y)))
Hinweis: Das Feld %2.2f ist ein Platzhalter für die Zahlenwerte, die später angegeben
werden.
• Schreiben Sie eine zweite function namens “diffy” mit folgendem Inhalt:
function dy=diffy(f,x)
h=0.00001;
for i=1:length(x)
dy(i)=(feval(f,x(i)+h)-feval(f,x(i)))/h;
end;
• Was macht diese Funktion? Ergänzen Sie das Skript aus Aufgabe a) mit dem Befehl
dy=diffy(’squareFunction’,x) und plotten Sie die Ausgabe in das Gleiche Fenster in
einer anderen Farbe Hinweis: Verwenden Sie den Befehl hold on .
• Verwenden Sie die Befehle legend , title , xlabel ,ylabel , um den Plot zu beschriften.
4