Improved page breaks

This commit is contained in:
Jan Benda 2015-11-26 23:40:12 +01:00
parent 5b2aaad235
commit a125bca9ac
21 changed files with 128 additions and 107 deletions

View File

@ -10,6 +10,7 @@ chapters :
$(BASENAME).pdf : $(BASENAME).tex header.tex $(SUBTEXS)
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
splitindex $(BASENAME).idx
again :
pdflatex $(BASENAME).tex

View File

@ -5,7 +5,7 @@
\lstset{inputpath=../code}
\graphicspath{{figures/}}
\setcounter{page}{81}
\setcounter{page}{69}
\setcounter{chapter}{4}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -116,6 +116,7 @@ eine ganze Verteilung von Mittelwerten generieren
(\figref{bootstrapsemfig}). Die Standardabweichung dieser Verteilung
ist dann der gesuchte Standardfehler des Mittelwerts.
\pagebreak[4]
\begin{exercise}{bootstrapsem.m}{bootstrapsem.out}
Erzeuge die Verteilung der Mittelwerte einer Stichprobe durch Bottstrapping,
um daraus den Standardfehler des Mittelwerts zu bestimmen.

View File

@ -2,7 +2,7 @@ import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
fig = plt.figure( figsize=(6,4) )
fig = plt.figure( figsize=(6,3.5) )
rng = np.random.RandomState(637281)
nsamples = 100

View File

@ -2,7 +2,7 @@ import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
fig = plt.figure( figsize=(6,4) )
fig = plt.figure( figsize=(6,3.5) )
rng = np.random.RandomState(637281)
# generate correlated data:

View File

@ -5,7 +5,7 @@
\lstset{inputpath=../code}
\graphicspath{{figures/}}
\setcounter{page}{133}
\setcounter{page}{121}
\setcounter{chapter}{8}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -75,7 +75,6 @@ Zufallsgeneratoren geben oft nur Zufallszahlen mit festen Mittelwerten
und Standardabweichungen (auch Skalierungen) zur\"uck. Multiplikation
mit einem Faktor skaliert die Standardabweichung und Addition einer Zahl
verschiebt den Mittelwert.
\begin{lstlisting}[caption={Skalierung von Zufallszahlen}]
% 100 random numbers draw from a Gaussian distribution with mean 0 and standard deviation 1.
x = randn(100, 1);
@ -85,7 +84,6 @@ mu = 4.8;
sigma = 2.3;
y = randn(100, 1)*sigma + mu;
\end{lstlisting}
Das gleiche Prinzip ist manchmal auch sinnvoll f\"ur \code{zeros()} oder \code{ones()}:
\begin{lstlisting}[caption={Skalierung von \varcode{zeros()} und \varcode{ones()}}]
x = -1:0.01:2; % Vektor mit x-Werten
@ -146,12 +144,10 @@ Die \code{histogram()} Funktion macht das mit den entsprechenden Parametern auto
x = randn(100, 1); % irgendwelche reellwertige Daten
histogram(x, 'Normalization', 'pdf');
\end{lstlisting}
\begin{lstlisting}[caption={Probability mit der \varcode{histogram()}-Funktion}]
x = randi(6, 100, 1); % irgendwelche integer Daten
histogram(x, 'Normalization', 'probability');
\end{lstlisting}
So geht es mit der \code{hist()}-Funktion:
\begin{lstlisting}[caption={Probability-density-function mit der \varcode{hist()}- und \varcode{bar()}-Funktion}]
x = randn(100, 1); % irgendwelche reellwertige Daten
@ -159,7 +155,6 @@ x = randn(100, 1); % irgendwelche reellwertige Daten
h = h/sum(h)/(b(2)-b(1)); % normieren zu einer Wahrscheinlichkeitsdichte
bar(b, h); % und plotten.
\end{lstlisting}
\begin{lstlisting}[caption={Probability mit der \varcode{hist()}- und \varcode{bar()}-Funktion}]
x = randi(6, 100, 1); % irgendwelche integer Daten
[h, b] = hist(x); % Histogram berechnen

