Matlab Syntax

Aus mkDoc | wiki
Wechseln zu: Navigation, Suche

Der Name MATLAB kommt von “matrix laboratory”. Damit wird die spezielle Bedeutung von Matrizen bei der Arbeit mit MATLAB klar. Die Darstellung von Datenfeldern erfolgt grundsätzlich als Matrix bzw. Vektor. Daraus ergeben sich einige Besonderheiten bei Rechnungen mit Variablen.

Inhaltsverzeichnis

Eingabe von Skalaren, Vektoren und Matritzen

Befehl Resultat Funktionsweise
n=7 n=7 Variable (1x1-Matrix)  n wird erzeugt und mit 7 belegt
n=5; n=5 wie n=7, jedoch ohne Ausgabe
Zeilenvektoren    
x=[1 2 3 4 5 6] x=(1 2 3 4 5 6) Zeilenvektor
x=[1,2,3,4,5,6] x=(1 2 3 4 5 6) Zeilenvektor, alternative Eingabe
t=1:10 t=(1 2 3 4 5 6 7 8 9 10) Zeilenvektor von 1 bis 10, Schrittweite 1
t=10:1 t=(10 9 8 7 6 5 4 3 2 1) Zeilenvektor von 10 bis 1, Schrittweite -1
t=1:0.5:4 t=(1 1.5 2 2.5 3 3.5 4) Zeilenvektor von 1 bis 4, Schrittweite 0.5
t=2:-.2:1 t=(2 1.8 1.6 1.4 1.2 1) Zeilenvektor von 2 bis 1, Schrittweite -0.2
x=linspace(3,4,11) x=(3 3.1 3.2 3.3 ... 3.8 3.9 4) Zeilenvektor  mit 11 äquidistanten Einträgen von einschliesslich 3 bis 4.
Spaltenvektoren    
x=[1;2;3]       /1\

x=| 2 |
      \3/

Spaltenvektor
Matrizen    
x=[1 2 ;3 4 ;5 6]      /1  2 \ 

x=| 3  4 | 
      \5  6/

Matrix
y=x' y=/1  3   5\
     \2  4   6/
Transposition
x(1,1)=9      / 2 \ 

x=| 3  4 | 
      \5  6/

Elementweiser Matrixzugriff
x(3,:) ans=(5 6) Zugriff auf 3.Matrixzeile
x(:,2) ans=(2 4 6)' Zugriff auf 2.Matrixspalte
x(2:3,1:2) ans=(3 4;5 6) Zugriff auf Untermatrizen
B=[x x]       / 1  2  1  2 \ 

x=|  3  4  3  4  | 
      \ 5  6  5  6 /

Zusammensetzen von Matrizen
nullmatrix=zeros(3,2)                       / 0  0 \

nullmatrix=| 0   0 |
                      \ 0  0 /

3x2 Nullmatix
eins=ones(3,2)                       / 1  1 \

nullmatrix=| 1   1 |
                      \ 1  1 /

3x2 Matrix, jedes Element =1
einheitsmatrix=eye(2) einheitsmatrix=(1 0;01) 2x2 Einheitsmatrix
rand(3) mal so, mal anders Erzeugen einer 3x3 Zufallsmatrix mit reellen Maschinenzahlen aus dem Intervall [0 1]
a='hallo' a=hallo 1x5 Matrix mit Zeichen als Elemente

Allgemeine Befehle und Hilfe

help help Hilfe zur Verwendung der Online-Hilfe
help Hilfethemen (topics) anzeigen
help topic (zum Beispiel help elmat) Hilfethema anzeigen 
(hier elmat: Elementare Matrizen und Matrixfunktionen)
help befehl (zum Beispiel help size) Befehlserläuterung
lookfor xyz Zeigt die Befehle an, die in der ersten Zeile ihres Hilfetextes xyz enthalten.
more on / more off Seitenweise Ausgabe ein- / ausschalten
who Anzeigen der schon definierten Variablen
clear / clear x alle oder einzelne Variablen löschen
flops(0) / flops flops(0) setzt den Rechenoperationszähler auf 0, flops gibt die Anzahl der Rechenoperationen seit Beginn der Sitzung bzw. seit flops(0) an.
format long /format short Umschalten des Ausgabeformats (nicht der Rechengenauigkeit)
diary on / diary off diary protokolliert eine Matlabsitzung. Das Protokoll wird in ein file namens diary abgelegt. Der Befehl diary on startet die Protokollierung und der Befehl diary off beendet diese. Die dann entstandene Datei diary kann in einem Editor betrachtet werden (zum Beispiel emacs).

Elementare Operationen

