loops done

This commit is contained in:
Jan Grewe 2015-11-06 12:10:48 +01:00
parent 566d82cd6b
commit f8e09400a2
6 changed files with 152 additions and 84 deletions

View File

@ -0,0 +1,6 @@
n = 5;
x = 1;
for i = 1:n
x = x * i;
end
fprintf('Faculty of %i is: %i\n', n, x)

View File

@ -0,0 +1,2 @@
>> facultyLoop
Faculty of 5 is: 120

View File

@ -0,0 +1,7 @@
n = 5;
counter = 1;
x = 1;
while counter <= n
x = x * counter;
end
fprintf('Faculty of %i is: %i\n', n, x)

View File

@ -0,0 +1,6 @@
i = 1;
while true % this is always true
disp(x);
x = x * i;
i = i + 1;
end

View File

@ -784,7 +784,7 @@ nun die Werte an den Stellen zur\"uck, an denen der logische Vektor
In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten
ausgef\"uhrt. Manchmal muss der Kontrollfluss aber so gesteuert ausgef\"uhrt. Manchmal muss der Kontrollfluss aber so gesteuert
werden, dass bestimmte Teile des Programmcodes wiederholt oder nur werden, dass bestimmte Teile des Programmcodes wiederholt oder nur
unter bestimmten Bedingungen ausgef\"uhrt werden. Von gro[\ss]er unter bestimmten Bedingungen ausgef\"uhrt werden. Von gro{\ss}er
Bedeutung sind hier zwei Strukturen: Bedeutung sind hier zwei Strukturen:
\begin{enumerate} \begin{enumerate}
@ -799,7 +799,7 @@ zu vereinfachen. In einer \"Ubung wurde die Fakult\"at von 5 wie in
Listing \ref{facultylisting1} berechnet: Listing \ref{facultylisting1} berechnet:
\begin{lstlisting}[caption={Berechnung der Fakult\"at von 5 in f\"unf \begin{lstlisting}[caption={Berechnung der Fakult\"at von 5 in f\"unf
Schritten}, label=facultylisting1] Schritten}, label=facultylisting]
>> x = 1; >> x = 1;
>> x = x * 2; >> x = x * 2;
>> x = x * 3; >> x = x * 3;
@ -811,71 +811,115 @@ x =
\end{lstlisting} \end{lstlisting}
Im Prinzip ist das obige Programm v\"ollig in Ordnung. Es f\"allt Im Prinzip ist das obige Programm v\"ollig in Ordnung. Es f\"allt
jedoch auf, dass die Zeilen 2 bis 5 sehr \"ahnlich sind und jedoch auf, dass die Zeilen 2 bis 5 sehr \"ahnlich sind; bis auf die
Multiplikation mit einer ansteigenden Zahl \"andert sich nichts. Die
Verwendung von mehr oder weniger exakten Klonen einzelner Zeilen oder
Abschnitte ist schlechter Prgrammierstil. Dabei geht es nicht nur um
einen \"asthetischen Aspekt sondern vielmehr darum, dass es schwerwiegende Nachteile gibt.
\begin{enumerate}
\item Fehleranf\"alligkeit: Beim ``Copy-and-paste'' kann leicht
vergessen werden in einzelnen Klonen die entscheidende \"Anderung
auch wirklich vorzunehmen.
\item Flexibilit\"at: Das obige Programm ist f\"ur genau einen Zweck,
Berechnung der Fakult\"at von f\"unf, gemacht und kann nichts
anderes.
\item Wartung: Wenn ich einen Fehler gemacht habe, dann muss ich den
Fehler in allen Klonen korrigieren (sehr wird dabei der ein oder
andere Klon \"ubersehen).
\item Verst\"andlichkeit: Solche Abschnitte sind schwerer zu lesen/zu
verstehen. Das liegt zum Teil daran, dass man dazu neigt \"uber sich
wiederholende Zeilen zu springen (ist ja eh das gleiche...) und dann
den entscheidenden Teil verpasst.
\end{enumerate}
\begin{itemize} Alle Programmiersprachen bieten zur L\"osung dieses Problems die
\item Zeilen 2 bis 5 sind sehr \"ahnlich. Schleifen. Eine Schleife wird immer dann eingesetzt, wenn man
\item Die Verwendung von solchen Codeklonen ist schlechter Programmierstil! Abschnitte wiederholt ausf\"uhren will.
\item Welche Nachteile hat es sonst noch?
\end{itemize}
\subsubsection{\textbf{for}- Schleife}
Der am h\"aufigsten benutzte Vertreter der Schleifen ist die
\textit{for-Schleife}. Sie besteht aus dem \textit{Schleifenkopf} und
dem \textit{Schleifenk\"orper}. Der Kopf regelt, wie h\"aufig der Code
im K\"orper ausgef\"uhrt wird.
\begin{itemize} \begin{definition}
\item Wird genutzt um iterativ/wiederholt einen Codeabschnitt auszuf\"uhren.\pause Der Schleifenkopf beginnt mit dem Schl\"usselwort \textbf{for} auf
\item Eine \code{for} Schleife besteht aus dem \textit{(Schleifen-) Kopf} und dem \textit{(Schleifen-) K\"orper}. welches folgend die \textit{Laufvariable} definiert wird. In \matlab
\begin{itemize} ``l\"auft''/iteriert eine for-Schleife immer(!) \"uber einen
\item Der Schleifenkopf beginnt mit dem Schl\"usselwort Vektor. Die \textit{Laufvariable} nimmt mit jeder Iteration einen
\textbf{for} auf welches folgend die \textit{Laufvariable} Wert dieses Vektors an. Im Schleifenk\"orper k\"onnen beliebige
definiert wird. Anweisungen ausgef\"uhrt werden. Die Schleife wird durch das
\item Die Schleife ``l\"auft''/iteriert immer(!) \"uber einen Schl\"usselwort \textbf{end} beendet. Listing \ref{looplisting}
Vektor. \end{definition}
\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}
\begin{lstlisting}[label=loopListing2] \begin{lstlisting}[caption={Beispiel einer \textbf{for} Schleife. Die Laufvariable \code{x} nimmt mit jeder Iteration der Schleife einen Wert des Vektors \code{1:5} an.}, label=looplisting]
for x = 1:5 for x = 1:5
% ... etwas sinnvolles mit x ... % ... etwas sinnvolles mit x ...
end end
\end{lstlisting} \end{lstlisting}
\begin{exercise}{facultyLoop.m}{facultyLoop.out}
Wie k\"onnte Fakult\"at mit einer Schleife implementiert werden?
Implementiere eine for Schleife, die die Fakul\"at von einer Zahl
\code{n} berechnet.
\end{exercise}
Zur\"uck zu unserer Implementation der Fakult\"at:
\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?
\subsubsection{Die \textbf{while}-Schleife}
Implementatierung der Fakult\"at mithilfe einer \code{for} Schleife: Eine weiterer Schleifentyp, der weniger h\"aufig eingesetzt wird, ist
\begin{lstlisting} die \textot{while}-Schleife. Auch sie hat ihre Entsprechungen in fast
x = 1; allen Programmiersprachen. \"Ahnlich zur \code{for} Schleife wird
for i = 1:5 auch hier der in der Schleife definierte Programmcode iterative
x = x * i; ausgef\"uhrt.
end
% oder auch \begin{definition}
iterations = 1:5; Der Schleifenkopf beginnt mit dem Schl\"usselwort \textbf{while}
for i = iterations gefolgt von einem \underline{Booleschen Ausdruck}. Solange dieser zu
x = x * i; \textit{true} ausgewertet werden kann, wird der Code im
Schleifenk\"orper ausgef\"uhrt. Die Schleife wird mit dem
Schl\"usselwort \textbf{end} beendet.
\end{definition}
\begin{lstlisting}[caption={Grundstruktur einer \textbf{while} Schleife.}, label=whileloop]
while x == true
% fuehre diesen sinnvollen code aus ...
end end
\end{lstlisting} \end{lstlisting}
\begin{exercise}{facultyWhileLoop.m}{}
Implementiere die Fakult\"at mit einer \textbf{while}-Schleife.
\end{exercise}
\begin{exercise}{neverendingWhile.m}{}
Implementiere eine \textbf{while}-Schleife, die unendlich
l\"auft. Tipp: der Boolesche Ausdruck hinter dem \textbf{while} muss
immer zu wahr ausgewertet werden.
\end{exercise}
\subsubsection{Vergleich \textbf{for} und \textbf{while} Schleife}
\begin{itemize}
\item Beide f\"uhren den Code im Schleifenk\"orper iterativ 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}
\subsection{Bedingte Anweisungen und Verzweigungen} \subsection{Bedingte Anweisungen und Verzweigungen}

View File

@ -17,7 +17,7 @@ modellieren.
Die Analyse von Spiketrains beinhaltet demnach einige der Methoden, Die Analyse von Spiketrains beinhaltet demnach einige der Methoden,
die auch f\"r die Beschreibung von Punktprozessen angewandt die auch f\"r die Beschreibung von Punktprozessen angewandt
werden. Dar\"uber hinaus wird versucht die Beziehung zwischen der werden. Dar\"uber hinaus wird versucht die Beziehung zwischen der
zeitabh\"aengigen neuronalen Antwort und dem zugrundeliegenden zeitabh\"angigen neuronalen Antwort und dem zugrundeliegenden
Stimulus zu analysieren. Stimulus zu analysieren.
\section{Darstellung der zeitabh\"angigen Feuerrate} \section{Darstellung der zeitabh\"angigen Feuerrate}
@ -34,12 +34,13 @@ Nachteile. Im folgenden werden die drei Methoden aus Abbildung
\begin{figure} \begin{figure}
\includegraphics[width=\columnwidth]{psth_comparison} \includegraphics[width=\columnwidth]{psth_comparison}
\caption{\textbf{Verschiedene Methoden das PSTH zu bestimmen. A)} \caption{\textbf{Verschiedene Methoden die zeitabh\"angige Feuerrate
Rasterplot einer einzelnen neuronalen Antwort. Jeder vertikale zu bestimmen. A)} Rasterplot einer einzelnen neuronalen
Strich notiert den Zeitpunkt eines Aktionspotentials. \textbf{B)} Antwort. Jeder vertikale Strich notiert den Zeitpunkt eines
PSTH aus der instantanen Feuerrate bestimmt. \textbf{C)} PSTH mit Aktionspotentials. \textbf{B)} Feurerrate aus der instantanen
der Binning Methode. \textbf{D)} Feuerrate durch Faltung mit einem Feuerrate bestimmt. \textbf{C)} klassisches PSTH mit der Binning
Gauss Kern bestimmt.}\label{psthfig} Methode. \textbf{D)} Feuerrate durch Faltung mit einem Gauss Kern
bestimmt.}\label{psthfig}
\end{figure} \end{figure}
@ -47,10 +48,10 @@ Nachteile. Im folgenden werden die drei Methoden aus Abbildung
Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist
die sogenannte \textit{instantane Feuerrate}. Dabei wird die Feuerrate die sogenannte \textit{instantane Feuerrate}. Dabei wird die Feuerrate
aus dem Kehrwert des \textit{Interspike Intervalls}, der Zeit zwischen aus dem Kehrwert des \textit{Interspike Intervalls}, der Zeit zwischen
zwei aufeinander folgenden Aktionspotentialen (Abbildung \ref{isipsth} zwei aufeinander folgenden Aktionspotentialen (Abbildung \ref{instrate}
A), bestimmt. Die abgesch\"atzte Feuerrate (Abbildung \ref{isipsth} B) A), bestimmt. Die abgesch\"atzte Feuerrate (Abbildung \ref{instrate} B)
ist g\"ultig f\"ur das gesammte Interspike Intervall ist g\"ultig f\"ur das gesammte Interspike Intervall
\ref{isipsth}. Diese Methode hat den Vorteil, dass sie sehr einfach zu \ref{instrate}. Diese Methode hat den Vorteil, dass sie sehr einfach zu
berechnen ist und keine Annahme \"uber eine relevante Zeitskala (der berechnen ist und keine Annahme \"uber eine relevante Zeitskala (der
Kodierung oder des Auslesemechanismus der postsynaptischen Zelle) Kodierung oder des Auslesemechanismus der postsynaptischen Zelle)
macht. $r(t)$ ist allerdings keine kontinuierliche Funktion, die macht. $r(t)$ ist allerdings keine kontinuierliche Funktion, die
@ -60,13 +61,13 @@ Aktionspotentiale generiert wurden.
\begin{figure}[!htb] \begin{figure}[!htb]
\includegraphics[width=\columnwidth]{isi_method} \includegraphics[width=\columnwidth]{isi_method}
\caption{\textbf{Bestimmung des PSTH aus dem Interspike \caption{\textbf{Bestimmung des zeitabh\"angigen Feuerrate aus dem
Interval. A)} Skizze eines Rasterplots einer einzelnen Interspike Interval. A)} Skizze eines Rasterplots einer
neuronalen Antwort. Jeder vertikale Strich notiert den Zeitpunkt einzelnen neuronalen Antwort. Jeder vertikale Strich notiert den
eines Aktionspotentials. Die Pfeile zwischen aufeinanderfolgenden Zeitpunkt eines Aktionspotentials. Die Pfeile zwischen
Aktionspotentialen illustrieren das Interspike aufeinanderfolgenden Aktionspotentialen illustrieren das
Interval. \textbf{B)} Der Kehrwert des Interspike Intervalls ist Interspike Interval. \textbf{B)} Der Kehrwert des Interspike
die Feuerrate.}\label{isipsth} Intervalls ist die Feuerrate.}\label{instrate}
\end{figure} \end{figure}
@ -99,9 +100,10 @@ koninuierliche Funktion.
\paragraph{Faltungsmethode} \paragraph{Faltungsmethode}
Bei der Faltungsmethode geht man etwas anders vor. Die Bei der Faltungsmethode geht wird etwas anders vorgegangen um die
Aktionspotentialfolge wird ``bin\"ar'' dargestellt. Das heisst, dass Feuerrate zeitaufgel\"ost zu berechnen. Die Aktionspotentialfolge wird
eine Antwort als Vektor dargestellt wird, in welchem die Zeitpunkte der zun\"achst ``bin\"ar'' dargestellt. Das heisst, dass eine Antwort als
(Zeit-)Vektor dargestellt wird, in welchem die Zeitpunkte der
Aktionspotentiale als 1 notiert werden. Alle anderen Elemente des Aktionspotentiale als 1 notiert werden. Alle anderen Elemente des
Vektors sind 0. Anschlie{\ss}end wir dieser bin\"are Spiketrain mit Vektors sind 0. Anschlie{\ss}end wir dieser bin\"are Spiketrain mit
einem Gauss Kern bestimmter Breite gefaltet. einem Gauss Kern bestimmter Breite gefaltet.
@ -109,9 +111,9 @@ einem Gauss Kern bestimmter Breite gefaltet.
\[r(t) = \int_{-\infty}^{\infty}d\tau \omega(\tau)\rho(t-\tau) \], \[r(t) = \int_{-\infty}^{\infty}d\tau \omega(\tau)\rho(t-\tau) \],
wobei $\omega(\tau)$ der Filterkern und $\rho(t)$ die bin\"are Antwort wobei $\omega(\tau)$ der Filterkern und $\rho(t)$ die bin\"are Antwort
ist. Bildlich geprochen wird jede 1 in $rho(t)$ durch den Filterkern ist. Bildlich geprochen wird jede 1 in $rho(t)$ durch den Filterkern
ersetzt (Abbildung \ref{convpsth} A). Wenn der Kern richtig normiert ersetzt (Abbildung \ref{convrate} A). Wenn der Kern richtig normiert
wurde (Integral 1), ergibt sich die Feuerrate direkt aus der wurde (Integral 1), ergibt sich die Feuerrate direkt aus der
\"Uberlagerung der Kerne (Abb. \ref{convpsth} B). Die Faltungsmethode \"Uberlagerung der Kerne (Abb. \ref{convrate} B). Die Faltungsmethode
f\"uhrt, anders als die anderen Methoden, zu einer kontinuierlichen f\"uhrt, anders als die anderen Methoden, zu einer kontinuierlichen
Funktion was f\"ur spektrale Analysen von Vorteil sein kann. Die Wahl Funktion was f\"ur spektrale Analysen von Vorteil sein kann. Die Wahl
der Kernbreite bestimmt, \"ahnlich zur Binweite, die zeitliche der Kernbreite bestimmt, \"ahnlich zur Binweite, die zeitliche
@ -126,17 +128,18 @@ relevante Zeitskala.
Faltung werden die mit einer 1 notierten Aktionspotential durch Faltung werden die mit einer 1 notierten Aktionspotential durch
den Faltungskern ersetzt. \textbf{B)} Bei korrekter Normierung des den Faltungskern ersetzt. \textbf{B)} Bei korrekter Normierung des
Kerns ergibt sich die Feuerrate direkt aus der \"Uberlagerung der Kerns ergibt sich die Feuerrate direkt aus der \"Uberlagerung der
Kerne.}\label{convpsth} Kerne.}\label{convrate}
\end{figure} \end{figure}
\section{Spike triggered Average} \section{Spike triggered Average}
Die graphischer Darstellung der Feuerrate reicht nicht aus um den Die graphischer Darstellung der Feuerrate allein reicht nicht aus um
Zusammenhang zwischen neuronaler Antwort und einem Stimulus zu den Zusammenhang zwischen neuronaler Antwort und einem Stimulus zu
analysieren. Eine Methode mehr \"uber diesen zu erfahren ist der analysieren. Eine Methode mehr \"uber diesen Zusammenhang zu erfahren
Spike triggered average (STA). Der STA ist der mittlere Stimulus, der ist der Spike triggered average (STA). Der STA ist der mittlere
zu einem Aktionspotential in der neuronalen Antwort f\"uhrt. Stimulus, der zu einem Aktionspotential in der neuronalen Antwort
f\"uhrt.
\begin{equation} \begin{equation}
STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle STA(\tau) = \frac{1}{\langle n \rangle} \left\langle \displaystyle\sum_{i=1}^{n}{s(t_i - \tau)} \right\rangle