Variablen, Matrizen, Functionfiles Berechnung im Command Window Im Command-Window können direkt Berechnungen durchgeführt werden: >> 3+5 ans= 8 >> x=ans*4 ans= 32 Außerdem können im Command-Window Variablen (Matrizen) definiert werden. Diese können manipuliert werden: >> x=[1 2 3; 6 7 8] x= 1 2 3 6 7 8 >> x(2,2)=9 x= 1 2 3 6 9 8 >> x(2,:)=5 x= 1 2 3 5 5 5 >> x(:,3)=[] x= 1 2 5 5 >> a=x(2,:) a= 5 5 Erstellen und Aufrufen von Function-Files (m-files) Im Fenster Current Directory kann in dem gewünschten Verzeichnis mit Rechtsklick/New/m-File eine neue Datei (Function-File) erzeugt werden, in der eine Funk-
tion (ein Programm) definiert wird. Vor dem ersten öffnen sollte diesem der gewünschte Name gegeben werden: z.b: testm Einem Function-File können Variablen übergeben und zurück übernommen werden. Beispiel: 4. function [ y1,y2 ] = test1( x1,x2 ) % Kommentar y1=x1^x2; y2=sqrt(x1^2 + x2^2); In einem Function-File (Programm) kann ein anderes Function-File aufgerufen werden. Die Variablen (hier Eingabevariablen x1, x2, Ausgabevariablen y1, y2) sind lokal nur für das Function-File gültig. Der Programmaufruf erfolgt im Command-Window: >> [y1,y2]=test1(3,4) y1= 81 y2= 5 Beispiel: Kugel im Raum Folges Skript hat als Eingabevariable den Mittelpunkt und einen Punkt auf der Oberfläche einer Kugel. Es berechnet das Volumen und die Oberfläche der Kugel.
function [V,A] = Kugel( m,p ) % Berechnung von Volumen V und Oberfläche A bei gegebenem % Mittelpunkt m (x1,y1,z1) und Oberflächenpunkt 4. % p (x2,y2,z2) 5. x1=m(1,1); 6. y1=m(1,2); 7. z1=m(1,3); 8. x2=p(1,1); 9. y2=p(1,2); 10. z2=p(1,3); 1 r=sqrt((x2-x1)^2+(y2-y1)^2+(z2- z1)^2); 1 V=4/3*pi*r^3; 1 A=4*pi*r^2; Merke: Ein Function-File wird immer von oben nach unten abgearbeitet. Strichpunkt nach Berechnung unterdrückt die Bildschirmausgabe Ein Programmaufruf ohne Rückgabevariable gibt als Ergebnis die erste Rückgabevariable des Programms zurück. Der Name der Ein- und Rückgabevariablen muss nicht mit den Bezeichnungen im Programm übereinstimmen. Mit Cursortasten unten/oben können alte Befehle noch mal auf den Bildschirm geholt werden. Mit der Tab-Taste können halb geschriebene Befehle automatisch vervollständigt werden. help schreibt einen Hilfetext, bzw. die ersten Kommentarzeilen eines Befehls oder Programms auf den Bildschirm.
Fernsteuern mit dem Smartphone Mit einer App ist es möglich, das Commandwindow mit ein paar Einschränkungen durch das Smartphone fernzusteuern: Installieren Sie dazu die App MatLAB Mobile auf Ihrem Android oder ios Smartphone. Die App finden Sie in den üblichen Stores. Die App funktioniert, solange auf Ihrem Computer Matlab läuft und Sie innerhalb des Hochschulnetzes eduroam online sind. Informationen zu eduroam finden Sie im Internet. Starten in Matlab Geben Sie im Command-Window folgen Befehl ein: >> connector on Danach werden Sie um ein Passwort gebeten. Dies kann Zahlen und Buchstaben enthalten und muss zwischen fünf und 32 Zeichen lang sein. Im Anschluss gibt Ihnen MatLAB Informationen zu Ihrem System. Merken Sie sich: DNS name IP adresse Passwort Starten am Smartphone Installieren Sie die App Gehen Sie auf Settings und geben dort folge Daten ein: DNS name (oder IP-Adresse) Passwort Name für die Verbindung (beliebig) Jetzt können Sie Befehle eingeben, die dann von Ihrem Rechner ausgeführt werden. http://de.mathworks.com/mobile/features.html http://play.google.com/store/apps/matlabmobile
IF-Abfrage, input, fprintf Einer der wichtigsten Bestandteile jeder Programmiersprache ist die bedingte Anweisung. Das bedeutet der Computer kann abhängig von verschiedenen Situationen verschieden reagieren. Syntax: if bedingung anweisungen if bedingung1 anweisung1 anweisung2 elseif bedingung2 anweisung3 else anweisung4 Beispiel: Vorzeichen Folges Programm prüft das Vorzeichen der Zahl x. Wenn das Vorzeichen positiv ist, dann ist die Rückgabevariable vz = 1, wenn die Zahl x = 0, dann ist vz = 0, sonst ist vz = - 4. 5. 6. 7. 8. 9. 10. 1 function[vz]=vorzeichen(x) % Diese Funktion bestimmt das Vorzeichen der Zahl x % Wenn x>0 dann ist vz=1, wenn x=0 dann vz=0 % wenn x<0 dann ist vz=-1 if x>0 vz=1; elseif x==0 %Beachte beim Vergleich wird == verwet vz=0; else vz=-1;
Bespiel: Liegt der Punkt auf der Gerade? Gegeben sei die Steigung a und der Achsenabschnitt m einer Geradengleichung und die Koordinaten des Punktes P (p1, p2). P Folges Programm prüft die Lage des Punktes P zur Gerade. 4. 5. 6. 7. 8. 9. 10. 1 function[lage]=punkt (a,m,p1,p2) % Punkt P oberhalb der Geraden: lage=1 % Punkt P unterhalb der Geraden: lage=-1 % Punkt auf der Geraden: lage=0 if a*p1+m<p2 lage=1; elseif a*p1+m==p2 lage=0; else lage=-1; Merke: Jedes if muss irgwann mit einem beet werden. Zur Prüfung auf Gleichheit muss das Doppelgleich == verwet werden! Innerhalb einer if-abfrage kann eine zweite if- Abfrage gestartet werden.
Datei- und Funktionsnamen dürfen keine Umlaute enthalten. fprintf-befehl, input-befehl Zur direkten Kommunikation (Ein- und Ausgabe von Werten) innerhalb eines Programms können die Befehle input und fprintf verwet werden. Beispiel 4. 5. 6. 7. 8. 9. 10. 1 1 1 14. 15. function []=einausgabe() % die drei werte a,b,c einer quadratischen Gleichung % sollen vom Benutzer direkt eingegeben werden % daraus werden die beiden Lösungen x1 und x2 berechnet % und als Ausgabetext auf den Bildschirm gebracht a=input(['geben Sie den Koeffizienten a ein: ']); b=input(['geben Sie den Koeffizienten b ein: ']); c=input(['geben Sie den Koeffizienten c ein: ']); x1=(-b+sqrt(b^2-4*a*c))/(2*a); x2=(-b-sqrt(b^2-4*a*c))/(2*a); fprintf('\ndie Beiden Lösungen sind\n'); fprintf('x1 = %d\n',x1); fprintf('x2 = %d\n',x2);
4. FOR-Schleife, PLOT, Inkrementierung Um Programmanweisungen eine festgelegte Anzahl oft zu wiederholen benutzt man die FOR-Schleife: Syntax for a=start:schrittweite:stop anweisungen Eine for-schleife führt die Befehle innerhalb der Schleife eine bestimmte Anzahl oft durch: 4. 5. 6. function[s]=schleife_1(x) s=0; for a=1:x s=s+1 Beispiel: Multiplikation durch Addition 4. 5. function[a]=mult(x,y) a=0; for n=1:x a=a+y; Syntax plot(x,y, b-,n,m, r. ) Beispiel: x- und y-werte erstellen Folge abschnittsweise Funktion soll berechnet und geplottet werden: sin xfürx 0 y 0 fürx 0 2 x fürx 0
function[]=abschn (start,stop,anzahl) % Kommentar a=1; 4. for m=start:(stop-start)/anzahl:stop 5. x(1,a)=m; 6. if x(1,a)>0 7. y(1,a)=sin(x(1,a)); 8. elseif x(1,a)==0 9. y(1,a)=0; 10. else 1 y(1,a)=x(1,a)^2; 1 1 a=a+1; 14. 15. 16. plot(x,y, r. ) Merke Jedes for muss mit einem beet werden. In Matlab a=a+1 bedeutet: Es wird die Berechnung a+1 durchgeführt und dann die Variable a mit dem Ergebnis überschrieben! if-abfragen innerhalb von Schleifen sind möglich (und auch umgekehrt). Die Darstellung der Punkte im Plot kann durch die Variablen in den Hochkommas eingestellt werden. Siehe auch help plot. Der Befehl size gibt die Größe (Zeilen, Spalten, ) einer Matrix zurück.
5. WHILE-Schleife, Unterprogramme Die while-schleife führt Programmanweisungen innerhalb der Schleife so lange aus, bis ein definiertes Abbruchkriterium erfüllt wird. Syntax while bedingung %(==wahr) anweisungen Beispiel: Division 4. 5. 6. 7. 8. 9. function[erg,rest]=division(a,b) % Diese Funktion teilt a durch b und gibt das Ergebnis und % den Rest der Division zurück erg=0; while a>=b a=a-b; erg=erg+1; rest=a; Beispiel: Unterprogramm function[m]=modular(a,b) % gibt den Rest der Division zurück [erg,m]=division(a,b); %Aufruf von Unterprogramm division Merke Aufruf eines bereits geschriebenen Programms als Unterprogramm möglich (und zu empfehlen) Zum erkennen des Wahrheitsgehalts einer Prüfung, kann zuerst angenommen werden, die Prüfung ist wahr: p=1, dann wird die Prüfung getestet, bis man das Gegenteil erkennt p=0. Wenn dies nicht auftritt, dann bleibt die Prüfung wahr.
6. Integrieren, Differenzieren, Laden und Speichern MatLab ist in der Lage nach Variablen zu integrieren und zu differenzieren. Die Formel log q F sin x 2 2x soll nach x differenziert werden. Dazu müssen zuerst alle Variablen auf der rechten Seite als symbolische Variablen definiert werden: >> syms x >> syms q Danach wird die Formel eingegeben: >> F=sin(x)+log(q)/(2*x^2) F = sin(x) + log(q)/(2*x^2) dann kann die gewünschte Rechenoperation durchgeführt werden: >> FS2=diff(F,x,2) FS2= (3*log(q))/x^4 - sin(x) In der Klammer nach dem Befehl diff steht zuerst die Funktion, dann die Variable, nach der differenziert werden soll und dann die Anzahl der Differenzierungen. Ähnliches gilt für das Integral: >> FI1=int(F,x) Es kann auch eine Zahl für x gesetzt werden und die Gleichung Numerisch berechnet werden: >>x=1 >>eval(fi1) ans= -log(q)/2-1216652631687587/2251799813685248
LOAD, SAVE Eine Variable (Matrix) kann in eine Datei gespeichert werden. >> x=[1 2 3;4 5 6] >> save datei.txt x ascii Die Datei datei.txt kann wieder in eine Variable (Matrix) geladen werden: >> load datei.txt ascii datei = 1 2 3 4 5 6
7. Rekursive Algorithmen Bei manchen Aufgaben muss sich ein Programm selbst aufrufen. Wichtig ist hierbei, dass das Programm ein geeignetes Abbruchkriterium enthält, da MatLab sonst in einer Endlosschleife hängt und von Hand abgebrochen werden muss. (strg-c) Beispiel: 4. 5. 6. 7. function [zahl]=fakultaet(zahl) % if zahl<=1 %Abbruchkriterium zahl=1; else zahl=zahl*fakultaet(zahl-1); Rechenbeispiel fakultaet(3) Das Programm geht in den else-zweig, weil 3>1 dort wird die Funktion folgermaßen aufgerufen: zahl=3*fakultaet(2) in dem nun aufgerufenen Programm geht Matlab wieder in den else-zweig, weil 2> Insgesamt sieht die Rechenoperation dann so aus: zahl=3*fakultaet(2*fakultaet(1)) hierbei geht Matlab in den ersten if-zweig, weil 1<=1 und gibt als Rückgabewert den Wert 1 aus. Insgesamt sieht die Rechenoperation dann folgermaßen aus: zahl=3*2*1 Merke: Rekursive Algorithmen müssen ein Abbruchkriterium haben, das auf jeden Fall erreicht wird. Eingabe- und Ausgabevariablen müssen immer gleich benannt sein.
8. Kurzanleitung für MATLAB Vorbelegte Variablen und Zeichen pi, i, j, inf, ans, eps, NaN = Variablenzuweisung >>x=5 >>ans x=5 ; Unterdrückung der Ausgabe x=5; : Doppelpunktoperator start:schrittweite:ziel % Kommentarbeginn >>% ich bin ein Kommentar.. Stringvariable >>x= ich bin ein string Winkel standardmäßig im Bogenmaß Symbolische Variablen syms a b c d a b c d sind Platzhalter sym( a ) a ist Platzhalter Mathem. Funktionen und Operatoren + - * / ^ ^ \ Matrixmultiplikation, Linksdivision.*.^.\ elementweise Operatoren bei Matrixberechnungen sqrt(x) Quadratwurzel rem(x,y) Rest nach Division x/y mod(x,y) x Modulo y sin(x) cos(x) tan(x) cot(x) mit x im Bogenmaß sind(x) cosd(x) tand(x) cotd(x) mit x in Grad atan(x) Arcus-Tangens / 2 atan2(x) Arcus-Tangens sinh(x) Sinus Hyperbolicus sinc(x) Spaltfunktion sin( x) /( x) exp(x) log(x) log10(x) erf(x) abs(x) sign(x) round(x) ceil(x) floor(x) real(x) imag(x) Vektoren und Matrizen vec=[v1 v2 v3] oder [v1,v2,v3] >> vec=[1 2 3] vec=-2:3 >> vec=[-2,1,0,1,2,3] M=[a b c; d e f; g h i] zeilenweise Eingabe einer Matrix a b c M d e f g h i M(,:) letzte Zeile der Matrix >> ans (g h i) M(2,:) zweite Zeile der Matrix >> ans (d e f) M(2,3) Zeile, 3 Spalte >> ans (f) ones(#zeilen,#spalten) Matrix mit 1 Einträgen eye(#zeilen) quadratische Einheitsmatrix rand(#zeilen,#spalten) Matrix mit Zufallswerten zw.0..1
randn(#zeilen,#spalten) Matrix mit normalvert. Zufallswerten inv(m) Inverse der Matrix M matrix. transponierte Matrix det(m) Determinante von M eig(m) Eigenwerte von M min(vec) kleinstes Vektorelement max(vec) größtes Vektorelement std(vec) Standardabweichung sum(vec) Summe der Vektorelemente prod(vec) Produkt der Vektorlement linspace(start,ziel,anzahl) Erzeugung linearer Vektoren size(vec) Dimension einer Variablen size(vec, 1) Zeilen-Dimension size(vec,2) Spaltimension length(vec) Länge eines Vektors length(m) größte Dimension einer Matrix clear löscht alle Variablen im Workspace who Liste aller Variablen Cell-Arrays zelle=cell(2,3) Behälter von Matrizen,Vektoren,Werten zelle{2,2} gibt Zellinhalt in Zeile und Spalte aus Vergleichsoperatoren == eq(a,b) gleich ==1 ==T is true ==0 ==F is false ~= ne(a,b) ungleich <= le(a,b) kleiner gleich < lt(a,b) kleiner >= ge(a,b) größer gleich > gt(a,b) größer isnumeric(a)==1 Prüfung auf numerische Variable issymbolic(a)==0 Prüfung auf symbolische Variable Verzweigungsbefehle if elseif.else switch.case otherwise Schleifenbefehle for. while. break continue return
Datenimport und export load dateiname variable in Datei können mehrere Variablen abgespeichert sein save dateiname variable Plot-Befehle figure(zähler) Erzeugen eines Bildes subplot(zeilen,spalten,zähler) Erzeugt ein Unterbild plot(xwerte,ywerte,plotstil) Plotten einer Kurve plotstil setzt sich aus Farbe ( k schwarz b blau g grün r rot y gelb), Punkttyp (Punkte Kreise * Sterne + Kreuze x Kreuze), Linientyp (: - durchgezogen -- gestrichelt -. strichpunktiert : gepunktet) zusammen hold on verhindert, dass vorheriger Plot überschrieben wird plot(xwerte,ywerte,plotstil) Zeitmessung tic. toc Befehlsausführungszeit zwischen tic und toc