Main Content

Matrizen in der MATLAB Umgebung

Dieser Abschnitt enthält eine Einführung in die Erstellung von Matrizen und die Ausführung grundlegender Matrixberechnungen in MATLAB®.

In der MATLAB Umgebung wird der Begriff Matrix verwendet, um eine Variable anzugeben, die in einem zweidimensionalen Raster angeordnete reelle oder komplexe Zahlen enthält. Ein Array ist, allgemeiner ausgedrückt, ein Vektor, eine Matrix oder ein Zahlenraster mit einer höheren Dimension. Alle Arrays in MATLAB sind rechteckig, das heißt, die Komponentenvektoren entlang einer beliebigen Dimension weisen alle dieselbe Länge auf. Die mathematischen Operationen, die für die Matrizen definiert sind, gehören zur linearen Algebra.

Erstellen von Matrizen

In MATLAB gibt es zahlreiche Funktionen, mit denen die unterschiedlichsten Matrizen erstellt werden können. Beispielsweise können Sie eine symmetrische Matrix mit Einträgen auf Basis des Pascalschen Dreiecks erstellen:

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6

Oder Sie können eine asymmetrische Matrix gemäß dem magischen Quadrat erstellen, die identische Zeilen- und Spaltensummen aufweist:

B = magic(3)
B =
       8     1     6
       3     5     7
       4     9     2

Ein weiteres Beispiel ist eine rechteckige 3x2-Matrix aus Zufallszahlen. In diesem Fall beschreibt die erste Eingabe für randi den Bereich der möglichen Werte für die Ganzzahlen, während die beiden zweiten Eingaben die Anzahl der Zeilen und Spalten beschreiben.

C = randi(10,3,2)
C =

     9    10
    10     7
     2     1

Ein Spaltenvektor ist eine mx1-Matrix, ein Zeilenvektor ist eine 1xn-Matrix und ein Skalar ist eine 1x1-Matrix. Verwenden Sie zum manuellen Definieren einer Matrix eckige Klammern [ ], um den Anfang und das Ende des Arrays anzugeben. Verwenden Sie innerhalb der Klammern einen Strichpunkt (;), um das Ende einer Zeile anzugeben. Im Falle eines Skalars (1x1-Matrix) sind die Klammern nicht erforderlich. Diese Anweisungen erstellen einen Spaltenvektor, einen Zeilenvektor und einen Skalar:

u = [3; 1; 4]

v = [2 0 -1]

s = 7
u =
       3
       1
       4

v =
       2     0    -1

s =
       7

Weitere Informationen zum Erstellen und Bearbeiten von Matrizen finden Sie unter Creating, Concatenating, and Expanding Matrices.

Addieren und Subtrahieren von Matrizen

Die Addition und Subtraktion von Matrizen und Arrays wird Element für Element, oder elementweise, ausgeführt. Wenn Sie beispielsweise A zu B addieren und anschließend A vom Ergebnis subtrahieren, wird B wiederhergestellt:

X = A + B
X =
       9     2     7
       4     7    10
       5    12     8
Y = X - A
Y =
       8     1     6
       3     5     7
       4     9     2

Für die Addition und Subtraktion müssen die Dimensionen beider Matrizen kompatibel sein. Sind die Dimensionen inkompatibel, ergibt sich ein Fehler:

X = A + C
Error using  + 
Matrix dimensions must agree.

Weitere Informationen finden Sie unter Array vs. Matrix Operations.

Vektorprodukte und Transposition

Ein Zeilenvektor und ein Spaltenvektor derselben Länge können in beliebiger Reihenfolge multipliziert werden. Das Ergebnis ist entweder ein Skalar, auch inneres Produkt genannt, oder eine Matrix, auch äußeres Produkt genannt:

u = [3; 1; 4];
v = [2 0 -1];
x = v*u
x =

     2
X = u*v
X =

     6     0    -3
     2     0    -1
     8     0    -4

Bei reellen Matrizen vertauscht die Rechenoperation für das Transponieren aij und aji. Bei komplexen Matrizen ist eine weitere Überlegung, ob das komplexe Konjugat komplexer Einträge im Array ermittelt wird, um die Transponierte des komplexen Konjugats zu bilden. MATLAB verwendet den Apostrophoperator ('), um das komplexe Konjugat zu transponieren, und den Punktoperator (.'), um das Transponieren ohne Konjugation auszuführen. Bei Matrizen, die ausschließlich reelle Elemente enthalten, führen beide Operatoren zum gleichen Ergebnis.

