Start Inhalt Programmieren in MATLAB (1) 1(35) 2. Programmieren in MATLAB (1) 2.1 Grundlagen Variable. Ausdrücke. Kontrollstrukturen. 2.2 m Files: Skripts und Funktionen m Files. Funktionsargumente, Rückgabewerte. 2.3 Der MATLAB Suchpfad Ausführen on m-files. 2.4 Beispiel: Newton-Verfahren Entwicklung von m Files für das Newton-Verfahren.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 2(35) Programmierung: Grundlagen Kommandosyntax, Variable, Ausdrücke Schlüsselwörter Programmsteuerung
Start Inhalt Programmieren in MATLAB (1) Grundlagen 3(35) Grundelemente der Programmierung Die wichtigsten Aspekte MATLAB Kommandosyntax, die Definition und Verwendung von Variablen, Operatoren und Ausdrücke in wurden im Abschnitt Einstieg in MATLAB behandelt. Dies alles ist genauso in MATLAB Programmen zu benutzen.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 4(35) Variable, Schlüsselwörter Variablennamen beginnen mit einem Buchstaben und bestehen aus einer Folge von Buchstaben, Ziffern und dem Unterstrich, wobei zwischen Groß- und Kleinbuchstaben unterschieden wird. Die maximale Länge liefert das Kommando namelengthmax. Zur Erinnerung: es gibt vordefinierte Variable (ans, eps,...) Sinnvollerweise sollte man keine Kommandonamen und Schlüsselwörter wie if, for,... für Variablennamen benutzen. Eine Liste der MATLAB Schlüsselwörter erhält man durch das Kommando iskeyword.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 5(35) Programmsteuerung Es stehen die folgenden Kontrollstrukturen zur Verfügung if, else, elseif switch while for continue, break, return try... catch Die genaue Syntax ist der Online Hilfe zu entnehmen.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 6(35) Beispiel: if... elseif... else % n positive and ungerade, Erhoehung um 1 und Division. if n < 0 % n negativ; Ausgabe einer Fehlermeldung disp( Wert muss positiv sein. ); elseif rem(n,2) == 0 % n positive und gerade, Division durch 2. A = n/2; else A = (n+1)/2; end
Start Inhalt Programmieren in MATLAB (1) Grundlagen 7(35) Beispiel: switch... case... otherwise % Abfrage der Variablen var auf die Werte 1, 2, 3, 4, 5 switch var case 1 disp( 1 ) case {2,3,4} disp( 2 or 3 or 4 ) case 5 disp( 5 ) otherwise disp( ein anderer Wert ) end
Start Inhalt Programmieren in MATLAB (1) Grundlagen 8(35) Beispiel: for und while Schleifen for n = 2:2:11 x = 2^n; fprintf(1, n = %2.0f end 2^n = %4.0f\n,n,x) n = 1; while prod(1:n) < 1e10 n = n + 1; end disp(n)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 9(35) continue und break Sowohl in einer for als auch in einer while Schleife können die Anweisungen continue und break benutzt werden. continue beendet aktuellen Schleifendurchlauf, weiter mit dem nächsten Durchlauf break beendet die Schleife komplett
Start Inhalt Programmieren in MATLAB (1) Grundlagen 10(35) m Files Es gibt zweierlei Arten von m Files *.m : Scripts Diese enthalten keine Ein- und Ausgabeparameter, die Variablen sind im Arbeitsbereich sichtbar. Funktionen Diese enthalten eine durch das Schlüsselwort function eingeleitete Definitionszeile. Funktionen können Eingabeparameter entgegennehmen und Werte zurückliefern. Alle Variablen sind lokal.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 11(35) Skripts Ausführung der Anweisungen wie bei Eingabe am Prompt keine Parameterübergabe und -rückgabe Variable des Workspace stehen zur Verfügung Variable aus dem m File sind anschliessend im Workspace bekannt Beispiel: myplot.m f = @(t) exp(10*t.*(t-1)).*sin(12*pi*t); t = linspace(-1,1,200); y = f(t); plot(t,y); Der Aufruf von myplot am Prompt liefert immer die Grafik der Funktion f. Nach Abarbeitung des Skripts befinden sich die Variablen f, t, y im Workspace.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 12(35) Funktionen (1) Kennzeichen: function - Anweisung ist erste Zeile des m-files Beispiel: function [aus1,..., ausk] = myname(in1,... inn) function Schlüsselwort [aus1,..., ausk] Rückgabeparameter gibt es nur einen oder keinen Rückgabeparameter, entfallen die Klammern [ ] in1,... inn Eingabeparameter oder Argumente (können auch fehlen) myname frei wählbarer Funktionsname
Start Inhalt Programmieren in MATLAB (1) Grundlagen 13(35) Funktionen (2) Im allgemeinen wird das Funktions-m-File unter myname.m abgespeichert. Dies ist zwar nicht Pflicht, wird aber dringend empfohlen. Ein m-file kann auch mehrere Funktionen enthalten oder innerhalb einer Funktion können weitere Funktionen definiert werden. Namen von m-files sollten eindeutig sein, also z.b. keine Namen von MATLAB-Kommandos oder Schlüsselwörtern benutzen. Aufruf am Prompt: [y1,..., yk] = myname(a1,..., an)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 14(35) Kommentarzeilen und Hilfe (1) Kommentare in m-files werden durch ein % - Zeichen eingeleitet. Der erste Block von Kommentarzeilen in einem m-file wird vom help-kommando ausgegeben. function myplot1(a,b) % FUNCTION myplot1(a,b) % zeichnet cos(t)*sin(t) im Intervall (a,b) % jetzt geht es los t = a:0.01:b; plot(t,cos(t).*sin(t));
Start Inhalt Programmieren in MATLAB (1) Grundlagen 15(35) Kommentarzeilen und Hilfe (2) Der Aufruf myplot1(-1,1) zeichnet die Funktion im aktuellen Graphikfenster. Der Aufruf help myplot1 produziert FUNCTION myplot1(a,b) zeichnet cos(t)*sin(t) im Intervall (a,b)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 16(35) Rückgabeparameter Eine Funktion kann auch mit weniger als den festgelegten Rükgabeparametern aufgerufen werden. Die MATLAB-Funktion eig zur Bestimmung der Eigenwerte und Eigenvektoren einer Matrix A kann wie folgt aufgerufen werden. d = eig(a) [V,D] = eig(a) % Vektor d enthaelt Eigenwerte % V - Matrix der Eigenvektoren % D - Diagonalmatrix der Eigenwerte Die Anzahl beim Aufruf bereitgestellter Rückgabeparameter kann mit der Anweisung nargout abgefragt werden.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 17(35) Funktionsargumente Die Liste der Funktionsargumente bzw. Eingabeparameter kann auch variabel sein. Der Programmierer muss den Fall fehlender Argumente absichern. Zur Abfrage der Anzahl der Argumente dient nargin. Beispiel: function c = testarg1(a, b) % ein Argument a --> Rueckgabe a^2 % zwei Argumente a,b --> Rueckgabe a+b if (nargin < 1) error( Kein Argument angegeben! ) elseif (nargin == 1) c = a.^ 2; elseif (nargin == 2) c = a + b; end
Start Inhalt Programmieren in MATLAB (1) Grundlagen 18(35) Funktionsnamen als Argument (1) Übergabe einer Funktion, welche entweder als m-file oder als anonyme Funktion vorliegt, an eine Funktion. function myplot2(f,a,b) % FUNCTION myplot2(f,a,b) % zeichnet f(t) im Intervall (a,b) % f function handle t = a:0.01:b; y = f(t); plot(t,y); Aufruf: f1 = @(x) 3*x.^2-2*x + 1; myplot2(f1,0,3)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 19(35) Funktionsnamen als Argument (2) oder die zu zeichnende Funktion ist im m-file ftest.m implementiert. function y = ftest(t) y = 3*t.^2-2*t + 1; Aufruf: myplot2(@ftest,0,3)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 20(35) Funktionsnamen als Argument (3) In älteren MATLAB-Versionen stand der Datentyp function handle nicht zu Verfügung. Zur Auswertung der als Argument übergebenen Funktion musste feval benutzt werden. function myplot3(f,a,b) % FUNCTION myplot3(f,a,b) % zeichnet f(t) im Intervall (a,b) % Auswertung von f mittels feval t = a:0.01:b; y = feval(f,t); plot(t,y); Aufrufsvarianten: myplot3(f1,0,4) myplot3(@ftest,0,4) myplot3( ftest,0,4)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 21(35) Unterfunktionen Neben der Hauptfunktion (deren Name gleich dem Namen des m-files ist) kann ein Funktion-m-File noch weitere Unterfunktionen enthalten. Diese sind nur für die Hauptfunktion (und alle anderen Unterfunktionen in dieser Datei) sichtbar. 1ex Unterfunktionen sind in der Regel Hilfsfunktionen, die nur von der Hauptfunktion benötigt werden und daher nicht unbedingt in einer eigenen m-datei stehen müssen.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 22(35) Globale Variablen Hin und wieder (nie?) ist es erforderlich, Variablen als global zu erklären, womit diese in allen Unterprogrammen sichtbar werden. Dies geschieht mit der Anweisung global A Innerhalb einer Funktion sollten globale Variable vor deren ersten Verwendung erklärt werden, idealerweise am Anfang der Datei. Nach Konvention werden Bezeichner globaler Variabler aus Großbuchstaben gebildet. Die Namen globaler Variabler sollten möglichst lang sein, um Kollisionen zu vermeiden.
Start Inhalt Programmieren in MATLAB (1) Grundlagen 23(35) Rekursive Funktionen Funktionen in MATLAB können rekursiv sein, d.h. sie können sich selbst aufrufen. Beispiel: Koch-Kurve. (koch.m, kochbsp1.m, kochbsp2.m)
Start Inhalt Programmieren in MATLAB (1) Grundlagen 24(35) Stilfragen Folgendes wird empfohlen: Leerzeichen um = und um logische Operatoren eine Anweisung pro Zeile (nicht immer) Einrücken zur Betonung von for, if, switch und while Konstruktionen Matrizenbezeichner, die mit Großbuchstaben beginnen ausgewogene Verwendung von Kommentaren
Start Inhalt Programmieren in MATLAB (1) Der MATLAB Suchpfad 25(35) m-files und der MATLAB-Pfad (1) Ausführbare MATLAB-Kommandos bestehen aus in den Interpreter fest eingebaute Kommandos (z.b. eig) und m-dateien im File-System. Der MATLAB-Suchpfad ist eine Liste von Verzeichnissen, in denen MATLAB nach m-files und Kommandos sucht. path addpath pathtool File Set Path : gibt den aktuellen Wert der MATLAB-Pfades an : fügt Verzeichnisse dem MATLAB-Pfad hinzu : öffnet Dialogbox zur Manipulation des MATLAB-Pfades : wie pathtool VOR den Verzeichnissen des Suchpfades wird das aktuelle Verzeichnis durchsucht.
Start Inhalt Programmieren in MATLAB (1) Der MATLAB Suchpfad 26(35) m-files und der MATLAB-Pfad (2) Zum Ausführen eigener m-files muss Verzeichnis, welches die Dateien enthält, entweden im Suchpfad enthalten sein, oder man wechselt in das Verzeichnis oder man ruft das m-file mit vollständigem Pfad auf. Einige nützliche Kommandos: what : listet die M-Dateien im aktuellen Verzeichnis what [name] : listet M-Dateien im Verzeichnis name lookfor [Stichwort]: durchsucht Pfad nach M-Dateien mit Stichwort im Help-Text type [name] : gibt Quelltext von name.m aus more on : schaltet type-ausgabe auf seitenweise more off : schaltet dies wieder aus which [name] : gibt den vollen Pfadnamen zu name.m clear [name] : löscht name.m aus dem Speicher
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 27(35) Ein m-file für das Newton Verfahren Das Newton Verfahren kann zur näherungsweisen iterativen Berechnung von Nullstellen von Funktionen f (x) bzw. zur näherungsweisen Lösung von f (x) = 0 benutzt werden. Die Verfahrensvorschrift lautet Startwert x 0 x k+1 = x k f (x k ) f (x k ). Als Beispiel soll uns die folgende Funktion dienen. f (x) = log(x 1) + cos(x 1)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 28(35) Newton Verfahren (2) Das Newton Verfahren kann auch für nichtlineare Gleichungssysteme eingesetzt werden. Unser Beispiel: f 1 (x 1, x 2 ):=20 18x 1 2x 2 2 = 0 f 2 (x 1, x 2 ):= 4x 2 (x 1 x 2 2 ) = 0 Die Verfahrensvorschrift modifiziert sich zu Startvektor x 0 = (x 0 1, x 0 2 ) F (x k )w k = F(x k ) x k+1 = x k + w k. Dabei ist F (x) die Matrix aller ersten partiellen Ableitungen (Jacobimatrix).
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 29(35) Newton Verfahren (3) Es werden die Funktions-m-Files nv10.m, nv11.m, nv12.m, nv13.m, nv14.m sowie nv20.m entwickelt, wobei jeweils die Funktionalität erweitert wird. Die letzte Version nv20.m ist dann für Systeme einsetzbar. Die einzelen m-files kann man über die Kurswebseite herunterladen.
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 30(35) Newton Verfahren (4) nv10.m % Newton-Verfahren Version 1.0 % f(x) = log(x-1) + cos(x-1) % f (x) = 1/(x-1) - sin(x-1) function x=nv10(x,itmax)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 31(35) Newton Verfahren (5) nv11.m % Newton-Verfahren Version 1.1 % f(x) = log(x-1) + cos(x-1) % f (x) = 1/(x-1) - sin(x-1) % + Rueckgabe von Iterationszahl und Funktionswert function [x,it,fwert]=nv11(x,itmax)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 32(35) Newton Verfahren (6) nv12.m % Newton-Verfahren Version 1.2 % f(x) = log(x-1) + cos(x-1) % f (x) = 1/(x-1) - sin(x-1) % + Rueckgabe von Iterationszahl und Funktionswert % + Verbesserung der Ablaufsteuerung % (Startwert, relativer Abbruchtest, % Test auf Division durch 0) function [x,it,fwert]=nv12(x0,itmax,epsilon)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 33(35) Newton Verfahren (7) nv13.m % Newton-Verfahren Version 1.3 % f(x) = log(x-1) + cos(x-1) % f (x) = 1/(x-1) - sin(x-1) % + Rueckgabe von Iterationszahl und Funktionswert % + Verbesserung der Ablaufsteuerung % (Startwert, relativer Abbruchtest, % Test auf Division durch 0) % + Funktionswertberechnung ueber m-files f0.m, f1.m function [x,it,fwert]=nv13(x0,itmax,epsilon)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 34(35) nv14.m Newton Verfahren (8) % Newton-Verfahren Version 1.4 % f(x) = log(x-1) + cos(x-1) % f (x) = 1/(x-1) - sin(x-1) % + Rueckgabe von Iterationszahl und Funktionswert % + Verbesserung der Ablaufsteuerung % (Startwert, relativer Abbruchtest, % Test auf Division durch 0) % + Funktionswertberechnung ueber m-files f0.m, f1.m % + Namen der m-files variabel und % nur ein m-file fuer f0 und f1 function [x,it,fwert]=nv14(func,x0,itmax,epsilon)
Start Inhalt Programmieren in MATLAB (1) Beispiel: Newton-Verfahren 35(35) Newton Verfahren (9) nv20.m % Newton-Verfahren Version 2.0 % wie Version 1.4, aber auch fuer Systeme % abs --> norm % Division f(x)/f (x) --> Loesen lineares GS function [x,it,fwert]=nv20(func,x0,itmax,epsilon)