Einfuhrung in Matlab/Octave
Carsten Rezny
Institut fur angewandte MathematikUniversitat Bonn
25.–28.03.2019
Matlab
Matlab: Mathematiksoftware mit Schwerpunkten auf Numerik undlinearer Algebra
Dialogsystem
Programmiersprache
umfangreiche Funktionsbibliotheken
verfugbar fur Linux, Mac und Windows
Lizenz
Classroom-Lizenz der Bonner Mathematik
ausschließlich fur Lehrzwecke
in beiden PC-Pools (IAM, INS) installiert
nur dort verwendbar
Alternative
GNU Octave: freie Mathematiksoftware mit Schwerpunkten aufNumerik und linearer Algebra
weitestgehend MATLAB-kompatibel
frei verfugbar fur Linux, Mac und Windows
freie Software (GNU General Public License)
unkompliziert: kein umstandliches Lizenzmanagement etc.Sourcecode ist verfugbarkostenlos einsetzbar
Info und Download:https://www.gnu.org/software/octave/
Einstieg
Dialogsystem ahnlich Unix-Shell oder cmd.exe:
Beispiel
>> 3*4
ans = 12
>>
Prompt:”Eingabeaufforderung“
Eingabe wird direkt ausgewertet.Resultat wird der Variablen ans zugewiesen.
Informationen finden
Online-Handbucher:https://de.mathworks.com/help/matlab/index.html
https://octave.org/doc/interpreter
Handbuch (lokal installiert): F1
Hilfe im Dialogsystem:
Beispiel
>> help Funktion
Funktionen mit Stichwort suchen
Beispiel
>> lookfor Stichwort
Variablen
Definition durch Zuweisung
Beispiel
>> a=23
a = 23
Regeln fur Variablennamen
beginnt mit einem Buchstaben (a–z, A–Z)
danach Buchstaben, Ziffern oder Unterstriche
Groß-/Kleinschreibung wird unterschieden
Variablen
Variable loschen mit clear:
Beispiel
>> clear a
>> a
error: ’a’ undefined near line 1 column 1
Einfaches Rechnen
Beispiel
>> x=3*(4+5)/6
x = 4.500
>> x^2
ans = 20.250
>> sqrt(x)
ans = 2.1213
Viele Standardfunktionen: sin(x), cos(x), exp(x), log(x),
sqrt(x), ...
Zahlen
Ganze ZahlenBereich: intmin(’typ’) bis intmax(’typ’)
Typen: int8, int16, int32, int64, uint8, uint16, uint32, uint64
GleitkommazahlenBereich: ±realmin(’typ’) bis ±realmax(’typ’)Genauigkeit (kleinstmogliche Differenz): eps(’typ’)Typen: single, double (IEEE-Standard)
Komplexe ZahlenSchreibweise: z=3+4i
Zahlen
Datentypen
Beispiel
>> a=5
a = 5>> b=int32(a)
b = 5>> whos a bName Size Bytes Class Attributes
a 1x1 8 double
b 1x1 4 int32
Standard ist doubleUmwandlungsfunktionen analog fur alle Typen
whos: zeigt Informationen uber Variable
Zahlen
Formatierung von Zahlen
Beispiel
>> pi
ans = 3.1416>> format long
>> pi
ans = 3.141592653589793
Alle Formatoptionen: help format
Zahlen
Spezielle Werte
Inf unendlich
NaN keine Zahl (not a number)
NA fehlender Wert (not available)
Beispiel
>> 1/0
ans = Inf
>> 0/0
ans = NaN
Testfunktionen
isinf(x)
isnan(x)
isfinite(x) —”normale“ Zahl; nicht NaN, NA oder Inf
Zahlen
Vorsicht: NaN ist ungleich NaN!
Beispiel>> nan == nan
ans = 0
Spezielle Vergleichsfunktion: isequaln(a,b)
Beispiel
>> isequaln(nan,nan)
ans = 1
>> isequaln(nan,NA)
ans = 1
Vektoren
Beliebig lange Liste von Werten gleichen Typs
Beispiel
>> u=[2, 3, 5, 7, 11]
u =
2 3 5 7 11
Trennung durch Komma optional
Vektoren
Index beginnt bei 1Zugriff auf Elemente mit ()
Beispiel
>> u(1)
ans = 2
Zuweisung an Elemente
Beispiel
>> u(2)=7
u =
2 7 5 7 11
Vektoren
Neue Elemente durch Zuweisung erzeugen
Beispiel
>> u(6)
??? Index exceeds matrix dimensions.
>> u(6)=13
u =
2 7 5 7 11 13
Ans Ende anhangen
Beispiel
>> u(end+1)=17
u =
2 7 5 7 11 13 17
Vektoren
Bereiche
Beispiel
>> 1:5
ans =
1 2 3 4 5
>> 1:3:10
ans =
1 4 7 10
Bereich als Index
Beispiel
>> u(3:5)
ans =
5 7 11
Vektoren
Vektoroperationenu+v Additiona*v Multiplikation mit Skalaru.*v elementweise Multiplikationu.’ Transposition: Wechsel zwischen Zeilen- und
Spaltenvektordot(u,v) Skalarprodukt u · vcross(u,v) Kreuzprodukt u × vnorm(u) Euklidische Norm von usum(u) Summe der Elemente von umin(u) kleinster Wert in umax(u) großter Wert in u
Matrizen
Schreibweise: zeilenweise, Semikolon trennt Zeilen
Beispiel
>> a=[1, 2, 3; 4, 5, 6; 7, 8, 9]
a =
1 2 3
4 5 6
7 8 9
Adressierung von Elementen: (Zeile, Spalte)
Beispiel
>> a(2,3)
ans = 6
Matrizen
Grundgedanke: Alles ist eine MatrixZahl: 1×1-MatrixZeilenvektor: 1×N-MatrixSpaltenvektor: N×1-Matrix
Beispiel
>> x=3
x = 3
>> x(1,1)
ans = 3
Matrizen
Matrizen erzeugenlinspace(min,max,N) Zeilenvektor mit N linear verteilten
Werten in [min,max]logspace(min,max,N) Zeilenvektor mit N logarithmisch
verteilten Werten in [10min,10max]eye(N,M) N×M-Matrix, Diagonalelemente = 1ones(N,M) N×M-Matrix, alle Elemente = 1zeros(N,M) N×M-Matrix, alle Elemente = 0diag(v) Matrix mit Elementen von v auf der
Diagonalediag(M) Vektor mit den Diagonalelementen von M
Statt (N,M) auch (N) fur quadratische Matrix.
Matrixoperationen
Matrizen vervielfaltigen
Beispiel
>> repmat([1 2; 3 4],2,2)
ans =1 2 1 23 4 3 41 2 1 23 4 3 4
Matrixoperationen
A, B, M: Matrizen
a, b: Skalar
M=A+B Addition: Mij = Aij + Bij (bei passenden Dimensionen)M=a+B mit Skalar: Mij = a + Bij
Subtraktion analog
M=A*B Matrixmultiplikation: Mij =∑N
k=1 AikBkj
M=A.*B elementweise Multiplikation: Mij = AijBij
M=a*B mit Skalar: Mij = aBij
Matrixoperationen
M=A’ adjungierte Matrix: M = AT
M=A.’ transponiert: M = AT
M=A/B”Rechtsdivision“: M = (B ′−1A′)′
M=A/b mit Skalar nur im Nenner: Mij = Aij/bM=A./B elementweise Rechtsdivision: Mij = Aij/Bij
M=a./B mit Skalar: Mij = a/Bij
M=A\B”Linksdivision“: M = A−1B
Losen von LGS Ax = b: x=A\belementweise und mit Skalar analog zur Rechtsdivision
M=f(A) elementweise Mij = f (Aij)praktisch alle skalaren Funktionen y = f (x)
Matrixoperationen
M=rot90(A,k) rotiert A um k·90◦
M=fliplr(A) spiegelt A an der Vertikalen;kehrt Reihenfolge der Spalten um
M=flipud(A) spiegelt A an der Horizontalen;kehrt Reihenfolge der Zeilen um
d=det(A) Determinante von AM=inv(A) Inverse von Ar=rank(A) Rang von AM=null(A) Kern von A
viele weitere Funktionen. . .
Matrixoperationen
Große
Beispiel
>> size(A)
ans =
3 3
>> size(A,1)
ans = 3
size(A,n)
n=1 Zahl der Zeilen
n=2 Zahl der Spalten
Dunnbesetzte Matrizen
Beispiel
>> A
A =0 0 0 0 0 0 0 3 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 07 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0
Dunnbesetzte Matrix: wenige Elemente ungleich 0
Dunnbesetzte Matrizen
Kompaktere Form:
Beispiel
>> S=sparse(A)
S =(5, 1) 7(7, 7) 1(1, 8) 3
Auch direkt:
Beispiel
>> S=sparse([5 7 1],[1 7 8],[7 1 3],8,10)
Dunnbesetzte Matrizen
Parameter fur sparse
Beispiel
>> S=sparse(i, j, s, n, m, nmax)
i, j Vektoren von Zeilen- bzw. Spaltenindizes
s Vektor von Werten
n, m Anzahl der Zeilen bzw. Spalten der Matrix
nmax Anzahl der anfangs reservierten Platze fur Werte
Dunnbesetzte Matrizen
Umwandeln in”vollstandige“ Matrixform
Beispiel
>> A=full(S)
A =0 0 0 0 0 0 0 3 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 07 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0
Dunnbesetzte Matrizen
Vergleich des Platzbedarfs
Beispiel
>> whos AName Size Bytes Class Attributes
A 8x10 640 double
Beispiel
>> whos SName Size Bytes Class Attributes
S 8x10 136 double sparse
Cell Arrays
Listen von Objekten unterschiedlichen Typs:
Beispiel
>> c={7.5, "hallo", [1 2 3]}c =
{[1,1] = 7.5000
[1,2] = hallo
[1,3] =
1 2 3
}
Definition durch Aufzahlung von Elementen in {...}Komma zwischen Elementen wieder optionalTrennung von Zeilen durch ;
Cell Arrays
Zugriff auf Elemente mit {} liefert einzelne Elemente
Beispiel
>> c{1,2}ans = hallo
Mit (): Resultat als Cell Array
Beispiel
>> c(1,2)
ans =
{[1,1] = hallo
}
Strukturen
Strukturierte Variable ahnlich struct in C:
Beispiel
>> x.a=0;
>> x.b=2
x =
scalar structure containing the fields:
a = 0
b = 2
Strukturen
Alternative Erzeugung mit struct:
Beispiel
>> s=struct("ax",7,"bx",0,"ay",3.3,"by",-1)
s =
scalar structure containing the fields:
ax = 7
bx = 0
ay = 3.3
by = -1
Strukturen
Feldnamen extrahieren:
Beispiel
>> fieldnames(s)
ans =
{[1,1] = ax
[2,1] = bx
[3,1] = ay
[4,1] = by
}
Grafik
Achsen anpassen
Beispiel
>> axis([0,2*pi,-2,2])
axis([x min, x max, y min, y max]): x-/y-Bereiche angeben
Grafik
Mehrere Plots in einem Fenster
Beispiel
>> plot(x,sin(x),x,cos(x),’r-.’)
Viele Optionen fur Farb- und Stilangaben: doc LineSpec