Die Beispielmatrix A = pascal(3) ist symmetrisch, sodass A' gleich A ist. Allerdings ist B = magic(3) nicht symmetrisch, sodass mit B' die Elemente entlang der Hauptdiagonalen widergespiegelt werden:

B = magic(3)
B =

     8     1     6
     3     5     7
     4     9     2
X = B'
X =

     8     3     4
     1     5     9
     6     7     2

Bei Vektoren wandelt die Transposition einen Zeilenvektor in einen Spaltenvektor um (und umgekehrt):

x = v'

x =
       2
       0
      -1

Wenn x und y beides reelle Spaltenvektoren sind, wird das Produkt x*y nicht definiert. Allerdings erstellen die beiden Produkte

x'*y

und

y'*x

dasselbe skalare Ergebnis. Diese Größe wird so häufig verwendet, dass sie drei verschiedene Namen hat: inneres Produkt, Skalarprodukt oder Punktprodukt. Es gibt sogar eine dedizierte Funktion für Punktprodukte mit dem Namen dot.

Für einen komplexen Vektor oder eine Matrix, z, transponiert die Größe z' nicht nur den Vektor oder die Matrix, sondern konvertiert auch alle komplexen Elemente in ihr komplexes Konjugat. Das bedeutet, dass sich das Vorzeichen des Imaginärteils der einzelnen komplexen Elemente ändert. Angenommen, es liegt die folgende komplexe Matrix vor:

z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z =

   1.0000 + 2.0000i   7.0000 - 3.0000i   3.0000 + 4.0000i
   6.0000 - 2.0000i   0.0000 + 9.0000i   4.0000 + 7.0000i

Die komplexe Transponierte des Konjugats von z ist:

z'
ans =

   1.0000 - 2.0000i   6.0000 + 2.0000i
   7.0000 + 3.0000i   0.0000 - 9.0000i
   3.0000 - 4.0000i   4.0000 - 7.0000i

Die nicht konjugierte komplexe Transponierte, bei der der komplexe Teil jedes Elements sein Vorzeichen beibehält, wird mit z.' angegeben:

z.'
ans =

   1.0000 + 2.0000i   6.0000 - 2.0000i
   7.0000 - 3.0000i   0.0000 + 9.0000i
   3.0000 + 4.0000i   4.0000 + 7.0000i

Bei komplexen Vektoren sind die beiden skalaren Produkte x'*y und y'*x komplexe Konjugate voneinander und das skalare Produkt x'*x eines komplexen Vektors mit sich selbst ist reell.

Multiplizieren von Matrizen

Die Multiplikation von Matrizen ist so definiert, dass die Zusammensetzung der zugrunde liegenden Transformationen reflektiert wird, und erlaubt die kompakte Darstellung von Systemen simultaner, linearer Gleichungen. Das Matrixprodukt C = AB wird definiert, wenn die Spaltendimension von A gleich der Zeilendimension von B ist oder wenn eine der beiden ein Skalar ist. Wenn A gleich m-mal-p und B gleich p-mal-n ist, ist ihr Produkt C gleich m-mal-n. Das Produkt kann mithilfe von MATLAB for-Schleifen, colon-Schreibweise und Vektor-Punkt-Produkten definiert werden:

A = pascal(3);
B = magic(3);
m = 3; 
n = 3;
for i = 1:m
     for j = 1:n
        C(i,j) = A(i,:)*B(:,j);
     end
end

MATLAB verwendet ein Sternchen, um die Matrixmultiplikation anzugeben, wie zum Beispiel in C = A*B. Die Matrixmultiplikation ist nicht kommutativ, das heißt, A*B ist typischerweise nicht gleich B*A:

X = A*B
X =
      15    15    15
      26    38    26
      41    70    39
Y = B*A
Y =
      15    28    47
      15    34    60
      15    28    43

Eine Matrix kann auf der rechten Seite mit einem Spaltenvektor und auf der linken Seite mit einem Zeilenvektor multipliziert werden:

