# Matrizenmultiplikation

Die Matrizenmultiplikation oder Matrixmultiplikation ist in der Mathematik eine multiplikative Verknüpfung von Matrizen. Um zwei Matrizen miteinander multiplizieren zu können, muss die Spaltenzahl der ersten Matrix mit der Zeilenzahl der zweiten Matrix übereinstimmen. Das Ergebnis einer Matrizenmultiplikation wird dann Matrizenprodukt, Matrixprodukt oder Produktmatrix genannt. Das Matrizenprodukt ist wieder eine Matrix, deren Einträge durch komponentenweise Multiplikation und Summation der Einträge der entsprechenden Zeile der ersten Matrix mit der entsprechenden Spalte der zweiten Matrix ermittelt werden.
Die Matrizenmultiplikation ist assoziativ und mit der Matrizenaddition distributiv. Sie ist jedoch nicht kommutativ, das heißt, die Reihenfolge der Matrizen darf bei der Produktbildung im Allgemeinen nicht vertauscht werden. Die Menge der quadratischen Matrizen mit Elementen aus einem Ring bildet zusammen mit der Matrizenaddition und der Matrizenmultiplikation den Ring der quadratischen Matrizen. Weiter bildet die Menge der regulären Matrizen über einem unitären Ring mit der Matrizenmultiplikation die allgemeine lineare Gruppe. Matrizen, die durch spezielle Multiplikationen mit regulären Matrizen ineinander überführt werden können, bilden darin Äquivalenzklassen.
Der Standardalgorithmus zur Multiplikation zweier quadratischer Matrizen weist eine kubische Laufzeit auf. Zwar lässt sich der asymptotische Aufwand mit Hilfe spezieller Algorithmen verringern, die Ermittlung optimaler oberer und unterer Komplexitätsschranken für die Matrizenmultiplikation ist jedoch noch Gegenstand aktueller Forschung.
Die Matrizenmultiplikation wird häufig in der linearen Algebra verwendet. So wird beispielsweise die Faktorisierung einer Matrix als Produkt von Matrizen mit speziellen Eigenschaften bei der numerischen Lösung linearer Gleichungssysteme oder Eigenwertprobleme eingesetzt. Weiterhin ist die Abbildungsmatrix der Hintereinanderausführung zweier linearer Abbildungen gerade das Matrizenprodukt der Abbildungsmatrizen dieser Abbildungen. Anwendungen der Matrizenmultiplikation finden sich unter anderem in der Informatik, der Physik und der Ökonomie.
Die Matrizenmultiplikation wurde erstmals von dem französischen Mathematiker Jacques Philippe Marie Binet im Jahr 1812 beschrieben.

## Definition

Die Matrizenmultiplikation ist eine binäre Verknüpfung auf der Menge der Matrizen über einem Ring $R$ (oft der Körper der reellen Zahlen), also eine Abbildung
    $\cdot ~\colon R^{m\times n}\times R^{n\times p}\to R^{m\times p},\quad (A,B)\mapsto C=A\cdot B$,
die zwei Matrizen $A=(a_{ij})$ und $B=(b_{jk})$ eine weitere Matrix $C=(c_{ik})$ zuordnet. Die Matrizenmultiplikation ist dabei nur für den Fall definiert, dass die Spaltenzahl $n$ der Matrix $A$ mit der Zeilenzahl der Matrix $B$ übereinstimmt. Die Zeilenzahl $m$ der Ergebnismatrix $C$ entspricht dann derjenigen der Matrix $A$ und ihre Spaltenzahl $p$ derjenigen der Matrix $B$. Jeder Eintrag $c_{ik}$ des Matrizenprodukts berechnet sich dabei über
    $c_{ik}=\sum _{j=1}^{n}a_{ij}\cdot b_{jk}$,
also durch komponentenweise Multiplikation der Einträge der $i$-ten Zeile von $A$ mit der $k$-ten Spalte von $B$ und durch Summation all dieser Produkte. Häufig wird bei der Notation einer Matrizenmultiplikation der Malpunkt weggelassen und man schreibt kurz $AB$ statt $A\cdot B$. Soll die Reihenfolge der Faktoren betont werden, spricht man „A wird von links mit B multipliziert“ für das Produkt $B\cdot A$ und „A wird von rechts mit B multipliziert“ für das Produkt $A\cdot B$.

## Beispiel

Gegeben seien die beiden reellen Matrizen
    $A={\begin{pmatrix}3&2&1\\1&0&2\end{pmatrix}}\in \mathbb {R} ^{2\times 3}$ und $B={\begin{pmatrix}1&2\\0&1\\4&0\end{pmatrix}}\in \mathbb {R} ^{3\times 2}$.