View File

@ -5,7 +5,7 @@
\lstset{inputpath=../code}
\graphicspath{{figures/}}
\setcounter{page}{101}
\setcounter{page}{89}
\setcounter{chapter}{6}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -118,10 +118,11 @@ diesem Mittelwert gezogen worden sind (\figref{mlemeanfig}).
Wahrscheinlichkeiten) f\"ur den Mittelwert als Parameter. Vergleiche
die Position der Maxima mit dem aus den Daten berechneten
Mittelwert.
\newpage
\pagebreak[4]
\end{exercise}
\pagebreak[4]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Kurvenfit als Maximum-Likelihood Sch\"atzung}
Beim \determ{Kurvenfit} soll eine Funktion $f(x;\theta)$ mit den Parametern
@ -251,7 +252,7 @@ z.B. dem Gradientenabstieg, gel\"ost wird \matlabfun{mle()}.
\begin{exercise}{mlegammafit.m}{mlegammafit.out}
Erzeuge Gammaverteilte Zufallszahlen und benutze Maximum-Likelihood,
um die Parameter der Gammafunktion aus den Daten zu bestimmen.
\newpage
\pagebreak
\end{exercise}

View File

@ -2,7 +2,7 @@ import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
fig = plt.figure( figsize=(6,4) )
fig = plt.figure( figsize=(6,3.5) )
# the line:
slope = 2.0

View File

@ -1,19 +1,24 @@
function [time, rate] = binned_rate(spike_times, bin_width, dt, t_max)
% Calculates the firing rate with the binning method. The hist funciton is
% used to count the number of spikes in each bin.
function [time, rate] = binned_rate(spikes, bin_width, dt, t_max)
% PSTH computed with binning method.
% The hist funciton is used to count the number of spikes in each bin.
%
% [time, rate] = binned_rate(spikes, bin_width, dt, t_max)
%
% Arguments:
% spike_times, vector containing the times of the spikes.
% bin_width, the width of the bins in seconds.
% dt, the temporal resolution.
% t_max, the tiral duration.
% spikes : vector containing the times of the spikes.
% bin_width: the width of the bins in seconds.
% dt : the temporal resolution.
% t_max : the tiral duration.
%
% Returns two vectors containing the time and the rate.
% Returns:
% two vectors containing the time and the rate.
time = 0:dt:t_max-dt;
bins = 0:bin_width:t_max;
rate = zeros(size(time));
h = hist(spike_times, bins) ./ bin_width;
for i = 2:length(bins)
rate(round(bins(i - 1) / dt) + 1:round(bins(i) / dt)) = h(i);
time = 0:dt:t_max-dt;
bins = 0:bin_width:t_max;
rate = zeros(size(time));
h = hist(spikes, bins) ./ bin_width;
for i = 2:length(bins)
rate(round(bins(i - 1) / dt) + 1:round(bins(i) / dt)) = h(i);
end
end

View File

