rename programming/lectures

This commit is contained in:
2015-11-08 00:06:30 +01:00
parent cc1e264864
commit 51f3cad5ee
46 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
BASENAME=programming
#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex
PYFILES=$(wildcard *.py)
PYPDFFILES=$(PYFILES:.py=.pdf)
all : pdf
# script:
pdf : $(BASENAME)-chapter.pdf
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
$(PYPDFFILES) : %.pdf : %.py
python $<
clean :
rm -f *~
rm -f $(BASENAME).aux $(BASENAME).log
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
rm -f $(PYPDFFILES) $(GPTTEXFILES)
cleanall : clean
rm -f $(BASENAME)-chapter.pdf
watchpdf :
while true; do ! make -q pdf && make pdf; sleep 0.5; done

View File

@@ -0,0 +1,61 @@
% Copyright 2007 by Till Tantau
%
% This file may be distributed and/or modified
%
% 1. under the LaTeX Project Public License and/or
% 2. under the GNU Public License.
%
% See the file doc/licenses/LICENSE for more details.
\usepackage{color}
\definecolor{karminrot}{RGB}{165,30,55}
\definecolor{gold}{RGB}{180,160,105}
\definecolor{anthrazit}{RGB}{50 ,65 ,75 }
\mode<presentation>
\setbeamercolor*{normal text}{fg=anthrazit,bg=white}
\setbeamercolor*{alerted text}{fg=anthrazit}
\setbeamercolor*{example text}{fg=anthrazit}
\setbeamercolor*{structure}{fg=gold,bg=karminrot}
\providecommand*{\beamer@bftext@only}{%
\relax
\ifmmode
\expandafter\beamer@bftext@warning
\else
\expandafter\bfseries
\fi
}
\providecommand*{\beamer@bftext@warning}{%
\ClassWarning{beamer}
{Cannot use bold for alerted text in math mode}%
}
\setbeamerfont{alerted text}{series=\beamer@bftext@only}
\setbeamercolor{palette primary}{fg=karminrot,bg=white}
\setbeamercolor{palette secondary}{fg=gold,bg=white}
\setbeamercolor{palette tertiary}{fg=anthrazit,bg=white}
\setbeamercolor{palette quaternary}{fg=black,bg=white}
\setbeamercolor{sidebar}{bg=karminrot!100}
\setbeamercolor{palette sidebar primary}{fg=karminrot}
\setbeamercolor{palette sidebar secondary}{fg=karminrot}
\setbeamercolor{palette sidebar tertiary}{fg=karminrot}
\setbeamercolor{palette sidebar quaternary}{fg=karminrot}
\setbeamercolor{item projected}{fg=black,bg=black!20}
\setbeamercolor*{block body}{}
\setbeamercolor*{block body alerted}{}
\setbeamercolor*{block body example}{}
\setbeamercolor*{block title}{parent=structure}
\setbeamercolor*{block title alerted}{parent=alerted text}
\setbeamercolor*{block title example}{parent=example text}
\setbeamercolor*{titlelike}{parent=structure}
\mode
<all>

View File