2+3 Addition
x+y Elementweise Addition von Matrizen (Dimensionen müssen übereinstimmen)
x*y Matrixmultiplikation
x' Transposition von Matrizen
x.*y Elementweise Multiplikation von Matrizen
3+x Addition von 3 zu jedem Matrixelements
x^2 Potenzierung der Matrix (x*x)
x^-1 Inversenbildung 
x=a\b Berechnet die Lösung von a*x=b, bei Skalaren normale Division
x=b/a Berechnet die Lösung von x*a=b, bei Skalaren normale Division
b./a Elementweise Division
max(a) Grösstes Element von a
size(a) Dimension von a
length(a) Länge eines Vektors a bzw. bei Matrizen max(size(a)) 

Ein- und Ausgabe

disp('hello world') Ausgabe des Strings auf dem Bildschirm
disp(x) Ausgabe des Inhalts der Variablen x auf dem Bildschirm
textvar=sprintf('Dies ist der Inhalt von x: %0.5g',x) Die Variable textvar wird mit einem Textstück (string) belegt. An die Stelle des Platzhalters %10.5g wird der Inhalt der Variable x gesetzt. Hierbei ist  10 die Anzahl der freigehaltenen Stellen, 5 die Anzahl der Nachkommastellen und g das Ausgabeformat.
n=input('Geben Sie bitte n ein: ') Eingabe von Zahlen mittels Tastatur
pause(n) Pause von n Sekunden

Farben

b Blau
g Grün
r Rot
c Cyan
m Magenta
y Gelb (Yellow)
k Schwarz

Punkttyp

.     Punkt
° Kreis
x x-Marker
+ Plus
* Stern
s Quadrat
d Raute
v Dreieck (nach unten)
^ Dreieck (nach oben)
< Dreieck (nach links)
> Dreieck (nach rechts)
p Pentagramm
h Hexagramm

Linientyp

- Solid
 : Dotted
-. Dash dot
-- Dashed       

Bedingte Verzeigungen und Schleifen

Logische Vergleichsoperatoren: <  >  <=  >=  ==  ~=  kleiner / grösser / kleinergleich / grössergleich / gleich / ungleich
if c==3

  c=c+1;
end

Bedingte Anweisung:
Falls c=3 erhöhe c um 1.
if c==3

  c=c+1;
else
  c=c-1;
end

Bedingte Verzweigung:
Falls c=e erhöhe c um 1, sonst erniedrige c um 1.
if c==3

  c=c+1;
elseif c>0;
  c=c-1;
else
  c=100;
end

Bedingte Verzweigung:

Falls c=3 wird c um 1 erhöht, ansonsten wird folgendermassen vorgegangen: Falls c>0 wird c um 1 ernierdrigt, sonst auf 100 gesetzt.

Ergebis:
Falls c=3 -> c:=4
Falls 0<c und c ungleich 3 -> c:=c-1
Falls c<0 -> c:=100

for k=1:10

  l(k)=2*k;
end

For-Schleife
k läuft von 1 bis 10, der k. Eintrag von l wird auf das doppelte von k gesetzt. Ergebnis: k=10, l=[2 4 6 ....20]
n=4;

while n>1
  l(n)=2*n; 
  n=n-1;
end

While-Schleife

solange die Bedingung n>1 erfüllt ist, werden die Anweisungen ausgeführt: Zu Beginn ist n=4, das heisst l(4):=8, dann wird n um 1 erniedrigt, also n=3. n ist immer noch grosser als 1, das heisst l(3):=6, n:=2. Im letzten Druchlauf wird l(2)=4, n:=1 gesetzt.
Ergebnis: n=1, l=[0 4 6 8]

break break bricht Schleifen ab

Visualisierung

x=0:0.1:2*pi;

y=sin(x);
plot(x,y)

Plot der Sinuskurve von 0 bis pi
plot([0 1 4],[5 3 7]) Plot durch die Punkte (0,5),(1,3),(4,7)
x=0:0.1:2*pi;

y=sin(x);
plot(x,y)
hold on
plot(x,2*y,':r')

