diff --git a/programming/lectures/variables_datatypes.tex b/programming/lectures/variables_datatypes.tex new file mode 100644 index 0000000..d29cc20 --- /dev/null +++ b/programming/lectures/variables_datatypes.tex @@ -0,0 +1,299 @@ +\documentclass{beamer} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{pgf} +%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} +%\usepackage{multimedia} + +\usepackage[english]{babel} +\usepackage{movie15} +\usepackage[latin1]{inputenc} +\usepackage{times} +\usepackage{amsmath} +\usepackage{bm} +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{scalefnt} +\usepackage{tikz} +\usepackage{ textcomp } +\usepackage{soul} +\usepackage{hyperref} +\definecolor{lightblue}{rgb}{.7,.7,1.} +\definecolor{mygreen}{rgb}{0,1.,0} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\mode +{ + \usetheme{Singapore} + \setbeamercovered{opaque} + \usecolortheme{tuebingen} + \setbeamertemplate{navigation symbols}{} + \usefonttheme{default} + \useoutertheme{infolines} + % \useoutertheme{miniframes} +} + +\AtBeginSection[] +{ + \begin{frame} + \begin{center} + \Huge \insertsectionhead + \end{center} + % \frametitle{\insertsectionhead} + % \tableofcontents[currentsection,hideothersubsections] + \end{frame} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + +\setbeamertemplate{blocks}[rounded][shadow=true] + +\title[]{Scientific Computing -- Grundlagen der Programmierung } +\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\ + Universit\"at T\"ubingen} + +\institute[Wissenschaftliche Datenverarbeitung]{} + \date{12.10.2015 - 06.11.2015} + %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} + +\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung} + +\titlegraphic{ + \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB} +} +%%%%%%%%%% configuration for code +\lstset{ + basicstyle=\ttfamily, + numbers=left, + showstringspaces=false, + language=Matlab, + commentstyle=\itshape\color{darkgray}, + keywordstyle=\color{blue}, + stringstyle=\color{green}, + backgroundcolor=\color{blue!10}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + captionpos=b, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt + } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\mycite}[1]{ +\begin{flushright} +\tiny \color{black!80} #1 +\end{flushright} +} + +\input{../../latex/environments.tex} +\makeatother + +\begin{document} + +\begin{frame}[plain] + \frametitle{} + \vspace{-1cm} + \titlepage % erzeugt Titelseite +\end{frame} + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \frametitle{Resourcen} + \begin{enumerate} + \item Kursmaterialien auf Ilias + \url{https://ovidius.uni-tuebingen.de/ilias3/goto.php?target=crs_1090903&client_id=pr02} + \item Wintersemester 2015--2016 $\rightarrow$ 7 + Mathematisch--Naturwissenschaftliche Fakult\"at $\rightarrow$ Biologie + $\rightarrow$ Biologie -- Master $\rightarrow$ Neurobiologie + $\rightarrow$ W1 Einf\"uhrung in die wissenschaftliche + Datenverarbeitung\pause + \item Einloggen mit Uni-Kennung und Passwort + \item Zugriff auf den Kurs mit dem geheimen Passwort ``Spikes'' \pause + \item Ladet eure L\"osungen in den entsprechenden Ordner hoch. + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \framesubtitle{Themen Woche 1} + \begin{enumerate} + \item MATLAB Entwicklungsumgebung + \item Variablen und Datentypen + \item Vektoren und Matrizen + \item Boolesche Operationen + \item Kontrollstrukturen + \item Was ist ein Programm, Stil und Kommentare + \item Vom Problem zum Algorithmus + \item Skripte und Funktionen + \item Graphische Darstellung von Neuro Daten, PSTH, Rasterplot + \item Fortgeschrittene Datenstrukturen + \item String Parsing + \item Lesen und schreiben von Dateien, Navigation im Dateisystem + \end{enumerate} +\end{frame} + + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \frametitle{Themen Woche 1} + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/wueste} + \end{figure} +\end{frame} + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \frametitle{Themen Woche 1} + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/ski_wueste} + \end{figure} +\end{frame} + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \frametitle{Tagesmen\"u} + + \begin{enumerate} + \item [] Vormittag + \begin{enumerate} + \item Die MATLAB Entwicklungsumgebung \& Das Hilfesystem + \item Variablen und Datentypen + \item Skalare, Vektore und Matrizen + \end{enumerate} + \item [] Nachmittag: + \begin{enumerate} + \item \"Ubungen + \end{enumerate} + \end{enumerate} +\end{frame} + +\begin{frame}[plain] + \huge{1. MATLAB\textsuperscript{\textregistered} IDE \& das Hilfesystem\\ + --- ein etwas gr\"o{\ss}erer Taschenrechner ---} +\end{frame} + +\begin{frame}[plain] + \huge{2. Variablen und Datentypen} +\end{frame} + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \framesubtitle{Variablen} + \begin{figure} + \centering + \includegraphics[width=0.2\columnwidth]{./images/bucket.png} + \end{figure} +\end{frame} + +\begin{frame} + \frametitle{Grundlagen der Programmierung} + \framesubtitle{Variablen} + \huge"Eine Variable ist ein Platz im Speicher." + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/variable.pdf} + \end{figure} +\end{frame} + +\begin{frame} + \frametitle{Variablen} + \framesubtitle{Datentypen} + \begin{itemize} + \item \textit{integer} - Ganze Zahlen. Hier gibt es mehrere + Unterarten, die wir in Matlab (meist) ignorieren k\"onnen. + \item \textit{double} - Flie{\ss}kommazahlen. + \item \textit{complex} - Komplexe Zahlen. + \item \textit{logical} - Boolesche Werte, die als wahr + (\textit{true}) oder falsch (\textit{false}) interpretiert werden. + \item \textit{char} - ASCII Zeichen + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Variablen} + \framesubtitle{Datentypen} + \only<1>{ + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/variable.pdf} + \end{figure} + } + \only<2>{ + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/variableB.pdf} + \end{figure} + } +\end{frame} + +\begin{frame}[fragile] + \frametitle{Variablen} + \framesubtitle{Erzeugen von Variablen und Wertezuweisung} + \scriptsize + \begin{lstlisting}[label=varListing1] + >> y = [] + y = + [] + >> + >> x = 38 + x = + 38 + >> + \end{lstlisting} +\normalsize +\end{frame} + +%\subsection{Calculations with variables} +\begin{frame}[fragile] + \frametitle{Variablen} + \framesubtitle{Rechnen mit Variablen} + \tiny + \begin{lstlisting}[label=varListing2] + >> x = 1; + >> x + 10 + ans = + 11 + >> + >> x % x wurde nicht veraendert + ans = + 1 + >> + >> y = 2; + >> + >> x + y + ans = + 3 + >> + >> z = x + y + z = + 3 + >> + >> z = z * 5; + >> z + z = + 15 + \end{lstlisting} +\end{frame} + +%\subsection{\"Ubungen} +\begin{frame} + \frametitle{Variablen} + \framesubtitle{\"Ubungen 1} + + \Large{Es ist Zeit f\"ur die ersten \"Ubungen!} + \normalsize + \begin{itemize} + \item \"Ubungszettel findet sich auf ILIAS:\\ W1 Einf\"uhrung in die + wissenschaftliche Datenverarbeitung $\rightarrow$ Woche 1 - + Grundlagen der Programmierung $\rightarrow$ \"Ubungen 1 + $\rightarrow$ Variablen und Datentypen \pause + \item Abgabe erfolgt ebenfalls \"uber ILIAS in Form eines einzelnen Skripts \pause + \item Die ersten Schritte machen wir gemeinsam! + \end{itemize} +\end{frame} + +\end{document} \ No newline at end of file diff --git a/programming/lectures/vectors_matrices.tex b/programming/lectures/vectors_matrices.tex new file mode 100644 index 0000000..36cbffc --- /dev/null +++ b/programming/lectures/vectors_matrices.tex @@ -0,0 +1,526 @@ +\documentclass{beamer} +\usepackage{xcolor} +\usepackage{listings} +\usepackage{pgf} +%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} +%\usepackage{multimedia} + +\usepackage[english]{babel} +\usepackage{movie15} +\usepackage[latin1]{inputenc} +\usepackage{times} +\usepackage{amsmath} +\usepackage{bm} +\usepackage[T1]{fontenc} +\usepackage[scaled=.90]{helvet} +\usepackage{scalefnt} +\usepackage{tikz} +\usepackage{ textcomp } +\usepackage{soul} +\usepackage{hyperref} +\definecolor{lightblue}{rgb}{.7,.7,1.} +\definecolor{mygreen}{rgb}{0,1.,0} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\mode +{ + \usetheme{Singapore} + \setbeamercovered{opaque} + \usecolortheme{tuebingen} + \setbeamertemplate{navigation symbols}{} + \usefonttheme{default} + \useoutertheme{infolines} + % \useoutertheme{miniframes} +} + +\AtBeginSection[] +{ + \begin{frame} + \begin{center} + \Huge \insertsectionhead + \end{center} + % \frametitle{\insertsectionhead} + % \tableofcontents[currentsection,hideothersubsections] + \end{frame} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + +\setbeamertemplate{blocks}[rounded][shadow=true] + +\title[]{Scientific Computing -- Grundlagen der Programmierung } +\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\ + Universit\"at T\"ubingen} + +\institute[Wissenschaftliche Datenverarbeitung]{} + \date{12.10.2015 - 06.11.2015} + %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}} + +\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung} + +\titlegraphic{ + \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB} +} +%%%%%%%%%% configuration for code +\lstset{ + basicstyle=\ttfamily, + numbers=left, + showstringspaces=false, + language=Matlab, + commentstyle=\itshape\color{darkgray}, + keywordstyle=\color{blue}, + stringstyle=\color{green}, + backgroundcolor=\color{blue!10}, + breaklines=true, + breakautoindent=true, + columns=flexible, + frame=single, + captionpos=b, + xleftmargin=1em, + xrightmargin=1em, + aboveskip=10pt + } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\mycite}[1]{ +\begin{flushright} +\tiny \color{black!80} #1 +\end{flushright} +} + +\input{../../latex/environments.tex} +\makeatother + +\begin{document} + +\begin{frame}[plain] + \frametitle{} + \vspace{-1cm} + \titlepage % erzeugt Titelseite +\end{frame} + +\begin{frame}[plain] + \huge{2. Vektoren und Matrizen} +\end{frame} + +\begin{frame} + \frametitle{Vektoren und Matrizen} + \framesubtitle{Skalare vs. Vektoren} + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/scalarArray.pdf} + \end{figure} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Vektoren und Matrizen} + \framesubtitle{Erzeugen von Vektoren} + \tiny + \begin{lstlisting}[label=arrayListing1] +>> a = [0 1 2 3 4 5 6 7 8 9] % Erstellen eines Zeilenvektors + a = + 0 1 2 3 4 5 6 7 8 9 +>> +>> b = (0:9) % etwas bequemer + b = + 0 1 2 3 4 5 6 7 8 9 +>> +>> c = (0:2:10) + c = + 0 2 4 6 8 10 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Vektoren und Matrizen} + \framesubtitle{Spalten \& Zeilenvektoren} + \tiny + \begin{lstlisting}[label=arrayListing2] +>> a = [1 2 3 4 5 6 7 8 9 10] % Erstellen eines Zeilenvektors + a = + 1 2 3 4 5 6 7 8 9 10 +>> +>> b = [1; 2; 3; 4; 5] % Erstellen eines Spaltenvectors + b = + 1 + 2 + 3 + 4 + 5 +>> +>> b = b' % Transponieren + b = + 1 2 3 4 5 +>> + \end{lstlisting} +\end{frame} + +\begin{frame} + \frametitle{Vektoren} + \framesubtitle{Zugriff auf Inhalte von Vektoren} + \begin{figure} + \centering + \includegraphics[width=0.8\columnwidth]{./images/arrayIndexing.pdf} + \end{figure} + \pause + Der Zugriff auf die Inhalte eines Vektors erfolgt \"uber den Index.\\ + \textbf{Achtung!} Der erste Index ist die 1. +\end{frame} + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Zugriff auf Inhalte von Vektoren} + \vspace{-0.5cm} +\tiny +\begin{lstlisting} +>> a = (11:20); +>> a(1) % das 1. Element + ans = + 11 +>> +>> a(5) % das 5. Element + ans = + 15 +>> +>> a(end) % das letzte Element + ans = + 20 +>> +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Zugriff auf Inhalte von Vektoren} + \vspace{-0.5cm} +\tiny +\begin{lstlisting} +>> a([1 3 5]) % das 1., 3. und 5. Element + ans = + 11 13 15 +>> +>> a(2:4) % alle element von Index 2 bis 4 + ans = + 12 13 14 +>> +>> a(1:2:end) %retrieve every second element +>> and = +>> 11 13 15 17 19 +>> +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Grundlegende Operationen} + \vspace{-0.25cm} + \tiny + \begin{lstlisting}[label=arrayListing4] +>> a = (0:2:8); +>> a + 5 % addiere einen Skalar + ans = + 5 7 9 11 13 +>> +>> a * 2 % Multiplication + ans = + 0 4 8 12 16 +>> +>> a / 2 % Division + ans = + 0 1 2 3 4 +>> +>> a(1:3) + a(2:4) % Addieren von 2 Vektoren + ans = + 2 6 10 +>> +>> a(1:2) + a(2:4) % Vektoren muessen gleich gross sein! + ??? Error using ==> plus + Matrix dimensions must agree. + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Grundlegende Operationen} + \vspace{-0.25cm} + \tiny + Wie bekomme ich Informationen \"uber einen Vektor? + \begin{lstlisting} +>> a = (0:2:8); +>> % die Laenge eines +>> length(a) + ans = + 5 +>> +>> size(a) + ans = + 1 5 +>> + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Grundlegende Operationen} + \vspace{-0.25cm} + L\"oschen von Elementen: + \tiny + \begin{lstlisting} +>> a = (0:2:8); +>> length(a) + ans = + 5 +>> +>> a(1) = [] % loesche das erste Element + a = + 2 4 6 8 +>> a([1 3]) = [] + a = + 4 8 +>> length(a) + ans = + 2 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Grundlegende Operationen} + \vspace{-0.25cm} + \tiny + Verkettung von Vektoren: + \begin{lstlisting} +>> a = (0:2:8); +>> b = (10:2:19); +>> +>> c = [a b] % erstelle einen Vektor aus einer Liste von Vektoren + c = + 0 2 4 6 8 10 12 14 16 18 +>> length(c) + ans = + 10 +>> length(a) + length(b) + ans = + 10 + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Vektoren} + \framesubtitle{Einfache graphische Darstellung von Vektoren} + \begin{enumerate} + \item Erstellt ein neues script, L\"oschen aller Variablen, L\"oschen des Command Windows.\pause + \item Erzeugen eines Vektors, der die Zeit repr\"asentiert (0 bis 10 \times $\pi$ mit 0.05 Schrittweite). + \item Berechnung eines Sinus mit bliebiger Amplitude und Frequenz. + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Vektoren} + \framesubtitle{Datentypen sind wichtig.} + Einlesen von unterschiedlichen Bin\"ardaten aus einer Datei + \begin{enumerate} + \item Aufr\"aumen des Workspaces, des Command Windows und \"offnen eines neuen Skripts. + \item Auf ILIAS liegen die folgenden Dates\"atze: signal1.bin, time.bin + \end{enumerate} + +\end{frame} + +\begin{frame} + \frametitle{Vektoren} + \framesubtitle{Einlesen von unterschiedlichen + Bin\"a Daten aus einer Datei} + + Szenario: Es werden elektrophysiologische Messungen gemacht. Die + Datein werden mit einer Messkarte digitalisiet, die eine 16 Bit + Aufl\"osung hat von 16 bit. + + \begin{enumerate} + \item In welchem Datentyp sollten die Daten abgelegt werden, um + m\"oglichst Speichereffizient zu sein? + \item Um die Daten in z.B. die Membranspannungen umzuwandeln brauche + ich nur die Aufl\"osung und den Messbereich (16 bit auf den + Bereich $\pm$ 10\,V). + \item Aufr\"aumen des Workspaces, des Command Windows und \"offnen eines neuen Skripts. + \item Auf ILIAS liegen die folgenden Dates\"atze: signal1.bin, time.bin. signal2.bin + \end{enumerate} + +\end{frame} + + +\begin{frame}{Matrizen} + \vspace{-0.5cm} + \begin{figure} + \centering + \includegraphics[width=0.65\columnwidth]{./images/matrices} + \end{figure} +\end{frame} + + + +\begin{frame}[fragile] + \frametitle{Matrizen} + \framesubtitle{Erzeugen von Matrizen} + \tiny + \begin{lstlisting} +>> a = [1 2 3; 4 5 6; 7 8 9] +>> a = + 1 2 3 + 4 5 6 + 7 8 9 +>> +>> +>> b = ones(3,3,2); +>> b + + b(:,:,1) = + 1 1 1 + 1 1 1 + 1 1 1 + + b(:,:,2) = + 1 1 1 + 1 1 1 + 1 1 1 + \end{lstlisting} +\end{frame} + + +\begin{frame} + \frametitle{Matrizen} + \framesubtitle{Indexierung und Zugriff auf Inhalte} + \vspace{-0.5cm} + \begin{figure} + \centering + \includegraphics[width=0.9\columnwidth]{./images/matrixIndexing} + \end{figure} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Matrizen} + \framesubtitle{Indexierung} +\tiny +\begin{lstlisting} +>> x = roundi(100, [3, 4, 5]); % 3-D Matrix mit Zufallszahlen +>> +>> x(1,1,1); % obere linke Ecke + ans(1,1,1) = + 14 + >> + >> x(1,1,:) % obere linke Ecke entlang der 3. Dimension + ans(1,1,:) = + 14 + ans(:,:,2) = + 58 + ans(:,:,3) = + 4 + ans(:,:,4) = + 93 + ans(:,:,5) = + 56 + >> +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Matrizen} + \framesubtitle{Grundlegende Operationen} + \vspace{-0.5 cm} + \tiny +\begin{lstlisting} +>> A = randi(10, [3, 3]) % 2-D Matrix + A = + 3 8 2 + 2 10 3 + 10 7 1 +>> B = randi(10, [3, 3]) % dto + B = + 2 1 7 + 1 5 9 + 5 10 5 +>> +>> A*B % Matrix Multiplikation + ans = + 24 63 103 + 29 82 119 + 32 55 138 +>> +>> A.*B % Elementweise Multiplikation + ans = + 6 8 14 + 2 50 27 + 50 70 5 +>> +\end{lstlisting} +\end{frame} + + +\begin{frame}[plain] +\huge{Interludium: Matrixmultiplikation} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Matrizen} + \framesubtitle{\"Ubungen} + \begin{enumerate} + \item Erstelle eine 5 x 5 Matrix die Zufallszahlen enth\"alt (nutze die + MATLAB Funktion \verb+randn()+, benutze die Hilfe. Was macht sie?). + \begin{enumerate} + \item Gib alle Elemente der ersten Zeile aus. + \item Gib alle Elemente der zweiten Spalte aus. + \item Greife mit einem einzigen Kommando auf die Elemnte jeder + 2. Spalte zu und speichere die Daten in einer neuen Variable. + \end{enumerate} + \item Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze die + \verb+cat()+ Funktion f\"ur diesen Zweck ( schaue in der Hilfe + nach, wie sie benutzt wird). + \begin{enumerate} + \item Gib alle Elemente des ersten ``Blattes'' aus (Index 1 in der 3. Dimension). + \end{enumerate} + \item Erstelle eine 3-D Matrix mithilfe der Funktion + \verb+ones()+. Multipliziere das erste Blatt mit 1, das zweite mit + 2, dritte mit 3 etc. + \end{enumerate} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Matrizen} + \framesubtitle{\"Ubungen} + \begin{enumerate}\setcounter{enumi}{3} + \item Erstelle folgende Variablen \verb+x = [1 5 9]+ and + \verb+y = [7 1 5]+ und \verb+M = [3 1 6; 5 2 7]+. Welche der + folgenden Operationen funktionieren? Wenn nicht, warum + funktioneieren sie nicht? Teste Deine Vorhersagen. + \begin{enumerate} + \item \begin{verbatim} x + y \end{verbatim} + \item \begin{verbatim} x * M \end{verbatim} + \item \begin{verbatim} x + y' \end{verbatim} + \item \begin{verbatim} M - [x y] \end{verbatim} + \item \begin{verbatim} [x; y] \end{verbatim} + \item \begin{verbatim} M - [x; y] \end{verbatim} + \end{enumerate} + \item Erzeuge eine 5 x 5 x 5 Matrix die mit ganzzahligen + Zufallszahlen zwischen 0 und 100 gefuellt ist. + \begin{enumerate} + \item Berechne den Mittelwert aller Bl\"atter dieser Matrix (benutze \verb+mean()+, siehe Hilfe). + \end{enumerate} + \end{enumerate} +\end{frame} + +\begin{frame} +\frametitle{Matrizen} +\framesubtitle{Nachtrag: Lineare Indexierung} +Alternativ zum ``subscript indexing'' koennen die Elemente von Matrizen auch linear addressiert werden. + \begin{figure} + \centering + \includegraphics[width=0.75\columnwidth]{./images/matrixLinearIndexing} + \end{figure} +\end{frame} + +\end{document} \ No newline at end of file