@@ -0,0 +1,442 @@
\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}
\usepackage{multirow}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0.2,0.7,0.2}
\definecolor{myred}{rgb}{1.,0,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}
\frametitle{Rekapitulation}
\framesubtitle{Variablen und Datentypen}
\huge{Was war das nochmal?}
\end{frame}
\begin{frame}
\frametitle{Rekapitulation}
\framesubtitle{Vektoren}
\huge{Schon einmal geh\"ort?}
\end{frame}
\begin{frame}
\frametitle{Rekapitulation}
\framesubtitle{Matrizen}
\huge{Hmm?}
\end{frame}
\begin{frame}[plain]
\huge{3. Boolesche Ausdr\"ucke}
\end{frame}
\begin{frame}
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Was ist das?}
\begin{itemize}
\item Boolesche Ausdr\"ucke lassen sich zu \textit{Wahr} oder
\textit{Falsch} auswerten.
\item z.B. \textbf{A GR\"OSSER B}, \textbf{A GLEICH B}.
\item Die Beziehung zwischen zwei Entit\"aten wird mit
\textit{relationalen Operatoren} gepr\"uft.
\item Boolesche Ausdr\"ucke k\"onnen \"uber \textit{logische
Operatoren} verkn\"upft werden. z.B.: \textbf{A UND
B} ist nur dann wahr, wenn beide wahr sind.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Logische Operatoren}
\begin{table}[]
\centering
\caption{Logisches UND}
\begin{tabular}{llll}
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch} \\ \cline{2-4}
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{red}{falsch}} & \textcolor{red}{falsch}
\end{tabular}
\end{table}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Logische Operatoren}
\begin{table}[]
\centering
\caption{Logisches ODER}
\begin{tabular}{llll}
\multicolumn{2}{l}{\multirow{2}{*}{}} & \multicolumn{2}{c}{\textbf{B}} \\
\multicolumn{2}{l}{} & \multicolumn{1}{|c|}{wahr} & falsch \\ \cline{2-4}
\multirow{2}{*}{\textbf{A}} & \multicolumn{1}{l|}{wahr} & \multicolumn{1}{c|}{\textcolor{mygreen}{wahr}} & \textcolor{mygreen}{wahr} \\ \cline{2-4}
& \multicolumn{1}{l|}{falsch} & \multicolumn{1}{l|}{\textcolor{mygreen}{wahr}} & \textcolor{red}{falsch}
\end{tabular}
\end{table}
\end{frame}
\begin{frame}
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Auf Mengen angewendet\footnote[frame]{Zeichnungen geklaut bei Cornelia M\"uhlich, Uni-Jena}}
\only<1> {
\begin{figure}
\centering
\includegraphics[width=0.75\columnwidth]{./images/grundmenge}
\end{figure}
}
\only<2> {
\begin{figure}
\centering
\includegraphics[height=0.65\textheight]{./images/beete}
\end{figure}
}
\only<3> {
\begin {columns}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetA}
\end{figure}
\end{column}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/AvB}
\end{figure}
\end{column}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetB}
\end{figure}
\end{column}
\end{columns}
}
\only<4> {
\begin {columns}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetA}
\end{figure}
\end{column}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/AundB}
\end{figure}
\end{column}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetB}
\end{figure}
\end{column}
\end{columns}
}
\only<5> {
\begin {columns}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetA}
\end{figure}
\end{column}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=0.95\columnwidth]{./images/AnotB}
\end{figure}
\end{column}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetB}
\end{figure}
\end{column}
\end{columns}
}
\only<6> {
\begin {columns}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetA}
\end{figure}
\end{column}
\begin{column}{5cm}
\begin{figure}
\includegraphics[width=0.95\columnwidth]{./images/AxorB}
\end{figure}
\end{column}
\begin{column}{2cm}
\vspace{-4cm}
\begin{figure}
\includegraphics[width=\columnwidth]{./images/beetB}
\end{figure}
\end{column}
\end{columns}
}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Logische Operatoren}
\begin{table}[th]
\caption{\label{logicalOperatorsTab}
\textbf{Logical operators.}}
\begin{center}
\begin{tabular}{c|c}
\hline
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
$\sim$ & logisches NOT\\
$\&$ & logisches UND\\
$|$ & logisches ODER\\
$\&\&$ & short-circuit logical AND\\
$\|$ & short-circuit logical OR\\
\hline
\end{tabular}
\end{center}
\vspace{1em}
Das auschliessende ODER (XOR) ist nur als Funktion \verb+xor(A, B)+ verf\"ugbar.
\end{table}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Relationale Operatoren}
\begin{table}[th]
\caption{\label{relOperatorsTab}
\textbf{Relational Operators.}}
\begin{center}
\begin{tabular}{c|c}
\hline
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
$<$ & kleiner als\\
$>$ & gr\"osser als \\
$==$ & gleich \\
$>=$ & gr\"osser oder gleich \\
$<=$ & kleiner oder gleich \\
$\sim=$ & ungleich\\
\hline
\end{tabular}
\end{center}
\end{table}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{Beispiele}
\tiny
\begin{lstlisting}
>> x = [2 0 0 5 0] & [1 0 3 2 0]
x =
1 0 0 1 0
>>
>> ~([2 0 0 5 0] & [1 0 3 2 0])
ans =
0 1 1 0 1
>> [2 0 0 5 0] | [1 0 3 2 0]
ans =
1 0 1 1 0
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Boolesche Ausdr\"ucke}
\framesubtitle{\"Ubungen}
\vspace{-0.5cm}
\begin{enumerate}
\item Gegeben sind zwei Vektoren \verb+x = [1 5 2 8 9 0 1]+ und
\verb+y = [5 2 2 6 0 0 2]+. F\"uhre aus und erkl\"are.
\begin{enumerate}
\item \verb+x > y+
\item \verb+y < x+
\item \verb+x == y+
\item \verb+x ~= y+
\item \verb+x & ~y+
\item \verb+x | y+
\end{enumerate}
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{4. Logisches Indizieren}
\end{frame}
\begin{frame}[fragile]
\frametitle{Logische Indexierung}
\framesubtitle{Idee}
Ist das Indizieren in Vektoren und Matrizen mithilfe Boolescher Ausdr\"ucke.
\begin{enumerate}
\item Wendet man einen Booleschen Ausdruck auf einen Vektor an, dann
erh\"alt man als R\"uckgabe einen Vektor mit \textit{wahr} und
\textit{falsch} Eintr\"agen.
\item \textit{wahr/true} und \textit{falsch/false} werden als 1 und 0 dargestellt.\pause
\item Beispiel:
\begin{itemize}
\item Erstelle einen Vektor mit den Werten 0-10.
\item F\"uhre aus: \code{y = x < 5;}.
\item Gib den Inhalt von \code{y} auf dem Bildschirm aus.
\item Was ist der Datentyp von \code{y}?
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Logische Indexierung}
\framesubtitle{Beispiele}
\begin{enumerate}
\item Schnelle und einfache Auswahl von Elementen, die einer
bestimmten Bedingung entsprechen:
\begin{itemize}
\item Erstelle einen Vektor \code{x = 0:10}.
\item F\"uhre aus \code{x(x < 5)}.\pause
\item Gibt alle Elemente aus x zur\"uck, die kleiner als 5 sind.
\item Gelesen: Gib mir die Elemente von x (\code{x()}) an den
Stellen, an denen \code{x <5} wahr ist.
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Logische Indizierung}
\framesubtitle{Beispiele}
\begin{enumerate}
\item Der logische Vektor aus \code{x < 5} hat die gleiche
Gr\"o{\ss}e wie x.
\item Man kann also auch einen beliebigen logischen Vektor
verwenden, solange die Gr\"o{\ss}e stimmt.
\item Aufgabe:
\begin{itemize}
\item Erstelle einen Vektor \code{x = randn(5,1);} und f\"uhre aus:
\item \code{x([0,1,0,1,1])}
\item Was passiert, warum? \pause
\item \code{x(logical([0,1,0,1,1]))}
\item \code{x(logical([1, 2, 3, 4, 5]))}
\item Was macht logical? Warum funktioniert die letzte Version
auch?
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Logische Indexierung}
\framesubtitle{Anwendungsbeispiele:}
\begin{enumerate}
\item Beispiel 2:
\begin{itemize}
\item Erstelle einen Vektor \code{t=linspace(0,10,1000);}, der
z.B. die Zeit repr\"asentiert.
\item Erstelle einen zweiten Vektor \code{x} mit Zufallszahlen der
die gleiche L\"ange hat wie \code{t}. Die Werte darin k\"onnten
Messungen zu den Zeitpunkten in \code{t} darstellen.
\item W\"ahle aus \code{x} die Werte aus, die dem zeitlichen
Abschnitt 5-6\,s entsprechen.
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Logische Indexierung}
\framesubtitle{Anwendungsbeispiele:}
\large{Logisches Indizieren ist ein sehr m\"achtiges Werkzeug, wenn man es einmal verinnerlicht hat!}
\end{frame}
\end{document}

View File

@@ -0,0 +1,439 @@
\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 die 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{5. Kontrollstrukturen}
\end{frame}
\begin{frame}
\frametitle{Kontrollstrukturen}
\framesubtitle{Was ist das?}
\begin{itemize}
\item Regeln den Ablauf von Anweisungen.
\item Was soll unter welchen Bedingungen wie h\"aufig ausgef\"uhrt werden?\vspace{0.5cm}\pause
\item Im Wesentlichen zwei Arten von Kontrollstrukturen:
\begin{enumerate}
\item Schleifen (\code{for} und \code{while} Schleifen).\vspace{0.25cm}
\item Bedingte Anweisungen und Verzweigungen.
\end{enumerate}\vspace{0.5cm}\pause
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Schleifen}
Schleifen werden gebraucht um wiederholte Ausf\"uhrung desselben
Codes zu vereinfachen. Z.B. die Berechnung der Fakult\"at von
gestern...
\tiny
\begin{lstlisting}
>> x = 1;
>> x = x * 2;
>> x = x * 3;
>> x = x * 4;
>> x = x * 5;
>> x
x =
120
\end{lstlisting}
\normalsize
\begin{itemize}
\item Zeilen 2 bis 5 sind sehr \"ahnlich.
\item Die Verwendung von solchen Codeklonen ist schlechter Programmierstil!
\item Welche Nachteile hat es sonst noch?
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{for} - Schleife}
\begin{itemize}
\item Wird genutzt um iterativ/wiederholt einen Codeabschnitt auszuf\"uhren.\pause
\item Eine \code{for} Schleife besteht aus dem \textit{(Schleifen-) Kopf} und dem \textit{(Schleifen-) K\"orper}.
\begin{itemize}
\item Der Schleifenkopf beginnt mit dem Schl\"usselwort
\textbf{for} auf welches folgend die \textit{Laufvariable}
definiert wird.
\item Die Schleife ``l\"auft''/iteriert immer(!) \"uber einen
Vektor.
\item Die \textit{Laufvariable} nimmt in jeder Iteration einen
Wert dieses Vektors an.
\item Im Schleifenk\"orper k\"onnen beliebige Anweisungen
ausgef\"uhrt werden.
\item Die Schleife wird durch das Schl\"usselwort \textbf{end}
beendet.
\end{itemize}
\end{itemize}
\pause
\tiny
\begin{lstlisting}[label=loopListing2]
for x = 1:5
% ... etwas sinnvolles mit x ...
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{for} Schleife}
Zur\"uck zu unserer Implementation der Fakult\"at:
\tiny
\begin{lstlisting}
>> x = 1;
>> x = x * 2;
>> x = x * 3;
>> x = x * 4;
>> x = x * 5;
>> x
x =
120
\end{lstlisting}
\normalsize
Wie k\"onnte das in einer Schleife gel\"ost werden?
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{for} Schleife}
Implementatierung der Fakult\"at mithilfe einer \code{for} Schleife:
\tiny
\begin{lstlisting}
x = 1;
for i = 1:5
x = x * i;
end
% oder auch
iterations = 1:5;
for i = iterations
x = x * i;
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{while} - Schleife}
\begin{itemize}
\item \"Ahnlich zur \code{for} Schleife. Iterative Ausf\"uhrung
von Programmcode:
\begin{itemize}
\item Der Schleifenkopf beginnt mit dem Schl\"usselwort \textbf{while}
gefolgt von einem \underline{Booleschen Ausdruck}.
\item Solange dieser zu \textit{true} ausgewertet werden kann, wird
der Code im Schleifenk\"orper ausgef\"uhrt.
\item Die Schleife wird mit dem Schl\"usselwort \textbf{end} beendet.
\end{itemize}
\end{itemize}
\tiny
\begin{lstlisting}
while x == true
% fuehre diesen sinnvollen code aus ...
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{while} - Schleife}
Die Fakult\"at mit einer \code{while} Schleife:
\tiny
\begin{lstlisting}
i = 1;
x = 1;
while i <= 5
x = x * i;
i = i + 1;
end
\end{lstlisting}
\pause
\begin{lstlisting}
i = 1
while true %never ending loop!
disp(x);
x = x * i;
i = i + 1;
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Vergleich \code{for} vs. \code{while} Schleife}
\begin{itemize}
\item Beide f\"uhren den Code im Schleifenk\"orper iterative aus.
\item Der K\"orper einer \code{for} Schleife wird mindestens 1 mal
betreten.
\item Der K\"orper einer \code{while} Schleife wird nur dann
betreten, wenn die Bedinung im Kopf \textbf{true}
ist. \\$\rightarrow$ auch ``Oben-abweisende'' Schleife genannt.
\item Die \code{for} Schleife eignet sich f\"ur F\"alle in denen f\"ur
jedes Element eines Vektors der Code ausgef\"uhrt werden soll.
\item Die \code{while} Schleife ist immer dann gut, wenn nicht klar
ist wie h\"aufig etwas ausgef\"uhrt werden soll. Sie ist
speichereffizienter.
\item Jedes Problem kann mit beiden Typen gel\"ost werden.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{if} - Anweisung (bedingte Anweisung)}
\begin{itemize}
\item Wird genutzt um Programmcode nur unter bestimmten Bedingungen
auszuf\"uhren.
\begin{itemize}
\item Der Kopf der \code{if} Anweisung beginnt mit dem Schl\"usselwort \textbf{if}.
\item Dieses wird gefolgt von einem \underline{Booleschen
Ausdruck}.
\item Wenn dieser zu \textbf{true} ausgewertet werden kann, wird
der Code im K\"orper der Anweisung ausgef\"uhrt.
\item Optional k\"onnen weitere Bedingungen mit dem
Schl\"usselwort \textbf{elseif} folgen.
\item Ebenfalls optional ist die Verwendung des \textbf{else}
Falls, der immer dann ausgef\"uhrt wird wenn die vorherigen
Bedingungen nicht erf\"ullt werden.
\item Die \code{if} Anweisung wird mit \textbf{end} beendet.
\end{itemize}
\end{itemize}\pause
\tiny
\begin{lstlisting}
if x < y
% fuehre diesen code aus
elseif x > y
% etwas anderes soll getan werden
else
% wenn x == y wieder etwas anderes
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{if} - Anweisung (bedingte Anweisung)}
\tiny
\begin{lstlisting}[label=loopListing4]
x = rand(1); % eine einzelne Zufallszahl
if x < 0.5
disp('x is less than 0.5');
end
if x < 0.5
disp('x is less than 0.5!');
else
disp('x is greater than or equal to 0.5!')
end
if x < 0.5
disp('x is less than 0.5!');
elseif x < 0.75
disp('x is greater than 0.5 but less than 0.75!');
else
disp('x is greater than or equal to 0.75!')
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die \code{switch} - Verzweigung}
\begin{itemize}
\item Wird eingesetzt wenn mehrere F\"alle auftreten k\"onnen, die
einer unterschiedlichen Behandlung bed\"urfen.
\begin{itemize}
\item Wird mit dem Schl\"usselwort \textbf{switch} begonnen, gefolgt
von der \textit{switch Anweisung} (Zahl oder String).
\item Das Schl\"usselwort \textbf{case} gefolgt von der \textit{case
Anweisung} definiert gegen welchen Fall auf
\underline{Gleichheit} getestet wird.
\item Fuer jeden Fall wird beliebiger Programmcode ausgef\"uhrt.
\item Optional k\"onnen mit dem Schl\"usselwort \textbf{otherwise}
alle nicht explizit genannten F\"alle behandelt werden.
\item Die \code{switch} Anweisung wird mit \textbf{end} beendet.
\end{itemize}
\end{itemize}
\tiny
\begin{lstlisting}[label=switch_listing]
mynumber = input('Enter a number:');
switch mynumber
case -1
disp('negative eins');
case 1
disp('positive eins');
otherwise
disp('etwas anderes');
end
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Kontrollstrukturen}
\framesubtitle{Vergleich \code{if} und \code{switch} Anweisungen}
\begin{itemize}
\item Mit der \code{if} Anweisung k\"onnen beliebige F\"alle
unterschieden und entsprechender code ausgef\"uhrt werden.
\item Die \code{switch} Anweisung leistet \"ahnliches allerdings wird in
jedem Fall auf Gleichheit getestet.
\item Die \code{switch} Anweisung ist etwas kompakter, wenn viele F\"alle
behandelt werden m\"ussen.
\item Die \code{switch} Anweisung wird deutlich seltener benutzt und
kann immer durch eine \code{if} Anweisung erstezt werden.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{Die Schl\"usselworte \code{break} und \code{continue}}
Wenn die Ausf\"uhrung einer Schleife \"ubersprungen abgebrochen
werden soll, werden die Schl\"usselworte \textbf{break} und
\textbf{continue} eingesetzt.\\
\vspace{0.5cm}
\noindent Beispiel:
\tiny
\begin{lstlisting}
for x = 1:10
if(x > 2 & x < 5)
continue;
end
disp(x);
end
x = 1;
while true
if(x > 5)
break;
end
disp(x);
x = x + 1
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Kontrollstrukturen}
\framesubtitle{\"Ubung: 1-D random walk}
Programmiere einen 1-D random walk:
\begin{itemize}
\item In einem random walk ``l\"auft'' ein Objekt zuf\"allig mal in
die eine oder andere Richtung.
\item Programmiere 10 Realisationen eines random walk mit jeweils
1000 Schritten.
\item Die Position des Objektes ver\"andert sich in jedem Schritt um
+1 oder -1.
\item Merke Dir alle Positionen.
\item Plotte die Positionen als Funktion der Schrittnummer.
\end{itemize}
\end{frame}
\end{document}

View File

@@ -0,0 +1,449 @@
\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{color, soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0.4,1.,0.4}
\definecolor{stringcolor}{rgb}{0.1,0.6,0.1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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 die wissenschaftliche Datenverarbeitung}
\vspace{1em}
\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{stringcolor},
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{1. Graphische Darstellung von Daten}
\end{frame}
\begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten}
\framesubtitle{Was macht einen guten Plot aus?}
\begin{figure}
\centering
\includegraphics[width=0.9\columnwidth]{./images/convincing}
\end{figure}
\end{frame}
\begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten}
\framesubtitle{Was macht einen guten Plot aus?}
\begin{enumerate}
\item Klarheit.
\item Vollstaendige Beschriftung.
\item Deutliche Unterscheidbarkeit von Kurven.
\item Keine suggestive Darstellung.
\item Ausgewogenheit von Linienst\"arken Schrift- und Plotgr\"o{\ss}e.
\end{enumerate}
\begin{columns}
\begin{column}{4cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/bad_1.pdf}
\end{figure}
\end{column}
\begin{column}{4cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/bad_2.pdf}
\end{figure}
\end{column}
\begin{column}{4cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{./images/bad_3.pdf}
\end{figure}
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Graphische Darstellung von Daten}
\framesubtitle{Plotting Interface}
Es gibt zwei Wege Graphen zu bearbeiten:
\begin{enumerate}
\item \"Uber das \textit{graphische User Interface}\pause
\item Die Kommandozeile bzw. in Skripten und Funktionen.\pause
\end{enumerate}
Beides hat seine Berechtigung und seine eigenen Vor- und Nachteile. Welche?
\end{frame}
\begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten}
\framesubtitle{Ver\"andern von Eigenschaften \"uber die Kommandozeile}
\vspace{-0.75em}
\scriptsize
\begin{lstlisting}
fig = figure();
set(gcf, 'PaperUnits', 'centimeters', 'PaperSize', [11.7 9.0]);
set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0], 'Color', 'white')
hold on
plot(time, neuronal_data, 'color', [ 0.2 0.5 0.7], 'linewidth', 1.)
plot(spike_times, ones(size(spike_times))*threshold, 'ro', 'markersize', 4)
line([time(1) time(end)], [threshold threshold], 'linestyle', '--',
'linewidth', 0.75, 'color', [0.9 0.9 0.9])
ylim([0 35])
xlim([0 2.25])
box('off')
xlabel('time [s]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
ylabel('potential [mV]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
title('pyramidal cell', 'fontname', 'MyriadPro-Regular', 'fontsize', 12)
set(gca, 'TickDir','out', 'linewidth', 1.5, 'fontname', 'MyriadPro-Regular')
saveas(fig, 'spike_detection.pdf', 'pdf')
\end{lstlisting}
\end{frame}
\begin{frame} [fragile]
\frametitle{Graphische Darstellung von Daten}
\framesubtitle{Welche Art Plot wof\"ur?}
\url{http://www.mathworks.de/discovery/gallery.html}
\end{frame}
\begin{frame}[plain]
\huge{2. Fortgeschrittene Datenstrukturen}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\large
Bisher kennen wir folgende Datenstrukturen:
\begin{enumerate}
\item Skalare.
\item Vektoren.
\item Matrizen.
\end{enumerate}\pause
F\"ur die meisten F\"alle reicht das aus. Manchmal m\"ochte man aber
Dinge gemeinsam ablegen, die nicht den gleichen Datentyp haben.
\pause\\
Beispiel: Ich habe eine Reihe Versuchspersonen bei denen ich
verschiede Parameter (Alter, Geschlecht) zusammen mit den
Testergebnissen ablegen m\"ochte.
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\only<1> {
F\"ur diese Zwecke kennt MATLAB vier weitere Datenstrukturen:
\begin{enumerate}
\item Strukturen.
\item Cell Arrays.
\item Tabellen (neu seit 2013).
\item Objekte.
\end{enumerate}
}
\only <2> {
F\"ur diese Zwecke kennt MATLAB \st{vier} \textbf{drei} weitere Datenstrukturen:
\begin{enumerate}
\item Strukturen.
\item Cell Arrays.
\item Tabellen (neu seit 2013).
\item \st{Objekte.}
\end{enumerate}
}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\huge{Strukturen}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\begin{itemize}
\item Strukturen werden benutzt um beliebige zusammengeh\"orige
Daten in sog. Kontainern zu speichern.
\item Diese Daten k\"onnen \"uber den Namen des Kontainers oder
``Feldes'' angesprochen werden.
\item Man kann Listen von diesen Strukturen haben.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Strukturen}
Beispiel:
\footnotesize
\begin{lstlisting}
subjects(1).name = 'John Dow';
subjects(1).age = 35;
subjects(1).sex = 'm';
subjects(1).results = [1 2 3 4 5];
subjects(2).name = 'Jane Smith';
subjects(2).age = 32;
subjects(2).sex = 'f';
subjects(2).results = [1 2 3 4 5];
fieldnames(subjects)
ans =
'name'
'age'
'sex'
'results'
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Strukturen}
Beispiel:
\footnotesize
\begin{lstlisting}
subjects(1).name
ans =
'John Doe'
subjects(1).test2 = [];
fieldname(subjects(2))
ans =
'name'
'age'
'sex'
'results'
'test2'
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Strukturen}
\textbf{Vorteile:}
\begin{enumerate}
\item Strukturen koennen beliebige Werte aufnehmen.
\item Man kann Listen von Strukturen erstellen und darauf
indizieren.
\item Sind sehr leicht lesbar.
\item Addressieren von Feldern ist sehr intuitiv.
\end{enumerate}
\pause
\vspace{1cm}
\textbf{Nachteile:}
\begin{enumerate}
\item Alle Eintr\"age in einer Strukturliste m\"ussen gleichgefromt
sein.
\item Kein logisches Indizieren.
\item Elemente der Strukturen m\"ussen \"uber den Feldnamen
angesprochen werden.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\huge{Cell Arrays}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Cell Arrays}
\begin{enumerate}
\item Matrizen k\"onnen nur rechtwinklig sein.
\item Manchmal hat man aber unterschiedlich viele Datenpunkte, die
dennoch logisch zusammengeh\"oren.
\item Z.B. Wenn man Zeitpunkte von Neuronalen- oder Verhaltensereignissen hat.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Cell Arrays}
\scriptsize
\begin{lstlisting}
>> % create a cell array
>> cell_array = {};
>>
>> % assignment of arbitrary content
>> cell_array{1} = ones(100,1);
>> cell_array{2} = ones(10000,100);
>> cell_array{3} = 'das ist ein Test';
>> cell_array{4} = {};
>>
>> % accessing of content
>> size(cell_array{1})
ans =
100 1
>>
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Cell Arrays}
\textbf{Vorteile:}
\begin{enumerate}
\item Kann alle m\"oglichen Daten ablegen.
\item Benutzung m\"oglich ohne Kenntnis von Feldnamen.
\end{enumerate}\pause
\vspace{1cm}
\textbf{Nachteile:}
\begin{enumerate}
\item Manchmal un\"ubersichtlich.
\item Adressieren mit ${}$ ist eher ungew\"ohnlich.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{``Strukturen'' und ``Cell Arrays''}
\huge{Tabellen}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Tabellen}
\begin{enumerate}
\item Datenstruktur \"ahnlich zu Excel Tabellen.
\item Jede Spalte ist eine Kategorie.
\item Verschiedene Spalten k\"onnen unterschiedliche Datentypen
haben.
\item Unterst\"utzung von Filteroperationen auf Spalten und Zeilen.
\item Kann direkt \textit{*.xlsx} Dateien importieren.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Tabellen}
\scriptsize
\begin{lstlisting}
data = tabelread('spreadsheet.xlsx');
% Anzahl Reihen
height(data)
% Anzahl Spalten
width(data)
% Zugriff auf eine Spalte ueber den Namen
data.name
% Auswahl mittels logischem Indexing
data.name(data.alter < 25);
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Fortgeschrittene Datenstrukturen}
\framesubtitle{Tabellen}
\textbf{Vorteile:}
\begin{enumerate}
\item Sehr gut geeignet f\"ur Tabellenartige Daten.
\item Sehr intuitive Darstellung.
\item Bequemes Speichern und Laden solange Standardformate benutzt
werden.
\end{enumerate}
\pause
\vspace{1cm}
\textbf{Nachteile:}
\begin{enumerate}
\item Alle Spalten m\"ussen gleich gross sein.
\item Erfordert, sich auf ein Matlab eher untypisches Konzept einzulassen.
\item Komplexe Datenformate sind nicht einfach zu lesen (generelles
Matlab String parsing problem).
\end{enumerate}
\end{frame}
\end{document}