u = [3; 1; 4];
x = A*u
x =

     8
    17
    30
v = [2 0 -1];
y = v*B
y =

    12    -7    10

Rechteckige Matrixmultiplikationen müssen die Bedingungen der Dimensionskompatibilität erfüllen. Da A 3x3 und C 3x2 ist, können Sie diese multiplizieren, um ein 3x2-Ergebnis zu erhalten (die allgemeine innere Dimension wird aufgehoben):

X = A*C
X =

    24    17
    47    42
    79    77

Allerdings funktioniert die Multiplikation nicht in umgekehrter Reihenfolge:

Y = C*A
Error using  * 
Incorrect dimensions for matrix multiplication. Check that the number of columns 
in the first matrix matches the number of rows in the second matrix. To perform 
elementwise multiplication, use '.*'.

Sie können alles mit einem Skalar multiplizieren:

s = 10;
w = s*y
w =

   120   -70   100

Wenn Sie ein Array mit einem Skalar multiplizieren, expandiert der Skalar implizit auf die Größe der anderen Eingabe. Dies wird häufig auch Skalarexpansion genannt.

Identitätsmatrix

In der allgemein akzeptierten mathematischen Schreibweise wird der Großbuchstabe I verwendet, um Identitätsmatrizen, Matrizen unterschiedlicher Größen mit Einsen in der Hauptdiagonalen und Nullen an anderer Stelle, anzugeben. Diese Matrizen haben die Eigenschaft, dass AI = A und IA = A, sofern die Dimensionen kompatibel sind.

Die ursprüngliche Version von MATLAB konnte I zu diesem Zweck nicht verwenden, da nicht zwischen Groß- und Kleinbuchstaben unterschieden wurde und i bereits als Indexzeichen und als komplexe Einheit diente. Daher wurde ein englisches Wortspiel eingeführt. Die Funktion

eye(m,n)

gibt eine rechteckige m-mal-n-Identitätsmatrix zurück und eye(n) gibt eine quadratische n-mal-n-Identitätsmatrix zurück.

Matrixinverse

Wenn eine Matrix A quadratisch oder nichtsingulär (Determinante ungleich null) ist, ergeben die Gleichungen AX = I und XA = I dieselbe Lösung X. Diese Lösung wird die Inverse von A genannt und wie folgt angegeben: A-1. Die Funktion inv und der Ausdruck A^-1 berechnen beide die Matrixinverse.

A = pascal(3)
A =
       1     1     1
       1     2     3
       1     3     6
X = inv(A)
X =

    3.0000   -3.0000    1.0000
   -3.0000    5.0000   -2.0000
    1.0000   -2.0000    1.0000
A*X
ans =

    1.0000         0         0
    0.0000    1.0000   -0.0000
   -0.0000    0.0000    1.0000

Die Determinante, die von det berechnet wird, ist ein Maß des Skalierungsfaktors der linearen Transformation, die von der Matrix beschrieben wird. Ist die Determinante exakt null, gilt die Matrix als singulär und es gibt keine Inverse.

d = det(A)
d =

     1

Einige Matrizen sind nahezu singulär und trotz der Tatsache, dass eine inverse Matrix vorliegt, ist die Berechnung anfällig für numerische Fehler. Die Funktion cond berechnet die Konditionszahl für die Inversion, die einen Anhaltspunkt für die Genauigkeit der Ergebnisse aus der Matrixinversion gibt. Die Konditionszahl liegt zwischen 1 für eine numerisch stabile Matrix und Inf für eine singuläre Matrix.

c = cond(A)
c =

   61.9839

Es ist nur selten erforderlich, die explizite Inverse einer Matrix zu bilden. Häufig wird inv falsch verwendet, wenn das System linearer Gleichungen gelöst wird Ax = b. Die beste Möglichkeit zur Lösung dieser Gleichung, vom Standpunkt der Ausführungszeit und der numerischen Genauigkeit aus betrachtet, ist die Verwendung des umgekehrten Schrägstrichs als Operator x = A\b für die Matrix. Weitere Informationen dazu finden Sie unter mldivide.

Kronecker-Tensor-Produkt

