Vorlesung 3: Matrizen
Eine Matrix ist in Matlab ein zweidimensionales Feld aus reellen oder komplexen Zahlen.
Contents
- Konstruktion von Matrizen
- Konstruktion von Matrizen: ones und zeros
- Konstruktion von Matrizen: eye und diag
- Matrix Informationen: size, length, ndims, find
- Die Matlab-Befehle: tril, triu
- Konstruktion von Matrizen: reshape
- Zugriff auf Matrixelemente
- Elementare Matrixoperationen
- Elementweise Operationen: .*, ./, .^
- Verwendung von ' und .'
- Elementweise Anwendung elementarer Funktionen
- Duennbesetzte Matrizen (Sparse matrices)
clear all format short e
Konstruktion von Matrizen
Eine kleine Matrix koennen wir definieren, indem wir die Matrixelemente in eckicken Klammern angeben. Matrixelemente innerhalb einer Zeile werden mit Leerzeichen oder Komma getrennt. Zeilen trennt man durch Semikolon oder durch das Einfuegen einer Leerzeile.
Beispiele:
A = [1 2 3; 4 5 6; 7 8 9]
A = 1 2 3 4 5 6 7 8 9
A = [1,2,3; 4,5,6; 7,8,9]
A = 1 2 3 4 5 6 7 8 9
A = [1 2 3 4 5 6 7 8 9]
A = 1 2 3 4 5 6 7 8 9
Matrizen koennen (wie wir es bereits bei eindimensionalen Feldern gesehen haben) aus passenden Arrays zusammengesetzt werden.
b = [10;11;12]; C = [A b]
C = 1 2 3 10 4 5 6 11 7 8 9 12
Weitere Beispiele:
C = [A 2*A]
C = 1 2 3 2 4 6 4 5 6 8 10 12 7 8 9 14 16 18
C = [A; 2*A]
C = 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18
C = [[1,2;3,5] [5;6]]
C = 1 2 5 3 5 6
Konstruktion von Matrizen: ones und zeros
Wir kennen bereits die Matlab-Befehle zeros und ones, deren Verwendung wir noch einmal wiederholen.
A = zeros(4,3)
A = 0 0 0 0 0 0 0 0 0 0 0 0
B = ones(4,3)
B = 1 1 1 1 1 1 1 1 1 1 1 1
C = [A B]
C = 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1
Fuer die Erzeugung einer 3x3 Matrix mit Eintraegen 7 gibt es wieder mehrere Moeglichkeiten:
Beachte die verkuerzte Notation fuer quadratische Matrizen.
A = 7*ones(3)
A = 7 7 7 7 7 7 7 7 7
A = 7*ones(3,3)
A = 7 7 7 7 7 7 7 7 7
A = 7+zeros(3)
A = 7 7 7 7 7 7 7 7 7
Konstruktion von Matrizen: eye und diag
Weitere oft verwendete Matlab-Befehle zur Erzeugung von Matrizen sind
eye: eye(N) liefert NxN Einheitsmatrix
diag: Erzeugt eine Diagonalmatrix
N = 4; eye(N)
ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
Informationen zur Nutzung von diag:
help diag
DIAG Diagonal matrices and diagonals of a matrix. DIAG(V,K) when V is a vector with N components is a square matrix of order N+ABS(K) with the elements of V on the K-th diagonal. K = 0 is the main diagonal, K > 0 is above the main diagonal and K < 0 is below the main diagonal. DIAG(V) is the same as DIAG(V,0) and puts V on the main diagonal. DIAG(X,K) when X is a matrix is a column vector formed from the elements of the K-th diagonal of X. DIAG(X) is the main diagonal of X. DIAG(DIAG(X)) is a diagonal matrix. Example m = 5; diag(-m:m) + diag(ones(2*m,1),1) + diag(ones(2*m,1),-1) produces a tridiagonal matrix of order 2*m+1. See also SPDIAGS, TRIU, TRIL, BLKDIAG. Overloaded methods: sym/diag Reference page in Help browser doc diag
Beispiele zur Verwendung von diag:
D = diag([1,2,3])
D = 1 0 0 0 2 0 0 0 3
ND = diag([1,2,3],1)
ND = 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0
ND = diag([1,2,3],-1)
ND = 0 0 0 0 1 0 0 0 0 2 0 0 0 0 3 0
Wendet man diag auf eine Matrix an, so erhaelt man die Diagonale.
A = [1,2,3; 4,5,6; 7,8,9]; D = diag(A)
D = 1 5 9
Matrix Informationen: size, length, ndims, find
size: Anzahl der Zeilen und Spalten
length: Liefert die groessere Dimension
ndims: Anzahl der Dimensionen
find: Index der Matrixelemente ungleich Null
size(A)
ans = 3 3
length(A)
ans = 3
ndims(A)
ans = 2
find(A)
ans = 1 2 3 4 5 6 7 8 9
B = [0 1 0; 2 0 3; 0 4 0]
B = 0 1 0 2 0 3 0 4 0
find(B)
ans = 2 4 6 8
Die Matlab-Befehle: tril, triu
tril: untere Dreiecksmatrix
triu: obere Dreiecksmatrix
clear all; format short e; A = [1,2,3;4,5,6;7,8,9]
A = 1 2 3 4 5 6 7 8 9
tril(A)
ans = 1 0 0 4 5 0 7 8 9
triu(A)
ans = 1 2 3 0 5 6 0 0 9
diag(A)
ans = 1 5 9
Konstruktion von Matrizen: reshape
help reshape
RESHAPE Reshape array. RESHAPE(X,M,N) or RESHAPE(X,[M,N]) returns the M-by-N matrix whose elements are taken columnwise from X. An error results if X does not have M*N elements. RESHAPE(X,M,N,P,...) or RESHAPE(X,[M,N,P,...]) returns an N-D array with the same elements as X but reshaped to have the size M-by-N-by-P-by-.... The product of the specified dimensions, M*N*P*..., must be the same as NUMEL(X). RESHAPE(X,...,[],...) calculates the length of the dimension represented by [], such that the product of the dimensions equals NUMEL(X). The value of NUMEL(X) must be evenly divisible by the product of the specified dimensions. You can use only one occurrence of []. See also SQUEEZE, SHIFTDIM, COLON. Overloaded methods: categorical/reshape sym/reshape Reference page in Help browser doc reshape
A = reshape(1:25,5,5)
A = 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 20 25
A = reshape(1:12,2,6)
A = 1 3 5 7 9 11 2 4 6 8 10 12
A = reshape(1:12,6,2)
A = 1 7 2 8 3 9 4 10 5 11 6 12
Zugriff auf Matrixelemente
A = [1,2,3; 4,5,6; 7,8,9]
A = 1 2 3 4 5 6 7 8 9
Zuriff auf ein einzelnes Matrixelement, durch Angabe der Zeilen- und Spaltennummer.
A(2,3) % einzelnes ELement
ans = 6
A(1:2,2:3) % Untermatrix
ans = 2 3 5 6
A(1,:) % die gesamte erste Zeile
ans = 1 2 3
A(1,2:end) % erste Zeile mit Ausnahme des Elements der ersten Spalte
ans = 2 3
A(:,2) % die gesamte 2. Spalte
ans = 2 5 8
A(1:end-1,end) % letzte Spalte mit Ausname des letzten Elementes
ans = 3 6
Die Eintraege einer Matrix sind spaltenweise abgespeichert. Man kann daher auch unter Verwendung eines einzigen Index auf Matrixelemente zugreifen.
Wir betrachten dazu die folgenden Beispiele:
A(4)
ans = 2
A([1 2 3 4])
ans = 1 4 7 2
A(:)
ans = 1 4 7 2 5 8 3 6 9
Elementare Matrixoperationen
Beispiele fuer die Verwendung von +, -, *, ^
clear all
A = ones(4,3);
B = 2*ones(4,3);
C = A+B
C = 3 3 3 3 3 3 3 3 3 3 3 3
C = A-B
C = -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
Die folgende Anweisung erzeugt (erwartungsgemaess) eine Fehlermeldung.
C = A*B
Das folgende Beispiel zeigt Matrixmultiplikation bei passender Dimension:
A = ones(4,3)
A = 1 1 1 1 1 1 1 1 1 1 1 1
B = 2*ones(3,4)
B = 2 2 2 2 2 2 2 2 2 2 2 2
C = A*B
C = 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
A = reshape(1:9,3,3)
A = 1 4 7 2 5 8 3 6 9
Potenzieren:
Asq = A^2
Asq = 30 66 102 36 81 126 42 96 150
Matrix-Vektor-Multiplikation:
A = reshape(1:9,3,3); b = [0;1;0]; A*b
ans = 4 5 6
Berechnung der transponierten Matrix: (Apostroph)
A = reshape(1:9,3,3)
A = 1 4 7 2 5 8 3 6 9
AT = A'
AT = 1 2 3 4 5 6 7 8 9
Elementweise Operationen: .*, ./, .^
Beispiel zur elementweise Multiplikation:
A = [1,2,3;4,5,6;7,8,9]; B = [1,3,-1;2,4,0;6,0,1];
A.*B % elementweise Multiplikation
ans = 1 6 -3 8 20 0 42 0 9
A*B % Matrixmultiplikation
ans = 23 11 2 50 32 2 77 53 2
A./A
ans = 1 1 1 1 1 1 1 1 1
1./A
ans = 1.0000e+00 5.0000e-01 3.3333e-01 2.5000e-01 2.0000e-01 1.6667e-01 1.4286e-01 1.2500e-01 1.1111e-01
Verwendung von ' und .'
Beachte: auch ' kann sowohl im Sinne der linearen Algebra, als auch elementweise verwendet werden.
Betrachte dazu das folgende Beispiel einer Matrix mit komplexwertigen Elementen.
A = [1-i, 2+i;3+i,4+i]
A = 1.0000e+00 - 1.0000e+00i 2.0000e+00 + 1.0000e+00i 3.0000e+00 + 1.0000e+00i 4.0000e+00 + 1.0000e+00i
A' % hermitisch transponierte Matrix
ans = 1.0000e+00 + 1.0000e+00i 3.0000e+00 - 1.0000e+00i 2.0000e+00 - 1.0000e+00i 4.0000e+00 - 1.0000e+00i
A.' % elementweise transponierte Matrix
ans = 1.0000e+00 - 1.0000e+00i 3.0000e+00 + 1.0000e+00i 2.0000e+00 + 1.0000e+00i 4.0000e+00 + 1.0000e+00i
Elementweise Anwendung elementarer Funktionen
clear all format short A = [0,pi/4,pi/2;3*pi/4,pi,5*pi/4;3*pi/2,7*pi/4,2*pi]
A = 0 0.7854 1.5708 2.3562 3.1416 3.9270 4.7124 5.4978 6.2832
sin(A)
ans = 0 0.7071 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000
cos(A)
ans = 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 -0.0000 0.7071 1.0000
sin(A).^2 + cos(A).^2
ans = 1 1 1 1 1 1 1 1 1
x = A';
y = sin(A)';
plot(x(:),y(:),'+')
Duennbesetzte Matrizen (Sparse matrices)
In vielen Anwendungen tauchen Matrizen auf, die sehr gross und sehr duenn besetzt sind. D.h. viele Matrixeintraege sind gleich Null. In derartigen Situationen macht es keinen Sinn alle Eintraege zu speichern
Wir hatten oben bereits unter Verwendung von diag Matrizen erzeugt.
D = diag([1,2,3],1)
D = 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0
In diesem Beispiel ist D eine 4x4 Matrix
size(D)
ans = 4 4
[DS,d] = spdiags(D)
DS = 0 1 2 3 d = 1
DS hat die Groesse 4x1.
size(DS)
ans = 4 1
Ein weiteres Beispiel:
M = ones(6,1)*[-10 5 15]
M = -10 5 15 -10 5 15 -10 5 15 -10 5 15 -10 5 15 -10 5 15
S = spdiags(M,[-2 0 1],6,6)
S = (1,1) 5 (3,1) -10 (1,2) 15 (2,2) 5 (4,2) -10 (2,3) 15 (3,3) 5 (5,3) -10 (3,4) 15 (4,4) 5 (6,4) -10 (4,5) 15 (5,5) 5 (5,6) 15 (6,6) 5
Mit sparse und full koennen wir zwischen den Darstellungen wechseln.
A = full(S)
A = 5 15 0 0 0 0 0 5 15 0 0 0 -10 0 5 15 0 0 0 -10 0 5 15 0 0 0 -10 0 5 15 0 0 0 -10 0 5
S = sparse(A)
S = (1,1) 5 (3,1) -10 (1,2) 15 (2,2) 5 (4,2) -10 (2,3) 15 (3,3) 5 (5,3) -10 (3,4) 15 (4,4) 5 (6,4) -10 (4,5) 15 (5,5) 5 (5,6) 15 (6,6) 5
Unter Verwendung von spy koennen wir die Positionen der Matrixeintraege ungleich Null anzeigen.
spy(S)