---
format:
  pdf:
    fontsize: 11pt
    number-sections: true
    include-in-header: ../MV_Header_Seminar.tex
lang: de
---


\setcounter{section}{1}
# Matrizen


## Mathematische Grundlagen

In der Vorlesung haben wir den Begriff der Matrix sowie einige grundlegende Rechenoperationen für Matrizen kennengelernt, deren Definition wir im Folgenden wiederholen.
\small

\vspace{1em}
**Matrixaddition**
\begin{equation*} \label{eq:Add}
A + B
=
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{pmatrix}
+
\begin{pmatrix}
b_{11} & b_{12} & \cdots & b_{1m} \\
b_{21} & b_{22} & \cdots & b_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
b_{n1} & b_{n2} & \cdots & b_{nm}
\end{pmatrix}
:=
\begin{pmatrix}
a_{11} + b_{11} & a_{12} + b_{12} & \cdots & a_{1m} + b_{1m} \\
a_{21} + b_{21} & a_{22} + b_{22} & \cdots & a_{2m} + b_{2m} \\
\vdots          & \vdots          & \ddots & \vdots          \\
a_{n1} + b_{n1} & a_{n2} + b_{n2} & \cdots & a_{nm} + b_{nm}
\end{pmatrix}
\end{equation*}

\vspace{1em}
**Matrixsubtraktion**
\begin{equation*} \label{eq:Sub}
A - B
=
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{pmatrix}
-
\begin{pmatrix}
b_{11} & b_{12} & \cdots & b_{1m} \\
b_{21} & b_{22} & \cdots & b_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
b_{n1} & b_{n2} & \cdots & b_{nm}
\end{pmatrix} \\
:=
\begin{pmatrix}
a_{11} - b_{11} & a_{12} - b_{12} & \cdots & a_{1m} - b_{1m} \\
a_{21} - b_{21} & a_{22} - b_{22} & \cdots & a_{2m} - b_{2m} \\
\vdots          & \vdots          & \ddots & \vdots          \\
a_{n1} - b_{n1} & a_{n2} - b_{n2} & \cdots & a_{nm} - b_{nm}
\end{pmatrix}
\end{equation*}

\vspace{1em}
**Skalarmultiplikation**
\begin{equation*} \label{eq:Skalarmult}
cA
= c
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{pmatrix}
:=
\begin{pmatrix}
ca_{11} & ca_{12} & \cdots & ca_{1m} \\
ca_{21} & ca_{22} & \cdots & ca_{2m} \\
\vdots  & \vdots  & \ddots & \vdots  \\
ca_{n1} & ca_{n2} & \cdots & ca_{nm}
\end{pmatrix}
\end{equation*}

\vspace{1em}
**Matrixtransposition**
\begin{equation*} \label{eq:Trans}
A^\mathrm{T}
=
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{pmatrix}^\mathrm{T}
:=
\begin{pmatrix}
a_{11} & a_{21} & \cdots & a_{n1} \\
a_{12} & a_{22} & \cdots & a_{n2} \\
\vdots & \vdots & \ddots & \vdots \\
a_{1m} & a_{2m} & \cdots & a_{nm}
\end{pmatrix}
\end{equation*}

\vspace{1em}
**Matrixmultiplikation**
\begin{equation*} \label{eq:Matrixmult}
AB
=
\begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1m} \\
a_{21} & a_{22} & \cdots & a_{2m} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n1} & a_{n2} & \cdots & a_{nm}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12} & \cdots & b_{1k} \\
b_{21} & b_{22} & \cdots & b_{2k} \\
\vdots & \vdots & \ddots & \vdots \\
b_{m1} & b_{m2} & \cdots & b_{mk}
\end{pmatrix} \\
:=
\left(\sum_{i=1}^m a_{ji}b_{il} \right)_{1 \le j \le n, 1 \le l \le k}
\end{equation*}

\pagebreak
\vspace{1em}
**Inverse einer Matrix**
\begin{equation*} \label{eq:Inv}
A \in \mathbb{R}^{n \times n}
\quad \Rightarrow \quad
A^{-1} \in \mathbb{R}^{n \times n} \; ,
\quad \text{sodass} \quad
A^{-1} A = A A^{-1} = I_n
\end{equation*}

\vspace{1em}
**Determinante einer Matrix**
\begin{equation*} \label{eq:Det}
A \in \mathbb{R}^{n \times n}
\quad \Rightarrow \quad
\begin{array}{ll}
|A| := a_{11}                                   & \mbox{ für } n = 1 \\
|A| := \sum_{j = 1}^n a_{1j}(-1)^{1+j} |A_{1j}| & \mbox{ für } n > 1
\end{array}
\end{equation*}


\normalsize
## Analyse in R

Wir beginnen zunächst mit der Definition einiger Matrizen. Erklären Sie die Funktion und Details des folgenden R-Codes:

\footnotesize
```{r, echo = T, eval = T, results = 'hide'}
# spaltenweise Definition von A
A = matrix(c( 2, 1,-3, 6, 0, 5), nrow = 2)

# zeilenweise Definition von B
B = matrix(c( 4, 2,
			 -1, 0,
			  1, 3),
		   nrow  = 3,
		   byrow = TRUE)

# Ausgabe dieser Matrizen
print(A)
print(B)

# Definition weiterer Matrizen
C1 = matrix(c(2,1,
			  3,4),
			nrow  = 2,
			byrow = TRUE)
C2 = matrix(c(1,0,
			  0,0),
			nrow  = 2,
			byrow = TRUE)
C3 = matrix(c(2,0,0,
			  0,1,0,
			  0,0,3),
			nrow  = 3,
			byrow = TRUE)
print(C1)
print(C2)
print(C3)
```
\normalsize


\pagebreak
## Erste Programmieraufgabe

Illustrieren Sie die in der Vorlesung besprochenen Matrixoperationen mithilfe der oben definierten Matrizen. Gehen Sie dazu wie folgt vor:

- Matrixaddition und Matrixsubtraktion sind nur für Matrizen gleicher Größer definiert. Da $A \in \mathbb{R}^{2 \times 3}$ und $B \in \mathbb{R}^{3 \times 2}$ demzufolge nicht addiert oder subtrahiert werden können, beginnen wir damit, dass wir die Matrix $B$ transponieren. Sowohl $A$ als auch $B^\mathrm{T}$ sind dann $2 \times 3$ Matrizen.

- Transponieren Sie die Matrix $B$. Die Transposition ist in R als die Funktion \verb|t()| implementiert.

- Berechnen Sie die Matrix $A + B^\mathrm{T}$. Die Matrixaddition wird in R mittels \verb|+| berechnet.

- Berechnen Sie die Matrix $A - B^\mathrm{T}$. Die Matrixsubtraktion wird in R mittels \verb|-| berechnet.

- Definieren Sie den Skalar $c = 3$ und berechnen Sie die Matrix $cA$. Die Skalarmultiplikation wird in R mittels `*` berechnet.

- Berechnen Sie die Matrixprodukte $AB$ und $BA$. Die Matrixmultiplikation wird in R mittels `%*%` berechnet.

- Vergegenwärtigen Sie sich die Anforderungen der Matrixmultiplikation, indem Sie versuchen, die Matrix $A^\mathrm{T}B$ zu berechnen. Da die Dimensionen der Matrizen nicht zueinander passen, sollten Sie eine Fehlermeldung erhalten.

- Invertieren Sie die Matrix $C_1$. Die Matrixinversion ist in R als die Funktion \verb|solve()| implementiert.

- Führen Sie die Probe für diese Berechnung aus, indem Sie die Matrizen $C_1^{-1} C_1$ und $C_1 C_1^{-1}$ berechnen. Sie sollten jeweils die zweidimensionale Einheitsmatrix $I_2$ erhalten.

- Vergegenwärtigen Sie sich die Operation der Matrixinversion, indem Sie versuchen, die Matrix $C_2$ zu invertieren. Da diese Matrix nicht invertierbar ist, sollten Sie eine Fehlermeldung erhalten.

- Berechnen Sie die Determinanten der Matrizen $C_1$, $C_2$ und $C_3$. Die Determinante ist in R als die Funktion \verb|det()| implementiert.

- Geben Sie die Ergebnisse ihrer Analyse aus. Sie sollten folgende Ergebnisse erhalten:

\footnotesize
```{r, echo = F, eval = T, error = T}
# Transposition
BT = t(B)
cat("Transposition:")
print(BT)

# Addition
D1 = A + BT
cat("Addition:")
print(D1)

# Subtraktion
D2 = A - BT
cat("Subtraktion:")
print(D2)

# Skalarmultiplikation
c  = 3
cA = c * A
cat("Skalarmultiplikation:")
print(cA)

# Matrixmultiplikation (1)
cat("Matrixprodukte:")
E1 = A %*% B
print(E1)

# Matrixmultiplikation (2)
E2 = B %*% A
print(E2)

# Beispiel für eine undefinierte Matrixmultipliation
E3 = t(A) %*% B

# Matrixinversion
cat("Matrixinversion:")
F1 = solve(C1)
print(F1)

# Probe für die Inverse der Matrix (A^{-1} mal A)
print(solve(C1) %*% C1)
print(C1 %*% solve(C1))

# Beispiel für eine nicht-invertierbare Matrix
F2 = solve(C2)

# Determinanten
cat("Determinanten:")
print(det(C1))
print(det(C2))
print(det(C3))
```
\normalsize


## Analyse in R

Im nächsten Schritt wollen wir mit dem in der ersten Seminarsitzung vorgestellten Datensatz `FADE_SAME.csv` arbeiten. Erklären Sie den folgenden R-Code und die daraus resultierende Datenmatrix $Y$:

