Merge branch 'master' of whale.am28.uni-tuebingen.de:scientificComputing

This commit is contained in:
Jan Grewe 2016-12-12 18:48:15 +01:00
commit 950a65301a
81 changed files with 1527 additions and 473 deletions

View File

@ -0,0 +1,34 @@
TEXFILES=$(wildcard exercises??.tex)
EXERCISES=$(TEXFILES:.tex=.pdf)
SOLUTIONS=$(EXERCISES:exercises%=solutions%)
.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean
pdf : $(SOLUTIONS) $(EXERCISES)
exercises : $(EXERCISES)
solutions : $(SOLUTIONS)
$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex
{ echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@)
pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true
rm $(patsubst %.pdf,%,$@).[!p]*
$(EXERCISES) : %.pdf : %.tex instructions.tex
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
watch :
while true; do ! make -q pdf && make pdf; sleep 0.5; done
watchexercises :
while true; do ! make -q exercises && make exercises; sleep 0.5; done
watchsolutions :
while true; do ! make -q solutions && make solutions; sleep 0.5; done
clean :
rm -f *~ *.aux *.log *.out
cleanup : clean
rm -f $(SOLUTIONS) $(EXERCISES)

Binary file not shown.

View File

@ -0,0 +1,41 @@
\vspace*{-6.5ex}
\begin{center}
\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex]
{\large Jan Grewe, Jan Benda}\\[-3ex]
Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center}
\ifprintanswers%
\else
% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und
% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost
% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden
% (z.B. variablen\_datentypen\_mueller.m).
\begin{itemize}
\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass
sie auch wirklich das macht, was sie machen soll! Teste dies mit
kleinen Beispielen direkt in der Kommandozeile.
\item Versuche die L\"osungen der Aufgaben m\"oglichst in
sinnvolle kleine Funktionen herunterzubrechen.
Sobald etwas \"ahnliches mehr als einmal berechnet werden soll,
lohnt es sich eine Funktion daraus zu schreiben!
\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen
zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner
Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft
ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute
Statistik zu bekommen.
\item Benutze die Hilfsfunktion von \code{matlab} (\code{help
commando} oder \code{doc commando}) und das Internet, um
herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden
sind und was f\"ur M\"oglichkeiten sie bieten.
Auch zu inhaltlichen Konzepten bietet das Internet oft viele
Antworten!
\end{itemize}
\fi

View File

@ -0,0 +1,28 @@
function savefigpdf( fig, name, width, height )
% Saves figure fig in pdf file name.pdf with appropriately set page size
% and fonts
% default width:
if nargin < 3
width = 11.7;
end
% default height:
if nargin < 4
height = 9.0;
end
% paper:
set( fig, 'PaperUnits', 'centimeters' );
set( fig, 'PaperSize', [width height] );
set( fig, 'PaperPosition', [0.0 0.0 width height] );
set( fig, 'Color', 'white')
% font:
set( findall( fig, 'type', 'axes' ), 'FontSize', 12 )
set( findall( fig, 'type', 'text' ), 'FontSize', 12 )
% save:
saveas( fig, name, 'pdf' )
end

View File

@ -0,0 +1,34 @@
TEXFILES=$(wildcard exercises??.tex)
EXERCISES=$(TEXFILES:.tex=.pdf)
SOLUTIONS=$(EXERCISES:exercises%=solutions%)
.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean
pdf : $(SOLUTIONS) $(EXERCISES)
exercises : $(EXERCISES)
solutions : $(SOLUTIONS)
$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex
{ echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@)
pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true
rm $(patsubst %.pdf,%,$@).[!p]*
$(EXERCISES) : %.pdf : %.tex instructions.tex
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
watch :
while true; do ! make -q pdf && make pdf; sleep 0.5; done
watchexercises :
while true; do ! make -q exercises && make exercises; sleep 0.5; done
watchsolutions :
while true; do ! make -q solutions && make solutions; sleep 0.5; done
clean :
rm -f *~ *.aux *.log *.out
cleanup : clean
rm -f $(SOLUTIONS) $(EXERCISES)

Binary file not shown.

View File

@ -0,0 +1,41 @@
\vspace*{-6.5ex}
\begin{center}
\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex]
{\large Jan Grewe, Jan Benda}\\[-3ex]
Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center}
\ifprintanswers%
\else
% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und
% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost
% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden
% (z.B. variablen\_datentypen\_mueller.m).
\begin{itemize}
\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass
sie auch wirklich das macht, was sie machen soll! Teste dies mit
kleinen Beispielen direkt in der Kommandozeile.
\item Versuche die L\"osungen der Aufgaben m\"oglichst in
sinnvolle kleine Funktionen herunterzubrechen.
Sobald etwas \"ahnliches mehr als einmal berechnet werden soll,
lohnt es sich eine Funktion daraus zu schreiben!
\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen
zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner
Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft
ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute
Statistik zu bekommen.
\item Benutze die Hilfsfunktion von \code{matlab} (\code{help
commando} oder \code{doc commando}) und das Internet, um
herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden
sind und was f\"ur M\"oglichkeiten sie bieten.
Auch zu inhaltlichen Konzepten bietet das Internet oft viele
Antworten!
\end{itemize}
\fi

View File

@ -0,0 +1,28 @@
function savefigpdf( fig, name, width, height )
% Saves figure fig in pdf file name.pdf with appropriately set page size
% and fonts
% default width:
if nargin < 3
width = 11.7;
end
% default height:
if nargin < 4
height = 9.0;
end
% paper:
set( fig, 'PaperUnits', 'centimeters' );
set( fig, 'PaperSize', [width height] );
set( fig, 'PaperPosition', [0.0 0.0 width height] );
set( fig, 'Color', 'white')
% font:
set( findall( fig, 'type', 'axes' ), 'FontSize', 12 )
set( findall( fig, 'type', 'text' ), 'FontSize', 12 )
% save:
saveas( fig, name, 'pdf' )
end

View File

@ -18,6 +18,11 @@
\section{TODO}
\begin{itemize}
\item Fitting psychometric functions:
Variable $x_i$, responses $r_i$ either 0 or 1.
$p(x_i, \theta)$ is Weibull or Boltzmann function.
Likelihood is $L = \prod p(x_i, \theta)^{r_i} (1-p(x_i, \theta))^{1-r_i}$.
Use fminsearch for fitting.
\item GLM model fitting?
\end{itemize}

View File

@ -1,7 +1,7 @@
function [pdf, centers] = isiHist(isis, binwidth)
function [pdf, centers] = isihist(isis, binwidth)
% Compute normalized histogram of interspike intervals.
%
% [pdf, centers] = isiHist(isis, binwidth)
% [pdf, centers] = isihist(isis, binwidth)
%
% Arguments:
% isis: vector of interspike intervals in seconds
@ -14,15 +14,15 @@ function [pdf, centers] = isiHist(isis, binwidth)
if nargin < 2
% compute good binwidth:
nperbin = 200; % average number of data points per bin
bins = length( isis )/nperbin; % number of bins
binwidth = max( isis )/bins;
bins = length(isis)/nperbin; % number of bins
binwidth = max(isis)/bins;
if binwidth < 5e-4 % half a millisecond
binwidth = 5e-4;
end
end
bins = 0.5*binwidth:binwidth:max(isis);
% histogram data:
[ nelements, centers ] = hist(isis, bins);
[nelements, centers] = hist(isis, bins);
% normalization (integral = 1):
pdf = nelements / sum(nelements) / binwidth;
end

View File

@ -1,7 +1,7 @@
function isivec = isis( spikes )
function isivec = isis(spikes)
% returns a single list of isis computed from all trials in spikes
%
% isivec = isis( spikes )
% isivec = isis(spikes)
%
% Arguments:
% spikes: a cell array of vectors of spike times in seconds
@ -12,9 +12,9 @@ function isivec = isis( spikes )
isivec = [];
for k = 1:length(spikes)
difftimes = diff( spikes{k} );
difftimes = diff(spikes{k});
% difftimes(:) ensures a column vector
% regardless of the type of vector in spikes{k}
isivec = [ isivec; difftimes(:) ];
isivec = [isivec; difftimes(:)];
end
end

View File

@ -13,18 +13,17 @@ for k = 1:ntrials
times = 1000.0*times; % conversion to ms
end
for i = 1:length( times )
line([times(i) times(i)],[k-0.4 k+0.4], 'Color', 'k' );
line([times(i) times(i)],[k-0.4 k+0.4], 'Color', 'k');
end
end
if tmax < 1.5
xlabel( 'Time [ms]' );
xlabel('Time [ms]');
xlim([0.0 1000.0*tmax]);
else
xlabel( 'Time [s]' );
xlabel('Time [s]');
xlim([0.0 tmax]);
end
ylabel( 'Trials');
ylim( [ 0.3 ntrials+0.7 ] )
ylabel('Trials');
ylim([0.3 ntrials+0.7 ]);
end

View File

@ -98,8 +98,8 @@ jan.benda@uni-tuebingen.de}
Mit den folgenden Aufgaben wollen wir die Statistik der Spiketrains
der drei Neurone miteinander vergleichen.
\begin{parts}
\part Lade die Spiketrains aus den drei Dateien. Achte darauf, dass sie verschiedene
Variablen\-namen bekommen.
\part Lade die Spiketrains aus den drei Dateien. Achte darauf,
dass sie verschiedene Variablen\-namen bekommen.
\begin{solution}
\begin{lstlisting}
clear all

View File