Das Kronecker-Produkt, kron(X,Y), zweier Matrizen ist die größere Matrix, die aus allen möglichen Produkten der Elemente von X mit denen von Y gebildet wird. Wenn X gleich m-mal-n und Y gleich p-mal-q ist, dann ist kron(X,Y) gleich mp-mal-nq. Die Elemente sind so angeordnet, dass jedes Element von X mit der gesamten Matrix Y multipliziert wird:

[X(1,1)*Y  X(1,2)*Y  . . .  X(1,n)*Y
                     . . .
 X(m,1)*Y  X(m,2)*Y  . . .  X(m,n)*Y]

Das Kronecker-Produkt wird häufig mit Matrizen aus Nullen und Einsen und mit Matrizen zum Erstellen wiederholter Kopien kleiner Matrizen verwendet. Wenn beispielsweise X die 2x2-Matrix

X = [1   2
     3   4]

und I = eye(2,2) die 2x2-Identitätsmatrix ist, gilt Folgendes:

kron(X,I)
ans =

     1     0     2     0
     0     1     0     2
     3     0     4     0
     0     3     0     4

und

kron(I,X)
ans =

     1     2     0     0
     3     4     0     0
     0     0     1     2
     0     0     3     4

Neben kron gibt es auch noch weitere Funktionen, die nützlich sind, um Arrays zu replizieren, beispielsweise repmat, repelem und blkdiag.

Vektor- und Matrixnormen

Die p-Norm eines Vektors x,

xp=(|xi|p)1p,

wird durch norm(x,p) berechnet. Diese Rechenoperation ist für einen beliebigen Wert von p > 1 definiert, doch die gängigsten Werte von p sind 1, 2 und ∞. Der Standardwert ist p = 2, was der euklidischen Länge oder dem Betrag des Vektors entspricht:

v = [2 0 -1];
[norm(v,1) norm(v) norm(v,inf)]
ans =

    3.0000    2.2361    2.0000

Die p-Norm einer Matrix A,

Ap=maxxAxpxp,

kann für p = 1, 2 und ∞ durch norm(A,p) berechnet werden. Und wieder ist der Standardwert p = 2:

A = pascal(3);
[norm(A,1) norm(A) norm(A,inf)]
ans =

   10.0000    7.8730   10.0000

Wenn Sie die Norm jeder Zeile oder Spalte einer Matrix berechnen möchten, können Sie vecnorm verwenden:

vecnorm(A)
ans =

    1.7321    3.7417    6.7823

Verwenden der Multithread-Berechnung mit Funktionen der linearen Algebra

MATLAB unterstützt Multithread-Berechnung für zahlreiche numerische Funktionen der linearen Algebra und elementweiser numerischer Funktionen. Diese Funktionen werden automatisch für mehrere Threads ausgeführt. Damit eine Funktion oder ein Ausdruck schneller auf mehreren CPUs ausgeführt wird, müssen verschiedene Bedingungen erfüllt sein:

  1. Die Funktion führt Operationen aus, die sich leicht in gleichzeitig ausführbare Abschnitte unterteilen lassen. Diese Abschnitte müssen in der Lage sein, mit möglichst wenig Kommunikation zwischen Prozessen ausgeführt zu werden. Sie sollten nur wenige aufeinanderfolgende Operationen erfordern.

  2. Die Datengröße muss so bemessen sein, dass alle Vorteile einer gleichzeitigen Ausführung die Zeit aufwiegen, die zum Unterteilen der Daten und zum Verwalten separater Ausführungsthreads erforderlich ist. So ist eine Beschleunigung der meisten Funktionen beispielsweise nur erforderlich, wenn das Array mehrere tausend Elemente oder mehr enthält.

  3. Die Rechenoperation ist nicht speichergebunden und die Verarbeitungszeit wird nicht von der Speicherzugriffszeit beeinträchtigt. Im Allgemeinen gilt, dass komplizierte Funktionen eher beschleunigt werden als einfache Funktionen.

Die Operatoren für Matrixmultiplikation (X*Y) und Matrixpotenz (X^p) werden bei großen Arrays mit doppelter Präzision (in der Größenordnung von 10.000 Elementen) wesentlich schneller. Die Matrixanalysefunktionen det, rcond, hess und expm sind bei großen Arrays mit doppelter Präzision wesentlich schneller.

Verwandte Themen

Externe Websites