@ -1,16 +1,20 @@
function [time, rate] = convolution_rate(spike_times, sigma, dt, t_max)
% Calculates the firing rate with the convolution method.
function [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
% PSTH computed with convolution method.
%
% [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
%
% Arguments:
% spike_times, a vector containing the spike times.
% sigma, the standard deviation of the Gaussian kernel in seconds.
% dt, the temporal resolution in seconds.
% t_max, the trial duration in seconds.
% spikes: a vector containing the spike times.
% sigma : the standard deviation of the Gaussian kernel in seconds.
% dt : the temporal resolution in seconds.
% t_max : the trial duration in seconds.
%
% Returns two vectors containing the time and the rate.
% Returns:
two vectors containing the time and the rate.
time = 0:dt:t_max - dt;
rate = zeros(size(time));
spike_indices = round(spike_times / dt);
spike_indices = round(spikes / dt);
rate(spike_indices) = 1;
kernel = gauss_kernel(sigma, dt);

View File

@ -1,22 +1,24 @@
function [time, rate] = instantaneous_rate(spike_times, dt, t_max)
% Function calculates the firing rate as the inverse of the interspike
% interval.
function [time, rate] = instantaneous_rate(spikes, dt, t_max)
% Firing rate as the inverse of the interspike interval.
%
% [time, rate] = instantaneous_rate(spikes, dt, t_max)
%
% Arguments:
% spike_times, vector containing the times of the spikes.
% dt, the temporal resolutions of the recording.
% t_max, the duration of the trial.
% spikes: vector containing the times of the spikes.
% dt : the temporal resolutions of the recording.
% t_max : the duration of the trial.
%
% Returns the vector representing time and a vector containing the rate.
% Returns:
% the vector representing time and a vector containing the rate.
time = 0:dt:t_max-dt;
rate = zeros(size(time));
time = 0:dt:t_max-dt;
rate = zeros(size(time));
isis = diff([0 spike_times]);
inst_rate = 1 ./ isis;
spike_indices = [1 round(spike_times ./ dt)];
isis = diff([0 spikes]);
inst_rate = 1 ./ isis;
spike_indices = [1 round(spikes ./ dt)];
for i = 2:length(spike_indices)
rate(spike_indices(i - 1):spike_indices(i)) = inst_rate(i - 1);
for i = 2:length(spike_indices)
rate(spike_indices(i - 1):spike_indices(i)) = inst_rate(i - 1);
end
end

View File

@ -1,7 +1,7 @@
function [pdf, centers] = isi_hist(isis, binwidth)
function [pdf, centers] = isiHist(isis, binwidth)
% Compute normalized histogram of interspike intervals.
%
% [pdf, centers] = isi_hist(isis, binwidth)
% [pdf, centers] = isiHist(isis, binwidth)
%
% Arguments:
% isis: vector of interspike intervals in seconds

View File

@ -2,7 +2,12 @@ function isivec = isis( spikes )
% returns a single list of isis computed from all trials in spikes
%
% isivec = isis( spikes )
%
% Arguments:
% spikes: a cell array of vectors of spike times in seconds
% isivec: a column vector with all the interspike intervalls
%
% Returns:
% isivec: a column vector with all the interspike intervalls
isivec = [];
@ -13,4 +18,3 @@ function isivec = isis( spikes )
isivec = [ isivec; difftimes(:) ];
end
end

View File

@ -1,7 +1,7 @@
function plot_isi_hist(isis, binwidth)
function plotISIHist(isis, binwidth)
% Plot and annotate histogram of interspike intervals.
%
% isihist(isis, binwidth)
% plotISIHist(isis, binwidth)
%
% Arguments:
% isis: vector of interspike intervals in seconds
@ -9,9 +9,9 @@ function plot_isi_hist(isis, binwidth)
% compute normalized histogram:
if nargin < 2
[pdf, centers] = isi_hist(isis);
[pdf, centers] = isiHist(isis);
else
[pdf, centers] = isi_hist(isis, binwidth);
[pdf, centers] = isiHist(isis, binwidth);
end
% plot:

View File

@ -1,19 +1,19 @@
function s_est = reconstructStimulus(spike_times, sta, stim_duration, dt)
% Function estimates the stimulus from the Spike-Triggered-Average
% (sta).
function s_est = reconstructStimulus(spikes, sta, duration, deltat)
% Estimate the stimulus from the spike-triggered-average (STA).
%
% s_est = reconstructStimulus(spikes, sta, duration, deltat)
%
% Arguments:
% spike_times, a vector containing the spike times in seconds.
% sta, a vector containing the spike-triggered-average.
% stim_duration, the total duration of the stimulus.
% dt, the sampling interval given in seconds.
% spikes : a vector containing the spike times in seconds.
% sta : a vector containing the spike-triggered-average.
% duration: the total duration of the stimulus.
% deltat : the time step of the stimulus in seconds.
%
% Returns:
% the estimated stimulus.
s_est = zeros(round(stim_duration / dt), 1);
binary_spikes = zeros(size(s_est));
binary_spikes(round(spike_times ./ dt)) = 1;
s_est = conv(binary_spikes, sta, 'same');
% s_est: vector with the estimated stimulus.
s_est = zeros(round(duration / deltat), 1);
binary_spikes = zeros(size(s_est));
binary_spikes(round(spikes ./ deltat)) = 1;
s_est = conv(binary_spikes, sta, 'same');
end

View File

@ -1,32 +1,31 @@
function [sta, std_sta, valid_spikes] = spikeTriggeredAverage(stimulus, spike_times, count, sampling_rate)
% Function estimates the Spike-Triggered-Average (sta).
function [sta, std_sta, n_spikes] = spikeTriggeredAverage(stimulus, spikes, count, deltat)
% Estimate the spike-triggered-average (STA).
%
% [sta, std_sta, n_spikes] = spikeTriggeredAverage(stimulus, spikes, count, deltat)
%
% Arguments:
% stimulus, a vector containing stimulus intensities
% as a function of time.
% spike_times, a vector containing the spike times
% in seconds.
% count, the number of datapoints that are taken around
% the spike times.
% sampling_rate, the sampling rate of the stimulus.
% stimulus: vector of stimulus intensities as a function of time.
% spikes : vector with spike times in seconds.
% count : number of datapoints that are taken around the spike times.
% deltat : the time step of the stimulus in seconds.
%
% Returns:
% the sta, a vector containing the staandard deviation and
% the number of spikes taken into account.
% sta : vector with the STA.
% std_sta : standard deviation of the STA.
% n_spikes: number of spikes contained in STA.
snippets = zeros(numel(spike_times), 2*count);
valid_spikes = 1;
for i = 1:numel(spike_times)
t = spike_times(i);
index = round(t*sampling_rate);
if index <= count || (index + count) > length(stimulus)
continue
snippets = zeros(numel(spikes), 2*count);
n_spikes = 0;
for i = 1:numel(spikes)
t = spikes(i);
index = round(t/deltat);
if index <= count || (index + count) > length(stimulus)
continue
end
snippets(n_spikes,:) = stimulus(index-count:index+count-1);
n_spikes = n_spikes + 1;
end
snippets(valid_spikes,:) = stimulus(index-count:index+count-1);
valid_spikes = valid_spikes + 1;
snippets(n_spikes+1:end,:) = [];
sta = mean(snippets, 1);
std_sta = std(snippets,[],1);
end
snippets(valid_spikes:end,:) = [];
sta = mean(snippets, 1);
std_sta = std(snippets,[],1);

View File

@ -86,7 +86,7 @@ heisen die Intervalle auch \determ{Interspikeintervalle}
\"ublichen Gr\"o{\ss}en beschrieben werden.
\begin{figure}[t]
\includegraphics[width=1\textwidth]{isihexamples}\hfill
\includegraphics[width=0.96\textwidth]{isihexamples}\vspace{-2ex}
\titlecaption{\label{isihexamplesfig}Interspikeintervall Histogramme}{der in
\figref{rasterexamplesfig} gezeigten Spikes.}
\end{figure}
@ -113,15 +113,15 @@ heisen die Intervalle auch \determ{Interspikeintervalle}
\frac{\sigma_{ISI}^2}{2\mu_{ISI}^3}$.
\end{itemize}
\begin{exercise}{isi_hist.m}{}
Schreibe eine Funktion \code{isi\_hist()}, die einen Vektor mit Interspikeintervallen
\begin{exercise}{isiHist.m}{}
Schreibe eine Funktion \code{isiHist()}, die einen Vektor mit Interspikeintervallen
entgegennimmt und daraus ein normiertes Histogramm der Interspikeintervalle
berechnet.
\end{exercise}
\begin{exercise}{plot_isi_hist.m}{}
\begin{exercise}{plotISIHist.m}{}
Schreibe eine Funktion, die die Histogrammdaten der Funktion
\code{isi\_hist()} entgegennimmt, um das Histogramm zu plotten. Im
\code{isiHist()} entgegennimmt, um das Histogramm zu plotten. Im
Plot sollen die Interspikeintervalle in Millisekunden aufgetragen
werden. Das Histogramm soll zus\"atzlich mit Mittelwert,
Standardabweichung und Variationskoeffizient der
@ -155,6 +155,7 @@ Intervalls mit sich selber).
\begin{exercise}{isiserialcorr.m}{}
Schreibe eine Funktion \code{isiserialcorr()}, die einen Vektor mit Interspikeintervallen
entgegennimmt und daraus die seriellen Korrelationen berechnet und plottet.
\pagebreak[4]
\end{exercise}
@ -395,6 +396,7 @@ vorkommen k\"onnen nicht aufgl\"ost werden. Mit der Wahl der Binweite
wird somit eine Annahme \"uber die relevante Zeitskala des Spiketrains
gemacht.
\pagebreak[4]
\begin{exercise}{binnedRate.m}{}
Implementiere die Absch\"atzung der Feuerrate mit der ``binning''
Methode. Plotte das PSTH.
@ -435,6 +437,7 @@ Binweite, die zeitliche Aufl\"osung von $r(t)$. Die Breite des Kerns
macht also auch wieder eine Annahme \"uber die relevante Zeitskala des
Spiketrains.
\pagebreak[4]
\begin{exercise}{convolutionRate.m}{}
Verwende die Faltungsmethode um die Feuerrate zu bestimmen. Plotte
das Ergebnis.
@ -490,10 +493,13 @@ die Zellantwort mit dem STA verfaltet.
Implementiere eine Funktion, die den STA ermittelt. Verwende dazu
den Datensatz \file{sta\_data.mat}. Die Funktion sollte folgende
R\"uckgabewerte haben:
\vspace{-1ex}
\begin{itemize}
\setlength{\itemsep}{0ex}
\item den Spike-Triggered-Average.
\item die Standardabweichung der individuellen STAs.
\item die Anzahl Aktionspotentiale, die dem STA zugrunde liegen.
\item die Anzahl Aktionspotentiale, die zur Berechnung des STA verwendet wurden.
\vspace{-2ex}
\end{itemize}
\end{exercise}

View File

@ -5,7 +5,7 @@
\lstset{inputpath=../code}
\graphicspath{{figures/}}
\setcounter{page}{89}
\setcounter{page}{77}
\setcounter{chapter}{5}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -84,7 +84,8 @@ zus\"atzlich gro{\ss}e Abst\"ande st\"arker gewichtet.
Schreibe eine Funktion \code{meanSquareError()}, die die mittlere
quadratische Abweichung zwischen einem Vektor mit den beobachteten
Werten $y$ und einem Vektor mit den entsprechenden Vorhersagen
$y^{est}$ berechnet.\newpage
$y^{est}$ berechnet.
\pagebreak[4]
\end{exercise}
@ -315,6 +316,7 @@ partielle Ableitung nach $m$ durch
Parametersatz $(m, b)$ der Geradengleichung als 2-elementigen Vektor
sowie die $x$- und $y$-Werte der Messdaten als Argumente
entgegennimmt und den Gradienten an dieser Stelle zur\"uckgibt.
\pagebreak[4]
\end{exercise}
\begin{exercise}{errorGradient.m}{}
@ -376,6 +378,7 @@ Punkte in Abbildung \ref{gradientdescentfig} gro{\ss}.
Funktion der Optimierungsschritte zeigt.
\item Erstelle einen Plot, der den besten Fit in die Daten plottet.
\end{enumerate}
\pagebreak
\end{exercise}