@ -0,0 +1,236 @@
\documentclass[12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{pslatex}
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\ifprintanswers
\newcommand{\stitle}{: L\"osungen}
\else
\newcommand{\stitle}{}
\fi
\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Spiketrain Analyse}}{{\bfseries\large 6. Dezember, 2016}}
\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
language=Matlab,
basicstyle=\ttfamily\footnotesize,
numbers=left,
numberstyle=\tiny,
title=\lstname,
showstringspaces=false,
commentstyle=\itshape\color{darkgray},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{dsfont}
\newcommand{\naZ}{\mathds{N}}
\newcommand{\gaZ}{\mathds{Z}}
\newcommand{\raZ}{\mathds{Q}}
\newcommand{\reZ}{\mathds{R}}
\newcommand{\reZp}{\mathds{R^+}}
\newcommand{\reZpN}{\mathds{R^+_0}}
\newcommand{\koZ}{\mathds{C}}
%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\continue}{\ifprintanswers%
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\continuepage}{\ifprintanswers%
\newpage
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\newsolutionpage}{\ifprintanswers%
\newpage%
\else
\fi}
%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\qt}[1]{\textbf{#1}\\}
\newcommand{\pref}[1]{(\ref{#1})}
\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}}
\newcommand{\code}[1]{\texttt{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\input{instructions}
\begin{questions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Statistik von Spiketrains 2}
In Ilias findet ihr die Dateien \code{poisson.mat},
\code{pifou.mat}, und \code{lifadapt.mat}. Jede dieser Dateien
enth\"alt mehrere Trials von Spiketrains von einer bestimmten Art
von Neuron. Die Spikezeiten sind in Sekunden gemessen.
Mit den folgenden Aufgaben wollen wir die Statistik der Spiketrains
der drei Neurone miteinander vergleichen.
Bereits im letzten \"Ubungszettel erstellte Funktionen d\"urfen (sollen!)
wiederverwendet werden.
\begin{parts}
\part Lade die Spiketrains aus den drei Dateien. Stelle sie in Rasterplots dar.
\part Plotte die Interspike-Intervall Verteilungen.
Annotiere die Plots mit dem Mittelwert, der
Standardabweichung, und dem Variationskoeffizienten der
Interspikeintervalle, sowie der mittleren Feuerrate.
\part Vergleiche die ISI-Histogramme mit der ISI Verteilung eines Poisson Prozesses
der Rate $\lambda$:
\[ p(T) = \lambda e^{-\lambda T} \; .\]
\part Erstelle Return-Maps f\"ur die drei Spiketrains, also jedes
Interspike-Intervall $T_{i+1}$ gegen das vorherige Intervall $T_i$
geplottet.
\part Schreibe eine Funktion, die die seriellen Korrelationen der
Interspikeintervalle f\"ur Lags bis zu \code{maxlag} berechnet und
plottet. Die Seriellen Korrelationen $\rho_k$ f\"ur Lag $k$ der
Interspikeintervalle $T_i$ sind die Korrelationskoeffizienten
zwischen den Interspikeintervallen $T_i$ und den um das Lag $k$
verschobenen Intervallen $T_{i+k}$:
\[ \rho_k = \frac{\langle (T_{i+k} - \langle T \rangle)(T_i -
\langle T \rangle) \rangle}{\langle (T_i - \langle T
\rangle)^2\rangle} = \frac{{\rm cov}(T_{i+k}, T_i)}{{\rm
var}(T_i)} = {\rm corr}(T_{i+k}, T_i) \]
Benutze diese Funktion, um die Interspikeintervall-Korrelationen
der drei Neurone zu vergleichen.
\begin{solution}
\lstinputlisting{../code/isiserialcorr.m}
\lstinputlisting{../code/plotserialcorr.m}
\colorbox{white}{\includegraphics[width=1\textwidth]{serialcorr}}
\end{solution}
\end{parts}
\continue
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Homogener Poisson Prozess}
Wir wollen den homogenen Poisson Prozess benutzen um Spikes zu
generieren, mit denen wir die Analysfunktionen des vorherigen
Aufgaben \"uberpr\"ufen k\"onnen.
Ein homogener Poisson Prozess mit der Rate $\lambda$ (gemessen in
Hertz) ist ein Punktprozess, bei dem die Wahrscheinlichkeit eines
Ereignisses unabh\"angig von der Zeit $t$ und unabh\"angig von
vorherigen Ereignissen ist. Wenn wir die Zeitachse in kleine Bins
der Breite $\Delta t$ einteilen, dann ist
\[ P = \lambda \cdot \Delta t \]
die Wahrscheinlichkeit innerhalb eines Bins ein Ereignis (``spike'')
zu erhalten. $\Delta t$ muss daf\"ur klein genug sein, so dass $P<0.1$.
\begin{parts}
\part Schreibe eine Funktion die $n$ homogene Poisson Spiketrains
einer gegebenen Dauer $T_{max}$ mit Rate $\lambda$ erzeugt.
Falls das nicht gelingt, benutze f\"ur die folgenden Aufgaben
soweit m\"oglich spikes aus der Datei \code{poisson.mat}.
\begin{solution}
\lstinputlisting{hompoissonspikes.m}
\end{solution}
\part Benutze diese Funktion um einige Trials von Spikes zu erzeugen
und plotte diese als Spikeraster.
\begin{solution}
\begin{lstlisting}
spikes = hompoissonspikes( 10, 100.0, 0.5 );
spikeraster( spikes )
\end{lstlisting}
\mbox{}\\[-3ex]
\colorbox{white}{\includegraphics[width=0.7\textwidth]{poissonraster100hz}}
\end{solution}
\part Berechne Histogramme aus den Interspikeintervallen von $n$
Poisson Spiketrains mit der Rate $\lambda=100$\,Hz. Wie viele bins
werden f\"ur ein ``sch\"ones'' ISI-Histogramm ungef\"ahr ben\"otigt?
Ver\"andere \"uber die Dauer $T_{max}$ der Spiketrains und die
Anzahl $n$ der Trials die Anzahl der Intervalle. Wieviele
Interspikeintervalle werden ben\"otigt, um ein ``sch\"ones''
Histogramm zu erhalten? Wie lange m\"usste man also von dem Neuron
ableiten?
\begin{solution}
About 5000 intervals for 25 bins. This corresponds to a $5000 /
100\,\hertz = 50\,\second$ recording of a neuron firing with
100\,\hertz.
\end{solution}
\part Vergleiche Interspike-Intervall Histogramme von Poisson-Spikes
verschiedener Raten $\lambda$ mit der theoretisch zu erwartenden Verteilung
der Intervalle $T$ des Poisson Prozesses
\[ p(T) = \lambda e^{-\lambda T} \; .\]
Achte darauf, dass die Bins des Histograms nicht kleiner als $\Delta t$ sind!
\begin{solution}
\lstinputlisting{hompoissonisih.m}
\colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih100hz}}
\colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih20hz}}
\end{solution}
\part \extra Was passiert mit den Histogrammen, wenn die Binbreite
der Histogramme kleiner als das bei der Erzeugung der Poisson
Spiketrains verwendete $\Delta t$ ist?
\begin{solution}
Die Bins zwischen der durch $\Delta t$ vorgegebenen
Diskretisierung haben den Wert 0. Dadurch werden aber die anderen
durch die Normierung h\"oher als sie sein sollten.
\end{solution}
\part Plotte den Mittelwert der Interspikeintervalle, die
dazugeh\"orige Standardabweichung und den Variationskoeffizienten
als Funktion der Rate $\lambda$ des Poisson Prozesses. Vergleiche
die Ergebnisse mit den theoretischen Erwartungen (siehe Vorlesungsskript).
\begin{solution}
\lstinputlisting{hompoissonisistats.m}
\colorbox{white}{\includegraphics[width=0.98\textwidth]{poissonisistats}}
\end{solution}
\part Plotte die seriellen Korrelationen von Poisson-Spiketrains und
erkl\"are kurz das Ergebniss.
\begin{solution}
\mbox{}\\[-2ex]\hspace*{2cm}
\colorbox{white}{\includegraphics[width=0.8\textwidth]{poissonserial100hz}}\\
Alle Korrelationen zwischen Interspikeintervallen sind Null, da
beim Poisson Prozess das Auftreten jedes Spikes unabh\"angig von
den vorherigen Spikes ist.
\end{solution}
\end{parts}
\end{questions}
\end{document}

View File

@ -1,7 +1,7 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pointprocessscetchA.tex
%%Creator: gnuplot 4.6 patchlevel 4
%%CreationDate: Fri Sep 30 10:14:40 2016
%%CreationDate: Sat Nov 19 10:17:42 2016
%%DocumentFonts:
%%BoundingBox: 50 50 373 135
%%EndComments
@ -430,10 +430,10 @@ SDict begin [
/Title (pointprocessscetchA.tex)
/Subject (gnuplot plot)
/Creator (gnuplot 4.6 patchlevel 4)
/Author (grewe)
/Author (jan)
% /Producer (gnuplot)
% /Keywords ()
/CreationDate (Fri Sep 30 10:14:40 2016)
/CreationDate (Sat Nov 19 10:17:42 2016)
/DOCINFO pdfmark
end
} ifelse

View File

@ -1,7 +1,7 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: pointprocessscetchB.tex
%%Creator: gnuplot 4.6 patchlevel 4
%%CreationDate: Fri Sep 30 10:14:40 2016
%%CreationDate: Sat Nov 19 10:17:43 2016
%%DocumentFonts:
%%BoundingBox: 50 50 373 237
%%EndComments
@ -430,10 +430,10 @@ SDict begin [
/Title (pointprocessscetchB.tex)
/Subject (gnuplot plot)
/Creator (gnuplot 4.6 patchlevel 4)
/Author (grewe)
/Author (jan)
% /Producer (gnuplot)
% /Keywords ()
/CreationDate (Fri Sep 30 10:14:40 2016)
/CreationDate (Sat Nov 19 10:17:43 2016)
/DOCINFO pdfmark
end
} ifelse

View File

@ -0,0 +1,8 @@
function y = boltzmann( x, k )
% computes the boltzmann function
% x: scalar or vector of x values
% k: slope parameter of boltzman function
% returns y-values of boltzmann function
y = 1./(1+exp(-k*x));
end

View File

@ -0,0 +1,3 @@
p = boltzmann(voltage, a);
plot(voltage, p)
y = -1;

View File

