MATLAB ist eine numerische Berechnungsumgebung wurde vorrangig zum Rechnen mit Vektoren und Matrizen
entworfen ist interaktiv benutzbar, vergleichbar mit einem Rechenblatt dient als Ingenieur-Tool Skripte und Prozeduren erlauben eine Programmierung Nicht (primär) für symbolische Berechnungen geeignet
(MAPLE oder Mathematica können das) grafische Ausgabe mit dem Plot-Kommando
Peter Sobe 1
2. Einführung in das Ingenieurtool MATLAB
MATLAB rechnet rein numerisch
MATLAB – der Name kommt von MATrix LABoratory
MATLAB wird zur interaktiven Arbeit, aber auch zur Ausführung vorbereiteter Prozeduren und Funktionen benutzt
Zur interaktiven Arbeit stehen z.B. ein Übersichtsfenster für benutzte Variablen und deren Werte (Workspace-Fenster) bereit, und ein Matrix-Editor
Peter Sobe 2
MATLAB
MATLAB hält im interaktiven Betrieb Variablen, die standardmäßig Matrizen sind, Typ double wenn nicht anders angegeben
Elementare MATLAB-Operationen Arithmetische Operationen Logische Operationen Mathematische Funktionen Grafikfunktionen Funktionen zum Datenaustausch
Peter Sobe 3
MATLAB
Eingabe nach dem Prompt in der interaktiven Sitzung:X=47.11MATLAB antwortet X = 47.11 und nimmt die Variable X und deren Wert in den s.g. Workspace auf. Eingabe:meinvektor=[1 2 3 4 5]MATLAB antwortet mit meinvektor =
1 2 3 4 5… und nimmt die Variable meinvektor inkl. der gespeicherten Werte in den Workspace auf
Peter Sobe 4
MATLAB – interaktive Definition von Variablen
m=[1 2 3; 4 5 6; 7 8 9 ]MATLAB antwortet mit m =
1 2 3 4 5 6 7 8 9
Zugriff auf Elemente:m(2,3) ergibt: 6m(2,:) ergibt: [4 5 6]m(:,1) ergibt 1
47
… Beachte: die Indizierung beginnend mit 1
Peter Sobe 5
MATLAB – interaktive Definition von Variablen
m=[1 2 3; 4 5 6; 7 8 9 ]
m = [ m; 10 11 12 ] … fügt Zeile 10 11 12 unten zu
v = [0 0 0 0]v = v‘m = [m,v] … fügt Spalte mit Nullen rechts an
ergibt letztendlich1 2 3 04 5 6 07 8 9 010 11 12 0
Peter Sobe 6
MATLAB – interaktive Definition von Variablen
Operationen +,-*,/ beziehen sich auf Vektoren und Matrizen
Addition und Subtraktion wirken komponentenweise setzen voraus, dass Dimensionen der Operanden passen
Beispiel:A = [1 2 3]B = [0.1 0.2 0.3]C = A+B ergibt [1.1 2.2 3.3]D = A-C ergibt [0.9 1.8 2.7]
Peter Sobe 7
Arithmetische Operationen
Multiplikation
A = [1 2 3 ; 4 5 6 ; 6 7 8 ]B = [2 0 0 ; 0 2 0 ; 0 0 2 ]S = 2
C = A * B Ergibt eine MatrixmultiplikationC = A.* S ergibt eine Multiplikation von Matrix A mit Skalar S
Die Matrixmultiplikation erfordert, dass die Spaltenanzahl der linken Matrix mit der Zeilenanzahl der rechten Matrix übereinstimmt.
Peter Sobe 8
Arithmetische Operationen
Multiplikation zwischen Vektoren und Matrizen
V = [1 2 3 4 ]M = [2 1 1 ; 1 2 1 ; 1 1 2 ; 2 1 2]
C = V * M ergibt eine 1x3-Matrix, d.h. einen Zeilenvektor C = M * V ergibt einen Fehler
Vektor- und Matrixtransposition:V1 = V‘ wandelt Zeilenvektor V in einen Spaltenvektor umMtrans = M‘ transponiert die Matrix M
Peter Sobe 9
Arithmetische Operationen
Division
C =A / B entspricht X = A * B -1, rechte Division C =A \ B entspricht X = A -1 * B, linke Division
Peter Sobe 10
Arithmetische Operationen
Potenzieren: ^-Operatorwirkt primär auf Matrizen, kann durch .^ auf Komponenten angewendet werden.
X = 5Y = X^2 ergibt 25 (Anwendung auf skalaren Wert)Y = X^-1 ergibt 0.2V=[10 5 1]V1 = V.^2 komponentenweise Potenzierung ergibt [100 25 1]
A = [1 2 3; 4 5 6; 7 8 9]B = A^2 ergibt das Matrixprodukt A * A Ainv = A^-1 ergibt die invertierte Matrix AA1 = A.^2 ergibt die Matrix [1 4 9; 16 25 36; 49 64 81]Peter Sobe 11
Arithmetische Operationen
A*x = bA … nxn-Koeffizientenmatrix (bekannt)x … Lösungsvektor mit n Elementen (gesucht)b … rechte Seite, Vektor mit n Elementen (bekannt)
Lösung in MATHLAB/Octave: Eingabe der A-Matrix und des b-Vektors b = b‘ Transponieren zu einem Spaltenvektor x = A^-1 * b Ausgabe des x-Vektors, bzw. Weiterverarbeitung
Zum Vergleich: In C musste man das Lösungsverfahren ausprogrammieren, oder eine vorgefertigte Funktions-sammlung benutzen (z.B. Lapack)
Peter Sobe 12
Lösen eines linearen Gleichungssystems
Beispiel:
Peter Sobe 13
Lösen eines linearen Gleichungssystems
octave:1> lingls_initA =
76.3268 50.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.673044.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296-38.5296 44.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539 -85.4854 -79.4366 6.1647 -41.7646 -97.5463-97.5463 -38.5296 44.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646-41.7646 -97.5463 -38.5296 44.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366 6.16476.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366
-79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268 -50.9873 73.0979 -84.8689 -57.8539 85.485485.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268 50.9873 73.0979 -84.8689 -57.8539-57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 -44.6730 76.3268 50.9873 73.0979 -84.8689-84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268 50.9873 73.097973.0979 -84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268 50.987350.9873 73.0979 -84.8689 -57.8539 85.4854 -79.4366 6.1647 -41.7646 -97.5463 -38.5296 44.6730 76.3268
b =Columns 1 through 11:
-1.3924e+04 8.0344e+03 1.0483e+04 -2.4469e+03 7.4594e+03--1.6952e+04 -8.9095e+03 4.8354e+03 2.4811e+04 1.3750e+04---7.5490e+03
Column 12:
2.1317e+03
octave:2> b=b'b =
-1.3924e+048.0344e+031.0483e+04-2.4469e+037.4594e+03-1.6952e+04-8.9095e+034.8354e+032.4811e+041.3750e+04-7.5490e+032.1317e+03
octave:3> x = A^-1*bx =
-63.560956.2456-34.5836-60.9058-3.8514-74.8375-44.5631-86.190414.606296.9420-60.3900-82.2840
2-D Funktionsplotter: plotDie eingebaute Funktion Plot arbeitet ausgehend von zwei Feldern, die die gleiche Dimension aufweisen müssenAllgemeine Form:
plot(x-vector, y-vector)
x = [0:0.1:2*pi]y = sin(x)plot(x,y)
Peter Sobe 14
Funktionen und Plot
Eingebaute Programmiersprache mit typischen Steuerflußkonstrukten (if, else, while, for, usw.)
Anweisungen werden in MATLAB interpretiert, statt kompiliert wie in einigen andern Programmiersprachen
Programmierung erfolgt durch … Skripte für wiederholt auszuführenden Schritte mit Auswirkung
auf die Variablen im Workspace Funktionen für abgeschlossene Berechnungsschritte, die bei
einem Aufruf mit Parameter versehen werden und ein Ergebnis zurückgeben
Peter Sobe 15
MATLAB - Programmierung
Ein Skript wird in einer m-Datei gespeichert und über den Dateinamen (ohne Endung ‘m‘) aufgerufen. Das Skript wirkt so, als wäre der Inhalt in der interaktiven Sitzung eingegeben worden.
Beispiel meinskript.m % Nur ein Beispiel% plottet eine Sinusfunktionx = (-100:0.5:100);y = sin(x)plot (x,y)
Aufruf:meinskript help meinskriptDie Variablen des Skripts bleiben nach dessen Ausführung weiter im Workspace bestehenPeter Sobe 16
MATLAB – Skripte
Funktionen werden wie Skripte in einer .m-Datei gespeichert und über ihren Namen aufgerufen. Funktionen nehmen Parameter entgegen und erzeugen Ausgaben aus Rückgabe.Der Kopf der Funktion hat den Aufbau:function[Ausgabeparameter]= funktionsname(Eingabeparameter)
Beispiel:function [mw] = Mittel(a,b,c)% Mittel: berechnet das arithmetische Mittel aus 3 Wertenmw = a+b+cmw=mw./3
Aufrufmöglichkeiten:a=4b=2c=1m=Mittel(a,b,c) … ergibt 2.33
Peter Sobe 17
MATLAB – Funktionen
a=[1 3 5 4]b=[3 2 2 3]c= [2 1 2 2]m = Mittel(a,b,c) … ergibt [2 2 3 3]
Dynamische Typisierung: Variablen müssen nicht explizit vereinbart werden, sondern
werden durch eine Zuweisung eingeführt
der Typ einer Variablen ergibt sich durch dem zugewiesenen Ausdruck
Variablen können auch mit Ausdrücken eines andern Typs überschrieben werden (Typ ändert sich)
Bei Bedarf kann man Variable mit clear aus dem Workspace entfernen
Dynamische Typisierung ist bequemer für interaktive Arbeit, für schnelleres Programmieren, aber fehleranfälliger
Peter Sobe 18
MATLAB - Programmierung
MATLAB ist auch eine Programmiersprache und beinhaltet Sprachkonstrukte zur Beeinflussung des Steuerflusses
Sequenz: entsteht durch Abfolge der Anweisungen, Skripte und Funktionen
Selektion:if else elseif end switch case
Zyklen: for, while, break, continue
Weitere:Skript-Aufruf, Funktionen, return, try catch
Peter Sobe 19
MATLAB-Sprachkonstrukte
function [F] = Fibo(n)% Fibo(n) ... berechnet die Fibonacci-Zahlen von f(1) bis f(n)F = zeros(1,n+1);F(1,1)=0;F(1,2)=1;for k=1:n-1F(1,k+2) = F(1,k)+F(1,k+1);end;
Aufruf:octave:1> Fibo(10)ans =
0 1 1 2 3 5 8 13 21 34 55Peter Sobe 20
Algorithmenbeispiel
if BedingungAnw;
end;
Beispiel:if a<b
t=a;a=b;b=t;
end
Peter Sobe 21
Steuerfluss: Einseitige Selektion
Anw /ja nein
Bedingung
if BedingungAnw1;
elseAnw2;
end;
Beispiel:if a>b
diff = a-b;else
diff =b-a;end
Peter Sobe 22
Steuerfluss: zweiseitige Selektion
Anw1 Anw2ja nein
Bedingung
while BedingungAnweisung;
end
Beispiel:a=0;b=5;m=(a+b)/2;while abs(fun(m))>0.000001if (fun(m) > 0)
a = m;else
b=m;endm=(a+b)/2;
endPeter Sobe 23
Steuerfluss: while-Schleife
Bedingung
Anweisung
Variante: Kopfgesteuerter Zyklus,
Fußgesteuerter Zyklus in Matlab nicht vorhanden