Da die Matrix $A$ ebenso viele Spalten wie die Matrix $B$ Zeilen besitzt, ist die Matrizenmultiplikation $A\cdot B$ durchführbar. Nachdem $A$ zwei Zeilen und $B$ zwei Spalten hat, wird das Matrizenprodukt ebenfalls zwei Zeilen und Spalten aufweisen. Zur Berechnung des ersten Matrixelements der Ergebnismatrix werden die Produkte der entsprechenden Einträge der ersten Zeile von $A$ und der ersten Spalte von $B$ aufsummiert (die Sternchen stehen für noch nicht berechnete Elemente):
    ${\begin{pmatrix}\color {OliveGreen}3&\color {OliveGreen}2&\color {OliveGreen}1\\1&0&2\end{pmatrix}}\cdot {\begin{pmatrix}\color {BrickRed}1&2\\\color {BrickRed}0&1\\\color {BrickRed}4&0\end{pmatrix}}={\begin{pmatrix}{\color {OliveGreen}3}\cdot {\color {BrickRed}1}+{\color {OliveGreen}2}\cdot {\color {BrickRed}0}+{\color {OliveGreen}1}\cdot {\color {BrickRed}4}&\ast \\\ast &\ast \end{pmatrix}}={\begin{pmatrix}{\color {Blue}7}&\ast \\\ast &\ast \end{pmatrix}}$
Für das nächste Element der Ergebnismatrix in der ersten Zeile und zweiten Spalte wird entsprechend die erste Zeile von $A$ und die zweite Spalte von $B$ verwendet:
    ${\begin{pmatrix}\color {OliveGreen}3&\color {OliveGreen}2&\color {OliveGreen}1\\1&0&2\end{pmatrix}}\cdot {\begin{pmatrix}1&\color {BrickRed}2\\0&\color {BrickRed}1\\4&\color {BrickRed}0\end{pmatrix}}={\begin{pmatrix}7&{\color {OliveGreen}3}\cdot {\color {BrickRed}2}+{\color {OliveGreen}2}\cdot {\color {BrickRed}1}+{\color {OliveGreen}1}\cdot {\color {BrickRed}0}\\\ast &\ast \end{pmatrix}}={\begin{pmatrix}7&{\color {Blue}8}\\\ast &\ast \end{pmatrix}}$
Dieses Rechenschema setzt sich nun in der zweiten Zeile und ersten Spalte fort:
    ${\begin{pmatrix}3&2&1\\\color {OliveGreen}1&\color {OliveGreen}0&\color {OliveGreen}2\end{pmatrix}}\cdot {\begin{pmatrix}\color {BrickRed}1&2\\\color {BrickRed}0&1\\\color {BrickRed}4&0\end{pmatrix}}={\begin{pmatrix}7&8\\{\color {OliveGreen}1}\cdot {\color {BrickRed}1}+{\color {OliveGreen}0}\cdot {\color {BrickRed}0}+{\color {OliveGreen}2}\cdot {\color {BrickRed}4}&\ast \end{pmatrix}}={\begin{pmatrix}7&8\\{\color {Blue}9}&\ast \end{pmatrix}}$
Es wiederholt sich bei dem letzten Element in der zweiten Zeile und zweiten Spalte:
    ${\begin{pmatrix}3&2&1\\\color {OliveGreen}1&\color {OliveGreen}0&\color {OliveGreen}2\end{pmatrix}}\cdot {\begin{pmatrix}1&\color {BrickRed}2\\0&\color {BrickRed}1\\4&\color {BrickRed}0\end{pmatrix}}={\begin{pmatrix}7&8\\9&{\color {OliveGreen}1}\cdot {\color {BrickRed}2}+{\color {OliveGreen}0}\cdot {\color {BrickRed}1}+{\color {OliveGreen}2}\cdot {\color {BrickRed}0}\end{pmatrix}}={\begin{pmatrix}7&8\\9&{\color {Blue}2}\end{pmatrix}}$
Das Ergebnis ist das Matrizenprodukt $A\cdot B$. Eine optische Hilfestellung und Unterstützung zur Berechnung des Matrizenprodukts bietet das falksche Schema.

## Spezialfälle
### Zeilenvektor mal Spaltenvektor

Besteht die erste Matrix aus nur einer Zeile und die zweite Matrix aus nur einer Spalte, so ergibt das Matrizenprodukt eine $(1\times 1)$-Matrix. Interpretiert man eine einzeilige Matrix als Zeilenvektor $x^{\mathrm {T} }$ und eine einspaltige Matrix als Spaltenvektor $y$, so erhält man im Fall reeller Vektoren das Standardskalarprodukt
    $\langle x,y\rangle =x^{\mathrm {T} }\cdot y$