@ -15,7 +15,7 @@
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot} \header{{\bfseries\large \"Ubung
3}}{{\bfseries\large Boolesche Ausdr\"ucke, logisches
Indizieren}}{{\bfseries\large 13. Oktober, 2015}}
Indizieren}}{{\bfseries\large 31. Oktober, 2016}}
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{}
@ -41,8 +41,8 @@ Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost
werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
``variablen\_datentypen\_\{nachname\}.m'' benannt werden
voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:\newline
``boolesche\_ausdruecke\_\{nachname\}.m'' benannt werden
(z.B. variablen\_datentypen\_mueller.m).
\section{Boolesche Ausdr\"ucke}
@ -77,14 +77,14 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\newpage
\section{Logische Indizierung}
Bollesche Ausdr\"ucke k\"onnen benutzt werden um aus Vektoren und
Boolesche Ausdr\"ucke k\"onnen benutzt werden um aus Vektoren und
Matrizen die Elemente herauszusuchen, die einem bestimmeten Kriterium
entsprechen.
\begin{questions}
\question Gegeben sind \verb+x = (1:10)+ und
\verb+y = [3 1 5 6 8 2 9 4 7 0]+. Versuche die Ausgaben folgender
Anweisungen zu verstehen.
Anweisungen zu verstehen. Erkl\"are die Ergebnisse.
\begin{parts}
\part \verb+x < 5+
\part \verb+x( x < 5) )+
@ -99,10 +99,10 @@ entsprechen.
0 und 100 (\verb+randi+). Ersetze die Werte der Elemente, die in
folgende Klassen fallen: \verb+x < 33+ mit 0,
\verb+x >= 33 und x < 66+ mit 1 und alle \verb+x >= 66+ auf 2.
\part Ermittle die Anzahl Elemente fuer jede Klasse mithilfe eines
\part Ermittle die Anzahl Elemente f\"ur jede Klasse mithilfe eines
Booleschen Ausdrucks (\verb+sum+ kann eingesetzt werden um die
Anzahl Treffer zu ermitteln).
\end{parts}
\end{questions}
\end{document}
\end{document}

View File

@ -14,7 +14,7 @@
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Kontrollstrukturen}}{{\bfseries\large 13. Oktober, 2015}}
\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Kontrollstrukturen}}{{\bfseries\large 08. November, 2016}}
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
jan.grewe@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
@ -42,8 +42,8 @@ werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
``variablen\_datentypen\_\{nachname\}.m'' benannt werden
(z.B. variablen\_datentypen\_mueller.m).
``control\_flow\_\{nachname\}.m'' benannt werden
(z.B. control\_flow\_mueller.m).
\begin{questions}
\question Implementiere \code{for} Schleifen bei denen die Laufvariable:

View File

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

View File

@ -0,0 +1 @@
printfaculty(5);

View File

@ -0,0 +1,3 @@
n = 5
a = myfactorial(n);
fprintf('Factorial of %i is: %i\n', n, x)

View File

@ -0,0 +1,7 @@
function x = mufactorial(n)
% return the factorial of n
x = 1;
for i = 1:n
x = x * i;
end
end

View File

@ -0,0 +1,19 @@
function plotsine(freq, ampl, duration)
% plot a sine wave
% freq: frequency of the sinewave in Hertz
% ampl: amplitude of the sinewave
% duration: duration of the sinewave in seconds
step = 0.01/freq;
time = 0:step:duration;
sine = ampl*sin(2*pi*freq*time);
if duration <= 1.0
plot(1000.0*time, sine);
xlabel('Time [ms]');
else
plot(time, sine);
xlabel('Time [s]');
end
ylim([-1.2*ampl 1.2*ampl]);
ylabel('Sinewave');
title(sprintf('Frequency %g Hz', freq));
end

View File

@ -0,0 +1,9 @@
function plotsine50()
% plot a sine wave of 50Hz
time = 0:0.0001:0.2;
sine = sin(2*pi*50.0*time);
plot(1000.0*time, sine);
xlabel('Time [ms]');
ylim([-1.2 1.2]);
ylabel('Sinewave');
end

View File

@ -0,0 +1 @@
plotsine50()

View File

@ -0,0 +1 @@
plotsine(5.0, 2.0, 1.5)

View File

@ -0,0 +1,14 @@
freq = 5.0;
ampl = 2.0;
[time, sine] = sinewave(freq, ampl, 1.5);
if duration <= 1.0
plot(1000.0*time, sine);
xlabel('Time [ms]');
else
plot(time, sine);
xlabel('Time [s]');
end
ylim([-1.2*ampl 1.2*ampl]);
ylabel('Sinewave');
title(sprintf('Frequency %g Hz', freq));

View File

@ -0,0 +1,4 @@
freq = 5.0;
ampl = 2.0;
[time, sine] = sinewave(freq, ampl, 1.5);
plotsinewave(time, sine);

View File

@ -0,0 +1,13 @@
function plotsinewave(time, sine)
% plot precomputed sinewave
% time: vector with timepoints
% sine: corresponding vector with sinewave
if time(end)-time(1) <= 1.0
plot(1000.0*time, sine);
xlabel('Time [ms]');
else
plot(time, sine);
xlabel('Time [s]');
end
ylim([1.2*min(sine) 1.2*max(sine)]);
ylabel('Sinewave');

View File

@ -0,0 +1,8 @@
function printfaculty(n)
% compute the faculty of n and print it
x = 1;
for i = 1:n
x = x * i;
end
fprintf('Factorial of %i is: %i\n', n, x)
end

View File

@ -0,0 +1,13 @@
function [time, position] = randomwalk(numbersteps)
% 1-D random walk for numbersteps time steps
time = 1:numbersteps;
position = zeros(numbersteps, 1);
for i = time(2:end)
r = rand(1);
if r > 0.5
position(i) = position(i-1) + 1;
else
position(i) = position(i-1) - 1;
end
end
end

View File

@ -0,0 +1,7 @@
n = 2000;
hold on
for k = 1:10
[t, x] = randomwalk(n);
plot(t, x)
end
hold off

View File

@ -0,0 +1,8 @@
p = 0.5;
thresh = 50.0;
hold on
for k = 1:10
x = randomwalkthresh(p, thresh);
plot(x)
end
hold off

View File

@ -0,0 +1,20 @@
thresh = 50.0;
probs = [0.5 0.52 0.55 0.6];
maxt = 0;
for sp = 1:4
p = probs(sp);
subplot(2, 2, sp);
hold on
for k = 1:10
x = randomwalkthresh(p, thresh);
if maxt < length(x)
maxt = length(x);
end
plot(x)
end
hold off
title(sprintf('p=%g', p))
xlabel('Time')
xlim([0 maxt])
ylabel('Position')
end

View File

@ -0,0 +1,23 @@
thresh = 50.0;
probs = 0.5:0.01:1.0;
reps = 1000;
meancount = zeros(length(probs), 1);
stdcount = zeros(length(probs), 1);
for sp = 1:length(probs)
p = probs(sp);
positions = zeros(reps, 1);
for k = 1:reps
x = randomwalkthresh(p, thresh);
positions(k) = length(x);
end
meancount(sp) = mean(positions);
stdcount(sp) = std(positions);
end
semilogy(probs, meancount, 'displayname', 'mean');
hold on;
semilogy(probs, stdcount, 'displayname', 'std');
hold off;
xlabel('p');
xlim([0.5 1.0])
ylabel('number of steps');
legend('show');

View File

@ -0,0 +1,24 @@
function positions = randomwalkthresh(p, thresh)
% computes a single random walk
%
% Arguments:
% p: the probability for an upward step
% thresh: compute the random walk until abs(pos) is larger than thresh
%
% Returns:
% positions: vector with positions of the random walker
positions = [0.0];
% positions = 0.0;
% positions = zeros(1, 1);
i = 2;
while abs(positions(i-1)) < thresh
r = rand(1);
if r < p
positions(i) = positions(i-1) + 1;
else
positions(i) = positions(i-1) - 1;
end
i = i + 1;
end
end

View File