View File

@@ -0,0 +1,123 @@
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
\definecolor{crimson}{HTML}{DC143C}
\definecolor{cornflowerblue}{HTML}{6495ED}
\definecolor{dodgerblue}{HTML}{1E90FF}
\definecolor{deepskyblue}{HTML}{00BFFF}
\definecolor{gainsboro}{HTML}{DCDCDC}
\definecolor{ghostwhite}{HTML}{F8F8F8}
\definecolor{lightgray}{HTML}{D3D3D3}
\newenvironment<>{emphasize}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=orange!100}
\setbeamercolor{block body}{fg=black,bg=cornflowerblue!70}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\newenvironment<>{solution}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=dodgerblue!100}
\setbeamercolor{block body}{fg=black,bg=lightgray!70}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\newenvironment<>{question}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=dodgerblue!100}
\setbeamercolor{block body}{fg=black,bg=lightgray!70}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\renewenvironment<>{definition}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=dodgerblue!100}
\setbeamercolor{block body}{fg=black,bg=lightgray!70}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\newenvironment<>{description}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=white,bg=gray}
\setbeamercolor{block body}{fg=black,bg=gray!30}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{family=\sffamily, series=\bfseries}
\setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\newenvironment<>{task}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=dodgerblue!100}
\setbeamercolor{block body}{fg=black,bg=deepskyblue!80}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
\newenvironment<>{summary}[1]{%
\begin{actionenv}#2%
\def\insertblocktitle{#1}%
\par%
\mode<presentation>{%
\setbeamercolor{block title}{fg=black,bg=blue!40}
\setbeamercolor{block body}{fg=black,bg=blue!20}
% \setbeamercolor{itemize item}{fg=orange!20!black}
% \setbeamertemplate{itemize item}[triangle]
\setbeamerfont{block title}{series=\bfseries}
% \setbeamerfont{block body}{family=\ttfamily}
}%
\usebeamertemplate{block begin}}
{\par\usebeamertemplate{block end}\end{actionenv}}
%%%%%%%%%%%%%%%%%%% PROGRESSBAR %%%%%%%%%%%%%%%%%%%%%%%%%%
\definecolor{pbblue}{HTML}{0A75A8}% filling color for the progress bar
\definecolor{pbgray}{HTML}{575757}% background color for the progress bar
\definecolor{pbgreen}{HTML}{57EE57}% green color for the progress bar

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

View File

@@ -0,0 +1,29 @@
import matplotlib.pyplot as plt
import numpy as np
from IPython import embed
time = np.arange(0.,10., 0.001)
x = np.random.randn(len(time))
selection = x[(time > 5.) & (time < 6.)]
fig = plt.figure()
fig.set_facecolor("white")
fig.set_size_inches(5.5, 2.5)
ax = fig.add_subplot(111)
ax.plot(time, x, label="data", lw=.5)
ax.plot(time[(time > 5.) & (time < 6.)], selection, color='r', lw=0.5, label="selection")
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.xaxis.linewidth=1.5
ax.yaxis.linewidth=1.5
ax.tick_params(direction="out", width=1.25)
ax.tick_params(direction="out", width=1.25)
ax.set_xlabel("time [s]")
ax.set_ylabel("intensity")
ax.legend(fontsize=8)
fig.tight_layout()
fig.savefig("logicalIndexingTime.pdf")

View File

@@ -0,0 +1,17 @@
\documentclass[12pt]{report}
\input{../../header}
\lstset{inputpath=../code}
\graphicspath{{images/}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\include{programming}
\end{document}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,649 @@
\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 die wissenschaftliche Datenverarbeitung}
\vspace{1em}
\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]
\frametitle{Rekapitulation}
\begin{enumerate}
\item Variablen\pause
\item Vektoren\pause
\item Matrizen\pause
\item Boolesche Operationen\pause
\item Logische Indizierung\pause
\item Kontrollstrukturen
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Tagesmen\"u}
\begin{enumerate}
\item Was ist ein Program?
\item Skripte und Funktionen
\item Programmierstil
\item Vom Problem zum Algorithmus
\item \"Ubungen, \"Ubungen, \"Ubungen.
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{1. Was ist ein Programm?}
\end{frame}
\begin{frame}
\frametitle{Was ist ein Programm?}
\framesubtitle{Und wo lebt es?}
Ein Programm ist ...
\begin{itemize}
\item ... eine Sammlung von Anweisungen.
\end{itemize}\pause
Es lebt in ...
\begin{itemize}
\item ... einer Datei auf dem Rechner.
\end{itemize}\pause
Wenn es zum Leben erweckt wird...
\begin{itemize}
\item ... wird es Zeile f\"r Zeile von oben nach unten ausgef\"uhrt.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Was ist ein Programm?}
\framesubtitle{In Matlab}
\begin{itemize}
\item Matlab kennt verschieden Arten von Programmen:
\begin{enumerate}
\item Skripte
\item Funktionen
\item Objekte (werden wir ignorieren)
\end{enumerate}\pause
\item Alle werden in sogenannte m-files gespeichert
(z.B. \textit{meinProgramm.m}).
\item K\"onnen dann von der Kommandozeile aufgerufen werden.
\item Programme erh\"ohen die Wiederverwertbarkeit von Programmcode.\pause
\item Programme k\"onnen andere Programme aufrufen.
\end{itemize}
\end{frame}
\begin{frame}[plain]
\huge{2. Skripte und Funktionen}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Skripte}
Beispiel: Plot von Sinusschwingungen
\footnotesize
\begin{lstlisting}
t = (0:0.01:10); %s
frequenz_1 = 1;
frequenz_2 = 2;
y = sin(frequenz_1 * t * 2 * pi);
y2 = sin(frequenz_2 * t * 2 * pi);
plot(t, y);
hold on;
plot(t, y2);
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{\"Ubungen}
\begin{enumerate}
\item \"Offnet den Editor und schreibt ein Skript, das vier Sinus
mit den Amplituden \code{amplitudes = [0.25, 0.5, 1.0, 2.0]} und
der Frequenz 2\,Hz in einen Graphen plottet (\code{sinus = sin(x *
frequency * 2 * pi)* amplitude;}). Benutzt eine \verb+for+ Schleife um
die Amplituden abzuarbeiten (\verb+hold on+ um Linien
\"ubereinander zu plotten).
\item Speichert das Skript und f\"uhrt es von der Kommandozeile aus.
\item Erzeuge ein zweites Skript, das nun das erste aufruft aber bei
jedem Aufruf die Frequenz (Variable \code{frequency}) neu
setzt. Benutzt eine \verb+for+ Schleife um folgende Frequenzen
abzuarbeiten \code{frequencies = [2.0, 4.0, 6.0]}.
\item Speichert und ruft dieses Skript \"uber die Kommandozeile
auf.
\item Was ist geplottet, passt es zu den Erwartungen?
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Skripte und Funktionen}
\framesubtitle{Skripte}
Vorherige \"Ubung sollte gezeigt haben, dass ...
\begin{enumerate}
\item die Verwendung von globalen Variablen gef\"ahrlich sein kann.
\item jede Variable, die in einem aufgerufenen Skript definiert wird
im globalen Workspace sichtbar wird.
\end{enumerate}
\large{Wie l\"ost man dieses Problem?}\\
\vspace{3em} \huge{Funktionen!}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Definition:
\begin{itemize}
\item Eine Funktion in Matlab wird \"ahnlich zu einer mathematischen
Funktion definiert:\\
\begin{center}
\Large$y = f(x)$\normalsize\pause
\end{center}
\end{itemize}
\tiny
\begin{lstlisting}
function y = function_name(arg_1, arg_2)
% ^ ^ ^
% Rueckgabewert Argument_1 Argument_2
end
\end{lstlisting}
\normalsize
\begin{itemize}
\item Ein Funktion beginnt mit dem Schl\"usselwort \textbf{function}
gefolgt von den R\"uckgabewerten, dem Funktionsnamen und (in
Klammern) den Argumenten.
\item Auf den Funktionskopf folgt der auszuf\"uhrende Programmcode
im Funktionsk\"orper.
\item Die Funktionsdefinition wird mit \textbf{end} abgeschlossen.
\item Eine Funktion ist in einer eigenen Datei definiert.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Was erreicht man damit?
\begin{itemize}
\item Kapseln von Programmcode, der f\"ur sich eine Aufgabe l\"ost.
\item Definierte Schnittstelle.
\item Eigener G\"ultigkeitsbereich:
\begin{itemize}
\item Variablen im Workspace sind in der Funktion \textbf{nicht} sichtbar.
\item Variablen, die in der Funktion definiert werden erscheinen
\textbf{nicht} im Workspace.
\end{itemize}
\item Erhöht die Wiederverwendbarkeit von Programmcode.
\item Erh\"oht die Lesbarkeit von Programmen, da sie
\"ubersichtlicher werden.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Eine Beispielfunktion, die eine Reihe Sinus plottet.
\footnotesize
\begin{lstlisting}
function meine_erste_funktion() % Funktionskopf
t = (0:0.01:2); % hier faengt der Funktionskoerper an
frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25];
for i = 1:length(amplituden)
y = sin(frequenz * t * 2 * pi) * amplituden(i);
plot(t, y)
hold on;
end
\end{lstlisting}
\begin{center}
\large{\textbf{Ist das eine gute Funktion?}}
\end{center}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\tiny
\begin{lstlisting}
function meine_erste_funktion()
t = (0:0.01:2);
frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25];
for i = 1:length(amplituden)
y = sin(frequenz * t * 2 * pi) * amplituden(i);
plot(t, y)
hold on;
end
\end{lstlisting}
\normalsize
Probleme mit dieser Funktion:
\begin{itemize}
\item Der Name ist nicht aussagekr\"aftig.
\item Die Funktion ist f\"ur genau einen Zweck gut.
\item Was sie tut, ist festgelegt und kann von au{\ss}en nicht
beeinflusst werden.
\item Sie tut 3 Dinge: Sinus berechnen \textbf{und} Amplituden
\"andern \textbf{und} graphisch darstellen.
\item Es ist nicht (einfach) m\"oglich an die berechneten Daten zu
kommen.
\item Keinerlei Dokumentation. Ich muss den code lesen um zu
rekonstruieren, was sie tut.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen} \framesubtitle{Funktionen }
\huge{Wie kann die Funktion besser gemacht werden?}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\begin{enumerate}
\item Manchmal ist es besser noch mal neu anzufangen als
Kleiningkeiten zu verbessern:
\item Welches Problem soll gel\"ost werden?
\item Aufteilen in Teilprobleme.
\item Gute Namen finden.
\item Definieren der Schnittstellen --- Was muss die Funktion
wissen? Was möchte ich von ihr haben?
\item Daten zur\"uck geben (R\"uckgabewerte definieren).
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\textbf{\large{Drei Teilprobleme:}}
\begin{enumerate}
\item Berechnen der \textbf{einzelnen} Sinus.
\item Plotten der Daten.
\item Koordinieren von Berechung und Darstellung mit
unterschiedlichen Amplituden.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\large{\textbf{1. Berechnen eines einzelnen Sinus:}}
\tiny
\begin{lstlisting}
function meine_erste_funktion()
t = (0:0.01:2);
frequenz = 1.0;
amplituden = 1.0 1.25;
y = sin(frequenz * t * 2 * pi) * amplitude;
end
\end{lstlisting}
\normalsize
\begin{enumerate}
\item Namen ersetzten
\item Schnittstelle definieren: Was will ich von der Funktion?
Welche Information muss ich ihr geben?\pause
\begin{itemize}
\item Funktion muss wissen: Wie weit soll gerechnet werden? Welche
Aufl\"osung auf der Zeitachse? Welche Frequenz? Welche Amplitude?
\item F\"ur einen Plot brauche ich die x- und die y-Werte. Diese
muss die Funktion zur\"uckgeben.
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Namens\"anderung:
\footnotesize
\begin{lstlisting}
function calculate_sinewave()
t = (0:0.01:2);
frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25];
y = sin(frequenz * t * 2 *pi) * amplituden(i);
end
\end{lstlisting}
\normalsize
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Argumente:
\footnotesize
\begin{lstlisting}
function calculate_sinewave(frequency, amplitude, t_max, t_step)
x = (0:t_step:t_max);
y = sin(frequency * t * 2 * pi) * amplitude;
end
\end{lstlisting}
\normalsize
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
R\"uckgabewerte:
\tiny
\begin{lstlisting}
function [t, y] = calculate_sinewave(frequency, amplitude, t_max, t_step)
x = (0:t_step:t_max);
y = sin(frequency * t * 2 * pi) * amplitude;
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\large{\textbf{2. Plotten einer einzelnen Schwingung:}}
\normalsize
\begin{enumerate}
\item Namen finden
\item Schnittstelle definieren: Was will ich von der Funktion?
Welche Information muss ich ihr geben?\pause
\begin{itemize}
\item Funktion muss wissen: Welche Daten soll sie plotten? Zeitachse,
y-Werte, einen Namen f\"ur die Legende?
\item Muss nichts zur\"uckgeben.
\end{itemize}
\end{enumerate}
\footnotesize
\begin{lstlisting}
function plot_sinewave(x_data, y_data, name)
plot(x_data, y_data, 'displayname', name)
end
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
\large{\textbf{3. Erstellen eines \textbf{Skriptes} zur Koordinierung:}}
\normalsize
\begin{enumerate}
\item Namen finden
\item Definieren eins Vektors, f\"ur die Amplituden.
\item Definieren einer Variable f\"ur die Frequenz.
\item Definieren der Variablen f\"ur das Maximum und die
Schrittweite der x-Achse.
\item \"Offnen einer neuen Abbildung (\code{figure()}).
\item Setzen des \code{hold on}.
\item \code{for}-Schleife, die über die Amplituden iteriert, die
Sinus berechnen l\"asst und die Resultate an die Plot-Funktion
weiterreicht.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Skript: \verb+plot_sinewaves.m+
\footnotesize
\begin{lstlisting}
amplitudes = 0.25:0.25:1.25;
frequency = 2;
t_max = 10;
t_step = 0.01;
figure()
hold on
for a = amplitudes
name = num2str(a);
[x_data, y_data] = calculate_sinewave(frequency, a, t_max, t_step);
plot_sinewave(x_data, y_data, name)
end
legend('show')
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen}
Aufaben:
\begin{enumerate}
\item Erweitert das Programm so, dass auch ein Satz von Frequenzen
benutzt wird.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Skripte und Funktionen}
\framesubtitle{Funktionen --- Zusammenfassung}
Funktionen sind kleine Code Fragmente, die
\begin{enumerate}
\item ... genau eine Aufgabe erledigen.
\item ... Argumente entgegennehmen k\"onnen.
\item ... R\"uckgabewerte haben k\"onnen.
\item ... ihren eigenen G\"ultigkeitsbereich haben.
\item ... Skripten fast immer vorzuziehen sind.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Skripte und Funktionen}
\framesubtitle{Organisation von Programmen}
\begin{itemize}
\item Mit den Funktionen haben wir ein Werkzeug, dass uns erlaubt
ein Programm in kleine, ``verdauliche'', Teile zu gliedern.
\end{itemize}
Ein m\"ogliches Programmlayout k\"onnte so aussehen:
\begin{figure}
\includegraphics[width=0.5\columnwidth]{./images/simple_program.pdf}
\end{figure}
\end{frame}
\begin{frame}[plain]
\huge{3. Programmierstil}
\end{frame}
\begin{frame}
\frametitle{Skripte und Funktionen}
\framesubtitle{Programmierstil}
Programmierstil ist:
\begin{enumerate}
\item Die Namensgebung fuer Variablen und Konstanten.
\item Die Namensgebung von Skripten und Funktionen.
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben.
\item Verwendung von Kommentaren und Hilfetexten.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Programmierstil}
\framesubtitle{Was soll das?}
\begin{enumerate}
\item Die Namensgebung fuer Variablen und Konstanten.
\item Die Namensgebung von Skripten und Funktionen.
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben.
\item Verwendung von Kommentaren und Hilfetexten.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen}
\framesubtitle{Programmierstil}
In verschiednen Sprachen verschiedene Konventionen. In MATLAB ...
\begin{itemize}
\item Funktionen, Skripte: Kleinbuchstaben, Abk\"urzungen. (z.B. \verb+xcorr+, \verb+repmat+)
\item Konvertierungen immer mit format2format (z.B. \verb+num2str+)
\item Variablen immer klein, h\"aufig Abk\"urzungen.
\item Kommentare h\"aufig fuer interne Zwecke aber ausf\"uhrliche Dokumentation mit Hilftexten.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil}
Es gibt verschiedene ''Religionen''. Ein m\"ogliches Credo k\"onnte
sein: \\
\textbf{``Programmcode muss lesbar sein.''}\pause
\begin{enumerate}
\item Variablen werden klein geschrieben. Wenn n\"otig entweder im
\textit{camelCase} oder mit Unterstrichen (z.B. \verb+spikeCount+
oder \verb+spike_count+).
\item Funktionen und Skripte mit ausdrucksstarken Namen (z.B. \verb+loadSpikeData+).
\item Kommentare sparsam. Eventuell um Abschnitte zu trennen.
\item Hilfetexte: Ein Problem; sie m\"ussen aktuell sein sonst sind
sie sch\"adlicher als wenn sie gar nicht da w\"aren.
\item Einr\"uckung ist Pflicht.
\item Bl\"ocke im Code werden durch 1 Leerzeile getrennt.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Programmierstil}
Ihr d\"urft all das missachten und einen eingenen Stil entwickeln. Aber:\\
\vspace{2.5cm}
\centering
\huge{Bleibt konsitent!}\pause
\vspace{2.5cm}
\normalsize
Es gibt dazu ganze B\"ucher. z.B. Robert C. Martin: \textit{Clean
Code: A Handbook of Agile Software Craftmanship}, Prentice Hall
\end{frame}
\end{document}
\begin{frame}[plain]
\huge{4. Vom Problem zum Algorithmus zum Programm}\\
\begin{figure}
\centering
\includegraphics[height=0.6\textheight]{./images/turtur}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Vom Problem zum Algorithmus}
\framesubtitle{Uff, schwierig...}
\begin{enumerate}
\item Am besten f\"angt man mit einem weissen Blatt an. :-) \pause
\item Begr\"abt alle Angst vor Fehlern. \pause
\item Macht sich klar, was das die Ausgangsituation ist.\pause
\item Macht sich klar, was das Ziel ist.\pause
\item Zerlegt das Problem in kleinere Teile und wendet Schritte 1 - 5 auf jedes Teilproblem an.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Vom Problem zum Algorithmus}
\framesubtitle{\"Ubungen - eine Herausforderung}
Wie w\"are es mit folgendem Problem:\\
Ich habe die Aufnahme des Membranpotentials einer Nervenzelle...
\begin{enumerate}
\item ... und m\"ochte die Zeitpunkte der Aktionspotentiale ermitteln.
\item ... und m\"ochte die Anzahl der Aktionspotentiale wissen.
\end{enumerate}\pause
Aufgaben:
\begin{enumerate}
\item Formuliert geeignete Zwischenziele.
\item Entwickelt einen Ansatz um dieses Problem zu lösen.
\end{enumerate}
\end{frame}
\end{document}

View File

@@ -0,0 +1,393 @@
\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[]{Introduction to Scientific Computing -- \\
Cross-Correlation, Spike--Triggered--Average and Reverse Reconstruction}
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
Universit\"at T\"ubingen}
\institute[Introduction to Scientific Computing]{}
\date{2014/10/13 - 2014/11/07}
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung}
\vspace{1em}
\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{Introduction to scientific computing}
\frametitle{Menue}
\begin{enumerate}
\item Cross-correlation
\item Estimation of the Spike--Triggered--Average -- STA
\item Reverse reconstruction
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{1. Recapitulation: Plotting neuronal activity as a function of time.}
\end{frame}
\begin{frame}
\frametitle{Recapitulation}
\only<1>{
\framesubtitle{Displaying the neuronal response over time - Rasterplot}
\begin{figure}
\centering
\includegraphics[width=0.375\columnwidth]{images/rasterplot}
\end{figure}
}
\only<2>{
\framesubtitle{Displaying the neuronal response over time - PSTH}
\begin{figure}
\centering
\includegraphics[width=0.5\columnwidth]{images/conv}
\end{figure}
}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Displaying the neuronal response over time - PSTH}
\begin{itemize}
\item What does this tell us? \pause
\item Wouldn't it be more interesting to relate the response to the stimulus?!
\end{itemize}
\end{frame}
\begin{frame}[plain]
\huge{2. Relating stimulus and response}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{How can we relate the response to the stimulus?}
\begin{figure}
\centering
\includegraphics[height=0.75\textheight]{images/conv_stim}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Cross--correlation}
The cross - correlation for (time) discrete data is defined as:
\begin{equation}
Q_{rs}(\tau) = \frac{1}{2\cdot N-|\tau|} \displaystyle\sum^{T}_{\tau=-T}{r(t) \cdot s(t-\tau)} \cdot \Delta \tau
\end{equation}
\pause
Don't worry, this is already implemented in MATLAB!
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Cross--correlation}
\footnotesize
\begin{lstlisting}
[c,lags] = xcorr(stimulus, response, 10000, 'unbiased');
fig = figure();
set(fig, 'PaperUnits', 'centimeters');
set(fig, 'PaperSize', [11.7 9.0]);
set(fig, 'PaperPosition',[0.0 0.0 11.7 9.0]);
set(fig,'Color', 'white')
plot(lags/sample_rate, c)
xlabel('lag [s]')
ylabel('correlation')
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Cross--correlation}
\begin{figure}
\includegraphics[width=0.5\linewidth]{images/correlation}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Cross--correlation - Exercises}
\begin{enumerate}
\item Calculate the cross-correlation between two vectors of random
numbers.
\item Calculate the cross-correlation between one of these vectors
and itself (auto-correlation).
\item Calculate the cross-correlation between one vector and a
time-shifted version of itself (use \verb+circshift+ to do this).
\item Generate two vectors of random numbers, one having a (slight)
correlation with the other.
\item Calculate the correlation coefficient (\verb+corrcoef+).
\item Calculate the cross-correlation.
\item Calculate the the correlation coefficient between the one
vector and a \verb+circshif+ted version of the other.
\item Calculate the cross-correlation of these.
\item Find out the maximum correlation and its position.
\end{enumerate}
\textbf{Note:} Select max\_lag to be less than 10\% of the length of
your vectors!
\end{frame}
\begin{frame}[fagile]
\frametitle{Relating stimulus and response}
\framesubtitle{Cross--correlation - Exercises}
\begin{enumerate}
\item Create the cross correlation of the p-unit data and stimulus.
\item \textbf{Note:} you have to convert the spike\_times to a PSTH!
\item Find out the position of the correlation peak.
\item What does it tell you?
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{2. Spike--Triggered--Average --- STA}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Spike--Triggered--Average --- STA}
The \textbf{STA} is the average stimulus that led to a spike in the
neuron.
\begin{equation}
STA(\tau) = \left\langle \frac{1}{n} \displaystyle\sum^{i=1}_{n}{s(t_i - \tau)} \right\rangle
\end{equation}
Sadly, we need to implement this ourselves.\newline\newline\pause
\vspace{1em}
\noindent
\textbf{Algorithm:}
\begin{enumerate}
\item For each spike a snippet is taken from the respective stimulus.
\item The snippets are averaged.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Spike--Triggered--Average -- STA}
\vspace{-1em}
\begin{figure}
\centering
\includegraphics[width=0.65\columnwidth]{images/sta}
\end{figure}
\pause
\vspace{-0.5em}
What does the \textbf{STA} tell us?
\begin{enumerate}
\item Is there a relation between stimulus and response? \pause
\item Is there a lag between them and how large is it? \pause
\item How far in the past does a neuron encode? \pause
\item Can it see into the future?
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{STA -- Exercises}
\textbf{Exercise:}
\begin{enumerate}
\item Write a function \verb+sta(x, y, count, sample_rate)+ that
takes the stimulus (x), the response (y, as spike times), the
number (count) of sample points it should cut out from the
stimulus and the sample\_rate to convert from times to
indices.
\item \textbf{Beware:} sometimes the spike\_time may be too close
to the beginning or the end of the stimulus to cut out enough
data.
\item Calculate the STA for P-unt data.
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{3. Reverse reconstruction using the \textbf{STA}}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Reverse reconstruction using the \textbf{STA}}
\textbf{Basic idea:}\newline
\begin{itemize}
\item The \textbf{STA} is the average stimlus that led to a spike. \pause
\item The other way round: Whenever we observe a spike, the stimulus
was likely to have looked like the \textbf{STA}.\pause
\item Thus, we should be able to reconstruct how the stimulus looked
like to evoke the observed response.
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\frametitle{Relating stimulus and response}
\framesubtitle{Reverse reconstruction using the \textbf{STA}}
\textbf{Algorithm:}\newline
\begin{enumerate}
\item Estimate the \textbf{STA}. \pause
\item Create a binary representation of the spike train (vector of
\verb+zeros+ in which each \textbf{1} signals the occurence of a
spike).\pause
\item Use the STA as a Kernel (compare to the spike convolution
method to create the PSTH) and convolve (\verb+conv+) it with the
\textbf{STA}.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Reverse reconstruction using the \textbf{STA}}
\textbf{Exercise:}
\begin{enumerate}
\item Reconstruct the stimulus from the P-unit data.
\item Plot original and reconstructed stimulus into the same plot.
\item Are they similar? In which instances are they different?
\item Estimate the differences in terms of the
\textit{mean-square-error} you have used in week 2. Normalize it
to the standard-deviation of the original stimulus.
\item Estimate the \textbf{STA} on the basis of the first half of
the data and reconstruct the stimulus of the second half.
\item Compare the reconstruction errors.
\item How strongly does the error depend on the amount of data you
use?
\end{enumerate}
\end{frame}
\end{document}
\begin{frame}[plain]
\huge{4. Spike--Triggered--Covariance \textbf{STC}}
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Spike--Triggered--Covariance \textbf{STC}}
\textbf{Problem:}
\begin{itemize}
\item The \textbf{STA} is a linear filter.
\item It can only reveal linear relationships between stimulus and response.\pause
\end{itemize}
\vspace{1em}
Further relations can be recovered using the Spike-triggered-covariance.\pause
\begin{equation}
STC = \frac{1}{N-1} \cdot \displaystyle\sum_{n=1}^{N}[\overrightarrow{s}(t_n) - STA]
[\overrightarrow{s}(t_n) - STA]^T
\end{equation}
where:\\ $N$ is the total number of spikes,
$\overrightarrow{s}(t_n)$ the stimulus snippet for the $n^{th}$
spike, and $STA$ the Spike-Triggered-Average.
\end{frame}
\begin{frame}
\frametitle{Relating stimulus and response}
\framesubtitle{Spike--Triggered--Covariance}
\begin{itemize}
\item
\end{itemize}
\end{frame}
\end{document}

View File

@@ -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<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}
}
\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}

View File

@@ -0,0 +1,506 @@
\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}