zweier Vektoren, wobei $x^{\mathrm {T} }$ den zu $x$ transponierten Vektor darstellt, beide Vektoren gleich lang sein müssen und das Ergebnis dann eine reelle Zahl ist. Jeder Eintrag eines Matrizenprodukts $A\cdot B$ kann somit als Skalarprodukt eines Zeilenvektors der Matrix $A$ mit einem Spaltenvektor der Matrix $B$ angesehen werden.

### Spaltenvektor mal Zeilenvektor

Besteht umgekehrt die erste Matrix aus nur einer Spalte der Länge $m$ und die zweite Matrix aus nur einer Zeile der Länge $n$, so ergibt das Matrizenprodukt eine $(m\times n)$-Matrix. Wird wieder eine einspaltige Matrix als Spaltenvektor $x$ und eine einzeilige Matrix als Zeilenvektor $y^{\mathrm {T} }$ interpretiert, so wird das entstehende Produkt von Vektoren als dyadisches Produkt
    $x\otimes y=x\cdot y^{\mathrm {T} }$
bezeichnet. Jeder Eintrag $c_{ij}$ der resultierenden Matrix ist dabei das Produkt eines Elements $x_{i}$ des ersten Vektors mit einem Element $y_{j}$ des zweiten Vektors. Das Matrizenprodukt $A\cdot B$ kann so als Summe dyadischer Produkte der Spaltenvektoren von $A$ mit den jeweiligen Zeilenvektoren von $B$ geschrieben werden.

### Matrix mal Vektor

Ein wichtiger Spezialfall einer Matrizenmultiplikation entsteht, wenn die zweite Matrix aus nur einer Spalte besteht. Das Ergebnis der Matrizenmultiplikation ist dann ebenfalls eine einspaltige Matrix. Wird wieder eine einspaltige Matrix als Spaltenvektor interpretiert, so erhält man das Matrix-Vektor-Produkt
    $A\cdot x=y$,
wobei $A\in R^{m\times n}$, $x\in R^{n}$ und $y\in R^{m}$ sind. Das Matrix-Vektor-Produkt wird beispielsweise in der Matrixschreibweise linearer Gleichungssysteme verwendet.
Eine alternative Darstellung der Matrixmultiplikation ergibt sich durch Umschreiben der Definition. Wir schreiben A=(a$_1$|…|a$_n$)∈R$^{m×n}${\textstyle A=(a_{1}|\dots |a_{n})\in R^{m\times n}} sodass die a$_j${\textstyle a_{j}} die Spalten der Matrix $A$ darstellen (unten verdeutlicht durch ${\vec {a}}_{j}$). Ist nun x∈R$^n${\textstyle x\in R^{n}} dann kann man das Matrix-Vektor-Produkt auch wie folgt lesen:
$A\cdot x=({\vec {a}}_{1}|\dots |{\vec {a}}_{n})\cdot {\vec {x}}=\sum _{j=1}^{n}{\vec {a}}_{j}\cdot x_{j}={\vec {a}}_{1}\cdot x_{1}+\dots +{\vec {a}}_{n}\cdot x_{n}$
Das Matrix-Vektor-Produkt ist also eine Linearkombination der Spalten von $A$. Diese Beobachtung lässt sich auch auf ein allgemeines Matrix-Matrix-Produkt übertragen. Ist man am Bild der von der Matrix induzierten linearen Abbildung interessiert, ist diese Darstellung meist intuitiver für weitere Argumentation.

### Vektor mal Matrix

Besteht umgekehrt die erste Matrix aus nur einer Zeile, so ergibt das Vektor-Matrix-Produkt
    $x^{\mathrm {T} }\cdot A=y^{\mathrm {T} }$
aus einem Zeilenvektor $x^{\mathrm {T} }\in R^{m}$ und einer Matrix $A\in R^{m\times n}$ wieder einen Zeilenvektor $y^{\mathrm {T} }\in R^{n}$. Dieses lässt sich als eine Linearkombination der Zeilen von $A$ interpretieren.

### Quadrat einer Matrix

Durch Multiplikation einer quadratischen Matrix $A\in R^{n\times n}$ mit sich selbst ergibt sich wieder eine Matrix gleicher Größe, die als das Quadrat der Matrix bezeichnet wird, das heißt:
    $A^{2}=A\cdot A$
Entsprechend dazu wird mit $A^{n}$ die Matrixpotenz, also das $n$-fache Produkt einer Matrix mit sich selbst, bezeichnet. Matrixpotenzen werden beispielsweise zur Definition des Matrixexponentials und des Matrixlogarithmus verwendet. Umgekehrt heißt eine quadratische Matrix $A^{1/2}$, für die
    $A=A^{1/2}\cdot A^{1/2}$
