506 lines
11 KiB
TeX
506 lines
11 KiB
TeX
\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<presentation>
|
|
{
|
|
\usetheme{Singapore}
|
|
\setbeamercovered{opaque}
|
|
\usecolortheme{tuebingen}
|
|
\setbeamertemplate{navigation symbols}{}
|
|
\usefonttheme{default}
|
|
\useoutertheme{infolines}
|
|
% \useoutertheme{miniframes}
|
|
}
|
|
|
|
\AtBeginSection[]
|
|
{
|
|
\begin{frame}<beamer>
|
|
\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}
|
|
}
|
|
|
|
\newcommand{\code}[1]{\texttt{#1}}
|
|
|
|
\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 Aufr\"aumen: Erstellt ein neues Skript; 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.
|
|
\item Plotten des Sinus als Funktion der Zeit.
|
|
\end{enumerate}
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Vektoren}
|
|
\framesubtitle{Datentypen sind wichtig.}
|
|
Einlesen von 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: signal.bin, time.bin
|
|
\end{enumerate}
|
|
\begin{itemize}
|
|
\item \"Offnen der Datei: \code{f = fopen('signal.bin');}
|
|
\item Lesen des Inhalts: \code{signal = fread(f);}
|
|
\item Schlie{\ss}en der Datei: \code{fclose(f);}
|
|
\item Plottet das signal. Sieht das plausibel aus?
|
|
\item Welchen Datentype nimmt MATLAB per default an (Hilfe fread)?
|
|
\item Versucht einen anderen Datentyp.
|
|
\item Wie viele Werte werden eingelesen? Sieht der Plot sinnvoll aus?
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\begin{frame}
|
|
\frametitle{Vektoren}
|
|
\framesubtitle{Einlesen von unterschiedlichen Bin\"ardaten aus einer Datei}
|
|
|
|
\textbf{Szenario:} Es werden elektrophysiologische Messungen
|
|
gemacht. Die Daten werden mit einer Messkarte digitalisiert. Diese
|
|
hat ein 16 Bit Aufl\"osung f\"ur den Spannungsbereich $\pm$ 10\,V.
|
|
|
|
\begin{enumerate}
|
|
\item In welchem Datentyp sollten die Daten abgelegt werden, um
|
|
m\"oglichst Speichereffizient zu sein?
|
|
\item Lest den Datensatz signal2.bin ein und plottet die Daten.
|
|
\item Wandelt mit dem Wissen \"uber die Aufl\"osung und den
|
|
Wertebereich die Daten in Spannungen um.
|
|
\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 = randi(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}
|
|
\frametitle{Matrizen}
|
|
\framesubtitle{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}
|
|
|
|
\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{Real World Problem}
|
|
\begin{figure}
|
|
\includegraphics[width=0.7\columnwidth]{./images/imaging.png}
|
|
\end{figure}
|
|
\begin{itemize}
|
|
\item Calcium Imaging vom Metathorakalganglion der
|
|
Laubheuschrecke. Stimulation mit auditorischem Stimulus.
|
|
\begin{enumerate}
|
|
\item Lade den Datensatz \textit{imaging.mat} in den
|
|
workspace. Hierin enthalten sind vier $\Delta F/F$ Bilder, die
|
|
vor, w\"ahrend und nach der Stimulation aufgenommen wurden.
|
|
\item Benutze \code{imshow} um eines der Bilder anzuzeigen.
|
|
\item Berechne den Mittelwert \"uber die Zeilen und plotte diesen
|
|
f\"ur die 4 Zeitpunkte in einen Plot.
|
|
\item F\"uge eine geeignete Legende hinzu.
|
|
\end{enumerate}
|
|
\end{itemize}
|
|
\end{frame}
|
|
|
|
\end{document} |