lectures proceeding

This commit is contained in:
Jan Grewe 2015-10-07 18:22:04 +02:00
parent d7b28b9dcf
commit 07677d2526
2 changed files with 825 additions and 0 deletions

View File

@ -0,0 +1,299 @@
\documentclass{beamer}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pgf}
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade}
%\usepackage{multimedia}
\usepackage[english]{babel}
\usepackage{movie15}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{amsmath}
\usepackage{bm}
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{scalefnt}
\usepackage{tikz}
\usepackage{ textcomp }
\usepackage{soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0,1.,0}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<presentation>
{
\usetheme{Singapore}
\setbeamercovered{opaque}
\usecolortheme{tuebingen}
\setbeamertemplate{navigation symbols}{}
\usefonttheme{default}
\useoutertheme{infolines}
% \useoutertheme{miniframes}
}
\AtBeginSection[]
{
\begin{frame}<beamer>
\begin{center}
\Huge \insertsectionhead
\end{center}
% \frametitle{\insertsectionhead}
% \tableofcontents[currentsection,hideothersubsections]
\end{frame}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
\setbeamertemplate{blocks}[rounded][shadow=true]
\title[]{Scientific Computing -- Grundlagen der Programmierung }
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
Universit\"at T\"ubingen}
\institute[Wissenschaftliche Datenverarbeitung]{}
\date{12.10.2015 - 06.11.2015}
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung}
\titlegraphic{
\includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
}
%%%%%%%%%% configuration for code
\lstset{
basicstyle=\ttfamily,
numbers=left,
showstringspaces=false,
language=Matlab,
commentstyle=\itshape\color{darkgray},
keywordstyle=\color{blue},
stringstyle=\color{green},
backgroundcolor=\color{blue!10},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
captionpos=b,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mycite}[1]{
\begin{flushright}
\tiny \color{black!80} #1
\end{flushright}
}
\input{../../latex/environments.tex}
\makeatother
\begin{document}
\begin{frame}[plain]
\frametitle{}
\vspace{-1cm}
\titlepage % erzeugt Titelseite
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Resourcen}
\begin{enumerate}
\item Kursmaterialien auf Ilias
\url{https://ovidius.uni-tuebingen.de/ilias3/goto.php?target=crs_1090903&client_id=pr02}
\item Wintersemester 2015--2016 $\rightarrow$ 7
Mathematisch--Naturwissenschaftliche Fakult\"at $\rightarrow$ Biologie
$\rightarrow$ Biologie -- Master $\rightarrow$ Neurobiologie
$\rightarrow$ W1 Einf\"uhrung in die wissenschaftliche
Datenverarbeitung\pause
\item Einloggen mit Uni-Kennung und Passwort
\item Zugriff auf den Kurs mit dem geheimen Passwort ``Spikes'' \pause
\item Ladet eure L\"osungen in den entsprechenden Ordner hoch.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Themen Woche 1}
\begin{enumerate}
\item MATLAB Entwicklungsumgebung
\item Variablen und Datentypen
\item Vektoren und Matrizen
\item Boolesche Operationen
\item Kontrollstrukturen
\item Was ist ein Programm, Stil und Kommentare
\item Vom Problem zum Algorithmus
\item Skripte und Funktionen
\item Graphische Darstellung von Neuro Daten, PSTH, Rasterplot
\item Fortgeschrittene Datenstrukturen
\item String Parsing
\item Lesen und schreiben von Dateien, Navigation im Dateisystem
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Themen Woche 1}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/wueste}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Themen Woche 1}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/ski_wueste}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Tagesmen\"u}
\begin{enumerate}
\item [] Vormittag
\begin{enumerate}
\item Die MATLAB Entwicklungsumgebung \& Das Hilfesystem
\item Variablen und Datentypen
\item Skalare, Vektore und Matrizen
\end{enumerate}
\item [] Nachmittag:
\begin{enumerate}
\item \"Ubungen
\end{enumerate}
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{1. MATLAB\textsuperscript{\textregistered} IDE \& das Hilfesystem\\
--- ein etwas gr\"o{\ss}erer Taschenrechner ---}
\end{frame}
\begin{frame}[plain]
\huge{2. Variablen und Datentypen}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Variablen}
\begin{figure}
\centering
\includegraphics[width=0.2\columnwidth]{./images/bucket.png}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Variablen}
\huge"Eine Variable ist ein Platz im Speicher."
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variable.pdf}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Variablen}
\framesubtitle{Datentypen}
\begin{itemize}
\item \textit{integer} - Ganze Zahlen. Hier gibt es mehrere
Unterarten, die wir in Matlab (meist) ignorieren k\"onnen.
\item \textit{double} - Flie{\ss}kommazahlen.
\item \textit{complex} - Komplexe Zahlen.
\item \textit{logical} - Boolesche Werte, die als wahr
(\textit{true}) oder falsch (\textit{false}) interpretiert werden.
\item \textit{char} - ASCII Zeichen
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Variablen}
\framesubtitle{Datentypen}
\only<1>{
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variable.pdf}
\end{figure}
}
\only<2>{
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variableB.pdf}
\end{figure}
}
\end{frame}
\begin{frame}[fragile]
\frametitle{Variablen}
\framesubtitle{Erzeugen von Variablen und Wertezuweisung}
\scriptsize
\begin{lstlisting}[label=varListing1]
>> y = []
y =
[]
>>
>> x = 38
x =
38
>>
\end{lstlisting}
\normalsize
\end{frame}
%\subsection{Calculations with variables}
\begin{frame}[fragile]
\frametitle{Variablen}
\framesubtitle{Rechnen mit Variablen}
\tiny
\begin{lstlisting}[label=varListing2]
>> x = 1;
>> x + 10
ans =
11
>>
>> x % x wurde nicht veraendert
ans =
1
>>
>> y = 2;
>>
>> x + y
ans =
3
>>
>> z = x + y
z =
3
>>
>> z = z * 5;
>> z
z =
15
\end{lstlisting}
\end{frame}
%\subsection{\"Ubungen}
\begin{frame}
\frametitle{Variablen}
\framesubtitle{\"Ubungen 1}
\Large{Es ist Zeit f\"ur die ersten \"Ubungen!}
\normalsize
\begin{itemize}
\item \"Ubungszettel findet sich auf ILIAS:\\ W1 Einf\"uhrung in die
wissenschaftliche Datenverarbeitung $\rightarrow$ Woche 1 -
Grundlagen der Programmierung $\rightarrow$ \"Ubungen 1
$\rightarrow$ Variablen und Datentypen \pause
\item Abgabe erfolgt ebenfalls \"uber ILIAS in Form eines einzelnen Skripts \pause
\item Die ersten Schritte machen wir gemeinsam!
\end{itemize}
\end{frame}
\end{document}

View File

@ -0,0 +1,526 @@
\documentclass{beamer}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pgf}
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade}
%\usepackage{multimedia}
\usepackage[english]{babel}
\usepackage{movie15}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{amsmath}
\usepackage{bm}
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{scalefnt}
\usepackage{tikz}
\usepackage{ textcomp }
\usepackage{soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0,1.,0}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<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}[plain]
\huge{2. Vektoren und Matrizen}
\end{frame}
\begin{frame}
\frametitle{Vektoren und Matrizen}
\framesubtitle{Skalare vs. Vektoren}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/scalarArray.pdf}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren und Matrizen}
\framesubtitle{Erzeugen von Vektoren}
\tiny
\begin{lstlisting}[label=arrayListing1]
>> a = [0 1 2 3 4 5 6 7 8 9] % Erstellen eines Zeilenvektors
a =
0 1 2 3 4 5 6 7 8 9
>>
>> b = (0:9) % etwas bequemer
b =
0 1 2 3 4 5 6 7 8 9
>>
>> c = (0:2:10)
c =
0 2 4 6 8 10
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren und Matrizen}
\framesubtitle{Spalten \& Zeilenvektoren}
\tiny
\begin{lstlisting}[label=arrayListing2]
>> a = [1 2 3 4 5 6 7 8 9 10] % Erstellen eines Zeilenvektors
a =
1 2 3 4 5 6 7 8 9 10
>>
>> b = [1; 2; 3; 4; 5] % Erstellen eines Spaltenvectors
b =
1
2
3
4
5
>>
>> b = b' % Transponieren
b =
1 2 3 4 5
>>
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/arrayIndexing.pdf}
\end{figure}
\pause
Der Zugriff auf die Inhalte eines Vektors erfolgt \"uber den Index.\\
\textbf{Achtung!} Der erste Index ist die 1.
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\vspace{-0.5cm}
\tiny
\begin{lstlisting}
>> a = (11:20);
>> a(1) % das 1. Element
ans =
11
>>
>> a(5) % das 5. Element
ans =
15
>>
>> a(end) % das letzte Element
ans =
20
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\vspace{-0.5cm}
\tiny
\begin{lstlisting}
>> a([1 3 5]) % das 1., 3. und 5. Element
ans =
11 13 15
>>
>> a(2:4) % alle element von Index 2 bis 4
ans =
12 13 14
>>
>> a(1:2:end) %retrieve every second element
>> and =
>> 11 13 15 17 19
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.25cm}
\tiny
\begin{lstlisting}[label=arrayListing4]
>> a = (0:2:8);
>> a + 5 % addiere einen Skalar
ans =
5 7 9 11 13
>>
>> a * 2 % Multiplication
ans =
0 4 8 12 16
>>
>> a / 2 % Division
ans =
0 1 2 3 4
>>
>> a(1:3) + a(2:4) % Addieren von 2 Vektoren
ans =
2 6 10
>>
>> a(1:2) + a(2:4) % Vektoren muessen gleich gross sein!
??? Error using ==> plus
Matrix dimensions must agree.
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.25cm}
\tiny
Wie bekomme ich Informationen \"uber einen Vektor?
\begin{lstlisting}
>> a = (0:2:8);
>> % die Laenge eines
>> length(a)
ans =
5
>>
>> size(a)
ans =
1 5
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.25cm}
L\"oschen von Elementen:
\tiny
\begin{lstlisting}
>> a = (0:2:8);
>> length(a)
ans =
5
>>
>> a(1) = [] % loesche das erste Element
a =
2 4 6 8
>> a([1 3]) = []
a =
4 8
>> length(a)
ans =
2
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.25cm}
\tiny
Verkettung von Vektoren:
\begin{lstlisting}
>> a = (0:2:8);
>> b = (10:2:19);
>>
>> c = [a b] % erstelle einen Vektor aus einer Liste von Vektoren
c =
0 2 4 6 8 10 12 14 16 18
>> length(c)
ans =
10
>> length(a) + length(b)
ans =
10
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Einfache graphische Darstellung von Vektoren}
\begin{enumerate}
\item Erstellt ein neues script, L\"oschen aller Variablen, L\"oschen des Command Windows.\pause
\item Erzeugen eines Vektors, der die Zeit repr\"asentiert (0 bis 10 \times $\pi$ mit 0.05 Schrittweite).
\item Berechnung eines Sinus mit bliebiger Amplitude und Frequenz.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Vektoren}
\framesubtitle{Datentypen sind wichtig.}
Einlesen von unterschiedlichen Bin\"ardaten aus einer Datei
\begin{enumerate}
\item Aufr\"aumen des Workspaces, des Command Windows und \"offnen eines neuen Skripts.
\item Auf ILIAS liegen die folgenden Dates\"atze: signal1.bin, time.bin
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Vektoren}
\framesubtitle{Einlesen von unterschiedlichen
Bin\"a Daten aus einer Datei}
Szenario: Es werden elektrophysiologische Messungen gemacht. Die
Datein werden mit einer Messkarte digitalisiet, die eine 16 Bit
Aufl\"osung hat von 16 bit.
\begin{enumerate}
\item In welchem Datentyp sollten die Daten abgelegt werden, um
m\"oglichst Speichereffizient zu sein?
\item Um die Daten in z.B. die Membranspannungen umzuwandeln brauche
ich nur die Aufl\"osung und den Messbereich (16 bit auf den
Bereich $\pm$ 10\,V).
\item Aufr\"aumen des Workspaces, des Command Windows und \"offnen eines neuen Skripts.
\item Auf ILIAS liegen die folgenden Dates\"atze: signal1.bin, time.bin. signal2.bin
\end{enumerate}
\end{frame}
\begin{frame}{Matrizen}
\vspace{-0.5cm}
\begin{figure}
\centering
\includegraphics[width=0.65\columnwidth]{./images/matrices}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Matrizen}
\framesubtitle{Erzeugen von Matrizen}
\tiny
\begin{lstlisting}
>> a = [1 2 3; 4 5 6; 7 8 9]
>> a =
1 2 3
4 5 6
7 8 9
>>
>>
>> b = ones(3,3,2);
>> b
b(:,:,1) =
1 1 1
1 1 1
1 1 1
b(:,:,2) =
1 1 1
1 1 1
1 1 1
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Matrizen}
\framesubtitle{Indexierung und Zugriff auf Inhalte}
\vspace{-0.5cm}
\begin{figure}
\centering
\includegraphics[width=0.9\columnwidth]{./images/matrixIndexing}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Matrizen}
\framesubtitle{Indexierung}
\tiny
\begin{lstlisting}
>> x = roundi(100, [3, 4, 5]); % 3-D Matrix mit Zufallszahlen
>>
>> x(1,1,1); % obere linke Ecke
ans(1,1,1) =
14
>>
>> x(1,1,:) % obere linke Ecke entlang der 3. Dimension
ans(1,1,:) =
14
ans(:,:,2) =
58
ans(:,:,3) =
4
ans(:,:,4) =
93
ans(:,:,5) =
56
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Matrizen}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.5 cm}
\tiny
\begin{lstlisting}
>> A = randi(10, [3, 3]) % 2-D Matrix
A =
3 8 2
2 10 3
10 7 1
>> B = randi(10, [3, 3]) % dto
B =
2 1 7
1 5 9
5 10 5
>>
>> A*B % Matrix Multiplikation
ans =
24 63 103
29 82 119
32 55 138
>>
>> A.*B % Elementweise Multiplikation
ans =
6 8 14
2 50 27
50 70 5
>>
\end{lstlisting}
\end{frame}
\begin{frame}[plain]
\huge{Interludium: Matrixmultiplikation}
\end{frame}
\begin{frame}[fragile]
\frametitle{Matrizen}
\framesubtitle{\"Ubungen}
\begin{enumerate}
\item Erstelle eine 5 x 5 Matrix die Zufallszahlen enth\"alt (nutze die
MATLAB Funktion \verb+randn()+, benutze die Hilfe. Was macht sie?).
\begin{enumerate}
\item Gib alle Elemente der ersten Zeile aus.
\item Gib alle Elemente der zweiten Spalte aus.
\item Greife mit einem einzigen Kommando auf die Elemnte jeder
2. Spalte zu und speichere die Daten in einer neuen Variable.
\end{enumerate}
\item Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze die
\verb+cat()+ Funktion f\"ur diesen Zweck ( schaue in der Hilfe
nach, wie sie benutzt wird).
\begin{enumerate}
\item Gib alle Elemente des ersten ``Blattes'' aus (Index 1 in der 3. Dimension).
\end{enumerate}
\item Erstelle eine 3-D Matrix mithilfe der Funktion
\verb+ones()+. Multipliziere das erste Blatt mit 1, das zweite mit
2, dritte mit 3 etc.
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Matrizen}
\framesubtitle{\"Ubungen}
\begin{enumerate}\setcounter{enumi}{3}
\item Erstelle folgende Variablen \verb+x = [1 5 9]+ and
\verb+y = [7 1 5]+ und \verb+M = [3 1 6; 5 2 7]+. Welche der
folgenden Operationen funktionieren? Wenn nicht, warum
funktioneieren sie nicht? Teste Deine Vorhersagen.
\begin{enumerate}
\item \begin{verbatim} x + y \end{verbatim}
\item \begin{verbatim} x * M \end{verbatim}
\item \begin{verbatim} x + y' \end{verbatim}
\item \begin{verbatim} M - [x y] \end{verbatim}
\item \begin{verbatim} [x; y] \end{verbatim}
\item \begin{verbatim} M - [x; y] \end{verbatim}
\end{enumerate}
\item Erzeuge eine 5 x 5 x 5 Matrix die mit ganzzahligen
Zufallszahlen zwischen 0 und 100 gefuellt ist.
\begin{enumerate}
\item Berechne den Mittelwert aller Bl\"atter dieser Matrix (benutze \verb+mean()+, siehe Hilfe).
\end{enumerate}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Matrizen}
\framesubtitle{Nachtrag: Lineare Indexierung}
Alternativ zum ``subscript indexing'' koennen die Elemente von Matrizen auch linear addressiert werden.
\begin{figure}
\centering
\includegraphics[width=0.75\columnwidth]{./images/matrixLinearIndexing}
\end{figure}
\end{frame}
\end{document}