@ -1,7 +1,9 @@
\documentclass[12pt,a4paper,pdftex]{exam}
%\documentclass[answers,12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{natbib}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[small]{caption}
\usepackage{sidecap}
@ -14,9 +16,9 @@
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Skripte und Funktionen}}{{\bfseries\large 14. Oktober, 2015}}
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
jan.grewe@uni-tuebingen.de}
\header{{\bfseries\large \"Ubung 5}}{{\bfseries\large Skripte und Funktionen}}{{\bfseries\large 15. November, 2016}}
\firstpagefooter{Prof. Jan Benda}{Phone: 29 74 573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
@ -24,6 +26,27 @@
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
language=Matlab,
basicstyle=\ttfamily\footnotesize,
numbers=left,
numberstyle=\tiny,
title=\lstname,
showstringspaces=false,
commentstyle=\itshape\color{darkgray},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
\newcommand{\code}[1]{\texttt{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@ -45,89 +68,152 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster:
\begin{questions}
\question Implementiere die Fakult\"at als Funktion.
\question Berechne die Fakult\"at einer Zahl.
\begin{parts}
\part Version 1: berechnet die Fakult\"at von 5 und gib das
Resultat auf dem Bildschirm aus.
\part Version 2: Wie 1 aber die Funktion \"ubernimmt als Argument
die Zahl, von der die Fakult\"at berechnet werden soll.
\part Version 3: Wie 2 aber mit R\"uckgabe des berechneten Wertes.
\part Version 1: Schreibe eine Skript, das die Fakult\"at von 5 berechnet und das
Resultat auf dem Bildschirm ausgibt.
\begin{solution}
\lstinputlisting{factorialscripta.m}
\end{solution}
\part Version 2: Wie Version 1, aber als Funktion, die als
Argument die Zahl, von der die Fakult\"at berechnet werden soll,
\"ubernimmt.
\begin{solution}
\lstinputlisting{printfactorial.m}
\lstinputlisting{factorialscriptb.m}
\end{solution}
\part Version 3: Wie Version 2, die Funktion soll den berechneten
Wert nicht ausgeben, sondern als Funktionswert zur\"uckgeben. Das
aufrufende Skript soll dann den berechneten Wert auf dem
Bildschirm ausgeben.
\begin{solution}
\lstinputlisting{myfactorial.m}
\lstinputlisting{factorialscriptc.m}
\end{solution}
\end{parts}
\question Implementiere eine Funktion, die einen Sinus mit der
Amplitude 1 und der Frequenz $f = $ 50\,Hz plottet ($sin(2\pi \cdot
f \cdot t)$):
\question Grafische Darstellung einer Sinuswelle.
\begin{parts}
\part Erweitere die Funktion sodass die L\"ange der Zeitachse, die
Schrittweite, Amplitude, Frequenz als Argumente
\"ubergeben werden k\"onnen.
\part Gib sowohl den Sinus als auch die Zeitachse zur\"uck.
\part Implementiere eine Funktion, die einen Sinus mit der
Amplitude 1 und der Frequenz $f = $ 50\,Hz plottet ($\sin(2\pi \cdot
f \cdot t)$). Rufe die Funktion auf.
\begin{solution}
\lstinputlisting{plotsine50.m}
\lstinputlisting{plotsinea.m}
\end{solution}
\part Erweitere die Funktion so, dass die L\"ange der Zeitachse,
die Amplitude, und die Frequenz als Argumente \"ubergeben werden
k\"onnen. Die Schrittweite soll in der Funktion aus der Frequenz
berechnet werden.
\begin{solution}
\lstinputlisting{plotsine.m}
\lstinputlisting{plotsineb.m}
\end{solution}
\part Verlagere alle plot Befehle in das aufrufende Skript
und ver\"andere die Funktion so, dass sie sowohl den Sinus als
auch die Zeitachse zur\"uckgibt.
\begin{solution}
\lstinputlisting{sinewave.m}
\lstinputlisting{plotsinec.m}
\end{solution}
\part Schreibe eine zweite Funktion, die den Sinus plotted und
daf\"ur die Zeitachse und den Sinus als Argument erh\"alt. Diese
Funktion soll die Achsen richtig beschriften. Schreibe ein kleines
Skript, dass beide Funktionen aufruft, um einen Sinus von 5\,Hz
mit der Amplitude 2 \"uber 1.5 Sekunden zu plotten.
\begin{solution}
\lstinputlisting{plotsinewave.m}
\lstinputlisting{plotsined.m}
\end{solution}
\end{parts}
\question Schreibe eine Funktion, die bin\"are Datens\"atze
('signal.bin' und 'signal2.bin' vom Montag) liest und die Daten als
Vektor zur\"uckgibt. Welche Argumente muss die Funktion
\"ubernehmen?
\question Entwickle ein Programm, das einen 1-D random walk
simuliert. Das Programm soll folgendes leisten:
\begin{itemize}
\item Jede Simulation soll solange laufen, bis eine Abweichung vom
Startwert von $\pm$ 50 erreicht ist.
\item Es soll m\"oglich sein, die Wahrscheinlichkeit f\"ur eine der
beiden Richtungen zu variieren. Variiere im Bereich von 0.5 bis 0.9.
\end{itemize}
%\question Schreibe eine Funktion, die bin\"are Datens\"atze
%('signal.bin' und 'signal2.bin' vom Montag) liest und die Daten als
%Vektor zur\"uckgibt. Welche Argumente muss die Funktion
%\"ubernehmen?
\question Random Walk.
\begin{parts}
\part \"Uberlege Dir ein geeignetes ``Programmlayout'' aus
Funktionen und Skripten.
\part Implementiere die L\"osung.
\part Simuliere 30 Realisationen des random walk pro
Wahrscheinlichkeit.
\part Es sollen die Positionen als Funktion der Schrittanzahl
geplottet werden. Erstelle einen Plot mit den je 30
Wiederholungen pro Wahrscheinlichkeitsstufe.
\part Lies die Aufgabe bis zum Ende durch. \"Uberlege dir dann ein
geeignetes ``Programmlayout'' aus Funktionen und Skripten.
Was w\"are eine geeigente Funktion f\"ur diese Aufgabe? Welche
Argumente sollte sie entgegennehmen? Was soll sie berechnen und
zur\"uckgeben?
\begin{solution}
One function that computes one realisation of a random walk.
Scripts for plotting and analysis.
\lstinputlisting{randomwalkthresh.m}
\end{solution}
\part Simuliere und plotte die Positionen von 10 Realisationen
eines random walk mit gleichen Wahrscheinlichkeiten f\"ur beide
Richtungen. Jeder Walker startet an der Position 0 und soll so
lange laufen, bis er den Wert 50 \"uberschreitet oder den Wert
$-50$ unterschreitet.
\begin{solution}
\lstinputlisting{randomwalkscriptb.m}
\end{solution}
\part Jetzt wollen wir die Wahrscheinlichkeit $p$ f\"ur eine
Bewegung zu gr\"o{\ss}eren Positionen im Bereich $0.5 \le p < 0.8$
variieren. Simuliere 10 Realisationen des random walk f\"ur vier
verschiedene Wahrscheinlichkeiten.
\begin{solution}
\lstinputlisting{randomwalkscriptc.m}
\end{solution}
\part Wie entwickelt sich die mittlere ben\"otigte Schrittanzahl
in Abh\"angigkeit der Wahrscheinlichkeit? Stelle die Mittelwerte
und die Standardabweichungen graphisch dar.
\begin{solution}
\lstinputlisting{randomwalkscriptd.m}
\end{solution}
\end{parts}
\question Modellierung des exponentiellen Wachstums einer isolierten
Population. Das exponentielle Wachstum einer isolierten Population
wird \"uber folgende Differentialgleichung beschrieben:
\begin{equation}
\frac{dN}{dt} = N \cdot r,
\end{equation}
mit $N$ der Populationsgr\"o{\ss}e und $r$ der Wachstumsrate.
\begin{parts}
\part L\"ose die Gleichung numerisch mit dem Euler Verfahren.
\part Implementiere eine Funktion, die die Populationsgr\"o{\ss}e
und die Zeit zur\"uckgibt.
\part Plotte die Populationsgr\"o{\ss}e als Funktion der Zeit.
\end{parts}
%\question Modellierung des exponentiellen Wachstums einer isolierten
%Population. Das exponentielle Wachstum einer isolierten Population
%wird \"uber folgende Differentialgleichung beschrieben:
%\begin{equation}
% \frac{dN}{dt} = N \cdot r,
%\end{equation}
%mit $N$ der Populationsgr\"o{\ss}e und $r$ der Wachstumsrate.
%\begin{parts}
% \part L\"ose die Gleichung numerisch mit dem Euler Verfahren.
% \part Implementiere eine Funktion, die die Populationsgr\"o{\ss}e
% und die Zeit zur\"uckgibt.
% \part Plotte die Populationsgr\"o{\ss}e als Funktion der Zeit.
%\end{parts}
\question Etwas realistischer ist das logistische Wachstum einer
isolierten Population, bei der das Wachstum durch eine Kapazit\"at
gedeckelt ist. Sie wird mit folgender Differentialgleichung
beschrieben:
\begin{equation}
\frac{dN}{dt} = N \cdot r \cdot \left( 1 - \frac{N}{K} \right)
\end{equation}
mit $N$ der Population, der Wachstumsrate $r$ und $K$ der ``tragenden''
Kapazit\"at.
\begin{parts}
\part Implementiere die L\"osung des logistischen Wachstums in
einer Funktion. Benutze das Euler Verfahren. Die Funktion soll die
Parameter $r$, $K$ sowie den Startwert von $N$ als Argumente
\"ubernehmen.
\part Die Funktion soll die Populationsgr\"o{\ss}e und die Zeit
zur\"uckgeben.
\part Simuliere das Wachstum mit einer Anzahl unterschiedlicher
Startwerte f\"ur $N$.
\part Stelle die Ergebnisse in einem Plot graphisch dar.
\part Plotte das Wachstum $dN/dt$ als Funktion der
Populationsgr\"o{\ss}e $N$.
\end{parts}
%\question Etwas realistischer ist das logistische Wachstum einer
%isolierten Population, bei der das Wachstum durch eine Kapazit\"at
%gedeckelt ist. Sie wird mit folgender Differentialgleichung
%beschrieben:
%\begin{equation}
% \frac{dN}{dt} = N \cdot r \cdot \left( 1 - \frac{N}{K} \right)
%\end{equation}
%mit $N$ der Population, der Wachstumsrate $r$ und $K$ der ``tragenden''
%Kapazit\"at.
%\begin{parts}
% \part Implementiere die L\"osung des logistischen Wachstums in
% einer Funktion. Benutze das Euler Verfahren. Die Funktion soll die
% Parameter $r$, $K$ sowie den Startwert von $N$ als Argumente
% \"ubernehmen.
% \part Die Funktion soll die Populationsgr\"o{\ss}e und die Zeit
% zur\"uckgeben.
% \part Simuliere das Wachstum mit einer Anzahl unterschiedlicher
% Startwerte f\"ur $N$.
% \part Stelle die Ergebnisse in einem Plot graphisch dar.
% \part Plotte das Wachstum $dN/dt$ als Funktion der
% Populationsgr\"o{\ss}e $N$.
%\end{parts}
\end{questions}
\end{document}
\end{document}

View File

@ -0,0 +1,12 @@
function [time, sine] = sinewave(freq, ampl, duration)
% compute sine wave with time axis
% freq: frequency of the sinewave in Hertz
% ampl: amplitude of the sinewave
% duration: duration of the sinewave in seconds
% returns:
% time: vector of time points
% sine: corresponding vector with the sine wave
step = 0.01/freq;
time = 0:step:duration;
sine = ampl*sin(2*pi*freq*time);
end

View File

@ -2,7 +2,7 @@
\input{header}
\setcounter{maxexercise}{0} % show listings up to exercise maxexercise
\setcounter{maxexercise}{1000} % show listings up to exercise maxexercise
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View File

@ -1,6 +1,6 @@
TEXFILES=$(wildcard statistics??.tex)
TEXFILES=$(wildcard exercises??.tex)
EXERCISES=$(TEXFILES:.tex=.pdf)
SOLUTIONS=$(EXERCISES:statistics%=solutions%)
SOLUTIONS=$(EXERCISES:exercises%=solutions%)
.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean
@ -10,7 +10,7 @@ exercises : $(EXERCISES)
solutions : $(SOLUTIONS)
$(SOLUTIONS) : solutions%.pdf : statistics%.tex instructions.tex
$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex
{ echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@)
pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true
rm $(patsubst %.pdf,%,$@).[!p]*

View File

@ -3,36 +3,36 @@ n = 10000;
m = 10; % number of loops
%% (b) a single data set of random numbers:
x = rand( n, 1 );
x = rand(n, 1);
%% (c) plot probability density:
%histogram( x, 'Normalization', 'pdf' );
[h,b] = hist( x, 20 );
%histogram(x, 'Normalization', 'pdf');
[h,b] = hist(x, 20);
h = h/sum(h)/(b(2)-b(1)); % normalization
bar(b, h)
title('A uniform distribution')
xlabel('x')
ylabel('probability density')
pause( 2.0 )
pause(2.0)
%% (d) sum of two random numbers:
y = rand( n, 1 );
y = rand(n, 1);
x = x + y;
%histogram( x, 'Normalization', 'pdf' );
[h,b] = hist( x, 20 );
%histogram(x, 'Normalization', 'pdf');
[h,b] = hist(x, 20);
h = h/sum(h)/(b(2)-b(1)); % normalization
bar(b, h)
title('Sum of two uniform distributions')
xlabel('x')
ylabel('probability density')
pause( 2.0 )
pause(2.0)
%% (f) sum up more distributions:
x = zeros( n, 1 );
means = zeros( m, 1 );
stds = zeros( m, 1 );
x = zeros(n, 1);
means = zeros(m, 1);
stds = zeros(m, 1);
for i=1:m
y = rand( n, 1 ); % new uniform distributed numbers
y = rand(n, 1); % new uniform distributed numbers
x = x + y; % add them to the sum
mu = mean(x); % compute mean
sd = std(x); % compute standard deviation
@ -42,34 +42,34 @@ for i=1:m
xx = -1:0.01:i+1; % x-axis values for plot of pdf
p = exp(-0.5*(xx-mu).^2/sd^2)/sqrt(2*pi*sd^2); % pdf
plot(xx, p, 'r', 'linewidth', 3 )
ns = sprintf( 'N=%d', i );
text( 0.1, 0.9, ns, 'units', 'normalized' )
ns = sprintf('N=%d', i);
text(0.1, 0.9, ns, 'units', 'normalized')
hold on
%histogram( x, 20, 'Normalization', 'pdf' );
[h,b] = hist( x, 20 );
%histogram(x, 20, 'Normalization', 'pdf');
[h,b] = hist(x, 20);
h = h/sum(h)/(b(2)-b(1)); % normalization
bar(b, h)
hold off
xlim([-0.5, i+0.5])
xlabel( 'x' )
ylabel( 'summed pdf' )
savefigpdf( gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5 );
xlabel('x')
ylabel('summed pdf')
savefigpdf(gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5);
if i < 6
pause( 3.0 )
pause(3.0)
end
end
%% (h) mean and standard deviation in dependence on number of summed up distributions:
nx = 1:m;
plot( nx, means, 'b', 'linewidth', 4 );
plot(nx, means, 'b', 'linewidth', 4);
hold on
plot( nx, stds, 'r', 'linewidth', 4 );
plot(nx, stds, 'r', 'linewidth', 4);
xx = 0:0.01:m;
sdu = 1.0/sqrt(12); % standarad deviation of the uniform distribution
plot( xx, sqrt(xx)*sdu, 'k' )
legend( 'mean', 'std', 'theory' )
legend('mean', 'std', 'theory')
xlabel('N')
hold off
savefigpdf( gcf, 'centrallimit-samples.pdf', 6, 5 );
savefigpdf(gcf, 'centrallimit-samples.pdf', 6, 5);

View File

@ -1,39 +1,40 @@
n = 10000;
%% (a) simulate n times rolling a die:
x = rollthedie( n );
maxeyes = 8;
x = rollthedie(n, maxeyes);
%% (b) probability P(3):
P3 = sum(x == 3)/length(x);
fprintf( 'P(3)=%.3f, expected is %.3f\n', P3, 1/6 );
%% (b) probability P(5):
P5 = sum(x == 5)/length(x);
fprintf('P(5)=%.3f, expected is %.3f\n', P5, 1/maxeyes);
for i =1:6
for i =1:maxeyes
P = sum(x == i)/length(x);
fprintf( 'P(%d)=%.3f, expected is %.3f\n', i, P, 1/6 );
fprintf('P(%d)=%.3f, expected is %.3f\n', i, P, 1/maxeyes);
end
%% (c) P(i)
P = zeros(1, 6);
for i =1:6
P = zeros(1, maxeyes);
for i =1:maxeyes
P(i) = sum(x == i)/length(x);
end
subplot( 1, 2, 1 )
plot( [0 7], [1/6 1/6], 'r', 'linewidth', 3 )
subplot(1, 2, 1)
plot([0 maxeyes+1], [1/maxeyes 1/maxeyes], 'r', 'linewidth', 3)
hold on
bar( P );
bar(P);
hold off
set(gca, 'XTick', 1:6 );
xlim( [ 0 7 ] );
set(gca, 'XTick', 1:maxeyes);
xlim([0 maxeyes+1]);
xlabel('Eyes');
ylabel('Probability');
%% (d) histogram of x
subplot( 1, 2, 2 );
diehist( x );
subplot(1, 2, 2);
diehist(x);
%% (e) loaded die
% eye 1 to 5 have P=1/8, eye 6 has P = 3/8 !
x = randi( 8, 1, n ); % random numbers from 1 to 8
x(x>6) = 6; % set numbers 7 and 8 to 6
diehist( x );
savefigpdf(gcf, 'die1.pdf', 12, 5)
x = randi(8, 1, n); % random numbers from 1 to 8
x(x>6) = 6; % set numbers 7 and 8 to 6
diehist(x);
savefigpdf(gcf, 'die1.pdf', 12, 5)

Binary file not shown.

View File

@ -3,23 +3,25 @@ n = 100;
P = zeros(ndies, 6);
for i = 1:ndies
% (a) roll a single die:
x = rollthedie( n );
x = rollthedie(n, 6);
% (b) compute normalized histogram:
[h,b] = hist( x, 1:6 );
[h,b] = hist(x, 1:6);
h = h/sum(h); % normalization
% (c) store the histograms:
P(i,:) = h;
end
% (c) mean and standard deviation for each eye:
m = mean(P, 1);
s = std(P, 1);
% (d) plot results:
bar(m, 'facecolor', [0.8 0 0]); % darker red
hold on;
errorbar(m, s, '.k', 'linewidth', 2 ); % k is black
set(gca, 'XTick', 1:6 );
xlim( [ 0, 7 ] );
ylim( [ 0, 0.25])
errorbar(m, s, '.k', 'linewidth', 2); % k is black
set(gca, 'XTick', 1:6);
xlim([ 0, 7 ]);
ylim([ 0, 0.25])
xlabel('Eyes');
ylabel('Probability');
hold off;

View File

@ -1,14 +1,15 @@
function diehist( x )
% plots a normalized histogram of random numbers x drawn from rolling a
% die.
[h,b] = hist( x, 1:6 );
h = h/sum(h); % normalization
plot( [0 7], [1/6 1/6], 'r', 'linewidth', 3 )
hold on
bar( b, h );
hold off
set(gca, 'XTick', 1:6 );
xlim( [ 0, 7 ] );
xlabel('Eyes');
ylabel('Probability');
function diehist(x)
% plots a normalized histogram of integer random numbers x
% drawn from rolling a die.
maxx = max(x);
[h,b] = hist(x, 1:maxx);
h = h/sum(h); % normalization
plot([0 maxx+1], [1/maxx 1/maxx], 'r', 'linewidth', 3)
hold on
bar(b, h);
hold off
set(gca, 'XTick', 1:maxx);
xlim([ 0, maxx+1]);
xlabel('Eyes');
ylabel('Probability');
end

View File

@ -0,0 +1,224 @@
\documentclass[12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{pslatex}
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\ifprintanswers
\newcommand{\stitle}{: L\"osungen}
\else
\newcommand{\stitle}{}
\fi
\header{{\bfseries\large \"Ubung 6\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 22. November, 2016}}
\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
language=Matlab,
basicstyle=\ttfamily\footnotesize,
numbers=left,
numberstyle=\tiny,
title=\lstname,
showstringspaces=false,
commentstyle=\itshape\color{darkgray},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{dsfont}
\newcommand{\naZ}{\mathds{N}}
\newcommand{\gaZ}{\mathds{Z}}
\newcommand{\raZ}{\mathds{Q}}
\newcommand{\reZ}{\mathds{R}}
\newcommand{\reZp}{\mathds{R^+}}
\newcommand{\reZpN}{\mathds{R^+_0}}
\newcommand{\koZ}{\mathds{C}}
%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\continue}{\ifprintanswers%
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\continuepage}{\ifprintanswers%
\newpage
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\newsolutionpage}{\ifprintanswers%
\newpage%
\else
\fi}
%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\qt}[1]{\textbf{#1}\\}
\newcommand{\pref}[1]{(\ref{#1})}
\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}}
\newcommand{\code}[1]{\texttt{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\input{instructions}
\ifprintanswers%
\else
\begin{itemize}
\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass
sie auch wirklich das macht, was sie machen soll! Teste dies mit
kleinen Beispielen direkt in der Kommandozeile.
\item Versuche die L\"osungen der Aufgaben m\"oglichst in
sinnvolle kleine Funktionen herunterzubrechen.
Sobald etwas \"ahnliches mehr als einmal berechnet werden soll,
lohnt es sich eine Funktion daraus zu schreiben!
\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen
zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner
Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft
ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute
Statistik zu bekommen.
\item Benutze die Hilfsfunktion von \code{matlab} (\code{help
command} oder \code{doc command}) und das Internet, um
herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden
sind und was f\"ur M\"oglichkeiten sie bieten.
Auch zu inhaltlichen Konzepten bietet das Internet oft viele
Antworten!
\item Die L\"osung bitte als zip-Archiv mit dem Namen
``probabilities\_\{nachname\}\_\{vorname\}.zip'' auf ILIAS hochladen.
\end{itemize}
\fi
\begin{questions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \textbf{Lies im Skript das Kapitel 3 ``Programmierstil''!}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Wahrscheinlichkeiten eines W\"urfels I}
Der Computer kann mit W\"urfeln w\"urfeln die mehr als 6 Seiten haben!
\begin{parts}
\part Simuliere 10000 W\"urfe mit einem W\"urfel mit acht Seiten
durch Erzeugung von ganzzahligen Zufallszahlen mit den Augenzahlen
$x_i = 1, 2, \ldots 8$ .
\part Berechne die Wahrscheinlichkeit $P(5)$ des Auftretens der
Augenzahl f\"unf durch Bestimmung der Anzahl der F\"unfen im
Datensatz.
Entspricht das Ergebnis deiner Erwartung?
\"Uberpr\"ufe auch die Wahrscheinlichkeit $P(x_i)$ der anderen
Zahlen.
Ist das ein fairer W\"urfel?
\part Speicher die berechneten Wahrscheinlichkeiten $P(x_i)$ f\"ur
das Auftreten der gew\"urfelten Zahlen in einem Vektor und benutze
die \code{bar()} Funktion, um diese Wahrscheinlichkeiten als
Funktion der Augenzahl zu plotten.
\part Erstelle in einem weiterem Plot ein entsprechendes normiertes Histogramm
mit Hilfe der \code{hist()} und \code{bar()} Funktionen.
\part \extra Wie k\"onnte man einen gezinkten sechsseitigen W\"urfel
simulieren, bei dem die sechs dreimal so h\"aufig wie die anderen
Zahlen gew\"urfelt wird?
Fertige von diesem W\"urfel ein normiertes Histogram aus 10000
W\"urfen an.
\end{parts}
\begin{solution}
\lstinputlisting{rollthedie.m}
\lstinputlisting{diehist.m}
\lstinputlisting{die1.m}
\includegraphics[width=1\textwidth]{die1}
\end{solution}
\continue
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Wahrscheinlichkeiten eines W\"urfels II}
Wir werten nun das Verhalten mehrerer W\"urfel aus.
\begin{parts}
\part Simuliere 20 W\"urfel, von denen jeder 100 mal geworfen wird
(jeder W\"urfel wird mit dem gleichen Zufallsgenerator simuliert).
\part Berechne aus diesem Datensatz f\"ur jeden W\"urfel ein normiertes Histogramm.
\part Bestimme den Mittelwert und die Standardabweichung f\"ur jede
Augenzahl gemittelt \"uber die W\"urfel.
\part Stelle das Ergebnis in einem S\"aulenplot mit Fehlerbalken dar
(\code{bar()} mit \code{errorbar()} Funktionen).
\end{parts}
\begin{solution}
\lstinputlisting{die2.m}
\includegraphics[width=0.5\textwidth]{die2}
\end{solution}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Histogramm der Normalverteilung}
\vspace{-3ex}
\begin{parts}
\part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus
$n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und
Standardabweichung $\sigma=1$ (\code{randn()} Funktion).
\part Berechne aus diesem Datensatz die Wahrscheinlichkeit $P(0\le
x<0.5)$.
\part Was passiert mit der Wahrscheinlichkeit eine Zahl in einem
bestimmten Interval zu ziehen (z.B. $P(0\le x<a)$), wenn dieses
Intervall immer kleiner wird ($a \to 0$)?
Schreibe ein Programm, das dies illustriert indem es $P(0\le x<a)$
als Funktion von $a$ plottet ($0 \ge a \ge 4$).
\part \label{manualpdf} Bestimme und plotte die
Wahrscheinlichkeitsdichte dieser Zufallszahlen (das normierte
Histogramm). Lege dazu zun\"achst die Positionen der bins (Breite
von 0.5) in einem Vektor fest. Bestimme dann mit einer \code{for}
Schleife f\"ur jedes dieser bins die Anzahl der Datenelemente, die
in diese bin fallen. Normiere anschliessend das so erhaltene
Histogram und plotte es mit der \code{bar()} Funktion.
\part \label{gaussianpdf} Plotte zum Vergleich in den gleichen Plot
die Normalverteilung
\[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \]
\part Plotte die Wahrscheinlichkeitsdichte der Daten wie in
(\ref{manualpdf}) und (\ref{gaussianpdf}), aber mit Hilfe der
\code{hist()} Funktion.
\end{parts}
\begin{solution}
\lstinputlisting{normhist.m}
\includegraphics[width=1\textwidth]{normhist}
\end{solution}
\end{questions}
\end{document}

View File

@ -0,0 +1,272 @@
\documentclass[12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{pslatex}
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\ifprintanswers
\newcommand{\stitle}{: L\"osungen}
\else
\newcommand{\stitle}{}
\fi
\header{{\bfseries\large \"Ubung 7\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 29. November, 2016}}
\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
language=Matlab,
basicstyle=\ttfamily\footnotesize,
numbers=left,
numberstyle=\tiny,
title=\lstname,
showstringspaces=false,
commentstyle=\itshape\color{darkgray},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{dsfont}
\newcommand{\naZ}{\mathds{N}}
\newcommand{\gaZ}{\mathds{Z}}
\newcommand{\raZ}{\mathds{Q}}
\newcommand{\reZ}{\mathds{R}}
\newcommand{\reZp}{\mathds{R^+}}
\newcommand{\reZpN}{\mathds{R^+_0}}
\newcommand{\koZ}{\mathds{C}}
%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\continue}{\ifprintanswers%
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\continuepage}{\ifprintanswers%
\newpage
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\newsolutionpage}{\ifprintanswers%
\newpage%
\else
\fi}
%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\qt}[1]{\textbf{#1}\\}
\newcommand{\pref}[1]{(\ref{#1})}
\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}}
\newcommand{\code}[1]{\texttt{#1}}
\graphicspath{{../../pointprocesses/exercises/}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\input{instructions}
\begin{questions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Wahrscheinlichkeiten der Normalverteilung}
Mit den folgenden Aufgaben wollen wir bestimmen, welcher Anteil eines
normalverteilten Datensatzes in bestimmten Grenzen symmetrisch um den
Mittelwert enthalten ist.
\begin{parts}
\part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus
$n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und
Standardabweichung $\sigma=1$ (\code{randn() Funktion}).
\part Bestimme und plotte die Wahrscheinlichkeitsdichte dieser
Zufallszahlen (normiertes Histogramm) und plotte zum Vergleich in
den gleichen Plot die Normalverteilung
\[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \]
\part \label{onesigma} Wieviele dieser Daten $X$ sind maximal eine Standardabweichung vom Mittelwert entfernt?\\
D.h. wieviele Datenwerte $x_i$ haben den Wert $-\sigma < x_i < +\sigma$?\\
Wie gro{\ss} ist dann also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen
Wert in diesem Interval zu erhalten?
\part \label{probintegral} Berechne numerisch diese
Wahrscheinlichkeit aus dem entsprechenden Integral
\[ P_{\pm\sigma}=\int_{x=\mu-\sigma}^{x=\mu+\sigma} p_g(x) \, dx \]
\"uber die Normalverteilung.
\"Uberpr\"ufe zuerst, ob tats\"achlich
\[ \int_{-\infty}^{+\infty} p_g(x) \, dx = 1 \; . \]
Warum muss das so sein?
\part Welcher Anteil der Daten ist in den Intervallen $\pm 2\sigma$
sowie $\pm 3\sigma$ enthalten?
Vergleiche die Ergebnisse jeweils mit dem entsprechenden Integral
\"uber die Wahrscheinlichkeitsdichte.
\part \label{givenfraction} Finde durch numerische Integration der
Wahrscheinlichkeitsdichte heraus, in welchem Interval symmetrisch um
den Mittelwert 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten
sind.
% \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma}
% -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit
% beliebigen Mittelwerten und Standardabweichungen funktioniert.\\
% Teste den Code mit entsprechenden Zufallszahlen.\\
% Wie bekommt man mit \code{randn()} Zufallszahlen mit beliebiger
% Standardabweichung und Mittelwerten?
\end{parts}
\begin{solution}
\lstinputlisting{normprobs.m}
\end{solution}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Zentraler Grenzwertsatz}
Der Zentrale Grenzwertsatz besagt, dass die Summe von unabh\"angigen
und identisch verteilten (i.i.d. = independent and identically
distributed) Zufallsvariablen gegen die Normalverteilung konvergiert.
Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen.
\begin{parts}
\part Bevor du die weiteren Teilaufgaben liest, versuche dir klar zu
machen, was der Zentrale Grenzwertsatz bedeutet, und wie du vorgehen
k\"onntest ein Programm zu schreiben, das den Grenzwertsatz
illustriert.
\part Erzeuge 10000 zwischen 0 und 1 gleichverteilte Zufallszahlen
(Funktion \code{rand}).
\part Plotte deren Wahrscheinlichkeitsdichte (normiertes Histogram).
\part Erzeuge weitere 10000 gleichverteilte Zufallszahlen und
addiere diese zu den bereits vorhandenen auf.
\part Plotte die Wahrscheinlichkeitsdichte der aufsummierten
Zufallszahlen.
\part Wiederhole Schritt (d) und (e) viele Male.
\part Vergleiche in einer Grafik die Wahrscheinlichkeitsdichte der
aufsummierten Zufallszahlen mit der Gaussfunktion
\[ p_g(x) =
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]
mit dem Mittelwert $\mu$ und der Standardabweichung $\sigma$ der
aufsummierten Zufallszahlen.
\part Wie \"andert sich der Mittelwert und die
Standardabweichung/Varianz
der aufsummierten Zufallszahlen?
Wie h\"angen diese mit den Werten der urspr\"unglichen Verteilung
zusammen?
\part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit
exponentiell verteilten Zufallszahlen (Funktion \code{rande}).
\end{parts}
\begin{solution}
\lstinputlisting{centrallimit.m}
\includegraphics[width=0.5\textwidth]{centrallimit-hist01}
\includegraphics[width=0.5\textwidth]{centrallimit-hist02}
\includegraphics[width=0.5\textwidth]{centrallimit-hist03}
\includegraphics[width=0.5\textwidth]{centrallimit-hist05}
\includegraphics[width=0.5\textwidth]{centrallimit-samples}
\end{solution}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Intervallstatistik von Spiketrains}
In Ilias findet ihr die Dateien \code{poisson.mat},
\code{pifou.mat}, und \code{lifadapt.mat}. Jede dieser Dateien
enth\"alt mehrere Trials von Spiketrains von einer bestimmten Art
von Neuron. Die Spikezeiten sind in Sekunden gemessen.
Mit den folgenden Aufgaben wollen wir die Intervallstatistik der
Spiketrains der drei Neurone miteinander vergleichen.
\begin{parts}
\part Lade die Spiketrains aus den drei Dateien. Achte darauf,
dass sie verschiedene Variablen\-namen bekommen.
In welchem Datentyp liegen die Daten vor? Wie kann auf einzelne
Spiketrains zugegriffen werden? Wie auf einzelne Spikezeiten?
\begin{solution}
\begin{lstlisting}
clear all
% not so good:
load poisson.mat
whos
poissonspikes = spikes;
load pifou.mat;
pifouspikes = spikes;
load lifadapt.mat;
lifadaptspikes = spikes;
clear spikes;
% better:
clear all
x = load('poisson.mat');
poissonspikes = x.spikes;
x = load('pifou.mat');
pifouspikes = x.spikes;
x = load('lifadapt.mat');
lifadaptspikes = x.spikes;
\end{lstlisting}
\end{solution}
\part Schreibe eine Funktion, die die Spikezeiten der ersten
$t_{max}$ Sekunden in einem Rasterplot visualisiert. In jeder
Zeile des Rasterplots wird ein Spiketrain dargestellt. Jeder
einzelne Spike wird als senkrechte Linie zu der Zeit des
Auftretens des Spikes geplottet. Benutze die Funktion, um die
Spikeraster der ersten 1\,s der drei Neurone nebeneinander zu plotten.
\begin{solution}
\lstinputlisting{../../pointprocesses/code/spikeraster.m}
\lstinputlisting{../../pointprocesses/code/plotspikeraster.m}
\mbox{}\\[-3ex]
\colorbox{white}{\includegraphics[width=1\textwidth]{spikeraster}}
\end{solution}
\part Schreibe eine Funktion, die einen einzigen Vektor mit den
Interspikeintervallen aller Trials von Spikezeiten zur\"uckgibt.
\begin{solution}
\lstinputlisting{../../pointprocesses/code/isis.m}
\end{solution}
\part Schreibe eine Funktion, die ein normiertes Histogramm aus
einem Vektor von Interspikeintervallen, gegeben in Sekunden,
berechnet und dieses mit richtiger Achsenbeschriftung plottet.
Die Interspikeintervalle sollen dabei in Millisekunden angegeben
werden. Die Funktion soll zus\"atzlich den Mittelwert, die
Standardabweichung, und den Variationskoeffizienten der
Interspikeintervalle berechnen und diese im Plot mit angeben.
Benutze die vorherige und diese Funktion, um die
Interspikeintervall Verteilung der drei Neurone zu vergleichen.
\begin{solution}
\lstinputlisting{../../pointprocesses/code/isihist.m}
\lstinputlisting{../../pointprocesses/code/plotisih.m}
\mbox{}\\[-3ex]
\colorbox{white}{\includegraphics[width=1\textwidth]{isihist}}
\end{solution}
\end{parts}
\end{questions}
\end{document}

View File

@ -15,7 +15,7 @@
\else
\newcommand{\stitle}{}
\fi
\header{{\bfseries\large \"Ubung 2\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 20. Oktober, 2015}}
\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 29. November, 2016}}
\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
@ -87,67 +87,32 @@ jan.benda@uni-tuebingen.de}
\begin{questions}
\question \qt{Zentraler Grenzwertsatz}
Der Zentrale Grenzwertsatz besagt, dass die Summe von unabh\"angigen
und identisch verteilten (i.i.d. = independent and identically
distributed) Zufallsvariablen gegen die Normalverteilung konvergiert.
Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen.
\begin{parts}
\part Versuche dir klar zu machen, was der Zentrale Grenzwertsatz
bedeutet, und wie du vorgehen k\"onntest ein Programm zu
schreiben, das den Grenzwertsatz illustriert.
\part Erzeuge 10000 zwischen 0 und 1 gleichverteilte Zufallszahlen
(Funktion \code{rand}).
\part Plotte deren Wahrscheinlichkeitsdichte (normiertes Histogram).
\part Erzeuge weitere 10000 gleichverteilte Zufallszahlen und
addiere diese zu den bereits vorhandenen auf.
\part Plotte die Wahrscheinlichkeitsdichte der aufsummierten
Zufallszahlen.
\part Wiederhole Schritt (d) und (e) viele Male.
\part Vergleiche in einer Grafik die Wahrscheinlichkeitsdichte der
aufsummierten Zufallszahlen mit der Gaussfunktion
\[ p_g(x) =
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\]
mit dem Mittelwert $\mu$ und der Standardabweichung $\sigma$ der
aufsummierten Zufallszahlen.
\part Wie \"andert sich der Mittelwert und die
Standardabweichung/Varianz
der aufsummierten Zufallszahlen?\\
Wie h\"angen diese mit den Werten der urspr\"unglichen Verteilung
zusammen?
\part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit exponentiell
verteilten Zufallszahlen (Funktion \code{rande}).
\end{parts}
\begin{solution}
\lstinputlisting{centrallimit.m}
\includegraphics[width=0.5\textwidth]{centrallimit-hist01}
\includegraphics[width=0.5\textwidth]{centrallimit-hist02}
\includegraphics[width=0.5\textwidth]{centrallimit-hist03}
\includegraphics[width=0.5\textwidth]{centrallimit-hist05}
\includegraphics[width=0.5\textwidth]{centrallimit-samples}
\end{solution}
\question \qt{Random Walk}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{Statistik des Random Walks}
Im folgenden wollen wir einige Eigenschaften des Random Walks bestimmen.
\begin{parts}
\part Schreibe eine Funktion, die einen einzelnen Random Walk mit
Startwert 0 f\"ur $n$ Schritte und Wahrscheinlichkeit $p$ f\"ur
einen positiven Schritt als Vektor zur\"uckgibt.
\part Visualisiere jeweils 10 Random Walks mit $p=0.5$ zusammen in einem Plot
f\"ur $n=100$, $n=1000$ und $n=10000$ (drei Plots).\\
Sch\"atze aus den Abbildungen ab, wie sich der Mittelwert und die Standardabweichung
des Random Walks mit der Zeit (Schritte) sich entwickelt.
f\"ur $n=100$, $n=1000$ und $n=10000$ (drei Plots).
Sch\"atze aus den Abbildungen ab, wie sich der Mittelwert und die
Standardabweichung des Random Walks mit der Zeit (Schritte) sich
entwickelt.
\part \"Uberpr\"uefe deine Hypothese zum Mittelwert und zur
Standardabweichung, indem du von $m$ Random Walks ($m \ge 10$) f\"ur
jeden z.B. zehnten Schritt den Mittelwert und die Standardabweichung
\"uber die Positionen der $m$ Random Walks berechnest.\\
\"uber die Positionen der $m$ Random Walks berechnest.
Wie h\"angt also die Standardabweichung von der Anzahl der Schritte
ab? Wie entwickelt sich die Standardabweichung f\"ur eine sehr
gro{\ss}e Anzahl von Schritten?
\part \extra Erstelle eine Grafik, die die Verteilung der Position eines Random Walkers
zu drei verschiedenen Zeitpunkten zeigt.
\part \extra Erstelle eine Grafik, die die Verteilung der Position
eines Random Walkers zu drei verschiedenen Zeitpunkten zeigt.
\end{parts}
\begin{solution}
\lstinputlisting{randomwalk.m}
@ -158,6 +123,7 @@ Im folgenden wollen wir einige Eigenschaften des Random Walks bestimmen.
\end{solution}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\question \qt{\extra 2D Random Walk}
Bisher hat sich unser Random Walker nur in einer Dimension bewegt
(nur vorw\"arts oder r\"uckw\"arts). Er kann aber auch in mehreren Dimensionen laufen!\\
@ -179,4 +145,5 @@ sind unabh\"angig voneinander.
\end{questions}
\end{document}
\end{document}

View File

@ -4,38 +4,3 @@
{\large Jan Grewe, Jan Benda}\\[-3ex]
Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center}
\ifprintanswers%
\else
% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und
% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost
% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden
% (z.B. variablen\_datentypen\_mueller.m).
\begin{itemize}
\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass
sie auch wirklich das macht, was sie machen soll! Teste dies mit
kleinen Beispielen direkt in der Kommandozeile.
\item Versuche die L\"osungen der Aufgaben m\"oglichst in
sinnvolle kleine Funktionen herunterzubrechen.
Sobald etwas \"ahnliches mehr als einmal berechnet werden soll,
lohnt es sich eine Funktion daraus zu schreiben!
\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen
zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner
Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft
ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute
Statistik zu bekommen.
\item Benutze die Hilfsfunktion von \code{matlab} (\code{help
commando} oder \code{doc commando}) und das Internet, um
herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden
sind und was f\"ur M\"oglichkeiten sie bieten.
Auch zu inhaltlichen Konzepten bietet das Internet oft viele
Antworten!
\end{itemize}
\fi

View File

@ -0,0 +1,58 @@
%% a) 1000 normal distributed random numbers:
x = randn(1000, 1);
%% b) probability of 0<=x<0.5:
n = sum(x>=0.0 & x<0.5);
P = n/length(x);
fprintf('probability 0<=x<0.5 is %g\n', P);
%% c) probability for decreasing intervals:
upper = [0.0:0.01:4.0];
P = zeros(length(upper), 1);
for k=1:length(upper)
P(k) = sum((x>=0) & (x<upper(k)))/length(x);
end
subplot(1, 2, 1);
plot(upper, P, 'linewidth', 2);
ylim([0 0.5]);
xlabel('x_{upper}');
ylabel('P(0<=x<x_{upper})');
%% d) histogram with for loop:
x = randn(1000, 1);
bw = 0.5;
bins=[-5:bw:5];
n = zeros(length(bins), 1);
for k=1:length(bins)
n(k) = sum((x>=bins(k)-bw/2) & (x<bins(k)+bw/2));
end
p = n/sum(n)/bw;
subplot(1, 2, 2);
bar(bins, p);
%% e) gaussian pdf:
hold on;
xx = [bins(1):0.01:bins(end)];
gauss = exp(-0.5*xx.^2.0)/sqrt(2*pi);
plot(xx, gauss, 'r', 'linewidth', 2);
hold off;
xlim([-5 5])
xlabel('x');
ylabel('p(x)');
%% f) hist
x = randn(1000, 1);
bw = 0.5;
bins=[-5:bw:5];
n = hist(x, bins);
p = n/sum(n)/bw;
subplot(1, 2, 2);
bar(bins, p);
hold on;
plot(xx, gauss, 'r', 'linewidth', 2);
hold off;
xlim([-5 5])
xlabel('x');
ylabel('p(x)');
savefigpdf(gcf, 'normhist.pdf', 14, 6);

Binary file not shown.

View File

@ -1,14 +1,30 @@
%% (a) generate normal distributed random numbers:
n = 10000;
x = randn( n, 1 );
x = randn(n, 1);
%% (b)
%% (b) plot histogram and compare with pdf:
bw = 0.5;
bins=[-5:bw:5];
n = hist(x, bins);
p = n/sum(n)/bw;
subplot(1, 2, 2);
bar(bins, p);
hold on;
xx = [bins(1):0.01:bins(end)];
gauss = exp(-0.5*xx.^2.0)/sqrt(2*pi);
plot(xx, gauss, 'r', 'linewidth', 2);
hold off;
xlim([-5 5])
xlabel('x');
ylabel('p(x)');
%% (c) fraction of data in +/- 1 sigma:
nsig = sum((x>=-1.0)&(x<=1.0));
Psig = nsig/length(x);
fprintf('%d of %d data elements, i.e. %.2f%% are contained in the interval -1 to +1\n\n', ...
nsig, length(x), 100.0*Psig );
%% (c)
%% (d) intgegral over pdf:
dx = 0.01;
xx = -10:dx:10; % x-values
pg = exp(-0.5*xx.^2)/sqrt(2*pi); % y-values Gaussian pdf
@ -17,30 +33,25 @@ P = sum(pg)*dx;
fprintf( 'Integral over the Gaussian pdf is %.3f\n', P );
% integral from -1 to 1:
P = sum(pg((xx>=-1.0)&(xx<=1.0)))*dx; % we need to use xx, not the random numbers x!
fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n', P );
fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n\n', P );
%% (d)
P = sum(pg((xx>=-2.0)&(xx<=2.0)))*dx;
fprintf( 'Integral over the Gaussian pdf from -2 to 2 is %.4f\n', P );
P = sum(pg((xx>=-3.0)&(xx<=3.0)))*dx;
fprintf( 'Integral over the Gaussian pdf from -3 to 3 is %.4f\n\n', P );
%% (e)
for sigma = [1.0, 2.0, 3.0]
Pdata = sum((x>=-sigma)&(x<=sigma))/length(x);
Ppdf = sum(pg((xx>=-sigma)&(xx<=sigma)))*dx;
fprintf( 'Integral over the Gaussian pdf from -%.0f to +%.0f is %.4f\n', sigma, sigma, Ppdf );
fprintf( 'Probability of data in range from -%.0f to +%.0f is %.4f\n\n', sigma, sigma, Pdata );
end
%% (e) probability of small ranges
nr = 50;
xmax = 3.0
xs = zeros(nr, 1); % size of integration interval
Ps = zeros(nr, 1); % storage
for i = 1:nr
% upper limit goes from 4.0 down to 0.0:
xupper = xmax*(nr-i)/nr;
xs(i) = xupper;
% integral from 0 to xupper:
Ps(i) = sum(pg((xx>=0.0)&(xx<=xupper)))*dx;
%% (f)
for P = [0.5, 0.9, 0.95, 0.99]
for upper = xx(xx>0.0)
Ppdf = sum(pg((xx>=-upper)&(xx<=upper)))*dx;
if Ppdf > P
fprintf('-%.2f < x < +%.2f: P=%.2f\n', upper, upper, P);
break
end
end
end
plot( xs, Ps, 'linewidth', 3 )
xlim([0 xmax])
ylim([0 0.55])
xlabel('Integration interval')
ylabel('Probability')
fprintf('The probability P(0.1234) = %.4f\n\n', sum(x == 0.1234)/length(x) );
savefigpdf(gcf, 'normprobs.pdf', 12, 8);

Binary file not shown.

View File

@ -1,4 +1,5 @@
function x = rollthedie( n )
% return a vector with the result of rolling a die n times
x = randi( [1, 6], n, 1 );
function x = rollthedie(n, m)
% return a vector with the result of rolling a die
% with m eyes n times
x = randi( [1, m], n, 1 );
end

View File

@ -1,184 +0,0 @@
\documentclass[12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{pslatex}
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot}
\ifprintanswers
\newcommand{\stitle}{: L\"osungen}
\else
\newcommand{\stitle}{}
\fi
\header{{\bfseries\large \"Ubung 1\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 19. Oktober, 2015}}
\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email:
jan.benda@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{listings}
\lstset{
language=Matlab,
basicstyle=\ttfamily\footnotesize,
numbers=left,
numberstyle=\tiny,
title=\lstname,
showstringspaces=false,
commentstyle=\itshape\color{darkgray},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{dsfont}
\newcommand{\naZ}{\mathds{N}}
\newcommand{\gaZ}{\mathds{Z}}
\newcommand{\raZ}{\mathds{Q}}
\newcommand{\reZ}{\mathds{R}}
\newcommand{\reZp}{\mathds{R^+}}
\newcommand{\reZpN}{\mathds{R^+_0}}
\newcommand{\koZ}{\mathds{C}}
%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\continue}{\ifprintanswers%
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\continuepage}{\ifprintanswers%
\newpage
\else
\vfill\hspace*{\fill}$\rightarrow$\newpage%
\fi}
\newcommand{\newsolutionpage}{\ifprintanswers%
\newpage%
\else
\fi}
%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\qt}[1]{\textbf{#1}\\}
\newcommand{\pref}[1]{(\ref{#1})}
\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}}
\newcommand{\code}[1]{\texttt{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\input{instructions}
\begin{questions}
\question \qt{Wahrscheinlichkeiten eines W\"urfels I}
Der Computer kann auch als W\"urfel verwendet werden!
\begin{parts}
\part Simuliere 10000 W\"urfe mit dem W\"urfel durch Erzeugung von
ganzzahligen Zufallszahlen mit den Augenzahlen $x_i = 1, 2, \ldots 6$ .
\part Berechne die Wahrscheinlichkeit $P(3)$
des Auftretens der Augenzahl drei durch Bestimmung der Anzahl der Dreien im Datensatz.\\
Entspricht das Ergebnis deiner Erwartung?\\
\"Uberpr\"ufe auch die Wahrscheinlichkeit $P(x_i)$ der anderen Zahlen.\\
Ist das ein fairer W\"urfel?
\part Speicher die berechneten Wahrscheinlichkeiten $P(x_i)$ f\"ur das Auftreten der
gew\"urfelten Zahlen in einem Vektor und benutze die \code{bar} Funktion,
um diese Wahrscheinlichkeiten als Funktion der Augenzahl zu plotten.
\part Erstelle in einem weiterem Plot ein entsprechendes normiertes Histogramm
mit der \code{hist} Funktion.
\part \extra Wie k\"onnte man einen gezinkten W\"urfel simulieren, bei dem die sechs
dreimal so h\"aufig wie die anderen Zahlen gew\"urfelt wird?\\
Fertige von diesem W\"urfel ein Histogram aus 10000 W\"urfen an.
\end{parts}
\begin{solution}
\lstinputlisting{rollthedie.m}
\lstinputlisting{diehist.m}
\lstinputlisting{die1.m}
\includegraphics[width=1\textwidth]{die1}
\end{solution}
\continue
\question \qt{Wahrscheinlichkeiten eines W\"urfels II}
Wir werten nun das Verhalten mehrerer W\"urfel aus.
\begin{parts}
\part Simuliere 20 W\"urfel, von denen jeder 100 mal geworfen wird
(jeder W\"urfel wird mit dem gleichen Zufallsgenerator simuliert).
\part Berechne aus diesem Datensatz f\"ur jeden W\"urfel ein normiertes Histogramm.
\part Bestimme den Mittelwert und die Standardabweichung f\"ur jede
Augenzahl gemittelt \"uber die W\"urfel.
\part Stelle das Ergebnis mit einem S\"aulenplot mit Fehlerbalken dar
(\code{bar} mit \code{errorbar} Funktionen).
\end{parts}
\begin{solution}
\lstinputlisting{die2.m}
\includegraphics[width=0.5\textwidth]{die2}
\end{solution}
\question \qt{Wahrscheinlichkeiten der Normalverteilung}
Mit den folgenden Aufgaben wollen wir bestimmen, welcher Anteil eines
normalverteilten Datensatzes in bestimmten Grenzen symmetrisch um den
Mittelwert enthalten ist.
\begin{parts}
\part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus
$n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und
Standardabweichung $\sigma=1$.
\part \label{onesigma} Wieviele dieser Daten sind maximal eine Standardabweichung vom Mittelwert entfernt?\\
D.h. wieviele Datenwerte $x_i$ haben den Wert $-\sigma < x_i < +\sigma$?\\
Wie gro{\ss} ist also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen
Wert in diesem Interval zu erhalten?
\part \label{probintegral} Berechne numerisch diese
Wahrscheinlichkeit aus dem entsprechenden Integral
\[ P_{\pm\sigma}=\int_{x=\mu-\sigma}^{x=\mu+\sigma} p_g(x) \, dx \]
\"uber die Normalverteilung
\[ p_g(x) =
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \]
\"Uberpr\"ufe zuerst, ob tats\"achlich
\[ \int_{-\infty}^{+\infty} p_g(x) \, dx = 1 \; . \]
Warum muss das so sein?
\part Welcher Anteil der Daten ist in den Intervallen $\pm2\sigma$ sowie $\pm3\sigma$
enthalten?
\part \label{givenfraction} Finde heraus in welchem Interval symmetrisch um den Mittelwert
50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten sind.
\part Was passiert mit der Wahrscheinlichkeit eine Zahl in einem bestimmten Interval
zu ziehen, wenn dieses Intervall immer kleiner wird?\\
Schreibe ein Programm, das dies illustriert.\\
Wie gro{\ss} ist die Wahrscheinlichkeit $P(x_i=0.1234)$?
\part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma}
-- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit
beliebigen Mittelwerten und Standardabweichungen funktioniert.\\
Teste den Code mit entsprechenden Zufallszahlen.\\
Wie bekommt man mit \code{randn} Zufallszahlen mit beliebiger
Standardabweichung und Mittelwerten?
\end{parts}
\begin{solution}
\lstinputlisting{normprobs.m}
\includegraphics[width=1\textwidth]{normprobs}
\end{solution}
\end{questions}
\end{document}