3.5 Veränderung und Auswertung von Matrizen

Viele Befehle haben als Inputparameter eine Matrix und liefern eine (im Allgemeinen nicht unbedingt gleich große) Matrix zurück. (Zur Erinnerung: Spalten- bzw. Zeilenvektoren werden ebenfalls als Matrizen angesehen).

Beispiele dafür sind das Bilden von Summen oder Produkten, oder das Transponieren und Konjugieren. Im Folgenden wurden dafür einige einfache Beispiele zusammengestellt.

Der numerische Inhalt von Matrizen muss nicht nur aus reellen Zahlen bestehen, sondern kann auch komplexe Werte enthalten. Dafür ist keine spezielle Deklaration notwendig, MATLAB führt diese automatisch beim ersten Auftreten von komplexen Elementen in einer Matrix durch.

Die Variablen i oder auch j werden als imaginäre Einheit $ i = \sqrt{-1}$ verwendet, und sollen daher sonst nicht verwendet werden. MATLAB hat keinen effektiven Schutz vor dem Überschreiben von wichtigen Variablen. Die beiden Befehle i=1 und j=1 legen die Fähigkeit von MATLAB lahm, mit komplexen Zahlen zu rechnen.

MATLAB EXAMPLE:
Einige Befehle stehen in MATLAB zur Verfügung, um Matrizen zu kippen bzw. zu drehen. Außerdem gibt es noch FLIPDIM(X,DIM), für Kippen entlang der Dimension DIM.

X = [1 2 3; 4 5 6]
     1     2     3
     4     5     6

Y=fliplr(X)
     3     2     1
     6     5     4

Y=flipud(X)
     4     5     6
     1     2     3

Y=rot90(X)
     3     6
     2     5
     1     4
FLIPLR Flip matrix in left/right direction.
FLIPLR(X) returns X with row preserved and columns flipped in the left/right direction.

FLIPUD Flip matrix in up/down direction.
FLIPUD(X) returns X with columns preserved and rows flipped in the up/down direction.

ROT90 Rotate matrix 90 degrees.
ROT90(X) is the 90 degree counterclockwise rotation of matrix X. ROT90(X,K) is the K$ \times$90 degree rotation of X, K = $ \pm$1, $ \pm$2, ...

MATLAB EXAMPLE:
Drei Befehle stehen in MATLAB zur Verfügung, um transponierte, konjugiert komplex transponierte oder konjugiert komplexe Matrizen zu berechnen.

X = [1+i 2+i 3+i; 4+i 5+i 6+i]
      1 + i   2 + i   3 + i      
      4 + i   5 + i   6 + i      

Y=transpose(X)
      1 + i   4 + i      
      2 + i   5 + i      
      3 + i   6 + i      

Y=ctranspose(X)
      1 - i   4 - i      
      2 - i   5 - i      
      3 - i   6 - i      

Y=conj(X)
      1 - i   2 - i   3 - i      
      4 - i   5 - i   6 - i      
TRANSPOSE is the non-conjugate transpose.

Operator form: X.' is the transpose of X.

CTRANSPOSE is the complex conjugate transpose.

Operator form: X' is the complex conjugate transpose of X.

CONJ is the complex conjugate of X.
For a complex X,
CONJ(X) = REAL(X) - i*IMAG(X).

MATLAB EXAMPLE:
Summation und kummulative Summation in Matrizen.

X = [0 1 2; 3 4 5]
     0     1     2
     3     4     5

Y=sum(X)
     3     5     7

Y=sum(X,2)
     3
    12

Y=cumsum(X)
     0     1     2
     3     5     7

Y=cumsum(X,2)
     0     1     3
     3     7    12
SUM Sum of elements.
For vectors, SUM(X) is the sum of the elements of X. For matrices, SUM(X) is a row vector with the sum over each column. For N-D arrays, SUM(X) operates along the first non-singleton dimension.

SUM(X,DIM) sums along the dimension DIM.

CUMSUM Cumulative sum of elements. For vectors, CUMSUM(X) is a vector containing the cumulative sum of the elements of X. For matrices, CUMSUM(X) is a matrix the same size as X containing the cumulative sums over each column. For N-D arrays, CUMSUM(X) operates along the first non-singleton dimension.

CUMSUM(X,DIM) works along the dimension DIM.

The first non-singleton dimension is the first dimension which size is greater than one.

MATLAB EXAMPLE:
Multiplikation und kummulative Multiplikation in Matrizen.

X = [0 1 2; 3 4 5]
     0     1     2
     3     4     5

Y=prod(X)
     0     4    10

Y=prod(X,2)
     0
    60

Y=cumprod(X)
     0     1     2
     0     4    10

Y=cumprod(X,2)
     0     0     0
     3    12    60
PROD Product of elements.
For vectors, PROD(X) is the product of the elements of X. For matrices, PROD(X) is a row vector with the product over each column. For N-D arrays, PROD(X) operates along the first non-singleton dimension.

PROD(X,DIM) works along the dimension DIM.

CUMPROD Cumulative product of elements. For vectors, CUMPROD(X) is a vector containing the cumulative product of the elements of X. For matrices, CUMPROD(X) is a matrix the same size as X containing the cumulative product over each column. For N-D arrays, CUMPROD(X) operates along the first non-singleton dimension.
CUMPROD(X,DIM) works along the dimension DIM.

Alle Befehle in Matlab, bei denen die Richtung innerhalb der Matrix von Bedeutung ist, wie z.B. der Befehl sum, folgen folgenden Regeln:

  1. Ist eine Richtung vorgegeben, sum(X,2), erfolgt die Operation in Richtung dieser Dimension.
  2. Ist keine Richtung vorgegeben, erfolgt die Summation in Richtung der ersten Dimension, die ungleich eins ist (non-singleton dimension). Das heißt, dass sowohl in einem Spaltenvektor (size(X) z.B. [3 1]), als auch in einem Zeilenvektor (size(X) z.B. [1 3]) über alle Elemente summiert wird.

Befehle können in MATLAB beliebig geschachtelt werden, solange die Syntax für jeden einzelnen Befehl korrekt ist. So kann man z.B. die Summe über die Diagonale bzw. die zweite Diagonale (links unten bis rechts oben) einer Matrix mit folgenden Befehlen berechnen:

Summe der Diagonalelemente der Matrix X:

S_D = sum(diag(X))
Summe der Elemente in der zweiten Diagonale der Matrix X:

S_ND = sum(diag(fliplr(X)))

Die große Vielzahl von verfügbaren Befehlen und die Möglichkeit der Schachtelung führt dazu, dass sehr mächtige Programme in sehr kompakter Form geschrieben werden können.

Winfried Kernbichler 2005-04-26