Einführung in Matlab/Octave - iam.uni-bonn.de · Einf uhrung in Matlab/Octave Carsten Rezny...

43
Einf¨ uhrung in Matlab/Octave Carsten Rezny Institut f¨ ur angewandte Mathematik Universit¨ at Bonn 25.–28.03.2019

Transcript of Einführung in Matlab/Octave - iam.uni-bonn.de · Einf uhrung in Matlab/Octave Carsten Rezny...

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

Beispiel

>> 2*a

ans =2 4 68 10 12

14 16 18>> a+1

ans =2 3 45 6 78 9 10

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

2D-Grafik mit plot

Beispiel

>> x=linspace(0,2*pi,100);

>> plot(x,sin(x))

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

GrafikListen plotten

Beispiel

>> x=randn(1,1000);

>> plot(cumsum(x));

Einfacher Random Walk

Grafik

Histogramm

Beispiel

>> x=randn(1,10000);

>> hist(x,80)