gilt, Quadratwurzel der Matrix $A$. Eine Matrix kann mehrere, sogar unendlich viele, Quadratwurzeln besitzen. Analog wird eine Matrix, deren $n$-te Potenz die Matrix $A$ ergibt, als $n$-te Wurzel $A^{1/n}$ dieser Matrix bezeichnet.

### Blockmatrizen

Weisen die beiden Matrizen $A$ und $B$ eine Blockstruktur auf, wobei die Blockbreiten der ersten Matrix mit den Blockhöhen der zweiten Matrix übereinstimmen müssen, so lässt sich auch das Matrizenprodukt $A\cdot B$ blockweise notieren. Die Ergebnismatrix besitzt dann die Blockhöhen der ersten und die Blockbreiten der zweiten Matrix. Im Fall zweier Matrizen mit je zwei mal zwei Blöcken ergibt sich beispielsweise
    ${\begin{pmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{pmatrix}}\cdot {\begin{pmatrix}B_{11}&B_{12}\\B_{21}&B_{22}\end{pmatrix}}={\begin{pmatrix}A_{11}B_{11}+A_{12}B_{21}&A_{11}B_{12}+A_{12}B_{22}\\A_{21}B_{11}+A_{22}B_{21}&A_{21}B_{12}+A_{22}B_{22}\end{pmatrix}}$,
womit die Ergebnismatrix auch zwei mal zwei Blöcke besitzt.

## Eigenschaften
### Assoziativität

Die Matrizenmultiplikation ist assoziativ, das heißt, für Matrizen $A\in R^{m\times n}$, $B\in R^{n\times p}$ und $C\in R^{p\times q}$ gilt:
    $A\cdot (B\cdot C)=(A\cdot B)\cdot C$
Bei der Multiplikation mehrerer Matrizen ist es also unerheblich, in welcher Reihenfolge die Teilprodukte gebildet werden, solange die Gesamtreihung nicht verändert wird. Für den Eintrag an der Stelle $(i,l)$ des resultierenden Matrizenprodukts gilt nämlich:
    $\sum _{j=1}^{n}a_{ij}\cdot \left(\sum _{k=1}^{p}b_{jk}\cdot c_{kl}\right)=\sum _{j=1}^{n}\sum _{k=1}^{p}a_{ij}\cdot b_{jk}\cdot c_{kl}=\sum _{k=1}^{p}\sum _{j=1}^{n}a_{ij}\cdot b_{jk}\cdot c_{kl}=\sum _{k=1}^{p}\left(\sum _{j=1}^{n}a_{ij}\cdot b_{jk}\right)\cdot c_{kl}$
Die Matrizenmultiplikation ist auch verträglich mit der Multiplikation mit Skalaren $a\in R$, das heißt:
    $a\,(B\cdot C)=(a\,B)\cdot C=B\cdot (a\,C)$

### Distributivität

Betrachtet man neben der Matrizenmultiplikation auch noch die komponentenweise Matrizenaddition $A+B$ zweier Matrizen $A,B\in R^{l\times m}$, dann sind auch die Distributivgesetze erfüllt. Das heißt, für alle Matrizen $C\in R^{m\times n}$ gilt
    $(A+B)\cdot C=A\cdot C+B\cdot C$
und für alle Matrizen $C\in R^{n\times l}$ entsprechend
    $C\cdot (A+B)=C\cdot A+C\cdot B$.
Die Distributivgesetze folgen direkt aus der Distributivität der Addition mit der Multiplikation im Ring $R$ über
    $\sum _{j=1}^{m}\left(a_{ij}+b_{ij}\right)\cdot c_{jk}=\sum _{j=1}^{m}\left(a_{ij}\cdot c_{jk}+b_{ij}\cdot c_{jk}\right)=\sum _{j=1}^{m}a_{ij}\cdot c_{jk}+\sum _{j=1}^{m}b_{ij}\cdot c_{jk}$
für das erste Distributivgesetz und über eine analoge Umformung auch für das zweite Distributivgesetz.

### Nichtkommutativität

Das Kommutativgesetz hingegen gilt für die Matrizenmultiplikation nicht, das heißt, für $A\in R^{m\times n}$ und $B\in R^{n\times m}$ ist im Allgemeinen
    $A\cdot B\neq B\cdot A$.
Für die beiden Matrizenprodukte gilt nämlich $A\cdot B\in R^{m\times m}$ und $B\cdot A\in R^{n\times n}$, womit sie für $m\neq n$ schon von den Dimensionen her nicht übereinstimmen können. Aber selbst, wenn $A$ und $B$ quadratisch sind, müssen die beiden Matrizenprodukte nicht gleich sein, wie das Gegenbeispiel
    ${\begin{pmatrix}0&2\\0&0\end{pmatrix}}\cdot {\begin{pmatrix}0&0\\2&0\end{pmatrix}}={\begin{pmatrix}4&0\\0&0\end{pmatrix}}\neq {\begin{pmatrix}0&0\\0&4\end{pmatrix}}={\begin{pmatrix}0&0\\2&0\end{pmatrix}}\cdot {\begin{pmatrix}0&2\\0&0\end{pmatrix}}$
zeigt. Die Nichtkommutativität der Matrizenmultiplikation gilt demnach sogar, wenn die Multiplikation im Ring $R$ kommutativ sein sollte, wie es beispielsweise bei Zahlen der Fall ist. Für spezielle Matrizen kann die Matrizenmultiplikation dennoch kommutativ sein, siehe die nachfolgenden Abschnitte sowie den Abschnitt "Eigenvektoren kommutierender Matrizen" im Artikel Eigenwerte und Eigenvektoren.

### Weitere Rechenregeln

Für die Transponierte eines Matrizenprodukts gilt:
    $(A\cdot B)^{\mathrm {T} }=B^{\mathrm {T} }\cdot A^{\mathrm {T} }$.
Die Reihenfolge bei der Multiplikation wird durch die Transposition also vertauscht. Für die Adjungierte des Produkts komplexer Matrizen gilt entsprechend
    $(A\cdot B)^{H}=B^{H}\cdot A^{H}$.
Die Spur des Produkts zweier Matrizen $A\in R^{m\times n}$ und $B\in R^{n\times m}$ ist hingegen unabhängig von der Reihenfolge:
    $\operatorname {spur} (A\cdot B)=\operatorname {spur} (B\cdot A)$
Mit dem Determinantenproduktsatz gilt auch für die Determinante des Produkts zweier quadratischer Matrizen über einem kommutativen Ring:
    $\operatorname {det} (A\cdot B)=\operatorname {det} (A)\cdot \operatorname {det} (B)=\operatorname {det} (B)\cdot \operatorname {det} (A)=\operatorname {det} (B\cdot A)$
Die Determinante des Produkts zweier nicht notwendigerweise quadratischer Matrizen kann mit dem Satz von Binet-Cauchy berechnet werden.

## Algebraische Strukturen
### Ring der quadratischen Matrizen

Die Menge der quadratischen Matrizen fester Größe bildet zusammen mit der Matrizenaddition und der Matrizenmultiplikation einen nichtkommutativen Ring, den Matrizenring $(R^{n\times n},+,\cdot )$. Das Nullelement dieses Rings ist die Nullmatrix $0\in R^{n\times n}$. Ist $R$ ein unitärer Ring, dann ist auch der zugehörige Matrizenring unitär mit der Einheitsmatrix $I\in R^{n\times n}$ als Einselement, wobei für alle Matrizen $A\in R^{n\times n}$
    $A\cdot I=I\cdot A=A$
gilt. Die Nullmatrix fungiert im Matrizenring in diesem Fall als absorbierendes Element, das heißt, für alle Matrizen $A\in R^{n\times n}$ gilt dann:
    $A\cdot 0=0\cdot A=0$
Der Ring der quadratischen Matrizen ist jedoch nicht nullteilerfrei; aus $A\cdot B=0$ folgt nicht notwendigerweise $A=0$ oder $B=0$. Ein Beispiel wären zwei quadratische Matrizen $A,B$ mit je genau einem Eintrag ungleich Null an der gleichen Diagonalaußenstelle. Entsprechend darf bei Matrixgleichungen auch nicht gekürzt werden, denn aus $A\cdot B=A\cdot C$ folgt nicht notwendigerweise $B=C$. Die Menge der quadratischen Matrizen über einem Körper bildet mit der Matrizenaddition, der Skalarmultiplikation und der Matrizenmultiplikation eine assoziative Algebra.

### Gruppe der regulären Matrizen

Die Menge der regulären Matrizen $A\in R^{n\times n}$ über einem unitären Ring $R$ bildet mit der Matrizenmultiplikation die allgemeine lineare Gruppe $\operatorname {GL} (n,R)$. Die zur Matrix $A$ inverse Matrix ist dann eindeutig über
    $A\cdot A^{-1}=A^{-1}\cdot A=I$
definiert. Für die Inverse des Produkts zweier regulärer Matrizen gilt dann:
    $(A\cdot B)^{-1}=B^{-1}\cdot A^{-1}$
Durch die Invertierung wird die Reihenfolge bei der Multiplikation demnach ebenfalls vertauscht. Ist $A$ regulär, dann gilt auch die Kürzungsregel, das heißt aus $A\cdot B=A\cdot C$ oder $B\cdot A=C\cdot A$ folgt dann $B=C$.

### Gruppen der orthogonalen und unitären Matrizen

Eine reelle quadratische Matrix $A\in \mathbb {R} ^{n\times n}$ heißt orthogonal, wenn
    $A\cdot A^{\mathrm {T} }=A^{\mathrm {T} }\cdot A=I$
gilt. Die orthogonalen Matrizen bilden mit der Matrizenmultiplikation die orthogonale Gruppe $\operatorname {O} (n)$, eine Untergruppe der allgemeinen linearen Gruppe $\operatorname {GL} (n,\mathbb {R} )$. Entsprechend dazu heißt eine komplexe quadratische Matrix $A\in \mathbb {C} ^{n\times n}$ unitär, wenn
    $A\cdot A^{H}=A^{H}\cdot A=I$
gilt. Die unitären Matrizen bilden mit der Matrizenmultiplikation die unitäre Gruppe $\operatorname {U} (n)$, eine Untergruppe der allgemeinen linearen Gruppe $\operatorname {GL} (n,\mathbb {C} )$.

### Äquivalenzklassen von Matrizen

Mit Hilfe der Matrizenmultiplikation werden Äquivalenzrelationen zwischen Matrizen über einem Körper definiert. Wichtige Äquivalenzrelationen sind:
* Äquivalenz: Zwei Matrizen $A$ und $B$ heißen äquivalent, wenn es zwei reguläre Matrizen $C$ und $D$ gibt, sodass $B=C^{-1}\cdot A\cdot D$ gilt.
* Ähnlichkeit: Zwei quadratische Matrizen $A$ und $B$ heißen ähnlich, wenn es eine reguläre Matrix $C$ gibt, sodass $B=C^{-1}\cdot A\cdot C$ gilt.
* Kongruenz: Zwei quadratische Matrizen $A$ und $B$ heißen kongruent, wenn es eine reguläre Matrix $C$ gibt, sodass $B=C^{\mathrm {T} }\cdot A\cdot C$ gilt.
Matrizen, die durch solche Multiplikationen mit regulären Matrizen ineinander überführt werden können, bilden demnach Äquivalenzklassen.

## Algorithmen
### Standardalgorithmus

In Pseudocode kann die Matrizenmultiplikation wie folgt implementiert werden:
Die Reihenfolge der drei For-Schleifen kann dabei beliebig vertauscht werden, ohne das Ergebnis der Berechnung zu verändern. Da die drei Schleifen unabhängig voneinander sind, ist die Anzahl der benötigten Operationen von der Ordnung
    ${\mathcal {O}}(l\cdot m\cdot n)$.
Die Zeitkomplexität des Algorithmus ist demnach für quadratische Matrizen $(l=m=n)$ kubisch, also von der Ordnung
    ${\mathcal {O}}(n^{3})$.
Bei der Matrix-Kettenmultiplikation, also der Multiplikation von drei oder mehr nichtquadratischen Matrizen, kann durch eine geschickte Wahl der Reihenfolge die Gesamtzahl arithmetischer Operationen minimiert werden.

### Algorithmen mit besserer Komplexität

Asymptotisch effizienter lassen sich zwei quadratische Matrizen mit dem Strassen-Algorithmus multiplizieren. Hierbei wird die Anzahl der Multiplikationen, die zur Multiplikation zweier $(2\times 2)$-Matrizen benötigt werden, durch geschicktes Zusammenfassen von acht auf sieben reduziert, was auf Kosten zusätzlicher Additionen geschieht. Wendet man dieses Verfahren rekursiv an, ergibt sich eine Komplexitätsordnung von
    ${\mathcal {O}}\left(n^{\log _{2}7}\right)\approx {\mathcal {O}}\left(n^{2{,}807}\right)$.
Allerdings lohnt sich der Strassen-Algorithmus aufgrund der in der Landau-Notation versteckten Konstanten nur für sehr große Matrizen. Der Algorithmus mit der derzeit besten Komplexität ist eine Verbesserung des Coppersmith–Winograd-Algorithmus mit einer Laufzeit der näherungsweisen Ordnung
    ${\mathcal {O}}\left(n^{2{,}3727}\right)$.
Für den praktischen Einsatz ist dieser Algorithmus jedoch nicht geeignet. Eine untere Schranke für die Komplexität der Matrizenmultiplikation ist
    $\Omega \left(n^{2}\right)$,
da jedes der $n^{2}$ Elemente der Ausgabematrix erzeugt werden muss. Die Ermittlung optimaler unterer und oberer Komplexitätsschranken für die Matrizenmultiplikation ist Gegenstand aktueller Forschung.
Ist eine der beiden Matrizen konstant, so kann lineare Berechnungscodierung verwendet werden. Ihre asymptotische Komplexität ist
    ${\mathcal {O}}\left(n^{3}/\log n\right)$,
jedoch sind die versteckten Konstanten relativ klein, so dass bereits für Matrizen mit mehr als 20 bis 30 Zeilen oder Spalten eine Verbesserung gegenüber dem Standardverfahren erreicht werden kann.

### Programmierung

Das Matrizenprodukt ist in Programmiersystemen auf unterschiedliche Weise integriert, wobei insbesondere Verwechselungsgefahr mit dem komponentenweisen Hadamard-Produkt besteht. In den numerischen Softwarepaketen MATLAB und GNU Octave wird die Matrizenmultiplikation durch den Sternchen-Operator * realisiert, sodass A * B das Matrizenprodukt ergibt. In anderen Programmierumgebungen, wie Fortran, Mathematica, R oder SciPy, wird jedoch durch A * B das Hadamard-Produkt berechnet. Die Matrixmultiplikation wird dann durch Funktionsaufrufe, wie matmul(A,B) in Fortran oder dot(A,B) in SciPy, oder durch eigene Operatoren für die Matrixmultiplikation, wie . in Mathematica oder %*% in R, umgesetzt.
Die objektorientierte Modellierung ermöglicht es in C++ die arithmetischen und funktionalen Standardoperatoren auch für Matrizenoperationen zu überladen und durch entsprechende Klassenmethoden ihre typische Verwendung auf Tensoren und Matrizen höherer Stufe zu übertragen.

## Verwendung
### Faktorisierungen

In gewisser Weise ist die Umkehrung der Matrizenmultiplikation die Faktorisierung einer gegebenen Matrix $A$ als Produkt zweier Matrizen $B$ und $C$, das heißt die Ermittlung einer Darstellung der Form
    $A=B\cdot C$.
Eine solche Faktorisierung ist nicht eindeutig, daher werden an die Matrizen $B$ und $C$ zusätzliche Anforderungen gestellt, wie Orthogonalität, Symmetrie oder eine bestimmte Besetzungsstruktur. Wichtige Zerlegungen reeller oder komplexer Matrizen dieser Art sind:
* die LR-Zerlegung einer quadratischen Matrix in eine untere und eine obere Dreiecksmatrix
* die Cholesky-Zerlegung, eine spezielle LR-Zerlegung einer symmetrisch positiv definiten Matrix
* die ILU-Zerlegung, eine Art unvollständige LR-Zerlegung speziell für dünnbesetzte Matrizen
* die QR-Zerlegung einer Matrix in eine orthogonale Matrix und eine obere Dreiecksmatrix
* die Schur-Zerlegung einer quadratischen Matrix in drei Matrizen: eine unitäre Matrix, eine obere Dreiecksmatrix und die Inverse der ersten Matrix
* die Singulärwertzerlegung einer Matrix in drei Matrizen: eine unitäre Matrix, eine Diagonalmatrix bestehend aus den Singulärwerten und die Adjungierte einer unitären Matrix
Solche Zerlegungen von Matrizen werden häufig in der numerischen linearen Algebra etwa zur Lösung linearer Gleichungssysteme oder Eigenwertprobleme eingesetzt. So lassen sich beispielsweise die Zeilen- und Spaltenumformungen im gaußschen Eliminationsverfahren als Produkt von Elementarmatrizen angeben.

### Lineare Abbildungen

Sind allgemein $V$ und $W$ zwei endlichdimensionale Vektorräume über dem gleichen Körper, dann kann jede lineare Abbildung $f\colon V\to W$ nach Wahl je einer Basis in den beiden Vektorräumen über ihre Abbildungsmatrix $M_{f}$ dargestellt werden. Das Bild $y$ eines Vektors $x$ unter der Abbildung $f$ in den jeweiligen Basen kann dann über das Matrix-Vektor-Produkt
    $y=M_{f}\cdot x$
ermittelt werden. In der Geometrie lässt sich beispielsweise auf diese Weise jede Drehung um den Ursprung und jede Spiegelung an einer Ursprungsebene durch ein solches Matrix-Vektor-Produkt ausführen. Ist nun $U$ ein weiterer Vektorraum und $g\colon W\to U$ eine weitere lineare Abbildung, dann gilt für die Abbildungsmatrix der Hintereinanderausführung $g\circ f$ dieser beiden Abbildungen:
    $M_{g\circ f}=M_{g}\cdot M_{f}$
Die Abbildungsmatrix einer Hintereinanderausführung zweier linearer Abbildungen ist also das Matrizenprodukt der beiden zugehörigen Abbildungsmatrizen. Auf diese Weise lässt sich beispielsweise jede Drehspiegelung als Produkt einer Drehmatrix und einer Spiegelungsmatrix darstellen. Alternativ kann eine lineare Abbildung auch durch Vektor-Matrix-Multiplikation eines Zeilenvektors mit der transponierten Abbildungsmatrix durchgeführt werden. Die Hintereinanderausführung von Abbildungen entspricht dann einer Matrizenmultiplikation von rechts statt von links.

### Anwendungen

Anwendungen der Matrizenmultiplikation finden sich unter anderem:
* in der Analysis bei der Komposition differenzierbarer Funktionen mehrerer Variablen nach der mehrdimensionalen Kettenregel,
* in der Computergrafik bei der Durchführung von Koordinatentransformationen in einer Grafikpipeline,
* in der Optik bei der Berechnung von Lichtstrahlen durch optische Bauelemente mittels der Matrizenoptik,
* in der Ökonomie bei der Input-Output-Analyse einer Produktion sowie bei der innerbetrieblichen Materialverflechtung,
* in der Robotik bei der Beschreibung kinematischer Ketten mittels der Denavit-Hartenberg-Transformation,
* in der Elektrotechnik bei der Zweitortheorie elektrischer Netzwerke,
* in der Quantenmechanik im Rahmen der Matrizenmechanik, hier auch für „unendlich große“ Matrizen.
* als Benchmark (Leistungstest), insbesondere für Multiprozessorsysteme

## Verallgemeinerungen
### Matrizen über Halbringen

Allgemeiner können Matrizen über einem Halbring $R$ betrachtet werden, wobei die wichtigsten Eigenschaften der Matrizenmultiplikation, wie Assoziativität und Distributivität, erhalten bleiben. Entsprechend bildet dann $(R^{n\times n},+,\cdot )$ den Halbring der quadratischen Matrizen über $R$. Die Nullmatrix ist im Matrizenhalbring wieder das Nullelement und auch absorbierend, wenn das Nullelement im zugrunde liegenden Halbring absorbierend ist. Ist der zugrunde liegende Halbring unitär, dann bildet auch die Einheitsmatrix wieder das Einselement im Matrizenhalbring.
Wichtige Beispiele für Halbringe sind distributive Verbände, wie beispielsweise boolesche Algebren. Fasst man die Elemente eines solchen Verbands als Wahrheitswerte auf, so sind Matrizen über einem Verband zweistellige Relationen. Die Matrizenmultiplikation entspricht in diesem Fall der Komposition von Relationen.

### Matrizenkategorien

Algebraische Strukturen wie Ringe und Gruppen, deren Elemente Matrizen sind, sind auf quadratische Matrizen fester Größe beschränkt. Die Matrizenmultiplikation ist dagegen nicht derartig eingeschränkt. Eine Möglichkeit, diese Einschränkung aufzuheben, ist es, stattdessen Kategorien von Matrizen, jeweils über einem festen unitären Ring oder Halbring, zu betrachten. Die Objekte sind natürliche Zahlen, und ein Pfeil $n\to m$ ist eine $(n\times m)$-Matrix. Die Komposition von Pfeilen ist durch die Matrizenmultiplikation gegeben. Sollen Matrizen auch addiert werden können, handelt es sich um eine präadditive Kategorie. Wenn Matrizen aller endlichen Größen vorkommen, erhält man eine abelsche Kategorie. Wenn nur invertierbare Matrizen vorkommen, handelt es sich um ein Gruppoid. In diesem Fall kann es interessant sein, anstelle der natürlichen Zahlen beliebige endliche Mengen als Objekte zuzulassen.

## Verwandte Produkte

Neben dem Matrizenprodukt existieren noch eine Reihe weiterer Produkte von Matrizen:
* Das Hadamard-Produkt zweier Matrizen ergibt eine Matrix, deren Einträge einfach durch komponentenweise Multiplikation der Einträge der Ausgangsmatrizen ermittelt werden. Im Vergleich zum Matrizenprodukt ist es jedoch weit weniger bedeutend.
* Das Kronecker-Produkt zweier Matrizen ergibt eine große Matrix, die durch Betrachtung aller möglichen Produkte von Einträgen der beiden Ausgangsmatrizen entsteht.
* Das Frobenius-Skalarprodukt zweier reeller oder komplexer Matrizen ergibt eine Zahl, die sich durch komponentenweise Multiplikation der Einträge der Ausgangsmatrizen und nachfolgende Summation all dieser Produkte berechnet. Im komplexen Fall wird dabei immer ein Eintrag komplex konjugiert.