Mehrere Plots in einer figure (Fenster der graphischen Ausgabe): hold Schalter auf on stellen.
Durch Angabe von Parametern können verschiedene Farben und Strichtypen gewählt werden (siehe help plot).
close / close all Aktuelle figures schiessen / Alle 
figure / figure(3) Graphisches Fenster Nummer 3 öffnen oder anzeigen (falls es schon existiert. Ab jetzt beziehen sich alle graphischen Befehle auf dieses Fenster.
xlabel('x-Achse') Beschriftung der 1. Achse
ylabel('y-Achse') Beschriftung der 2. Achse
legend('Kurve 1', 'Kurve 2') Fügt Legende hinzu, pro gezeichnetem Element eine Stringkonstante.
axis([0 10 -2 2]) Grösse des angezeigten Ausschnitts: x-Werte zwischen 0 und 10, y-Werte zwischen -2 und 2.
z=peaks(25); 

surf(z) 
colormap(hsv)

3D-Graphiken erzeugen. Zunächst wird ein Datensatz erzeugt (vordefinierte Funktion peaks), dann mit surf dargestellt. Mit colormap werden die Farben definiert. 
title('Dies ist der Titel der Graphik') Titel der Graphik erstellen.
subplot(m,n,p) Verschiedene kleinere Plots in ein Fenster plazieeren. m x n-Matrix aus Teilgraphiken wird gebildet. p wählt die p. Gra]phik aus. Diese ist dann aktuell, alle graphischen Befehle beziehen sich dann darauf.

Funktionen

g=inline('t^2') Definition einer Inline-Funktion g(t)=t^2. Durch Eingabe von g(3) wird g an der Stelle 3 ausgewertet.
g=inline('x+2*y') Analog, mit 2 Parameter: g(x,y)=x+2*y
g=inline('x+2*y','y','x') Analog, nur mit expliziter Angabe der Reihenfolge der Parameter: g(x,y)=x+2*y
Funktionsdateien:

Bilden einer Funktion in einer Datei funkname.m:

function [ausg1, ausg2]=funkname(eing1, eing2)
 %Beschreibung
Anweisungablock

Beispiel: 

Die Datei mit dem Namen rechteck.m enthält folgenden Inhalt:

function [inhalt,umfang]=rechteck(seite1,seite2)
 % rechteck(seite1,seite2) berechnet 
 % das Volumen und den Inhalt eines 
 % Rechtecks mit den Seitenlängen 
 % seite1 und seite2
faktor=2;
inhalt=seite1*seite2;
umfang=faktor*seite1=faktor*seite2;

Die Funktion kann nun von direkt im Matlabeingabefenster, von einer Skriptdatei oder einer anderen Funktionsdatei aufgerufen werden zum Beispiel mit dem Befehl 
[ergebnis1,ergebnis2]=rechteck(2,3);
Wird die Funktion von einer anderen Datei aus aufgerufen, so muss unsere Funktion an geeigneter Stelle abgespeichert sein, so dass Matlab sie findet: Zum Beispiel im gleichen Verzeichnis der aufrufenden Datei.

Beachte:

  • Die in dieser Datei definierten Variablen bleiben lokal (hier faktor), das heisst, sie stehen ausserhalb nicht zur Verfügung.
  • Der Name der Funktion (hier rechteck) und der Dateiname sollten übereinstimmen (hier rechteck.m). Die Dateinamenserweiterung ist für Funktionen immer .m. 

Eingabe und Darstellung von Polynomen

» num=[2 1 0]

num = 2 1 0

» den=[3 2 1 ]

den = 3 2 1

Polynome, z.B. 1 0 n an × s + ... + a × s + a werden als Zeilenvektoren bestehend aus den Koeffizienten in absteigender Reihenfolge dargestellt.

» Gs=tf(num,den)

Transfer function:          

2 s^2 + s


3 s^2 + 2 s + 1

Für eine Übertragungsfunktion bestehend aus Zähler und Nenner werden Zähler (engl. „numerator“) und Nenner (engl. „denumerator“) als separate Zeilenvektoren eingegeben. Mit der Funktion tf(Zähler,Nenner) (tf für engl. „transfer function“) wird eine Übertragungsfunktion in der bekannten Form definiert.

» Ks=5;Ts=3;

Gs2=tf(Ks,[Ts 1]) Transferfunction:               

5


3 s + 1

Die Zeilenvektoren können allerdings auch direkt innerhalb der runden Klammern des tf-Befehls eingegeben werden, wie hier in diesem Beispiel des PT1-Glieds.

» num=conv([1 5],[1 6])

num = 1 11 30

» den=conv([1 6 10], [1 3])

den = 1 9 28 30

» Gs=tf(num,den)

Transfer function:

s^2 + 11 s + 30


s^3 + 9 s^2 + 28 s + 30 

 Eingabe einer Übertragungsfunktion als Multiplikation von mehreren Polynomen, z.B. wenn Pol- und Nullstellen des Systems bekannt sind. Mit dem Befehl conv(Polynom1,Polynom2) können jeweils zwei Polynome einfach multipliziert werden. Die Polynome werden dazu wieder als Zeilenvektoren der Koeffizienten in absteigender Reihenfolge eingegeben, um dann folgendes Ergebnis zu erhalten.
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
mkDoc
Werkzeuge