\footnotesize
```{r, echo = T, eval = T, results = 'hide'}
# Daten einlesen
fname = 'FADE_SAME.csv'                             # Dateiname
D     = read.csv(fname)                             # Dataframe

# Variablen extrahieren
vars  = c('novelty.FADE','novelty.SAME',            # Definition Variablen
		  'memory.FADE', 'memory.SAME')
m     = length(vars)                                # Anzahl Variablen
n     = nrow(D)                                     # Anzahl Datenpunkte
Y     = as.matrix(D[,vars])                         # n x m Datenmatrix
print(dim(Y))                                       # Überprüfung Datenmatrix
```
\normalsize


\pagebreak
## Zweite Programmieraufgabe

Schreiben Sie nun Code in R, der mithilfe von Matrixalgebra den Mittelwert der SAME-Scores und den Mittelwert der FADE-Scores für alle Datenpunkte berechnet. Gehen Sie dazu wie folgt vor:

- Definieren Sie die Matrix $M = \begin{pmatrix} 1/2 & 0 & 1/2 & 0 \\ 0 & 1/2 & 0 & 1/2 \end{pmatrix} \in \mathbb{R}^{2 \times 4}$. Wir werden diese im Folgenden als Mittelwertmatrix bezeichnen.

- Berechnen Sie das Matrixprodukt $Z = Y M^\mathrm{T}$. Vergegenwärtigen Sie sich, was passiert, wenn eine (vierdimensionale) Zeile von $Y \in \mathbb{R}^{n \times 4}$ mit der (transponierten) Mittelwertmatrix $M^\mathrm{T} \in \mathbb{R}^{4 \times 2}$ multipliziert wird: Das Ergebnis ist ein (zweidimensionaler) Vektor, der den Mittelwert der FADE-Scores (1. und 3. Spalte von $Y$) und den Mittelwert der SAME-Scores (2. und 4. Spalte von $Y$) enthält. Die Ergebnismatrix $Z \in \mathbb{R}^{n \times 2}$ ist demzufolge eine Matrix mit zwei Spalten.

- Geben Sie die ersten fünf Zeilen der Datenmatrix $Y$ und der Ergebnismatrix $Z$ aus. Sie sollten folgende Ergebnisse erhalten:

\footnotesize
```{r, echo = F, eval = T}
# Mittelwerte berechnen
M           = matrix(c(1/2,  0,1/2,  0,             # Definition Mittelwertmatrix
                         0,1/2,  0,1/2),
                     nrow  = 2,
                     byrow = TRUE)
Z           = Y %*% t(M)                            # n x 2 Ergebnismatrix
colnames(Z) = c("mean.FADE", "mean.SAME")           # Spaltennamen Ergebnismatrix

# Ergebnisse Ausgeben
cat("\nDatenmatrix:\n")
print(Y[1:5,])
cat("\nErgebnismatrix:\n")
print(Z[1:5,])
```
\normalsize


\pagebreak
## Lückentext

Füllen Sie mit den in der Übung gewonnenen Erkenntnissen den folgenden Lückentext aus und präsentieren Sie die Ergebnisse im Seminar:

\vspace{1em}
**Lückentext:** Bei der \underline{ Matrixaddition } und der \underline{ Matrixsubtraktion } werden die Einträge zweier Matrizen gleicher Größe elementweise verrechnet. Bei der \underline{ Skalarmultiplikation } werden die Einträge einer Matrix beliebiger Größe elementweise mit einem Skalar multipliziert. Bei der \underline{ Matrixmultiplikation } entspricht der Eintrag $(i,j)$ der Ergebnismatrix dem Skalarprodukt aus der \underline{ $i$-ten Zeile } der ersten Matrix und der \underline{ $j$-ten Spalte } der zweiten Matrix. Für die Matrixmultiplikation muss die \underline{ Anzahl der Spalten } der ersten Matrix mit der \underline{ Anzahl der Zeilen } der zweiten Matrix übereinstimmen. Die \underline{ Inverse } einer Matrix sowie die \underline{ Determinante } einer Matrix sind nur für quadratische Matrizen definiert. Quadratische Matrizen sind Matrizen, bei der die \underline{ Anzahl der Zeilen } und die \underline{ Anzahl der Spalten } gleich sind.


## Mögliche Klausurfrage

Präsentieren Sie im Seminar folgende Klausurfrage und erklären Sie die richtige Antwort:

\vspace{1em}
**Frage:** Welche dieser Matrixoperationen ist **nicht** elementweise definiert?
\begin{enumerate}[a)]
\item Matrixaddition
\item Matrixsubtraktion
\item Skalarmultiplikation
\item Matrixmultiplikation $\checkmark$
\end{enumerate}


## Kinderwitz

Was sagt eine Null zur einer Acht?

\begin{turn}{180}
Antwort: Schicker Gürtel!
\end{turn}