rename programming/lectures
31
programming/lecture/Makefile
Normal 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
|
||||
|
||||
|
||||
61
programming/lecture/beamercolorthemetuebingen.sty
Normal 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>
|
||||
442
programming/lecture/boolean_logical_indexing-slides.tex
Normal 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}
|
||||
439
programming/lecture/control_structures-slides.tex
Normal 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}
|
||||
449
programming/lecture/data_structures-slides.tex
Normal 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}
|
||||
123
programming/lecture/environments.tex
Normal 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
|
||||
|
||||
BIN
programming/lecture/images/AnotB.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
programming/lecture/images/AundB.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
programming/lecture/images/AvB.png
Normal file
|
After Width: | Height: | Size: 176 KiB |
BIN
programming/lecture/images/AxorB.png
Normal file
|
After Width: | Height: | Size: 102 KiB |
1939
programming/lecture/images/arrayIndexing.pdf
Normal file
BIN
programming/lecture/images/bad_1.pdf
Normal file
BIN
programming/lecture/images/bad_2.pdf
Normal file
BIN
programming/lecture/images/bad_3.pdf
Normal file
BIN
programming/lecture/images/beetA.png
Normal file
|
After Width: | Height: | Size: 167 KiB |
BIN
programming/lecture/images/beetB.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
programming/lecture/images/beete.png
Normal file
|
After Width: | Height: | Size: 302 KiB |
BIN
programming/lecture/images/binning.pdf
Normal file
BIN
programming/lecture/images/bucket.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
programming/lecture/images/conv.pdf
Normal file
BIN
programming/lecture/images/conv_stim.pdf
Normal file
BIN
programming/lecture/images/correlation.pdf
Normal file
BIN
programming/lecture/images/grundmenge.png
Normal file
|
After Width: | Height: | Size: 158 KiB |
BIN
programming/lecture/images/histogram.png
Executable file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
programming/lecture/images/histogrambad.png
Executable file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
programming/lecture/images/histogrambad2.png
Executable file
|
After Width: | Height: | Size: 3.4 KiB |
BIN
programming/lecture/images/imaging.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
programming/lecture/images/isi.pdf
Normal file
7651
programming/lecture/images/matrices.pdf
Normal file
6870
programming/lecture/images/matrixIndexing.pdf
Normal file
5179
programming/lecture/images/matrixLinearIndexing.pdf
Normal file
2797
programming/lecture/images/scalarArray.pdf
Normal file
BIN
programming/lecture/images/simple_program.pdf
Normal file
BIN
programming/lecture/images/ski_wueste.jpg
Normal file
|
After Width: | Height: | Size: 98 KiB |
BIN
programming/lecture/images/turtur.jpg
Normal file
|
After Width: | Height: | Size: 375 KiB |
2190
programming/lecture/images/variable.pdf
Normal file
2133
programming/lecture/images/variableB.pdf
Normal file
BIN
programming/lecture/images/wueste.jpg
Normal file
|
After Width: | Height: | Size: 159 KiB |
29
programming/lecture/logicalIndexingTime.py
Normal 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")
|
||||
|
||||
|
||||
17
programming/lecture/programming-chapter.tex
Normal file
@@ -0,0 +1,17 @@
|
||||
\documentclass[12pt]{report}
|
||||
|
||||
\input{../../header}
|
||||
|
||||
\lstset{inputpath=../code}
|
||||
|
||||
\graphicspath{{images/}}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{document}
|
||||
|
||||
\include{programming}
|
||||
|
||||
\end{document}
|
||||
|
||||
1297
programming/lecture/programming.tex
Normal file
1050
programming/lecture/programming_basics.tex
Normal file
649
programming/lecture/scripts_functions-slides.tex
Normal 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}
|
||||
393
programming/lecture/sta_stc.tex
Normal 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}
|
||||
299
programming/lecture/variables_datatypes-slides.tex
Normal 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}
|
||||
506
programming/lecture/vectors_matrices-slides.tex
Normal 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}
|
||||