Theorie 1.2: Vektoren & Matrizen II, Funktionen, Indizierung Dr. Laura Scarabosio Technische Universität München Fakultät Mathematik, Lehrstuhl für Numerische Mathematik M2 04.10.2017
Theorie 1.2: Inhalt 1 Vektoren und Matrizen Backslash und Slash 2 Funktionen 3 Indizierung 4 Matrizen manipulieren
Inhalt 1 Vektoren und Matrizen Backslash und Slash 2 Funktionen 3 Indizierung 4 Matrizen manipulieren
\ und / Operator I \ (mldivide) und / (mrdivide) sind im gewissen Sinn das Gegenstück zum Matrizenprodukt *: Mit Ihnen kann man lineare Gleichungssysteme lösen bzw. eine Lösung approximieren. Fragestellung: Gesucht ist ein Vektor x mit Ax = b. Wenn kein solches x existiert, dann suche x mit Ax b 2 minimal. Dieser Vektor wird mit A \ b bestimmt. Dazu wird intern je nach Struktur von A ein geeigneter Algorithmus verwendet. b kann auch eine Matrix sein (z.b. mehrere rechte Seiten). Anzahl Zeilen von A muss gleich Anzahl Zeilen von b sein. Bei Verwendung von Zeilenvektoren, also x = (x 1, x 2,..., x n ), verwendet man /. Merkregel A \ b = A 1 b, wenn b Spaltenvektor b / A = ba 1, wenn b Zeilenvektor
\ und / Operator II >> hilb(3) 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 >> b = (1:3) ; >> x = A\b x = 27.0000-192.0000 210.0000 >> A*x 1.0000 2.0000 3.0000 >> x = b /A x = 27.0000-192.0000 210.0000 >> x*a 1.0000 2.0000 3.0000 >> B = [(1:3), ones(3,1)] B = >> A\B 1 1 2 1 3 1 27.0000 3.0000-192.0000-24.0000 210.0000 30.0000
\ und / Operator III Achtung: Aufpassen, wenn Matrix nicht quadratisch oder singulär! >> [hilb(3); ones(1,3)] 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 1.0000 1.0000 1.0000 >> b = (1:4) b = 1 2 3 4 >> x = A\b x = -22.4152 87.1090-60.6662 >> A*x 0.9172 2.6622 2.1723 4.0276
Inhalt 1 Vektoren und Matrizen Backslash und Slash 2 Funktionen 3 Indizierung 4 Matrizen manipulieren
Funktionen Viele Matlab Funktionen lassen sich in eine von drei Klassen einteilen: Skalarwertig Skalar als Eingabeargument. Wirken bei Feldern komponentenweise. Vektorwertig Vektor als Argument. Werden bei Matrizen auf jede Spalte einzeln angewendet. Rückgabewert ist Skalar oder Vektor. Matrixwertig Matrix als Argument, z.b. det Viele Funktionen in Matlab verhalten sich unterschiedlich je nach Anzahl und Art der Eingabe- bzw. Ausgabeparameter. QR Orthogonal-triangular decomposition. [Q,R] = QR(A), where A is m-by-n, produces an m-by-n... [Q,R] = QR(A,0) produces the "economy size" decomposition... [Q,R,E] = QR(A) produces unitary Q, upper triangular R... [Q,R,E] = QR(A,0) produces an "economy size" decomposition... X = QR(A) and X = QR(A,0) return the output of LAPACK s......
Skalare Funktionen Beispiele: >> magic(2) 1 3 4 2 >> cos(a*pi/2) 0.0000-0.0000 1.0000-1.0000 sin cos tan asin acos atan exp log (ln) round sqrt factorial (Fakultät) abs (Betrag)
Vektor Funktionen I Wenn das Argument der Funktion eine Matrix ist, wird die Funktion einzeln auf jede Spalte der Matrix angewendet. Um eine Vektorfunktion auf eine gesamte Matrix A anzuwenden und nicht auf die einzelnen Spalten, A(:) als Argument verwenden. Meist zweites optionales Argument welches angibt, ob Funktion auf Spalten (1) oder Zeilen (2) einer Matrix angewendet werden soll. Beispiele: min max mean sum prod (Produkt) diff cumsum sort
Vektor Funktionen II >> x = 4:-1:1; >> prod(x) 24 >> max(x) 4 >> [m, i] = max(x) >> magic(3); >> sum(a) 15 15 15 >> sum(a,2) 15 15 15 m = i = 4 1 >> sum(a(:)) 45 >> sort(a) >> diff(x) -1-1 -1 3 1 2 4 5 6 8 9 7
Hilfreiche Funktionen length: Die Länge eines Vektors oder die größere Dimension einer Matrix size: Vektor mit den Dimensionen des Feldes numel: Anzahl der Elemente des Feldes Hinweis: prod(size(a)) == numel(a) == length(a(:)) >> A=ones(3,2); >> length(a) 3 >> length(a ) 3 >> size(a) 3 2 >> numel(a) 6
Inhalt 1 Vektoren und Matrizen Backslash und Slash 2 Funktionen 3 Indizierung 4 Matrizen manipulieren
Indizierung I Mit Matlab kann gezielt auf Teile eines Vektors oder einer Matrix zugegriffen werden. Zum Indizieren verwendet man runde Klammern (...). x(i): Das i-te Element des Vektors x A(i,j): Das Element in der i-ten Zeile und j-ten Spalte end: Bezeichnet den letzten Index der Dimension Achtung: Indizes fangen in Matlab bei 1 an! >> A(1,2) = -2 >> x = 2:-1:0; >> x(2) 1 >> [1,2; 3,4] 1 2 3 4 1-2 3 4 >> A(1,end) -2 >> A(end,end) 4
Lineares Indizieren Auf die Elemente einer Matrix kann auch mit nur einem Index zugegriffen werden. Syntax A(i) gibt den i-ten Eintrag der Matrix A zurück. Die Einträge werden hierbei spaltenweise durchnummeriert. 1 4 7 10 2 5 8 11 3 6 9 12 >> A=magic(3) 8 1 6 3 5 7 4 9 2 >> A(2) 3 >> A(end) 2
Indizierung II Auch Felder können zum Indizieren verwendet werden, sei v ein Vektor bzw. M eine Matrix mit Indizes x(v): Vektor mit i-tem Element gleich x(v(i)) x(m): Matrix mit (i,j)-ten Element gleich x(m(i,j)) A(v,w): Matrix mit (i,j)-ten Element gleich A(v(i), w(j)) A(v): Vektor mit i-tem Element gleich A(v(i)) Hinweis: Kurschreibweise: : == 1:end. Hinweis: v(:) bzw. A(:) ist immer ein Spaltenvektor. Achtung: Die Einträge in den Vektoren, bzw. Matrizen, die zum Indizieren verwendet werden, müssen ganzzahlig und größer als 0 sein. Achtung: Matlab unterstützt keine doppelte Indizierung, z.b. x(v)(1) funktioniert nicht!
Indizierung III x = -3-2 -1 0 1 2 3 >> x(2:4) -2-1 0 >> x([2 3 end end 1]) -2-1 3 3-3 >> M = [1 2; 2 1] M = >> x(m) 1 2 2 1-3 -2-2 -3 >> magic(3) >> A(1,:) 8 1 6 3 5 7 4 9 2 8 1 6 >> A([1,2],[2,3]) 1 6 5 7 >> A(2:end,:) 3 5 7 4 9 2
Lineares Indizieren II >> x = 1:3 >> zeros(3) 0 0 0 0 0 0 0 0 0 >> A(2:2:end) = 1 0 1 0 1 0 1 0 1 0 x = 1 2 3 >> x(:) 1 2 3 >> A*x error: operator *: nonconformant arguments (op1 is 3x3, op2 is 1x3) >> A*x(:) 2 4 2
Inhalt 1 Vektoren und Matrizen Backslash und Slash 2 Funktionen 3 Indizierung 4 Matrizen manipulieren
Einträge löschen Es ist möglich, Einträge aus Vektoren zu löschen. x(i) = [] löscht den i-ten Eintrag des Vektors x x(v) = [] löscht alle Einträge von x mit Indizes in v A(i,:) = [], A(:,i) = [] löscht i-te Zeile bzw. Spalte der Matrix A >> x=1:5; >> x([2 3]) = [] x = 1 4 5 >> A=magic(3) 8 1 6 3 5 7 4 9 2 >> A(:,2) = [] 8 6 3 7 4 2 >> A([2,1],:) = [] 4 2 >> magic(3); >> A(1:end, 2) = []??? Subscripted assignment dimension mismatch.
Einträge hinzufügen Matlab verlängert Felder bei Element-Zuweisung automatisch. >> x=1 x(i) = k setzt das i-te Element auf den Wert k und verlängert den Vektor wenn i > length(x). A(i,j) = k setzt das (i,j)-te Element auf den Wert k, hängt ggf. Zeilen und Spalten an. x = 1 >> x(4) = 4 x = 1 0 0 4 >> x(3,3) = 5 x = 1 0 0 4 0 0 0 0 0 0 5 0
Fragen? Ende Theorie 1.2 Fragen?