Merge branch 'master' of raven.am28.uni-tuebingen.de:scientificComputing
Conflicts: pointprocesses/code/binnedRate.m pointprocesses/code/convolutionRate.m pointprocesses/code/instantaneousRate.m programming/lecture/programming.tex programmingstyle/code/calculateSines.m programmingstyle/lecture/programmingstyle.tex
This commit is contained in:
commit
554a627c66
38
Makefile
38
Makefile
@ -3,24 +3,44 @@ BASENAME=scientificcomputing-script
|
|||||||
SUBDIRS=programming plotting programmingstyle statistics bootstrap regression likelihood pointprocesses designpattern
|
SUBDIRS=programming plotting programmingstyle statistics bootstrap regression likelihood pointprocesses designpattern
|
||||||
SUBTEXS=$(foreach subd, $(SUBDIRS), $(subd)/lecture/$(subd).tex)
|
SUBTEXS=$(foreach subd, $(SUBDIRS), $(subd)/lecture/$(subd).tex)
|
||||||
|
|
||||||
pdf : chapters $(BASENAME).pdf
|
all : script chapters
|
||||||
|
|
||||||
chapters :
|
chapters :
|
||||||
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture pdf; done
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture chapter; done
|
||||||
|
|
||||||
|
script : plots $(BASENAME).pdf
|
||||||
|
|
||||||
|
|
||||||
|
plots :
|
||||||
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture plots; done
|
||||||
|
|
||||||
|
|
||||||
|
pdf : $(BASENAME).pdf
|
||||||
|
|
||||||
$(BASENAME).pdf : $(BASENAME).tex header.tex $(SUBTEXS)
|
$(BASENAME).pdf : $(BASENAME).tex header.tex $(SUBTEXS)
|
||||||
export TEXMFOUTPUT=.; pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
||||||
|
splitindex $(BASENAME).idx
|
||||||
|
|
||||||
index :
|
index :
|
||||||
|
pdflatex -interaction=scrollmode $(BASENAME).tex
|
||||||
splitindex $(BASENAME).idx
|
splitindex $(BASENAME).idx
|
||||||
export TEXMFOUTPUT=.; pdflatex -interaction=scrollmode $(BASENAME).tex
|
pdflatex -interaction=scrollmode $(BASENAME).tex | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex $(BASENAME).tex || true
|
||||||
|
|
||||||
|
again :
|
||||||
|
pdflatex $(BASENAME).tex
|
||||||
|
|
||||||
|
watchpdf :
|
||||||
|
while true; do ! make -s -q pdf && make pdf; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
|
watchscript :
|
||||||
|
while true; do ! make -s -q script && make script; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean :
|
||||||
rm -f *~ $(BASENAME).aux $(BASENAME).log $(BASENAME).out $(BASENAME).toc
|
rm -f *~ $(BASENAME).aux $(BASENAME).log $(BASENAME).out $(BASENAME).toc $(BASENAME).lo? $(BASENAME).idx $(BASENAME)-term.i* $(BASENAME)-enterm.i* $(BASENAME)-code.i*
|
||||||
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture clean; done
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture clean; done
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean
|
||||||
rm -f $(PDFFILE)
|
rm -f $(BASENAME).pdf
|
||||||
|
for sd in $(SUBDIRS); do $(MAKE) -C $$sd/lecture cleanall; done
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
@ -1,32 +1,13 @@
|
|||||||
BASENAME=bootstrap
|
BASENAME=bootstrap
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
# script:
|
||||||
python $<
|
pdf : chapter
|
||||||
|
|
||||||
clean :
|
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
clean : cleanchapter
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{81}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{4}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,4 +16,10 @@
|
|||||||
|
|
||||||
\input{bootstrap}
|
\input{bootstrap}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Proper introduction of confidence intervals
|
||||||
|
\item Proper introduction of statistical tests (significance, power, etc.)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\chapter{\tr{Bootstrap Methods}{Bootstrap Methoden}}
|
\chapter{\tr{Bootstrap Methods}{Bootstrap Methoden}}
|
||||||
|
|
||||||
Beim Bootstrap erzeugt man sich die Verteilung von Statistiken durch Resampling
|
Beim \determ{Bootstrap} erzeugt man sich die Verteilung von Statistiken durch Resampling
|
||||||
aus der Stichprobe. Das hat mehrere Vorteile:
|
aus der Stichprobe. Das hat mehrere Vorteile:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Weniger Annahmen (z.B. muss eine Stichprobe nicht normalverteilt sein).
|
\item Weniger Annahmen (z.B. muss eine Stichprobe nicht normalverteilt sein).
|
||||||
@ -21,21 +21,22 @@ aus der Stichprobe. Das hat mehrere Vorteile:
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Zur Erinnerung: In der Statistik interessieren wir uns f\"ur
|
Zur Erinnerung: In der Statistik interessieren wir uns f\"ur
|
||||||
Eigenschaften einer Grundgesamtheit. z.B. die mittlere L\"ange von
|
Eigenschaften einer \determ{Grundgesamtheit}. z.B. die mittlere
|
||||||
sauren Gurken (\figref{statisticalpopulationfig}). Aus der
|
L\"ange von sauren Gurken (\figref{statisticalpopulationfig}). Aus der
|
||||||
Grundgesamtheit wird eine Stichprobe (simple random sample, SRS)
|
Grundgesamtheit wird eine \determ{Stichprobe} (\enterm{simple random
|
||||||
gezogen, da niemals die gesamte Grundgesamtheit gemessen werden kann.
|
sample}, \enterm[SRS|see{simple random sample}]{SRS}) gezogen, da
|
||||||
Dann wird aus dieser einzigen Stichprobe die gew\"unschte Gr\"o{\ss}e
|
niemals die gesamte Grundgesamtheit gemessen werden kann. Dann wird
|
||||||
berechnet (die mittlere Gr\"o{\ss}e der sauren Gurken) und man hofft,
|
aus dieser einzigen Stichprobe die gew\"unschte Gr\"o{\ss}e berechnet
|
||||||
dass die erhaltene Zahl an der entsprechenden unbekannten Gr\"o{\ss}e
|
(die mittlere Gr\"o{\ss}e der sauren Gurken) und man hofft, dass die
|
||||||
der Grundgesamtheit (der Populationsparameter) m\"oglichst nah dran
|
erhaltene Zahl an der entsprechenden unbekannten Gr\"o{\ss}e der
|
||||||
|
Grundgesamtheit (der \determ{Populationsparameter}) m\"oglichst nah dran
|
||||||
ist. Eine Aufgabe der Statistik ist es, herauszubekommen wie gut der
|
ist. Eine Aufgabe der Statistik ist es, herauszubekommen wie gut der
|
||||||
Populationsparameter abgesch\"atzt worden ist.
|
Populationsparameter abgesch\"atzt worden ist.
|
||||||
|
|
||||||
Wenn wir viele Stichproben ziehen w\"urden, dann k\"onnte man f\"ur
|
Wenn wir viele Stichproben ziehen w\"urden, dann k\"onnte man f\"ur
|
||||||
jede Stichprobe den gew\"unschten Parameter berechnen, und von diesen
|
jede Stichprobe den gew\"unschten Parameter berechnen, und von diesen
|
||||||
die Wahrscheinlichkeitsverteilung \"uber ein Histogramm bestimmen ---
|
die Wahrscheinlichkeitsverteilung \"uber ein Histogramm bestimmen ---
|
||||||
die ``Stichprobenverteilung'' (sampling distribution,
|
die \determ{Stichprobenverteilung} (\enterm{sampling distribution},
|
||||||
\subfigref{bootstrapsamplingdistributionfig}{a}).
|
\subfigref{bootstrapsamplingdistributionfig}{a}).
|
||||||
|
|
||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
@ -43,7 +44,7 @@ die ``Stichprobenverteilung'' (sampling distribution,
|
|||||||
\includegraphics[height=0.2\textheight]{srs2}\\[2ex]
|
\includegraphics[height=0.2\textheight]{srs2}\\[2ex]
|
||||||
\includegraphics[height=0.2\textheight]{srs3}
|
\includegraphics[height=0.2\textheight]{srs3}
|
||||||
\titlecaption{\label{bootstrapsamplingdistributionfig}Bootstrap der
|
\titlecaption{\label{bootstrapsamplingdistributionfig}Bootstrap der
|
||||||
Stichprobenverteilung}{(a) Von der Grundgesamtheit (population) mit
|
Stichprobenverteilung.}{(a) Von der Grundgesamtheit (population) mit
|
||||||
unbekanntem Parameter (z.B. Mittelwert $\mu$) zieht man
|
unbekanntem Parameter (z.B. Mittelwert $\mu$) zieht man
|
||||||
Stichproben (SRS: simple random samples). Die Statistik (hier
|
Stichproben (SRS: simple random samples). Die Statistik (hier
|
||||||
Bestimmung von $\bar x$) kann f\"ur jede Stichprobe berechnet
|
Bestimmung von $\bar x$) kann f\"ur jede Stichprobe berechnet
|
||||||
@ -68,9 +69,9 @@ Mittelwerte der Stichproben um den Populationsmittelwert streuen
|
|||||||
\subfigref{bootstrapsamplingdistributionfig}{b}).
|
\subfigref{bootstrapsamplingdistributionfig}{b}).
|
||||||
|
|
||||||
Wir k\"onnen aber auch aus der einen Stichprobe die wir haben durch
|
Wir k\"onnen aber auch aus der einen Stichprobe die wir haben durch
|
||||||
Resampling viele neue Stichproben generieren (Bootstrap). Von diesen
|
\determ{Resampling} viele neue Stichproben generieren (Bootstrap). Von diesen
|
||||||
k\"onnen wir jeweils die gew\"unschte Gr\"o{\ss}e berechnen und ihre
|
k\"onnen wir jeweils die gew\"unschte Gr\"o{\ss}e berechnen und ihre
|
||||||
Verteilung bestimmen (Bootstrap Verteilung,
|
Verteilung bestimmen (\determ{Bootstrapverteilung},
|
||||||
\subfigref{bootstrapsamplingdistributionfig}{c}). Diese Verteilung ist
|
\subfigref{bootstrapsamplingdistributionfig}{c}). Diese Verteilung ist
|
||||||
interessanterweise in ihrer Breite und Form der Stichprobenverteilung
|
interessanterweise in ihrer Breite und Form der Stichprobenverteilung
|
||||||
sehr \"ahnlich. Nur streut sie nicht um den Populationswert sonder um
|
sehr \"ahnlich. Nur streut sie nicht um den Populationswert sonder um
|
||||||
@ -92,7 +93,7 @@ Stichprobe vorkommen.
|
|||||||
|
|
||||||
Am besten l\"asst sich die Bootstrap Methode am Beispiel des
|
Am besten l\"asst sich die Bootstrap Methode am Beispiel des
|
||||||
Standardfehlers des Mittelwertes veranschaulichen. Aus der Stichprobe
|
Standardfehlers des Mittelwertes veranschaulichen. Aus der Stichprobe
|
||||||
k\"onnen wir den Mittelwert berechnen. Der Standardfehler des
|
k\"onnen wir den Mittelwert berechnen. Der \determ{Standardfehler} des
|
||||||
Mittelwerts gibt die Standardabweichung an, mit der wir erwarten, dass
|
Mittelwerts gibt die Standardabweichung an, mit der wir erwarten, dass
|
||||||
der gemessene Mittelwert um den Populationsmittelwert streut.
|
der gemessene Mittelwert um den Populationsmittelwert streut.
|
||||||
|
|
||||||
@ -115,6 +116,7 @@ eine ganze Verteilung von Mittelwerten generieren
|
|||||||
(\figref{bootstrapsemfig}). Die Standardabweichung dieser Verteilung
|
(\figref{bootstrapsemfig}). Die Standardabweichung dieser Verteilung
|
||||||
ist dann der gesuchte Standardfehler des Mittelwerts.
|
ist dann der gesuchte Standardfehler des Mittelwerts.
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
\begin{exercise}{bootstrapsem.m}{bootstrapsem.out}
|
\begin{exercise}{bootstrapsem.m}{bootstrapsem.out}
|
||||||
Erzeuge die Verteilung der Mittelwerte einer Stichprobe durch Bottstrapping,
|
Erzeuge die Verteilung der Mittelwerte einer Stichprobe durch Bottstrapping,
|
||||||
um daraus den Standardfehler des Mittelwerts zu bestimmen.
|
um daraus den Standardfehler des Mittelwerts zu bestimmen.
|
||||||
@ -147,7 +149,7 @@ Nullhypothese aus den Daten selbst gewonnen werden. Dabei m\"ussen die
|
|||||||
Daten entsprechend der Nullhypothese neu aus der Stichprobe gezogen
|
Daten entsprechend der Nullhypothese neu aus der Stichprobe gezogen
|
||||||
werden.
|
werden.
|
||||||
|
|
||||||
Diese ``Permutationstests'' haben den Vorteil, dass nur die
|
Diese \determ{Permutationstests} haben den Vorteil, dass nur die
|
||||||
Eigenschaft von Interesse zerst\"ort wird, um die Nullhypothese zu
|
Eigenschaft von Interesse zerst\"ort wird, um die Nullhypothese zu
|
||||||
generieren. Alle anderen Eigenschaften der Daten bleiben erhalten.
|
generieren. Alle anderen Eigenschaften der Daten bleiben erhalten.
|
||||||
|
|
||||||
@ -166,16 +168,18 @@ generieren. Alle anderen Eigenschaften der Daten bleiben erhalten.
|
|||||||
|
|
||||||
Sehr sch\"on lassen sich Permutationstest am Beispiel von
|
Sehr sch\"on lassen sich Permutationstest am Beispiel von
|
||||||
Korrelationen veranschaulichen. Gegeben sind Datenpaare $(x_i, y_i)$.
|
Korrelationen veranschaulichen. Gegeben sind Datenpaare $(x_i, y_i)$.
|
||||||
Daraus k\"onnen wir den Korrelationskoeffizienten berechnen. Wir
|
Daraus k\"onnen wir den
|
||||||
wissen dann aber noch nicht, ob der berechnete Wert tats\"achlich eine
|
\determ[Korrelationskoeffizient]{Korrelationskoeffizienten}
|
||||||
Korrelation anzeigt. Die Nullhypothese ist, dass die Daten nicht
|
berechnen. Wir wissen dann aber noch nicht, ob der berechnete Wert
|
||||||
miteinander korreliert sind. Indem wir die $x$-Werte und die $y$-Werte
|
tats\"achlich eine Korrelation anzeigt. Die Nullhypothese ist, dass
|
||||||
unabh\"angig voneinander permutieren (ihre Reihenfolge zuf\"allig neu
|
die Daten nicht miteinander korreliert sind. Indem wir die $x$-Werte
|
||||||
anordnen), werden die Korrelationen der Datenpaare zerst\"ort. Wenn
|
und die $y$-Werte unabh\"angig voneinander permutieren (ihre
|
||||||
wir das viele Male wiederholen, bekommen wir die Verteilung der
|
Reihenfolge zuf\"allig neu anordnen), werden die Korrelationen der
|
||||||
Korrelationskoeffizienten f\"ur nichtkorrelierte Daten. Aus dieser
|
Datenpaare zerst\"ort. Wenn wir das viele Male wiederholen, bekommen
|
||||||
Verteilung der Nullhypothese k\"onnen wir dann dann die Signifikanz
|
wir die Verteilung der Korrelationskoeffizienten f\"ur
|
||||||
der tats\"achlich gemessenen Korrelation bestimmen.
|
nichtkorrelierte Daten. Aus dieser Verteilung der Nullhypothese
|
||||||
|
k\"onnen wir dann dann die Signifikanz der tats\"achlich gemessenen
|
||||||
|
Korrelation bestimmen.
|
||||||
|
|
||||||
\begin{exercise}{correlationsignificance.m}{correlationsignificance.out}
|
\begin{exercise}{correlationsignificance.m}{correlationsignificance.out}
|
||||||
Bestimme die Signifikanz eines Korrelationskoeffizienten.
|
Bestimme die Signifikanz eines Korrelationskoeffizienten.
|
||||||
@ -186,7 +190,7 @@ Bestimme die Signifikanz eines Korrelationskoeffizienten.
|
|||||||
\item Berechne den Korrelationskoeffizient dieser Datenpaare.
|
\item Berechne den Korrelationskoeffizient dieser Datenpaare.
|
||||||
\item Generiere die Verteilung der Nullhypothese ``unkorrelierte
|
\item Generiere die Verteilung der Nullhypothese ``unkorrelierte
|
||||||
Daten'' indem die $x$- und $y$-Daten 1000-mal unabh\"angig
|
Daten'' indem die $x$- und $y$-Daten 1000-mal unabh\"angig
|
||||||
permutiert werden \matlabfun{randperm} und jeweils der
|
permutiert werden \matlabfun{randperm()} und jeweils der
|
||||||
Korrelationskoeffizient berechnet wird.
|
Korrelationskoeffizient berechnet wird.
|
||||||
\item Bestimme aus den Nullhypothesendaten das 95\,\%-Perzentil und
|
\item Bestimme aus den Nullhypothesendaten das 95\,\%-Perzentil und
|
||||||
vergleiche es mit dem tats\"achlichen Korrelationskoeffizienten.
|
vergleiche es mit dem tats\"achlichen Korrelationskoeffizienten.
|
||||||
|
@ -2,7 +2,7 @@ import numpy as np
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,4) )
|
fig = plt.figure( figsize=(6,3.5) )
|
||||||
rng = np.random.RandomState(637281)
|
rng = np.random.RandomState(637281)
|
||||||
|
|
||||||
nsamples = 100
|
nsamples = 100
|
||||||
|
@ -2,7 +2,7 @@ import numpy as np
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,4) )
|
fig = plt.figure( figsize=(6,3.5) )
|
||||||
rng = np.random.RandomState(637281)
|
rng = np.random.RandomState(637281)
|
||||||
|
|
||||||
# generate correlated data:
|
# generate correlated data:
|
||||||
|
52
chapter.mk
Normal file
52
chapter.mk
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# plots:
|
||||||
|
plots : pythonplots gnuplots
|
||||||
|
|
||||||
|
# python plots:
|
||||||
|
PYFILES=$(wildcard *.py)
|
||||||
|
PYPDFFILES=$(PYFILES:.py=.pdf)
|
||||||
|
|
||||||
|
pythonplots : $(PYPDFFILES)
|
||||||
|
|
||||||
|
$(PYPDFFILES) : %.pdf: %.py
|
||||||
|
python $<
|
||||||
|
|
||||||
|
cleanpythonplots :
|
||||||
|
rm -f $(PYPDFFILES)
|
||||||
|
|
||||||
|
|
||||||
|
# gnuplot plots:
|
||||||
|
GPTFILES=$(wildcard *.gpt)
|
||||||
|
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
||||||
|
|
||||||
|
gnuplots : $(GPTTEXFILES)
|
||||||
|
|
||||||
|
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
||||||
|
gnuplot whitestyles.gp $<
|
||||||
|
epstopdf $*.eps
|
||||||
|
|
||||||
|
cleangnuplots :
|
||||||
|
rm -f $(GPTTEXFILES)
|
||||||
|
|
||||||
|
|
||||||
|
# script:
|
||||||
|
chapter : $(BASENAME)-chapter.pdf
|
||||||
|
|
||||||
|
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(wildcard $(BASENAME).aux) $(PYPDFFILES) $(GPTTEXFILES) ../../header.tex
|
||||||
|
if test -f $(BASENAME).aux; then \
|
||||||
|
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
||||||
|
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
||||||
|
fi; \
|
||||||
|
{ echo $${PAGE:=1}; echo $${CHAPTER:=0}; } | pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && { echo $${PAGE:=1}; echo $${CHAPTER:=0}; } | pdflatex -interaction=scrollmode $< || true
|
||||||
|
|
||||||
|
watchchapter :
|
||||||
|
while true; do ! make -q chapter && make chapter; sleep 0.5; done
|
||||||
|
|
||||||
|
|
||||||
|
cleanchapter : cleanpythonplots cleangnuplots
|
||||||
|
rm -f *~
|
||||||
|
rm -f $(BASENAME).aux $(BASENAME).log
|
||||||
|
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out $(BASENAME)-chapter.idx
|
||||||
|
|
||||||
|
|
||||||
|
cleanallchapter : cleanchapter
|
||||||
|
rm -f $(BASENAME)-chapter.pdf
|
@ -1,32 +1,13 @@
|
|||||||
BASENAME=designpattern
|
BASENAME=designpattern
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
# script:
|
||||||
python $<
|
pdf : chapter
|
||||||
|
|
||||||
clean :
|
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
clean : cleanchapter
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{125}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{8}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -10,7 +10,7 @@ einige dieser ``Design pattern'' zusammen.
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\section{for Schleifen \"uber Vektoren}
|
\section{for Schleifen \"uber Vektoren}
|
||||||
Grundlegend ist das Iterieren \"uber den Inhalt eines Vektors mit einer \code{for}-Schleife:
|
Grundlegend ist das Iterieren \"uber den Inhalt eines Vektors mit einer \code{for}-Schleife:
|
||||||
\begin{lstlisting}[caption={for-Schleife mit Indexen \"uber einen Vektor}]
|
\begin{lstlisting}[caption={\varcode{for}-Schleife mit Indexen \"uber einen Vektor}]
|
||||||
x = [2:3:20]; % irgendein Vektor
|
x = [2:3:20]; % irgendein Vektor
|
||||||
for i=1:length(x) % Mit der for-Schleife "loopen" wir ueber den Vektor
|
for i=1:length(x) % Mit der for-Schleife "loopen" wir ueber den Vektor
|
||||||
i % das ist der Index, der die Elemente des Vektors indiziert.
|
i % das ist der Index, der die Elemente des Vektors indiziert.
|
||||||
@ -24,7 +24,7 @@ end
|
|||||||
Wenn in der Schleife das Ergebnis in einen Vektor gespeichert werden soll,
|
Wenn in der Schleife das Ergebnis in einen Vektor gespeichert werden soll,
|
||||||
sollten wir vor der Schleife schon einen Vektor f\"ur die Ergebnisse
|
sollten wir vor der Schleife schon einen Vektor f\"ur die Ergebnisse
|
||||||
erstellen:
|
erstellen:
|
||||||
\begin{lstlisting}[caption={for-Schleife zum Schreiben eines Vektors}]
|
\begin{lstlisting}[caption={\varcode{for}-Schleife zum Schreiben eines Vektors}]
|
||||||
x = [1.2 2.3 2.6 3.1]; % irgendein Vektor
|
x = [1.2 2.3 2.6 3.1]; % irgendein Vektor
|
||||||
y = zeros(length(x),1); % Platz fuer die Ergebnisse, genauso viele wie Loops der Schleife
|
y = zeros(length(x),1); % Platz fuer die Ergebnisse, genauso viele wie Loops der Schleife
|
||||||
for i=1:length(x)
|
for i=1:length(x)
|
||||||
@ -39,7 +39,7 @@ mean(y)
|
|||||||
Die Berechnungen in der Schleife k\"onnen statt einer Zahl auch einen Vektor
|
Die Berechnungen in der Schleife k\"onnen statt einer Zahl auch einen Vektor
|
||||||
zur\"uckgeben. Wenn die L\"ange diese Vektors bekannt ist, dann kann vorher
|
zur\"uckgeben. Wenn die L\"ange diese Vektors bekannt ist, dann kann vorher
|
||||||
eine entsprechend gro{\ss}e Matrix angelegt werden:
|
eine entsprechend gro{\ss}e Matrix angelegt werden:
|
||||||
\begin{lstlisting}[caption={for-Schleife zum Schreiben von Zeilen einer Matrix}]
|
\begin{lstlisting}[caption={\varcode{for}-Schleife zum Schreiben von Zeilen einer Matrix}]
|
||||||
x = [2:3:20]; % irgendein Vektor
|
x = [2:3:20]; % irgendein Vektor
|
||||||
y = zeros(length(x),10); % Platz fuer die Ergebnisse
|
y = zeros(length(x),10); % Platz fuer die Ergebnisse
|
||||||
for i=1:length(x)
|
for i=1:length(x)
|
||||||
@ -54,7 +54,7 @@ mean(y, 1)
|
|||||||
|
|
||||||
Alternativ k\"onnen die in der Schleife erzeugten Vektoren zu einem
|
Alternativ k\"onnen die in der Schleife erzeugten Vektoren zu einem
|
||||||
einzigen, durchgehenden Vektor zusammengestellt werden:
|
einzigen, durchgehenden Vektor zusammengestellt werden:
|
||||||
\begin{lstlisting}[caption={for-Schleife zum Aneinanderh\"angen von Vektoren}]
|
\begin{lstlisting}[caption={\varcode{for}-Schleife zum Aneinanderh\"angen von Vektoren}]
|
||||||
x = [2:3:20]; % irgendein Vektor
|
x = [2:3:20]; % irgendein Vektor
|
||||||
y = []; % Leerer Vektor fuer die Ergebnisse
|
y = []; % Leerer Vektor fuer die Ergebnisse
|
||||||
for i=1:length(x)
|
for i=1:length(x)
|
||||||
@ -75,7 +75,6 @@ Zufallsgeneratoren geben oft nur Zufallszahlen mit festen Mittelwerten
|
|||||||
und Standardabweichungen (auch Skalierungen) zur\"uck. Multiplikation
|
und Standardabweichungen (auch Skalierungen) zur\"uck. Multiplikation
|
||||||
mit einem Faktor skaliert die Standardabweichung und Addition einer Zahl
|
mit einem Faktor skaliert die Standardabweichung und Addition einer Zahl
|
||||||
verschiebt den Mittelwert.
|
verschiebt den Mittelwert.
|
||||||
|
|
||||||
\begin{lstlisting}[caption={Skalierung von Zufallszahlen}]
|
\begin{lstlisting}[caption={Skalierung von Zufallszahlen}]
|
||||||
% 100 random numbers draw from a Gaussian distribution with mean 0 and standard deviation 1.
|
% 100 random numbers draw from a Gaussian distribution with mean 0 and standard deviation 1.
|
||||||
x = randn(100, 1);
|
x = randn(100, 1);
|
||||||
@ -85,9 +84,8 @@ mu = 4.8;
|
|||||||
sigma = 2.3;
|
sigma = 2.3;
|
||||||
y = randn(100, 1)*sigma + mu;
|
y = randn(100, 1)*sigma + mu;
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
Das gleiche Prinzip ist manchmal auch sinnvoll f\"ur \code{zeros()} oder \code{ones()}:
|
||||||
Das gleiche Prinzip ist manchmal auch sinnvoll f\"ur \code{zeros} oder \code{ones}:
|
\begin{lstlisting}[caption={Skalierung von \varcode{zeros()} und \varcode{ones()}}]
|
||||||
\begin{lstlisting}[caption={Skalierung von zeros und ones}]
|
|
||||||
x = -1:0.01:2; % Vektor mit x-Werten
|
x = -1:0.01:2; % Vektor mit x-Werten
|
||||||
plot(x, exp(-x.*x));
|
plot(x, exp(-x.*x));
|
||||||
% Plotte f\"ur die gleichen x-Werte eine Linie mit y=0.8:
|
% Plotte f\"ur die gleichen x-Werte eine Linie mit y=0.8:
|
||||||
@ -141,26 +139,23 @@ Meistens sollten Histogramme normiert werden, damit sie vergleichbar
|
|||||||
mit anderen Histogrammen oder mit theoretischen
|
mit anderen Histogrammen oder mit theoretischen
|
||||||
Wahrscheinlichkeitsverteilungen werden.
|
Wahrscheinlichkeitsverteilungen werden.
|
||||||
|
|
||||||
Die \code{histogram} Funktion macht das mit den entsprechenden Parametern automatisch:
|
Die \code{histogram()} Funktion macht das mit den entsprechenden Parametern automatisch:
|
||||||
\begin{lstlisting}[caption={Probability-density-function mit der histogram-Funktion}]
|
\begin{lstlisting}[caption={Probability-density-function mit der \varcode{histogram()}-Funktion}]
|
||||||
x = randn(100, 1); % irgendwelche reellwertige Daten
|
x = randn(100, 1); % irgendwelche reellwertige Daten
|
||||||
histogram(x, 'Normalization', 'pdf');
|
histogram(x, 'Normalization', 'pdf');
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
\begin{lstlisting}[caption={Probability mit der \varcode{histogram()}-Funktion}]
|
||||||
\begin{lstlisting}[caption={Probability mit der histogram-Funktion}]
|
|
||||||
x = randi(6, 100, 1); % irgendwelche integer Daten
|
x = randi(6, 100, 1); % irgendwelche integer Daten
|
||||||
histogram(x, 'Normalization', 'probability');
|
histogram(x, 'Normalization', 'probability');
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
So geht es mit der \code{hist()}-Funktion:
|
||||||
So geht es aber auch:
|
\begin{lstlisting}[caption={Probability-density-function mit der \varcode{hist()}- und \varcode{bar()}-Funktion}]
|
||||||
\begin{lstlisting}[caption={Probability-density-function mit der hist- und bar-Funktion}]
|
|
||||||
x = randn(100, 1); % irgendwelche reellwertige Daten
|
x = randn(100, 1); % irgendwelche reellwertige Daten
|
||||||
[h, b] = hist(x); % Histogram berechnen
|
[h, b] = hist(x); % Histogram berechnen
|
||||||
h = h/sum(h)/(b(2)-b(1)); % normieren zu einer Wahrscheinlichkeitsdichte
|
h = h/sum(h)/(b(2)-b(1)); % normieren zu einer Wahrscheinlichkeitsdichte
|
||||||
bar(b, h); % und plotten.
|
bar(b, h); % und plotten.
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
\begin{lstlisting}[caption={Probability mit der \varcode{hist()}- und \varcode{bar()}-Funktion}]
|
||||||
\begin{lstlisting}[caption={Probability mit der hist- und bar-Funktion}]
|
|
||||||
x = randi(6, 100, 1); % irgendwelche integer Daten
|
x = randi(6, 100, 1); % irgendwelche integer Daten
|
||||||
[h, b] = hist(x); % Histogram berechnen
|
[h, b] = hist(x); % Histogram berechnen
|
||||||
h = h/sum(h); % normieren zu Wahrscheinlichkeiten
|
h = h/sum(h); % normieren zu Wahrscheinlichkeiten
|
||||||
|
65
header.tex
65
header.tex
@ -26,8 +26,10 @@
|
|||||||
%%%%% index %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% index %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\usepackage[makeindex]{splitidx}
|
\usepackage[makeindex]{splitidx}
|
||||||
\makeindex
|
\makeindex
|
||||||
|
\usepackage[totoc]{idxlayout}
|
||||||
\newindex[Fachbegriffe]{term}
|
\newindex[Fachbegriffe]{term}
|
||||||
\newindex[Code]{code}
|
\newindex[Englische Fachbegriffe]{enterm}
|
||||||
|
\newindex[MATLAB Code]{code}
|
||||||
|
|
||||||
%%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
|
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
|
||||||
@ -66,9 +68,9 @@
|
|||||||
|
|
||||||
% float placement fractions:
|
% float placement fractions:
|
||||||
\renewcommand{\textfraction}{0.2}
|
\renewcommand{\textfraction}{0.2}
|
||||||
\renewcommand{\topfraction}{0.8}
|
\renewcommand{\topfraction}{0.9}
|
||||||
\renewcommand{\bottomfraction}{0.0}
|
\renewcommand{\bottomfraction}{0.0}
|
||||||
\renewcommand{\floatpagefraction}{0.5}
|
\renewcommand{\floatpagefraction}{0.7}
|
||||||
|
|
||||||
% spacing for floats:
|
% spacing for floats:
|
||||||
\setlength{\floatsep}{12pt plus 2pt minus 2pt}
|
\setlength{\floatsep}{12pt plus 2pt minus 2pt}
|
||||||
@ -138,6 +140,11 @@
|
|||||||
\newcommand{\tabrefb}[1]{\tabb~\tref{#1}}
|
\newcommand{\tabrefb}[1]{\tabb~\tref{#1}}
|
||||||
\newcommand{\tabsrefb}[1]{\tabsb~\tref{#1}}
|
\newcommand{\tabsrefb}[1]{\tabsb~\tref{#1}}
|
||||||
|
|
||||||
|
% invisible rule for expanding the height of a row in a table header:
|
||||||
|
\newcommand{\erh}{\rule[-1.2ex]{0pt}{3.5ex}}
|
||||||
|
% invisible rule for expanding the height of a row in a table body:
|
||||||
|
\newcommand{\erb}{\rule{0pt}{2.5ex}}
|
||||||
|
|
||||||
%%%%% equation references %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% equation references %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%\newcommand{\eqref}[1]{(\ref{#1})}
|
%\newcommand{\eqref}[1]{(\ref{#1})}
|
||||||
\newcommand{\eqn}{\tr{Eq}{Gl}.}
|
\newcommand{\eqn}{\tr{Eq}{Gl}.}
|
||||||
@ -166,7 +173,7 @@
|
|||||||
frame=single,
|
frame=single,
|
||||||
caption={\protect\filename@parse{\lstname}\protect\filename@base},
|
caption={\protect\filename@parse{\lstname}\protect\filename@base},
|
||||||
captionpos=t,
|
captionpos=t,
|
||||||
xleftmargin=2.5em,
|
xleftmargin=21pt,
|
||||||
xrightmargin=1mm,
|
xrightmargin=1mm,
|
||||||
aboveskip=1ex,
|
aboveskip=1ex,
|
||||||
belowskip=2ex
|
belowskip=2ex
|
||||||
@ -189,11 +196,15 @@
|
|||||||
\newcommand{\koZ}{\mathds{C}}
|
\newcommand{\koZ}{\mathds{C}}
|
||||||
|
|
||||||
%%%%% english, german, code and file terms: %%%%%%%%%%%%%%%
|
%%%%% english, german, code and file terms: %%%%%%%%%%%%%%%
|
||||||
\newcommand{\enterm}[1]{``#1''\sindex[term]{#1}}
|
\usepackage{ifthen}
|
||||||
\newcommand{\determ}[1]{\textit{#1}\sindex[term]{#1}}
|
\newcommand{\enterm}[2][]{``#2''\ifthenelse{\equal{#1}{}}{\protect\sindex[enterm]{#2}}{\protect\sindex[enterm]{#1}}}
|
||||||
\newcommand{\codeterm}[1]{\textit{#1}\sindex[term]{#1}}
|
\newcommand{\determ}[2][]{\textit{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[term]{#2}}{\protect\sindex[term]{#1}}}
|
||||||
|
\newcommand{\codeterm}[2][]{\textit{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[term]{#2}}{\protect\sindex[term]{#1}}}
|
||||||
\newcommand{\file}[1]{\texttt{#1}}
|
\newcommand{\file}[1]{\texttt{#1}}
|
||||||
|
|
||||||
|
% for escaping special characters into the index:
|
||||||
|
\newcommand{\scor}{"|}
|
||||||
|
|
||||||
%%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
\usetikzlibrary{shapes}
|
\usetikzlibrary{shapes}
|
||||||
@ -202,9 +213,17 @@
|
|||||||
|
|
||||||
%%%%% code/matlab commands: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% code/matlab commands: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\usepackage{textcomp}
|
\usepackage{textcomp}
|
||||||
\newcommand{\code}[1]{\setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1}}\sindex[code]{#1}}
|
\newcommand{\varcode}[1]{\setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1\protect\rule[-0.1ex]{0pt}{1.6ex}}}}
|
||||||
\newcommand{\matlab}{MATLAB$^{\copyright}$}
|
\newcommand{\code}[2][]{\varcode{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[code]{#2}}{\protect\sindex[code]{#1}}}
|
||||||
\newcommand{\matlabfun}[1]{(\tr{\matlab{}-function}{\matlab-Funktion} \setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1}})\sindex[code]{#1}}
|
\newcommand{\matlab}{\texorpdfstring{MATLAB$^{\copyright}$}{MATLAB}}
|
||||||
|
\newcommand{\matlabfun}[2][]{(\tr{\matlab-function}{\matlab-Funktion} \setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#2}})\ifthenelse{\equal{#1}{}}{\protect\sindex[code]{#2}}{\protect\sindex[code]{#1}}}
|
||||||
|
|
||||||
|
%%%%% shortquote and widequote commands: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% \shortquote{Something to be quoted}{Source}
|
||||||
|
\newcommand{\shortquote}[2]{\begin{list}{}{\rightmargin\leftmargin}\item\relax\itshape #1 \hfill \upshape #2\end{list}}
|
||||||
|
|
||||||
|
% \widequote{Something to be quoted}{Source}
|
||||||
|
\newcommand{\widequote}[2]{{\itshape #1} \hfill #2}
|
||||||
|
|
||||||
%%%%% exercises environment: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% exercises environment: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
% usage:
|
% usage:
|
||||||
@ -223,7 +242,6 @@
|
|||||||
% content of someoutput.out
|
% content of someoutput.out
|
||||||
%
|
%
|
||||||
% Innerhalb der exercise Umgebung ist enumerate umdefiniert, um (a), (b), (c), .. zu erzeugen.
|
% Innerhalb der exercise Umgebung ist enumerate umdefiniert, um (a), (b), (c), .. zu erzeugen.
|
||||||
\usepackage{ifthen}
|
|
||||||
\usepackage{mdframed}
|
\usepackage{mdframed}
|
||||||
\usepackage{xstring}
|
\usepackage{xstring}
|
||||||
\newcommand{\codepath}{}
|
\newcommand{\codepath}{}
|
||||||
@ -241,18 +259,20 @@
|
|||||||
\newcommand{\exerciseoutput}{#2}%
|
\newcommand{\exerciseoutput}{#2}%
|
||||||
\setlength{\fboxsep}{2mm}%
|
\setlength{\fboxsep}{2mm}%
|
||||||
\newcommand{\saveenumi}{\theenumi}\renewcommand{\labelenumi}{(\alph{enumi})}%
|
\newcommand{\saveenumi}{\theenumi}\renewcommand{\labelenumi}{(\alph{enumi})}%
|
||||||
\captionsetup{singlelinecheck=off,hypcap=false,labelfont={large,sf,it,bf},font={large,sf,it,bf},skip={0.5ex}}
|
\captionsetup{singlelinecheck=off,hypcap=false,labelfont={large,sf,it,bf},font={large,sf,it,bf},skip={0.5ex}}%
|
||||||
\begin{mdframed}[linewidth=0pt,backgroundcolor=exerciseback]%
|
\begin{mdframed}[linewidth=0pt,backgroundcolor=exerciseback]%
|
||||||
\captionof{exercisef}[\exercisefile]{}%
|
\captionof{exercisef}[\exercisefile]{}%
|
||||||
\captionsetup{font={normal,sf,it}}%
|
\captionsetup{font={normal,sf,it}}%
|
||||||
}%
|
}%
|
||||||
{\ifthenelse{\equal{\exercisesource}{}}{}%
|
{\hypersetup{hypertexnames=false}%
|
||||||
{\ifthenelse{\value{exercise}>\value{maxexercise}}{}%
|
\ifthenelse{\equal{\exercisesource}{}}{}%
|
||||||
|
{\ifthenelse{\value{exercisef}>\value{maxexercise}}{}%
|
||||||
{\addtocounter{lstlisting}{-1}%
|
{\addtocounter{lstlisting}{-1}%
|
||||||
\lstinputlisting[belowskip=0pt,aboveskip=1ex,nolol=true,title={\textbf{Listing:} \exercisefile}]{\codepath\exercisesource}%
|
\lstinputlisting[belowskip=0pt,aboveskip=1ex,nolol=true,title={\textbf{\tr{Solution}{L\"osung}:} \exercisefile}]{\codepath\exercisesource}%
|
||||||
\ifthenelse{\equal{\exerciseoutput}{}}{}%
|
\ifthenelse{\equal{\exerciseoutput}{}}{}%
|
||||||
{\addtocounter{lstlisting}{-1}%
|
{\addtocounter{lstlisting}{-1}%
|
||||||
\lstinputlisting[language={},title={\textbf{\tr{Output}{Ausgabe}:}},nolol=true,belowskip=0pt]{\codepath\exerciseoutput}}}}%
|
\lstinputlisting[language={},title={\textbf{\tr{Output}{Ausgabe}:}},nolol=true,belowskip=0pt]{\codepath\exerciseoutput}}}}%
|
||||||
|
\hypersetup{hypertexnames=true}%
|
||||||
\end{mdframed}%
|
\end{mdframed}%
|
||||||
\renewcommand{\theenumi}{\saveenumi}}
|
\renewcommand{\theenumi}{\saveenumi}}
|
||||||
|
|
||||||
@ -277,11 +297,13 @@
|
|||||||
\newenvironment{ibox}[2][tp]
|
\newenvironment{ibox}[2][tp]
|
||||||
{\SetupFloatingEnvironment{iboxf}{placement=#1}%
|
{\SetupFloatingEnvironment{iboxf}{placement=#1}%
|
||||||
\begin{iboxf}%
|
\begin{iboxf}%
|
||||||
\captionsetup{singlelinecheck=off,labelfont={large,sf,it,bf},font={large,sf,it,bf}}
|
\captionsetup{singlelinecheck=off,labelfont={large,sf,it,bf},font={large,sf,it,bf}}%
|
||||||
\begin{mdframed}[linecolor=infoline,linewidth=1ex,%
|
\begin{mdframed}[linecolor=infoline,linewidth=1ex,%
|
||||||
backgroundcolor=infoback,font={\sffamily},%
|
backgroundcolor=infoback,font={\sffamily},%
|
||||||
frametitle={\caption{#2}},frametitleaboveskip=-1ex,%
|
frametitle={\caption{#2}},frametitleaboveskip=-1ex,%
|
||||||
frametitlebackgroundcolor=infoline]}%
|
frametitlebackgroundcolor=infoline]%
|
||||||
|
\setlength{\parindent}{0pt}\setlength{\parskip}{1ex}%
|
||||||
|
\captionsetup{singlelinecheck=off,labelfont={normalsize,sf,bf},font={normalsize,sf}}}%
|
||||||
{\end{mdframed}%
|
{\end{mdframed}%
|
||||||
\end{iboxf}}
|
\end{iboxf}}
|
||||||
|
|
||||||
@ -303,14 +325,16 @@
|
|||||||
% placement=t
|
% placement=t
|
||||||
% ]{importantf}
|
% ]{importantf}
|
||||||
\newenvironment{important}[1][]%
|
\newenvironment{important}[1][]%
|
||||||
{\captionsetup{singlelinecheck=off,labelformat={empty},labelfont={large,sf,it,bf},font={large,sf,it,bf}}
|
{\captionsetup{singlelinecheck=off,hypcap=false,labelformat={empty},labelfont={large,sf,it,bf},font={large,sf,it,bf}}
|
||||||
\ifthenelse{\equal{#1}{}}%
|
\ifthenelse{\equal{#1}{}}%
|
||||||
{\begin{mdframed}[linecolor=importantline,linewidth=1ex,%
|
{\begin{mdframed}[linecolor=importantline,linewidth=1ex,%
|
||||||
backgroundcolor=importantback,font={\sffamily}]}%
|
backgroundcolor=importantback,font={\sffamily}]%
|
||||||
|
\setlength{\parindent}{0pt}\setlength{\parskip}{1ex}}%
|
||||||
{\begin{mdframed}[linecolor=importantline,linewidth=1ex,%
|
{\begin{mdframed}[linecolor=importantline,linewidth=1ex,%
|
||||||
backgroundcolor=importantback,font={\sffamily},%
|
backgroundcolor=importantback,font={\sffamily},%
|
||||||
frametitle={\captionof{iboxf}{#1}},frametitleaboveskip=-1ex,%
|
frametitle={\captionof{iboxf}{#1}},frametitleaboveskip=-1ex,%
|
||||||
frametitlebackgroundcolor=importantline]}%
|
frametitlebackgroundcolor=importantline]%
|
||||||
|
\setlength{\parindent}{0pt}\setlength{\parskip}{1ex}}%
|
||||||
}%
|
}%
|
||||||
{\end{mdframed}}
|
{\end{mdframed}}
|
||||||
|
|
||||||
@ -318,5 +342,6 @@
|
|||||||
%%%%% hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%% hyperref %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\usepackage[bookmarks=true,bookmarksopen=true,%
|
\usepackage[bookmarks=true,bookmarksopen=true,%
|
||||||
pdfpagemode=UseNone,pdfstartview=FitH,%
|
pdfpagemode=UseNone,pdfstartview=FitH,%
|
||||||
|
plainpages=false,pdfpagelabels,%
|
||||||
breaklinks=true,colorlinks=true,%
|
breaklinks=true,colorlinks=true,%
|
||||||
citecolor=blue!50!black,linkcolor=red!70!black,urlcolor=blue!50!black]{hyperref}
|
citecolor=blue!50!black,linkcolor=red!70!black,urlcolor=blue!50!black]{hyperref}
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=likelihood
|
BASENAME=likelihood
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{101}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{6}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,4 +16,9 @@
|
|||||||
|
|
||||||
\input{likelihood}
|
\input{likelihood}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item GLM model fitting?
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
In vielen Situationen wollen wir einen oder mehrere Parameter $\theta$
|
In vielen Situationen wollen wir einen oder mehrere Parameter $\theta$
|
||||||
einer Wahrscheinlichkeitsverteilung sch\"atzen, so dass die Verteilung
|
einer Wahrscheinlichkeitsverteilung sch\"atzen, so dass die Verteilung
|
||||||
die Daten $x_1, x_2, \ldots x_n$ am besten beschreibt.
|
die Daten $x_1, x_2, \ldots x_n$ am besten beschreibt.
|
||||||
Maximum-Likelihood-Sch\"atzer (maximum likelihood estimate, mle)
|
\determ{Maximum-Likelihood-Sch\"atzer} (\enterm{maximum likelihood
|
||||||
|
estimator}, \determ[mle|see{Maximum-Likelihood-Sch\"atzer}]{mle})
|
||||||
w\"ahlen die Parameter so, dass die Wahrscheinlichkeit, dass die Daten
|
w\"ahlen die Parameter so, dass die Wahrscheinlichkeit, dass die Daten
|
||||||
aus der Verteilung stammen, am gr\"o{\ss}ten ist.
|
aus der Verteilung stammen, am gr\"o{\ss}ten ist.
|
||||||
|
|
||||||
@ -31,8 +32,10 @@ Auftretens der Werte $x_1, x_2, \ldots x_n$ gegeben ein bestimmtes $\theta$
|
|||||||
p(x_1,x_2, \ldots x_n|\theta) = p(x_1|\theta) \cdot p(x_2|\theta)
|
p(x_1,x_2, \ldots x_n|\theta) = p(x_1|\theta) \cdot p(x_2|\theta)
|
||||||
\ldots p(x_n|\theta) = \prod_{i=1}^n p(x_i|\theta) \; .
|
\ldots p(x_n|\theta) = \prod_{i=1}^n p(x_i|\theta) \; .
|
||||||
\end{equation}
|
\end{equation}
|
||||||
Andersherum gesehen ist das die Likelihood (deutsch immer noch ``Wahrscheinlichleit'')
|
Andersherum gesehen ist das die \determ{Likelihood}
|
||||||
den Parameter $\theta$ zu haben, gegeben die Me{\ss}werte $x_1, x_2, \ldots x_n$,
|
(\enterm{likelihood}, deutsch immer noch ``Wahrscheinlichleit'') den
|
||||||
|
Parameter $\theta$ zu haben, gegeben die Me{\ss}werte $x_1, x_2,
|
||||||
|
\ldots x_n$,
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
{\cal L}(\theta|x_1,x_2, \ldots x_n) = p(x_1,x_2, \ldots x_n|\theta)
|
{\cal L}(\theta|x_1,x_2, \ldots x_n) = p(x_1,x_2, \ldots x_n|\theta)
|
||||||
\end{equation}
|
\end{equation}
|
||||||
@ -55,7 +58,7 @@ An der Stelle eines Maximums einer Funktion \"andert sich nichts, wenn
|
|||||||
man die Funktionswerte mit einer streng monoton steigenden Funktion
|
man die Funktionswerte mit einer streng monoton steigenden Funktion
|
||||||
transformiert. Aus numerischen und gleich ersichtlichen mathematischen
|
transformiert. Aus numerischen und gleich ersichtlichen mathematischen
|
||||||
Gr\"unden wird meistens das Maximum der logarithmierten Likelihood
|
Gr\"unden wird meistens das Maximum der logarithmierten Likelihood
|
||||||
(``Log-Likelihood'') gesucht:
|
(\determ{log-Likelihood}, \enterm{log-likelihood}) gesucht:
|
||||||
\begin{eqnarray}
|
\begin{eqnarray}
|
||||||
\theta_{mle} & = & \text{argmax}_{\theta}\; {\cal L}(\theta|x_1,x_2, \ldots x_n) \nonumber \\
|
\theta_{mle} & = & \text{argmax}_{\theta}\; {\cal L}(\theta|x_1,x_2, \ldots x_n) \nonumber \\
|
||||||
& = & \text{argmax}_{\theta}\; \log {\cal L}(\theta|x_1,x_2, \ldots x_n) \nonumber \\
|
& = & \text{argmax}_{\theta}\; \log {\cal L}(\theta|x_1,x_2, \ldots x_n) \nonumber \\
|
||||||
@ -73,7 +76,7 @@ $\theta$ maximiert dessen Likelhood?
|
|||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{mlemean}
|
\includegraphics[width=1\textwidth]{mlemean}
|
||||||
\titlecaption{\label{mlemeanfig} Maximum Likelihood Estimation des
|
\titlecaption{\label{mlemeanfig} Maximum Likelihood Sch\"atzung des
|
||||||
Mittelwerts.}{Oben: Die Daten zusammen mit drei m\"oglichen
|
Mittelwerts.}{Oben: Die Daten zusammen mit drei m\"oglichen
|
||||||
Normalverteilungen mit unterschiedlichen Mittelwerten (Pfeile) aus
|
Normalverteilungen mit unterschiedlichen Mittelwerten (Pfeile) aus
|
||||||
denen die Daten stammen k\"onnten. Unteln links: Die Likelihood
|
denen die Daten stammen k\"onnten. Unteln links: Die Likelihood
|
||||||
@ -115,13 +118,14 @@ diesem Mittelwert gezogen worden sind (\figref{mlemeanfig}).
|
|||||||
Wahrscheinlichkeiten) f\"ur den Mittelwert als Parameter. Vergleiche
|
Wahrscheinlichkeiten) f\"ur den Mittelwert als Parameter. Vergleiche
|
||||||
die Position der Maxima mit dem aus den Daten berechneten
|
die Position der Maxima mit dem aus den Daten berechneten
|
||||||
Mittelwert.
|
Mittelwert.
|
||||||
\newpage
|
\pagebreak[4]
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\section{Kurvenfit als Maximum-Likelihood Sch\"atzung}
|
\section{Kurvenfit als Maximum-Likelihood Sch\"atzung}
|
||||||
Beim Kurvenfit soll eine Funktion $f(x;\theta)$ mit den Parametern
|
Beim \determ{Kurvenfit} soll eine Funktion $f(x;\theta)$ mit den Parametern
|
||||||
$\theta$ an die Datenpaare $(x_i|y_i)$ durch Anpassung der Parameter
|
$\theta$ an die Datenpaare $(x_i|y_i)$ durch Anpassung der Parameter
|
||||||
$\theta$ gefittet werden. Wenn wir annehmen, dass die $y_i$ um die
|
$\theta$ gefittet werden. Wenn wir annehmen, dass die $y_i$ um die
|
||||||
entsprechenden Funktionswerte $f(x_i;\theta)$ mit einer
|
entsprechenden Funktionswerte $f(x_i;\theta)$ mit einer
|
||||||
@ -195,7 +199,7 @@ die Steigung $m$ und der y-Achsenabschnitt $b$ einer Geradengleichung
|
|||||||
\[ y = m \cdot x +b \]
|
\[ y = m \cdot x +b \]
|
||||||
oder allgemeiner die Koeffizienten $a_k$ eines Polynoms
|
oder allgemeiner die Koeffizienten $a_k$ eines Polynoms
|
||||||
\[ y = \sum_{k=0}^N a_k x^k = a_o + a_1x + a_2x^2 + a_3x^4 + \ldots \]
|
\[ y = \sum_{k=0}^N a_k x^k = a_o + a_1x + a_2x^2 + a_3x^4 + \ldots \]
|
||||||
\matlabfun{polyfit}.
|
\matlabfun{polyfit()}.
|
||||||
|
|
||||||
Parameter, die nichtlinear in einer Funktion enthalten sind, k\"onnen
|
Parameter, die nichtlinear in einer Funktion enthalten sind, k\"onnen
|
||||||
im Gegensatz dazu nicht analytisch aus den Daten berechnet
|
im Gegensatz dazu nicht analytisch aus den Daten berechnet
|
||||||
@ -203,28 +207,28 @@ werden. z.B. die Rate $\lambda$ eines exponentiellen Zerfalls
|
|||||||
\[ y = c \cdot e^{\lambda x} \quad , \quad c, \lambda \in \reZ \; . \]
|
\[ y = c \cdot e^{\lambda x} \quad , \quad c, \lambda \in \reZ \; . \]
|
||||||
F\"ur diesen Fall bleibt dann nur auf numerische Verfahren zur
|
F\"ur diesen Fall bleibt dann nur auf numerische Verfahren zur
|
||||||
Optimierung der Kostenfunktion, wie z.B. der Gradientenabstieg,
|
Optimierung der Kostenfunktion, wie z.B. der Gradientenabstieg,
|
||||||
zur\"uckzugreifen \matlabfun{lsqcurvefit}.
|
zur\"uckzugreifen \matlabfun{lsqcurvefit()}.
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\section{Fits von Wahrscheinlichkeitsverteilungen}
|
\section{Fits von Wahrscheinlichkeitsverteilungen}
|
||||||
Jetzt betrachten wir noch den Fall, bei dem wir die Parameter einer
|
Jetzt betrachten wir noch den Fall, bei dem wir die Parameter einer
|
||||||
Wahrscheinlichkeitsdichtefunktion (z.B. den shape-Parameter einer
|
Wahrscheinlichkeitsdichtefunktion (z.B. den shape-Parameter einer
|
||||||
Gamma-Verteilung) an ein Datenset fitten wollen.
|
\determ{Gamma-Verteilung}) an ein Datenset fitten wollen.
|
||||||
|
|
||||||
Ein erster Gedanke k\"onnte sein, die
|
Ein erster Gedanke k\"onnte sein, die
|
||||||
Wahrscheinlichkeitsdichtefunktion durch Minimierung des quadratischen
|
\determ[Wahrscheinlichkeitsdichte]{Wahrscheinlichkeitsdichtefunktion}
|
||||||
Abstands an ein Histogramm der Daten zu fitten. Das ist aber aus
|
durch Minimierung des quadratischen Abstands an ein Histogramm der
|
||||||
folgenden Gr\"unden nicht die Methode der Wahl: (i)
|
Daten zu fitten. Das ist aber aus folgenden Gr\"unden nicht die
|
||||||
Wahrscheinlichkeitsdichten k\"onnen nur positiv sein. Darum k\"onnen
|
Methode der Wahl: (i) Wahrscheinlichkeitsdichten k\"onnen nur positiv
|
||||||
insbesondere bei kleinen Werten die Daten nicht symmetrisch streuen,
|
sein. Darum k\"onnen insbesondere bei kleinen Werten die Daten nicht
|
||||||
wie es bei normalverteilten Daten der Fall ist. (ii) Die Datenwerte
|
symmetrisch streuen, wie es bei normalverteilten Daten der Fall
|
||||||
sind nicht unabh\"angig, da das normierte Histogram sich zu Eins
|
ist. (ii) Die Datenwerte sind nicht unabh\"angig, da das normierte
|
||||||
aufintegriert. Die beiden Annahmen normalverteilte und unabh\"angige
|
Histogram sich zu Eins aufintegriert. Die beiden Annahmen
|
||||||
Daten, die die Minimierung des quadratischen Abstands
|
normalverteilte und unabh\"angige Daten, die die Minimierung des
|
||||||
\eqnref{chisqmin} zu einem Maximum-Likelihood Sch\"atzer machen, sind
|
quadratischen Abstands \eqnref{chisqmin} zu einem Maximum-Likelihood
|
||||||
also verletzt. (iii) Das Histogramm h\"angt von der Wahl der
|
Sch\"atzer machen, sind also verletzt. (iii) Das Histogramm h\"angt
|
||||||
Klassenbreite ab (\figref{mlepdffig}).
|
von der Wahl der Klassenbreite ab (\figref{mlepdffig}).
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{mlepdf}
|
\includegraphics[width=1\textwidth]{mlepdf}
|
||||||
@ -243,12 +247,12 @@ Maximum Likelihood! Wir suchen einfach die Parameter $\theta$ der
|
|||||||
gesuchten Wahrscheinlichkeitsdichtefunktion bei der die Log-Likelihood
|
gesuchten Wahrscheinlichkeitsdichtefunktion bei der die Log-Likelihood
|
||||||
\eqnref{loglikelihood} maximal wird. Das ist im allgemeinen ein
|
\eqnref{loglikelihood} maximal wird. Das ist im allgemeinen ein
|
||||||
nichtlinieares Optimierungsproblem, das mit numerischen Verfahren, wie
|
nichtlinieares Optimierungsproblem, das mit numerischen Verfahren, wie
|
||||||
z.B. dem Gradientenabstieg, gel\"ost wird \matlabfun{mle}.
|
z.B. dem Gradientenabstieg, gel\"ost wird \matlabfun{mle()}.
|
||||||
|
|
||||||
\begin{exercise}{mlegammafit.m}{mlegammafit.out}
|
\begin{exercise}{mlegammafit.m}{mlegammafit.out}
|
||||||
Erzeuge Gammaverteilte Zufallszahlen und benutze Maximum-Likelihood,
|
Erzeuge Gammaverteilte Zufallszahlen und benutze Maximum-Likelihood,
|
||||||
um die Parameter der Gammafunktion aus den Daten zu bestimmen.
|
um die Parameter der Gammafunktion aus den Daten zu bestimmen.
|
||||||
\newpage
|
\pagebreak
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
@ -259,8 +263,9 @@ Aktivit\"at Eigenschaften von sensorischen Stimuli. z.B. im visuellen
|
|||||||
Kortex V1 die Orientierung eines Balkens. Traditionell wird die
|
Kortex V1 die Orientierung eines Balkens. Traditionell wird die
|
||||||
Antwort der Neurone f\"ur verschiedene Stimuli (z.B. verschiedene
|
Antwort der Neurone f\"ur verschiedene Stimuli (z.B. verschiedene
|
||||||
Orientierungen des Balkens) gemessen. Die mittlere Antwort der Neurone
|
Orientierungen des Balkens) gemessen. Die mittlere Antwort der Neurone
|
||||||
als Funktion eines Stimulusparameters ist dann die ``Tuning-curve''
|
als Funktion eines Stimulusparameters ist dann die
|
||||||
(z.B. Feuerrate als Funktion des Orientierungswinkels).
|
\enterm{Tuning-curve} (deutsch \determ{Abstimmkurve}, z.B. Feuerrate
|
||||||
|
als Funktion des Orientierungswinkels).
|
||||||
|
|
||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
\includegraphics[width=1\textwidth]{mlecoding}
|
\includegraphics[width=1\textwidth]{mlecoding}
|
||||||
|
@ -2,7 +2,7 @@ import numpy as np
|
|||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,4) )
|
fig = plt.figure( figsize=(6,3.5) )
|
||||||
|
|
||||||
# the line:
|
# the line:
|
||||||
slope = 2.0
|
slope = 2.0
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
clear all
|
|
||||||
close all
|
|
||||||
|
|
||||||
load('pyramidal_response.mat')
|
load('pyramidal_response.mat')
|
||||||
threshold = 20; % mV
|
threshold = 20; % mV
|
||||||
|
|
||||||
figure()
|
|
||||||
hold on
|
hold on
|
||||||
plot(time*1000.0, neuronal_data, 'color', [0.2 0.5 0.7], 'linewidth', 1., ...
|
plot(time*1000.0, neuronal_data, 'color', [0.2 0.5 0.7], ...
|
||||||
'displayname', 'Membrane voltage')
|
'linewidth', 1., 'displayname', 'Membrane voltage')
|
||||||
plot(spikes*1000.0, ones(size(spikes)) .* threshold, 'r.', 'markersize', 15, ...
|
plot(spikes*1000.0, ones(size(spikes)) .* threshold, 'r.', ...
|
||||||
'displayname', 'Spike times')
|
'markersize', 15, 'displayname', 'Spike times')
|
||||||
line([time(1) time(end)], [threshold threshold], 'linestyle', '--', ...
|
line([time(1) time(end)], [threshold threshold], 'linestyle', '--', ...
|
||||||
'linewidth', 0.75, 'color', [0.5 0.5 0.5], 'displayname', 'Threshold')
|
'linewidth', 0.75, 'color', [0.5 0.5 0.5], 'displayname', 'Threshold')
|
||||||
|
|
||||||
@ -24,7 +20,7 @@ set(l,'location','northeast', 'fontsize', 11, 'linewidth', 1.);
|
|||||||
set(gca, 'xminortick','on','yminortick','on')
|
set(gca, 'xminortick','on','yminortick','on')
|
||||||
set(gca, 'tickdir','out', 'linewidth', 1.5, 'fontname', 'times', ...
|
set(gca, 'tickdir','out', 'linewidth', 1.5, 'fontname', 'times', ...
|
||||||
'fontsize', 11)
|
'fontsize', 11)
|
||||||
set(gcf, 'paperunits', 'centimeters', 'papersize', [15 7.5]);
|
set(gcf, 'paperunits', 'centimeters', 'papersize', [15 7]);
|
||||||
set(gcf, 'paperposition',[0.0 0.0 15, 7.5], 'color', 'white')
|
set(gcf, 'paperposition',[0.0 0.0 15, 7], 'color', 'white')
|
||||||
|
|
||||||
saveas(gcf, [pwd '/../lecture/images/spike_detection.pdf'], 'pdf')
|
saveas(gcf, 'spike_detection.pdf', 'pdf')
|
@ -1,21 +1,12 @@
|
|||||||
BASENAME=plotting
|
BASENAME=plotting
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
GPTFILES=$(wildcard *.gpt)
|
|
||||||
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
|
||||||
|
|
||||||
|
|
||||||
all: pdf slides thumbs
|
all: pdf slides thumbs
|
||||||
|
|
||||||
|
include ../../chapter.mk
|
||||||
|
|
||||||
# script:
|
# script:
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
pdf : chapter
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(GPTTEXFILES) $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
|
|
||||||
# slides:
|
# slides:
|
||||||
@ -31,31 +22,15 @@ $(BASENAME)-handout.pdf: $(BASENAME)-slides.tex $(GPTTEXFILES)
|
|||||||
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
||||||
rm thumbsfoils.*
|
rm thumbsfoils.*
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
watchslides :
|
watchslides :
|
||||||
while true; do ! make -q slides && make slides; sleep 0.5; done
|
while true; do ! make -q slides && make slides; sleep 0.5; done
|
||||||
|
|
||||||
# python plots:
|
|
||||||
$(PYPDFFILES) : %.pdf: %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
# gnuplot plots:
|
|
||||||
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
|
||||||
gnuplot whitestyles.gp $<
|
|
||||||
epstopdf $*.eps
|
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean : cleanchapter
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean cleanallchapter
|
||||||
rm -f $(BASENAME)-chapter.pdf $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
rm -f $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
||||||
|
|
||||||
|
|
||||||
help :
|
help :
|
||||||
|
Binary file not shown.
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{images/}}
|
\graphicspath{{images/}}
|
||||||
|
|
||||||
\setcounter{page}{45}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{1}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,5 +16,13 @@
|
|||||||
|
|
||||||
\input{plotting}
|
\input{plotting}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Beispiele schlechter plots sollten mehr Bezug zu den Typen von
|
||||||
|
plots haben, die wir machen!
|
||||||
|
\item subplot
|
||||||
|
\item Uebersicht zu wichtigen plot Befehlen (plot, scatter, bar, step, ...)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
\chapter{\tr{Data plotting}{Graphische Darstellung von Daten}}
|
\chapter{Graphische Darstellung von Daten}
|
||||||
|
|
||||||
Die F\"ahigkeit zur ad\"aquaten Darstellung wissenschaftlicher Daten
|
Die F\"ahigkeit zur ad\"aquaten Darstellung wissenschaftlicher Daten
|
||||||
darf durchaus zu den notwendigen Kernkompetenzen gez\"ahlt werden. Wir
|
darf durchaus zu den notwendigen Kernkompetenzen gez\"ahlt werden. Wir
|
||||||
@ -34,13 +34,13 @@ Zwecken genutzt wird.
|
|||||||
Ein Datenplot muss ausreichend beschriftet werden:
|
Ein Datenplot muss ausreichend beschriftet werden:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Alle Achsen m\"ussen eine Bezeichnung und eine Einheit erhalten\\
|
\item Alle Achsen m\"ussen eine Bezeichnung und eine Einheit erhalten\\
|
||||||
(z.B. \code{xlabel('Geschwindigkeit [m/s]'}).
|
(z.B. \code[xlabel()]{xlabel('Geschwindigkeit [m/s]'}).
|
||||||
\item Wenn mehrere Dinge in einem Plot dargestellt werden, m\"ussen
|
\item Wenn mehrere Dinge in einem Plot dargestellt werden, m\"ussen
|
||||||
diese mit einer Legende oder \"ahnlichem benannt werden
|
diese mit einer Legende oder \"ahnlichem benannt werden
|
||||||
\matlabfun{legend()}.
|
\matlabfun{legend()}.
|
||||||
\item Mehrere Plots mit den gleichen Gr\"o{\ss}en auf den Achsen,
|
\item Mehrere Plots mit den gleichen Gr\"o{\ss}en auf den Achsen,
|
||||||
m\"ussen den gleichen Wertebereich auf den Achsen zeigen
|
m\"ussen den gleichen Wertebereich auf den Achsen zeigen
|
||||||
(z.B. \code{xlim([0 100])}.\\
|
(z.B. \code[xlim()]{xlim([0 100])}.\\
|
||||||
Ausnahmen sind m\"oglich, sollten aber in der
|
Ausnahmen sind m\"oglich, sollten aber in der
|
||||||
Abbildungsunterschrift erw\"ahnt werden.
|
Abbildungsunterschrift erw\"ahnt werden.
|
||||||
\item Die Beschriftung mu{\ss} gro{\ss} genug sein, um lesbar zu sein.
|
\item Die Beschriftung mu{\ss} gro{\ss} genug sein, um lesbar zu sein.
|
||||||
@ -142,13 +142,30 @@ darzustellen (\figref{misleadingsymbolsfig}).
|
|||||||
\section{Das Plottingsystem von \matlab{}}
|
\section{Das Plottingsystem von \matlab{}}
|
||||||
|
|
||||||
Plotten in \matlab{} ist zun\"achst einmal einfach. Durch den Aufruf
|
Plotten in \matlab{} ist zun\"achst einmal einfach. Durch den Aufruf
|
||||||
von \code{plot(x, y)} wird ein einfacher, schlichter Linienplot
|
von \code[plot()]{plot(x, y)} wird ein einfacher, schlichter Linienplot
|
||||||
erstellt. Diesem Plot fehlen jedoch jegliche Annotationen wie
|
erstellt. Diesem Plot fehlen jedoch jegliche Annotationen wie
|
||||||
Achsbeschriftungen, Legenden, etc. Es gibt zwei M\"oglichkeiten diese
|
Achsbeschriftungen, Legenden, etc. Es gibt zwei M\"oglichkeiten diese
|
||||||
hinzuzuf\"ugen: (i) das Graphische User Interface oder (ii) die
|
hinzuzuf\"ugen: (i) das Graphische User Interface oder (ii) die
|
||||||
Kommandozeile. Beide haben ihre Berechtigung sowie Vor- und
|
Kommandozeile. Beide haben ihre Berechtigung sowie Vor- und
|
||||||
Nachteile.
|
Nachteile.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\begin{minipage}[t]{0.6\textwidth}
|
||||||
|
\includegraphics[height=0.29\textheight]{plot_editor}
|
||||||
|
\end{minipage}
|
||||||
|
\begin{minipage}[t]{0.3\textwidth}
|
||||||
|
\includegraphics[height=0.29\textheight]{property_editor}
|
||||||
|
\end{minipage}
|
||||||
|
\titlecaption{Der \matlab{} Plot-Editor.}{\"Uber das Menu
|
||||||
|
``Tools $\rightarrow$ Edit Plot'' erreicht man den Plot Editor. Je nachdem
|
||||||
|
welches Element des Plots ausgew\"ahlt wurde, ver\"andern sich
|
||||||
|
die Einstellungsm\"oglichkeiten. Weitere Eigenschaften und
|
||||||
|
Einstellungen k\"onnen \"uber den ``Property Editor'', rechts,
|
||||||
|
eingesehen und ver\"andert werden. Der ``Property Editor'' ist
|
||||||
|
\"uber die Schaltfl\"ache ``More Properties''
|
||||||
|
erreichbar.}\label{ploteditorfig}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
W\"ahrend es bequem ist, die Abbildung mit der GUI
|
W\"ahrend es bequem ist, die Abbildung mit der GUI
|
||||||
(\figref{ploteditorfig}) zu bearbeiten sind die erhaltenen Ergebnisse
|
(\figref{ploteditorfig}) zu bearbeiten sind die erhaltenen Ergebnisse
|
||||||
nicht einfach reproduzierbar oder \"ubertragbar. Wenn eine Abbildung
|
nicht einfach reproduzierbar oder \"ubertragbar. Wenn eine Abbildung
|
||||||
@ -156,37 +173,20 @@ korrigiert werden musss, wird es schwierig und zeitaufwendig.
|
|||||||
|
|
||||||
Plots in \matlab{} bestehen aus mehreren Elementen:
|
Plots in \matlab{} bestehen aus mehreren Elementen:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item \enterm{Figure}: Dieses Element stellt die gesamte
|
\item \enterm[figure]{Figure}: Dieses Element stellt die gesamte
|
||||||
Zeichenf\"ache, das Blatt Papier, dar.
|
Zeichenf\"ache, das Blatt Papier, dar.
|
||||||
\item \enterm{Axes}: Das Koordinatensystem in welches gezeichnet wird.
|
\item \enterm[axes]{Axes}: Das Koordinatensystem in welches gezeichnet wird.
|
||||||
\item \enterm{Lines}: Die gezeichneten Datenplots wie Linien,
|
\item \enterm[lines]{Lines}: Die gezeichneten Datenplots wie Linien,
|
||||||
Fl\"achen, etc.
|
Fl\"achen, etc.
|
||||||
\item \enterm{Annotations}: Annotationen wie Textboxen oder auch
|
\item \enterm[annotations]{Annotations}: Annotationen wie Textboxen
|
||||||
Pfeile, die zum Hervorheben von Punkten, oder Abschnitten gedacht
|
oder auch Pfeile, die zum Hervorheben von Punkten, oder Abschnitten
|
||||||
sind.
|
gedacht sind.
|
||||||
\item \enterm{Legends}: Legenden der Datenplots.
|
\item \enterm[legends]{Legends}: Legenden der Datenplots.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
Jedes dieser Elemente bietet eine Vielzahl von
|
Jedes dieser Elemente bietet eine Vielzahl von
|
||||||
Einstellungsm\"oglichkeiten. Wie schon erw\"ahnt, k\"onnen diese
|
Einstellungsm\"oglichkeiten. Wie schon erw\"ahnt, k\"onnen diese
|
||||||
\"uber die GUI (Abbildung \ref{ploteditorfig}) bearbeitet werden.
|
\"uber die GUI (Abbildung \ref{ploteditorfig}) bearbeitet werden.
|
||||||
|
|
||||||
\begin{figure}
|
|
||||||
\begin{minipage}[t]{0.6\columnwidth}
|
|
||||||
\includegraphics[width=0.9\textwidth]{plot_editor}
|
|
||||||
\end{minipage}
|
|
||||||
\begin{minipage}[t]{0.3\columnwidth}
|
|
||||||
\includegraphics[width=0.9\textwidth]{property_editor}
|
|
||||||
\end{minipage}
|
|
||||||
\titlecaption{Graphisches Interface ``Plot Editor''.}{\"Uber das Menu
|
|
||||||
``Tools $\rightarrow$ Edit Plot'' erreicht man den Plot Editor. Je nachdem
|
|
||||||
welches Element des Plots ausgew\"ahlt wurde, ver\"andern sich
|
|
||||||
die Einstellungsm\"oglichkeiten. Weitere Eigenschaften und
|
|
||||||
Einstellungen k\"onnen \"uber den ``Property Editor'', rechts,
|
|
||||||
eingesehen und ver\"andert werden. Der ``Property Editor'' ist
|
|
||||||
\"uber die Schaltfl\"ache ``More Properties''
|
|
||||||
erreichbar.}\label{ploteditorfig}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Alle Einstellungen, die \"uber das graphische Interface vorgenommen
|
Alle Einstellungen, die \"uber das graphische Interface vorgenommen
|
||||||
werden k\"onnen, sind auch \"uber Befehle auf der Kommandozeile
|
werden k\"onnen, sind auch \"uber Befehle auf der Kommandozeile
|
||||||
m\"oglich. Auf diese Weise k\"onnen Einstellungen problemlos in ein
|
m\"oglich. Auf diese Weise k\"onnen Einstellungen problemlos in ein
|
||||||
@ -212,9 +212,9 @@ Datens\"atzen erstellt werden soll.
|
|||||||
\subsection{Einfaches Plotten}
|
\subsection{Einfaches Plotten}
|
||||||
|
|
||||||
Einen einfachen Linienplot zu erstellen ist denkbar
|
Einen einfachen Linienplot zu erstellen ist denkbar
|
||||||
einfach. Angenommen, es existiert einer Variable \code{y} im
|
einfach. Angenommen, es existiert einer Variable \varcode{y} im
|
||||||
\enterm{Workspace}, die die darzustellenden Daten enth\"alt. Es
|
\enterm{Workspace}, die die darzustellenden Daten enth\"alt. Es
|
||||||
gen\"ugt folgender Funktionsaufruf: \code{plot(y)}. Wenn bislang noch
|
gen\"ugt folgender Funktionsaufruf: \code[plot()]{plot(y)}. Wenn bislang noch
|
||||||
keine Abbildung erstellt wurde, \"offnet \matlab{} ein neues Fenster
|
keine Abbildung erstellt wurde, \"offnet \matlab{} ein neues Fenster
|
||||||
und stellt die Daten als Linienplot dar. Dabei werden die Datenpunkte
|
und stellt die Daten als Linienplot dar. Dabei werden die Datenpunkte
|
||||||
durch eine Linie verbunden. Die Messpunkte selbst sind nicht
|
durch eine Linie verbunden. Die Messpunkte selbst sind nicht
|
||||||
@ -223,14 +223,14 @@ ersetzt. Das Festhalten von bestehenden Plots kann an- oder abgestellt
|
|||||||
werden indem \code{hold on} bzw. \code{hold off} vor dem \code{plot()}
|
werden indem \code{hold on} bzw. \code{hold off} vor dem \code{plot()}
|
||||||
Befehl aufgerufen wird.
|
Befehl aufgerufen wird.
|
||||||
|
|
||||||
Im obigen Plot Aufruf wird nur ein Argument, das \code{y}, an die
|
Im obigen Plot Aufruf wird nur ein Argument, das \varcode{y}, an die
|
||||||
Funktion \code{plot} \"ubergeben. \code{plot} erh\"alt nur die
|
Funktion \code{plot()} \"ubergeben. \code{plot()} erh\"alt nur die
|
||||||
y-Werte. \matlab{} substituiert in diesem Fall die fehlenden x-Werte,
|
y-Werte. \matlab{} substituiert in diesem Fall die fehlenden x-Werte,
|
||||||
indem eine Schrittweite von 1 angenommen wird. Die x-Achse reicht also
|
indem eine Schrittweite von 1 angenommen wird. Die x-Achse reicht also
|
||||||
von 1 bis zur L\"ange des Vektors \code{y}. Diese Skalierung der
|
von 1 bis zur L\"ange des Vektors \varcode{y}. Diese Skalierung der
|
||||||
x-Achse ist nur in den wenigsten F\"allen erw\"unscht. Besser ist es,
|
x-Achse ist nur in den wenigsten F\"allen erw\"unscht. Besser ist es,
|
||||||
die zugeh\"origen x-Werte explixit zu \"ubergeben und so z.B. die
|
die zugeh\"origen x-Werte explixit zu \"ubergeben und so z.B. die
|
||||||
y-Werte als Funktion der Zeit darzustellen (\code{plot(x, y)}).
|
y-Werte als Funktion der Zeit darzustellen (\code[plot()]{plot(x, y)}).
|
||||||
Standard\"a{\ss}ig wird der erste Lininenplot in blau, mit
|
Standard\"a{\ss}ig wird der erste Lininenplot in blau, mit
|
||||||
durchgezogener Linie, ohne Marker und der Strichst\"arke 1
|
durchgezogener Linie, ohne Marker und der Strichst\"arke 1
|
||||||
dargestellt. Der zweite Linienplot erh\"alt automatisch die Farbe
|
dargestellt. Der zweite Linienplot erh\"alt automatisch die Farbe
|
||||||
@ -242,23 +242,17 @@ die Farbe und die verschiedenen Marker.
|
|||||||
|
|
||||||
\begin{table}[tp]
|
\begin{table}[tp]
|
||||||
\titlecaption{Vordefinierte Linienstile (links), Farben (Mitte) und Markersymbole (rechts).}{}\label{plotlinestyles}
|
\titlecaption{Vordefinierte Linienstile (links), Farben (Mitte) und Markersymbole (rechts).}{}\label{plotlinestyles}
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
\begin{tabular}[t]{lc} \hline
|
||||||
\vspace{0pt}
|
\textbf{Linienstil} & \textbf{K\"urzel} \erh \\\hline
|
||||||
\begin{tabular}{lc} \hline
|
durchgezogen & '\verb|-|' \erb \\
|
||||||
\textbf{Linienstil} & \textbf{K\"urzel} \\\hline
|
|
||||||
durchgezogen & '\verb|-|' \\
|
|
||||||
gestrichelt & '\verb|--|' \\
|
gestrichelt & '\verb|--|' \\
|
||||||
gepunktet & '\verb|:|' \\
|
gepunktet & '\verb|:|' \\
|
||||||
Strichpunkte & '\verb|.-|' \\\hline
|
Strichpunkte & '\verb|.-|' \\\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{minipage}
|
\hfill
|
||||||
\vspace{0pt}
|
\begin{tabular}[t]{lc} \hline
|
||||||
\begin{minipage}[t]{.3\textwidth}
|
\textbf{Farbe} & \textbf{K\"urzel} \erh \\ \hline
|
||||||
\vspace{0pt}
|
Rot & 'r' \erb \\
|
||||||
\hspace{0.05\textwidth}
|
|
||||||
\begin{tabular}{lc} \hline
|
|
||||||
\textbf{Farbe} & \textbf{K\"urzel} \\ \hline
|
|
||||||
Rot & 'r'\\
|
|
||||||
Gr\"un & 'g' \\
|
Gr\"un & 'g' \\
|
||||||
Blau & 'b' \\
|
Blau & 'b' \\
|
||||||
Cyan & 'c' \\
|
Cyan & 'c' \\
|
||||||
@ -266,13 +260,10 @@ die Farbe und die verschiedenen Marker.
|
|||||||
Gelb & 'y' \\
|
Gelb & 'y' \\
|
||||||
Schwarz & 'k' \\ \hline
|
Schwarz & 'k' \\ \hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{minipage}
|
\hfill
|
||||||
\vspace{0pt}
|
\begin{tabular}[t]{lc} \hline
|
||||||
\begin{minipage}[t]{0.3\textwidth}
|
\textbf{Markersymbol} & \textbf{K\"urzel} \erh \\ \hline
|
||||||
\vspace{0pt}
|
Kreis & 'o' \erb \\
|
||||||
\begin{tabular}{lc} \hline
|
|
||||||
\textbf{Markersymbol} & \textbf{K\"urzel} \\ \hline
|
|
||||||
Kreis & 'o'\\
|
|
||||||
Stern & '*' \\
|
Stern & '*' \\
|
||||||
Plus & '+' \\
|
Plus & '+' \\
|
||||||
Kreuz & 'x' \\
|
Kreuz & 'x' \\
|
||||||
@ -285,20 +276,19 @@ die Farbe und die verschiedenen Marker.
|
|||||||
Dreieck links & '$<$'\\
|
Dreieck links & '$<$'\\
|
||||||
Dreieck rechts & '$>$'\\\hline
|
Dreieck rechts & '$>$'\\\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{minipage}
|
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
\subsection{Ver\"andern von Linieneigenschaften}
|
\subsection{Ver\"andern von Linieneigenschaften}
|
||||||
|
|
||||||
Die Eigenschaften des Linienplots k\"onnen \"uber weitere Argumente
|
Die Eigenschaften des Linienplots k\"onnen \"uber weitere Argumente
|
||||||
des \code{plot} Befehls ver\"andert werden. Folgender Aufruf (Listing
|
der \code{plot()} Funktion ver\"andert werden. Folgender Aufruf (Listing
|
||||||
\ref{settinglineprops})erzeugt einen roten Linienplot mit gepunkteter
|
\ref{settinglineprops})erzeugt einen roten Linienplot mit gepunkteter
|
||||||
Linie der St\"arke 1.5 und Sternmarkern an den Positionen der
|
Linie der St\"arke 1.5 und Sternmarkern an den Positionen der
|
||||||
Datenpunkte. Zus\"atzlich wird noch die Eigenschaft
|
Datenpunkte. Zus\"atzlich wird noch die Eigenschaft
|
||||||
\codeterm{displayname} gesetzt, um dem Linienplot einen Namen zu
|
\code{displayname} gesetzt, um dem Linienplot einen Namen zu
|
||||||
geben, der in einer Legende verwendet werden kann.
|
geben, der in einer Legende verwendet werden kann.
|
||||||
|
|
||||||
\begin{lstlisting}[label=settinglineprops, caption={Setzen von Linieneigenschaften beim \code{plot} Aufruf}]
|
\begin{lstlisting}[label=settinglineprops, caption={Setzen von Linieneigenschaften beim \varcode{plot} Aufruf}]
|
||||||
x = 0:0.1:2*pi;
|
x = 0:0.1:2*pi;
|
||||||
y = sin(x);
|
y = sin(x);
|
||||||
plot( x, y, 'color', 'r', 'linestyle', ':', 'marker', '*', 'linewidth', 1.5, 'displayname', 'plot 1')
|
plot( x, y, 'color', 'r', 'linestyle', ':', 'marker', '*', 'linewidth', 1.5, 'displayname', 'plot 1')
|
||||||
@ -307,46 +297,47 @@ geben, der in einer Legende verwendet werden kann.
|
|||||||
\subsection{Ver\"andern von Achseneigenschaften}
|
\subsection{Ver\"andern von Achseneigenschaften}
|
||||||
|
|
||||||
Das erste, was ein Plot zus\"atzlich braucht, ist eine
|
Das erste, was ein Plot zus\"atzlich braucht, ist eine
|
||||||
Achsenbeschriftung. Mithilfe der Funktionen \code{xlabel('Time [ms]')}
|
Achsenbeschriftung. Mithilfe der Funktionen \code[xlabel()]{xlabel('Time [ms]')}
|
||||||
und \code{ylabel('Voltage [V]')} k\"onnen diese gesetzt
|
und \code[ylabel()]{ylabel('Voltage [V]')} k\"onnen diese gesetzt
|
||||||
werden.
|
werden.
|
||||||
|
|
||||||
Standardm\"a{\ss}ig setzt Matlab die Grenzen der x- und y-Achse so,
|
Standardm\"a{\ss}ig setzt Matlab die Grenzen der x- und y-Achse so,
|
||||||
dass die Daten hineinpassen. Dabei wird meist auf den n\"achsten
|
dass die Daten hineinpassen. Dabei wird meist auf den n\"achsten
|
||||||
ganzzahligen Wert aufgerundet. Mit den Funktionen \code{xlim} und
|
ganzzahligen Wert aufgerundet. Mit den Funktionen \code{xlim()} und
|
||||||
\code{ylim} k\"onnen die Grenezen der Achsen aber auch manuell
|
\code{ylim()} k\"onnen die Grenezen der Achsen aber auch manuell
|
||||||
eingestellt werden. Die Funktionen \code{xlim} und \code{ylim}
|
eingestellt werden. Die Funktionen \code{xlim()} und \code{ylim()}
|
||||||
erwarten als Argument einen 2-elementigen Vektor mit dem Minimum und
|
erwarten als Argument einen 2-elementigen Vektor mit dem Minimum und
|
||||||
dem Maximum der jeweiligen Achse. Tabelle \ref{plotaxisprops} listet
|
dem Maximum der jeweiligen Achse. Tabelle \ref{plotaxisprops} listet
|
||||||
weitere h\"aufig genutzte Einstellungen der Achsen. Mit der \code{set}
|
weitere h\"aufig genutzte Einstellungen der Achsen. Mit der
|
||||||
- Funktion k\"onnen diese ver\"andert werden wie in Zeile 15 in
|
\code{set()} - Funktion k\"onnen diese ver\"andert werden wie in Zeile
|
||||||
Listing \ref{niceplotlisting} gezeigt. Die \code{set} - Funktion
|
15 in Listing \ref{niceplotlisting} gezeigt. Die \code{set()} -
|
||||||
erwartet als erstes Argument ein sogenanntes Handle der Achse, dieses
|
Funktion erwartet als erstes Argument ein sogenanntes Handle der
|
||||||
wird gefolgt von einer beliebig langen Reihe von Eigenschaft-Wert
|
Achse, dieses wird gefolgt von einer beliebig langen Reihe von
|
||||||
Paaren. Soll z.B. das Gitternetz der x-Achse gezeigt werden, wird die
|
Eigenschaft-Wert Paaren. Soll z.B. das Gitternetz der x-Achse gezeigt
|
||||||
Eigenschaft \codeterm{XGrid} auf den Wert \codeterm{'on'} gesetzt:
|
werden, wird die Eigenschaft \code{XGrid} auf den Wert
|
||||||
\code{set(gca, 'XGrid', 'on');}. Das erste Argument ist ein Aufruf der
|
\varcode{'on'} gesetzt: \code[set()!set(gca, 'XGrid',
|
||||||
Funktion \code{gca}, ``get-current-axis'' und ist das Achsenhandle der
|
'on')]{set(gca, 'XGrid', 'on');}. Das erste Argument ist ein Aufruf
|
||||||
gerade aktiven Achse.
|
der Funktion \code{gca}, \enterm{get-current-axis} und ist das Achsenhandle
|
||||||
|
der gerade aktiven Achse.
|
||||||
|
|
||||||
\begin{table}[tp]
|
\begin{table}[tp]
|
||||||
\titlecaption{Ausgew\"ahlte Eigenschaften der Achse.}{ Alle Eigenschaften der Achse findet man in der Hilfe oder im \codeterm{Property Editor} (\figref{ploteditorfig}). Wenn es eine definierte Auswahl von Einstellungen gibt, z.B. bei der Eigenschaft \codeterm{Box}, dann ist die Standardeinstellungen als erstes gelistet.}\label{plotaxisprops}
|
\titlecaption{Ausgew\"ahlte Eigenschaften der Achse.}{ Alle Eigenschaften der Achse findet man in der Hilfe oder im \codeterm{Property Editor} (\figref{ploteditorfig}). Wenn es eine definierte Auswahl von Einstellungen gibt, z.B. bei der Eigenschaft \code{Box}, dann ist die Standardeinstellungen als erstes gelistet.}\label{plotaxisprops}
|
||||||
\begin{tabular*}{1\textwidth}{lp{6.3cm}p{6cm}} \hline
|
\begin{tabular*}{1\textwidth}{lp{5.8cm}p{5.5cm}} \hline
|
||||||
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline
|
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \erh \\ \hline
|
||||||
\codeterm{Box} & Definiert, ob der Rahmen der Achse vollst\"andig gezeichnet wird. & $\{'on'|'off'\}$ \\
|
\code{Box} & Definiert, ob der Rahmen der Achse vollst\"andig gezeichnet wird. & $\{'on'|'off'\}$ \erb \\
|
||||||
\codeterm{Color} & Hintergrundfarbe des Koordinatensystems. & Beliebige RGB, CMYK ... Werte. \\
|
\code{Color} & Hintergrundfarbe des Koordinatensystems. & Beliebige RGB, CMYK Werte. \\
|
||||||
\codeterm{Fontname} & Der Name der Schriftart. & Im System installierte Schriften. \\
|
\code{Fontname} & Der Name der Schriftart. & Im System installierte Schriften. \\
|
||||||
\codeterm{FontSize} & Gr\"o{\ss}e der Schrift. & Skalarer Wert.\\
|
\code{FontSize} & Gr\"o{\ss}e der Schrift. & Skalarer Wert.\\
|
||||||
\codeterm{FontUnit} & Einheit, in der die Schriftgr\"o{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\
|
\code{FontUnit} & Einheit, in der die Schriftgr\"o{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\
|
||||||
\codeterm{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{'normal' | 'bold'\}$\\
|
\code{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{'normal' | 'bold'\}$\\
|
||||||
% & 'd' \\ ??????
|
% & 'd' \\ ??????
|
||||||
\codeterm{TickDir} & Richtung der Teilstriche auf der Achse. & $\{'in' | 'out'\}$\\
|
\code{TickDir} & Richtung der Teilstriche auf der Achse. & $\{'in' | 'out'\}$\\
|
||||||
\codeterm{TickLength} & L\"ange der Haupt- und Nebenteilstriche & \\
|
\code{TickLength} & L\"ange der Haupt- und Nebenteilstriche & \\
|
||||||
\codeterm{X-, Y-, ZDir} & Richtung der Achsskalierung. & $\{'normal' | 'reversed'\}$\\
|
\code{X-, Y-, ZDir} & Richtung der Achsskalierung. & $\{'normal' | 'reversed'\}$\\
|
||||||
\codeterm{X-, Y-, ZGrid} & Sollen Gitternetzlinien gezeigt werden? & $\{'off'|'on'\}$ \\
|
\code{X-, Y-, ZGrid} & Sollen Gitternetzlinien gezeigt werden? & $\{'off'|'on'\}$ \\
|
||||||
\codeterm{X-, Y-, ZScale} & Lineare oder logarithmische Skalierung der Achse. & $\{'linear' | 'log'\}$\\
|
\code{X-, Y-, ZScale} & Lineare oder logarithmische Skalierung der Achse. & $\{'linear' | 'log'\}$\\
|
||||||
\codeterm{X-, Y-, ZTick} & Position der Teilstriche auf der Achse. & Vektor mit Positionen.\\
|
\code{X-, Y-, ZTick} & Position der Teilstriche auf der Achse. & Vektor mit Positionen.\\
|
||||||
\codeterm{X-, Y-, ZTickLabel} & Beschriftung der Teilstriche. & Vektor mit entsprechenden Zahlen oder Cell-Array mit Strings.\\ \hline
|
\code{X-, Y-, ZTickLabel} & Beschriftung der Teilstriche. & Vektor mit entsprechenden Zahlen oder Cell-Array mit Strings.\\ \hline
|
||||||
\end{tabular*}
|
\end{tabular*}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
@ -354,19 +345,19 @@ gerade aktiven Achse.
|
|||||||
\subsection{Ver\"andern von Figure-Einstellungen}
|
\subsection{Ver\"andern von Figure-Einstellungen}
|
||||||
|
|
||||||
\begin{table}[tp]
|
\begin{table}[tp]
|
||||||
\titlecaption{Ausgew\"ahlte Eigenschaften der \codeterm{Figure}.}{Alle Eigenschaften der Figure findet man in der Hilfe von \matlab{} oder im \codeterm{Property Editor} wenn die Abbildung ausgew\"ahlt wurde (\figref{ploteditorfig}).}\label{plotfigureprops}
|
\titlecaption{Ausgew\"ahlte Eigenschaften der Figure.}{Alle Eigenschaften der \enterm[figure]{Figure} findet man in der Hilfe von \matlab{} oder im \codeterm{Property Editor} wenn die Abbildung ausgew\"ahlt wurde (\figref{ploteditorfig}).}\label{plotfigureprops}
|
||||||
\begin{tabular*}{1\textwidth}{lp{6.3cm}p{6cm}} \hline
|
\begin{tabular*}{1\textwidth}{lp{6.6cm}p{5.7cm}} \hline
|
||||||
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline
|
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \erh \\ \hline
|
||||||
\codeterm{Color} & Hintergrundfarbe der Zeichenfl\"ache. & Beliebige RGB, CMYK ... Werte. \\
|
\code{Color} & Hintergrundfarbe der Zeichenfl\"ache. & Beliebige RGB, CMYK Werte. \erb \\
|
||||||
\codeterm{PaperPosition} & Position der Abbildung auf dem Papier & 4-elementiger Vektor mit den Positionen der linken-unteren, und rechten-oberen Ecke. \\
|
\code{PaperPosition} & Position der Abbildung auf dem Papier & 4-elementiger Vektor mit den Positionen der linken-unteren, und rechten-oberen Ecke. \\
|
||||||
\codeterm{PaperSize} & Gr\"o{\ss}e der des Papiers. & 2-elementiger Vektor mit der Papiergr\"o{\ss}e.\\
|
\code{PaperSize} & Gr\"o{\ss}e der des Papiers. & 2-elementiger Vektor mit der Papiergr\"o{\ss}e.\\
|
||||||
\codeterm{PaperUnits} & Einheit, in der die Papiergr\"o{\ss}e bestimmt wird. & $\{'inches' | 'centimeters' | 'normalized' | 'points'\}$\\
|
\code{PaperUnits} & Einheit, in der die Papiergr\"o{\ss}e bestimmt wird. & $\{'inches' | 'centimeters' | 'normalized' | 'points'\}$\\
|
||||||
\codeterm{Visible} & Hilfreich, wenn ein Plot aus Performanzgr\"unden nicht auf dem Bildschirm gezeigt, sondern direkt gespeichert werden soll. & $\{'on' | 'off'\}$\\ \hline
|
\code{Visible} & Hilfreich, wenn ein Plot aus Performanzgr\"unden nicht auf dem Bildschirm gezeigt, sondern direkt gespeichert werden soll. & $\{'on' | 'off'\}$\\ \hline
|
||||||
\end{tabular*}
|
\end{tabular*}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
Wie die Achse, hat auch das \codeterm{Figure} Element eine Reihe von
|
Wie die Achse, hat auch das \codeterm{Figure} Element eine Reihe von
|
||||||
Eigenschaften, die nach Bedarf mit der \code{set} - Funktion gesetzt
|
Eigenschaften, die nach Bedarf mit der \code{set()} - Funktion gesetzt
|
||||||
werden k\"onnen (Tabelle \ref{plotfigureprops} listet die
|
werden k\"onnen (Tabelle \ref{plotfigureprops} listet die
|
||||||
meistverwendeten). Das erste Argument f\"ur \code{set()} ist jetzt
|
meistverwendeten). Das erste Argument f\"ur \code{set()} ist jetzt
|
||||||
aber eine Handle f\"ur die Abbildung, nicht das
|
aber eine Handle f\"ur die Abbildung, nicht das
|
||||||
@ -380,25 +371,17 @@ Aufruf des Skripts wird exakt der gleiche Plot (Abbildung
|
|||||||
sind hier vor allem die Zeilen 2 und 3 in denen die Gr\"o{\ss}e der
|
sind hier vor allem die Zeilen 2 und 3 in denen die Gr\"o{\ss}e der
|
||||||
Abbildung in Zentimetern definiert wird. In Zeile 16 wird die
|
Abbildung in Zentimetern definiert wird. In Zeile 16 wird die
|
||||||
Abbildung dann in genau der angegebenen Gr\"o{\ss}e im ``pdf'' Format
|
Abbildung dann in genau der angegebenen Gr\"o{\ss}e im ``pdf'' Format
|
||||||
gespeichert. Dazu wird die Funktion \code{saveas} verwendet, die als
|
gespeichert. Dazu wird die Funktion \code{saveas()} verwendet, die als
|
||||||
erstes Argument wieder ein Handle auf die Figure erwartet. Das zweite
|
erstes Argument wieder ein Handle auf die Figure erwartet. Das zweite
|
||||||
Argument ist der Dateiname, und zuletzt muss das gew\"unschte Format
|
Argument ist der Dateiname, und zuletzt muss das gew\"unschte Format
|
||||||
(Box \ref{graphicsformatbox}) angegeben werden.
|
(Box \ref{graphicsformatbox}) angegeben werden.
|
||||||
|
|
||||||
\lstinputlisting[caption={Skript zur Erstellung des Plots in \figref{spikedetectionfig}.}, label=niceplotlisting]{automatic_plot.m}
|
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics{spike_detection}
|
\includegraphics{spike_detection}
|
||||||
\titlecaption{Automatisch erstellter Plot.}{Dieser Plot wurde vollst\"andig
|
\titlecaption{Automatisch erstellter Plot.}{Dieser Plot wurde vollst\"andig
|
||||||
mit dem Skript in Listing \ref{niceplotlisting} erstellt und
|
mit dem Skript in Listing \ref{niceplotlisting} erstellt und
|
||||||
gespeichert.}\label{spikedetectionfig}
|
gespeichert.}\label{spikedetectionfig}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Neben den Standard-Linienplots gibt es eine ganze Reihe weiterer
|
|
||||||
M\"oglichkeiten Daten zu Visualisieren. Mathworks zeigt auf seiner
|
|
||||||
Homepage viele Beispiele mit zugeh\"origem Code
|
|
||||||
\url{http://www.mathworks.de/discovery/gallery.html}.
|
|
||||||
|
|
||||||
\begin{ibox}[t]{\label{graphicsformatbox}Dateiformate f\"ur Abbildungen.}
|
\begin{ibox}[t]{\label{graphicsformatbox}Dateiformate f\"ur Abbildungen.}
|
||||||
Es gibt zwei grunds\"atzlich verschiedene Arten von Dateiformaten f\"ur
|
Es gibt zwei grunds\"atzlich verschiedene Arten von Dateiformaten f\"ur
|
||||||
Graphiken:
|
Graphiken:
|
||||||
@ -406,7 +389,6 @@ Homepage viele Beispiele mit zugeh\"origem Code
|
|||||||
\item \determ{Rastergraphik} (\enterm{bitmap})
|
\item \determ{Rastergraphik} (\enterm{bitmap})
|
||||||
\item \determ{Vektorgraphik} (\enterm{vector graphics})
|
\item \determ{Vektorgraphik} (\enterm{vector graphics})
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
|
|
||||||
Bei Rastergraphiken wird f\"ur jeden Bildpunkt (jedes Pixel) der
|
Bei Rastergraphiken wird f\"ur jeden Bildpunkt (jedes Pixel) der
|
||||||
aktuelle Farbwert angegeben. Rastergraphiken haben eine bestimmte
|
aktuelle Farbwert angegeben. Rastergraphiken haben eine bestimmte
|
||||||
Aufl\"osung (z.B. 300\,dpi --- dots per inch). Sie sind vor allem
|
Aufl\"osung (z.B. 300\,dpi --- dots per inch). Sie sind vor allem
|
||||||
@ -415,29 +397,27 @@ Homepage viele Beispiele mit zugeh\"origem Code
|
|||||||
Polygone, ...) beschrieben. Der Vorteil der Vektorgraphiken
|
Polygone, ...) beschrieben. Der Vorteil der Vektorgraphiken
|
||||||
ist die Skalierbakeit ohne Qualit\"atsverlust.
|
ist die Skalierbakeit ohne Qualit\"atsverlust.
|
||||||
|
|
||||||
\vspace{1ex}
|
|
||||||
\begin{minipage}[t]{0.38\textwidth}
|
\begin{minipage}[t]{0.38\textwidth}
|
||||||
\mbox{}\\[-2ex]
|
\mbox{}\\[-2ex]
|
||||||
\includegraphics[width=0.93\textwidth]{VectorBitmap.pdf}
|
\includegraphics[width=0.85\textwidth]{VectorBitmap.pdf}
|
||||||
\rotatebox{90}{\footnotesize by Darth Stabro at en.wikipedia.org}
|
\rotatebox{90}{\footnotesize by Darth Stabro at en.wikipedia.org}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\hfill
|
\hfill
|
||||||
\begin{minipage}[t]{0.5\textwidth}
|
\begin{minipage}[t]{0.5\textwidth}
|
||||||
Von \matlab{} unterst\"utzte Formate\footnote{Auswahl, mehr Information in der Hilfe zu \code{saveas}}:\\[2ex]
|
Von \matlab{} unterst\"utzte Formate\footnote{mehr Information in der Hilfe zu \code{saveas()}}:\\[2ex]
|
||||||
\begin{tabular}{|l|c|l|}
|
\begin{tabular}{|l|c|l|}
|
||||||
\hline
|
\hline
|
||||||
\textbf{Format} & \textbf{Typ} & \code{saveas} Argument \rule[-1.2ex]{0pt}{3.5ex} \\ \hline
|
\textbf{Format} & \textbf{Typ} & \code{saveas()} Argument \erh \\ \hline
|
||||||
pdf & Vektor & \codeterm{'pdf'} \rule{0pt}{2.5ex} \\
|
pdf & Vektor & \varcode{'pdf'} \erb \\
|
||||||
eps & Vektor & \codeterm{'eps', 'epsc'} \\
|
eps & Vektor & \varcode{'eps'}, \varcode{'epsc'} \\
|
||||||
SVG & Vektor & \codeterm{'svg'} \\
|
SVG & Vektor & \varcode{'svg'} \\
|
||||||
PS & Vektor & \codeterm{'ps', 'psc'} \\
|
PS & Vektor & \varcode{'ps'}, \varcode{'psc'} \\
|
||||||
jpg & Bitmap & \codeterm{'jpeg'} \\
|
jpg & Bitmap & \varcode{'jpeg'} \\
|
||||||
tif & Bitmap & \codeterm{'tiff', 'tiffn'} \\
|
tif & Bitmap & \varcode{'tiff'}, \varcode{'tiffn'} \\
|
||||||
png & Bitmap & \codeterm{'png'} \\
|
png & Bitmap & \varcode{'png'} \\
|
||||||
bmp & Bitmap & \codeterm{'bmp'} \\ \hline
|
bmp & Bitmap & \varcode{'bmp'} \\ \hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{minipage}
|
\end{minipage}
|
||||||
\vspace{1ex}
|
|
||||||
|
|
||||||
Wenn aus \matlab{} heraus Graphiken gespeichert werden sollen, dann
|
Wenn aus \matlab{} heraus Graphiken gespeichert werden sollen, dann
|
||||||
ist es meistens sehr sinnvoll sie als Vektorgraphik zu speichern. Im
|
ist es meistens sehr sinnvoll sie als Vektorgraphik zu speichern. Im
|
||||||
@ -449,6 +429,13 @@ Homepage viele Beispiele mit zugeh\"origem Code
|
|||||||
Rastergraphik allerdings deutlich schneller und speichereffizienter.
|
Rastergraphik allerdings deutlich schneller und speichereffizienter.
|
||||||
\end{ibox}
|
\end{ibox}
|
||||||
|
|
||||||
|
\lstinputlisting[caption={Skript zur Erstellung des Plots in \figref{spikedetectionfig}.}, label=niceplotlisting]{automatic_plot.m}
|
||||||
|
|
||||||
|
Neben den Standard-Linienplots gibt es eine ganze Reihe weiterer
|
||||||
|
M\"oglichkeiten Daten zu Visualisieren. Mathworks zeigt auf seiner
|
||||||
|
Homepage viele Beispiele mit zugeh\"origem Code
|
||||||
|
\url{http://www.mathworks.de/discovery/gallery.html}.
|
||||||
|
|
||||||
|
|
||||||
\section{Fazit}
|
\section{Fazit}
|
||||||
|
|
||||||
|
@ -1,19 +1,24 @@
|
|||||||
function [time, rate] = binnedRate(spike_times, bin_width, dt, t_max)
|
function [time, rate] = binned_rate(spikes, bin_width, dt, t_max)
|
||||||
% Calculates the firing rate with the binning method. The hist
|
% PSTH computed with binning method.
|
||||||
% function is used to count the number of spikes in each bin.
|
% 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:
|
% Arguments:
|
||||||
% spike_times, vector containing the times of the spikes.
|
% spikes : vector containing the times of the spikes.
|
||||||
% bin_width, the width of the bins in seconds.
|
% bin_width: the width of the bins in seconds.
|
||||||
% dt, the temporal resolution.
|
% dt : the temporal resolution.
|
||||||
% t_max, the tiral duration.
|
% 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;
|
time = 0:dt:t_max-dt;
|
||||||
bins = 0:bin_width:t_max;
|
bins = 0:bin_width:t_max;
|
||||||
rate = zeros(size(time));
|
rate = zeros(size(time));
|
||||||
|
h = hist(spikes, bins) ./ bin_width;
|
||||||
h = hist(spike_times, bins) ./ bin_width;
|
|
||||||
for i = 2:length(bins)
|
for i = 2:length(bins)
|
||||||
rate(round(bins(i - 1) / dt) + 1:round(bins(i) / dt)) = h(i);
|
rate(round(bins(i - 1) / dt) + 1:round(bins(i) / dt)) = h(i);
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -1,17 +1,20 @@
|
|||||||
function [time, rate] = convolutionRate(spike_times, sigma, dt, t_max)
|
function [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
|
||||||
% Calculates the firing rate with the convolution method.
|
% PSTH computed with convolution method.
|
||||||
|
%
|
||||||
|
% [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
|
||||||
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% spike_times, a vector containing the spike times.
|
% spikes: a vector containing the spike times.
|
||||||
% sigma, the standard deviation of the Gaussian kernel
|
% sigma : the standard deviation of the Gaussian kernel in seconds.
|
||||||
% in seconds.
|
% dt : the temporal resolution in seconds.
|
||||||
% dt, the temporal resolution in seconds.
|
% t_max : the trial duration 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;
|
time = 0:dt:t_max - dt;
|
||||||
rate = zeros(size(time));
|
rate = zeros(size(time));
|
||||||
spike_indices = round(spike_times / dt);
|
spike_indices = round(spikes / dt);
|
||||||
rate(spike_indices) = 1;
|
rate(spike_indices) = 1;
|
||||||
kernel = gaussKernel(sigma, dt);
|
kernel = gaussKernel(sigma, dt);
|
||||||
|
|
||||||
|
@ -1,22 +1,24 @@
|
|||||||
function [time, rate] = instantaneousRate(spike_times, dt, t_max)
|
function [time, rate] = instantaneous_rate(spikes, dt, t_max)
|
||||||
% Function calculates the firing rate as the inverse of the interspike
|
% Firing rate as the inverse of the interspike interval.
|
||||||
% interval.
|
%
|
||||||
|
% [time, rate] = instantaneous_rate(spikes, dt, t_max)
|
||||||
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% spike_times, vector containing the times of the spikes.
|
% spikes: vector containing the times of the spikes.
|
||||||
% dt, the temporal resolutions of the recording.
|
% dt : the temporal resolutions of the recording.
|
||||||
% t_max, the duration of the trial.
|
% t_max : the duration of the trial.
|
||||||
%
|
%
|
||||||
% Returns two vectors containing the time and the rate.
|
% Returns:
|
||||||
|
% the vector representing time and a vector containing the rate.
|
||||||
|
|
||||||
time = 0:dt:t_max-dt;
|
time = 0:dt:t_max-dt;
|
||||||
rate = zeros(size(time));
|
rate = zeros(size(time));
|
||||||
|
|
||||||
isis = diff([0 spike_times]);
|
isis = diff([0 spikes]);
|
||||||
inst_rate = 1 ./ isis;
|
inst_rate = 1 ./ isis;
|
||||||
spike_indices = [1 round(spike_times ./ dt)];
|
spike_indices = [1 round(spikes ./ dt)];
|
||||||
|
|
||||||
for i = 2:length(spike_indices)
|
for i = 2:length(spike_indices)
|
||||||
rate(spike_indices(i - 1):spike_indices(i)) = inst_rate(i - 1);
|
rate(spike_indices(i - 1):spike_indices(i)) = inst_rate(i - 1);
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
function [pdf, centers] = isi_hist(isis, binwidth)
|
function [pdf, centers] = isiHist(isis, binwidth)
|
||||||
% Compute normalized histogram of interspike intervals.
|
% Compute normalized histogram of interspike intervals.
|
||||||
%
|
%
|
||||||
% [pdf, centers] = isi_hist(isis, binwidth)
|
% [pdf, centers] = isiHist(isis, binwidth)
|
||||||
%
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% isis: vector of interspike intervals in seconds
|
% isis: vector of interspike intervals in seconds
|
@ -2,7 +2,12 @@ function isivec = isis( spikes )
|
|||||||
% returns a single list of isis computed from all trials in 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
|
% 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: a column vector with all the interspike intervalls
|
||||||
|
|
||||||
isivec = [];
|
isivec = [];
|
||||||
@ -13,4 +18,3 @@ function isivec = isis( spikes )
|
|||||||
isivec = [ isivec; difftimes(:) ];
|
isivec = [ isivec; difftimes(:) ];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
function plot_isi_hist(isis, binwidth)
|
function plotISIHist(isis, binwidth)
|
||||||
% Plot and annotate histogram of interspike intervals.
|
% Plot and annotate histogram of interspike intervals.
|
||||||
%
|
%
|
||||||
% isihist(isis, binwidth)
|
% plotISIHist(isis, binwidth)
|
||||||
%
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% isis: vector of interspike intervals in seconds
|
% isis: vector of interspike intervals in seconds
|
||||||
@ -9,9 +9,9 @@ function plot_isi_hist(isis, binwidth)
|
|||||||
|
|
||||||
% compute normalized histogram:
|
% compute normalized histogram:
|
||||||
if nargin < 2
|
if nargin < 2
|
||||||
[pdf, centers] = isi_hist(isis);
|
[pdf, centers] = isiHist(isis);
|
||||||
else
|
else
|
||||||
[pdf, centers] = isi_hist(isis, binwidth);
|
[pdf, centers] = isiHist(isis, binwidth);
|
||||||
end
|
end
|
||||||
|
|
||||||
% plot:
|
% plot:
|
@ -1,19 +1,19 @@
|
|||||||
function s_est = reconstructStimulus(spike_times, sta, stim_duration, dt)
|
function s_est = reconstructStimulus(spikes, sta, duration, deltat)
|
||||||
% Function estimates the stimulus from the Spike-Triggered-Average
|
% Estimate the stimulus from the spike-triggered-average (STA).
|
||||||
% (sta).
|
%
|
||||||
|
% s_est = reconstructStimulus(spikes, sta, duration, deltat)
|
||||||
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% spike_times, a vector containing the spike times in seconds.
|
% spikes : a vector containing the spike times in seconds.
|
||||||
% sta, a vector containing the spike-triggered-average.
|
% sta : a vector containing the spike-triggered-average.
|
||||||
% stim_duration, the total duration of the stimulus.
|
% duration: the total duration of the stimulus.
|
||||||
% dt, the sampling interval given in seconds.
|
% deltat : the time step of the stimulus in seconds.
|
||||||
%
|
%
|
||||||
% Returns:
|
% Returns:
|
||||||
% the estimated stimulus.
|
% s_est: vector with the estimated stimulus.
|
||||||
|
|
||||||
s_est = zeros(round(stim_duration / dt), 1);
|
|
||||||
|
|
||||||
|
s_est = zeros(round(duration / deltat), 1);
|
||||||
binary_spikes = zeros(size(s_est));
|
binary_spikes = zeros(size(s_est));
|
||||||
binary_spikes(round(spike_times ./ dt)) = 1;
|
binary_spikes(round(spikes ./ deltat)) = 1;
|
||||||
|
|
||||||
s_est = conv(binary_spikes, sta, 'same');
|
s_est = conv(binary_spikes, sta, 'same');
|
||||||
|
end
|
||||||
|
@ -1,32 +1,31 @@
|
|||||||
function [sta, std_sta, valid_spikes] = spikeTriggeredAverage(stimulus, spike_times, count, sampling_rate)
|
function [sta, std_sta, n_spikes] = spikeTriggeredAverage(stimulus, spikes, count, deltat)
|
||||||
% Function estimates the Spike-Triggered-Average (sta).
|
% Estimate the spike-triggered-average (STA).
|
||||||
|
%
|
||||||
|
% [sta, std_sta, n_spikes] = spikeTriggeredAverage(stimulus, spikes, count, deltat)
|
||||||
%
|
%
|
||||||
% Arguments:
|
% Arguments:
|
||||||
% stimulus, a vector containing stimulus intensities
|
% stimulus: vector of stimulus intensities as a function of time.
|
||||||
% as a function of time.
|
% spikes : vector with spike times in seconds.
|
||||||
% spike_times, a vector containing the spike times
|
% count : number of datapoints that are taken around the spike times.
|
||||||
% in seconds.
|
% deltat : the time step of the stimulus in seconds.
|
||||||
% count, the number of datapoints that are taken around
|
|
||||||
% the spike times.
|
|
||||||
% sampling_rate, the sampling rate of the stimulus.
|
|
||||||
%
|
%
|
||||||
% Returns:
|
% Returns:
|
||||||
% the sta, a vector containing the staandard deviation and
|
% sta : vector with the STA.
|
||||||
% the number of spikes taken into account.
|
% std_sta : standard deviation of the STA.
|
||||||
|
% n_spikes: number of spikes contained in STA.
|
||||||
|
|
||||||
snippets = zeros(numel(spike_times), 2*count);
|
snippets = zeros(numel(spikes), 2*count);
|
||||||
valid_spikes = 1;
|
n_spikes = 0;
|
||||||
for i = 1:numel(spike_times)
|
for i = 1:numel(spikes)
|
||||||
t = spike_times(i);
|
t = spikes(i);
|
||||||
index = round(t*sampling_rate);
|
index = round(t/deltat);
|
||||||
if index <= count || (index + count) > length(stimulus)
|
if index <= count || (index + count) > length(stimulus)
|
||||||
continue
|
continue
|
||||||
end
|
end
|
||||||
snippets(valid_spikes,:) = stimulus(index-count:index+count-1);
|
snippets(n_spikes,:) = stimulus(index-count:index+count-1);
|
||||||
valid_spikes = valid_spikes + 1;
|
n_spikes = n_spikes + 1;
|
||||||
end
|
end
|
||||||
|
snippets(n_spikes+1:end,:) = [];
|
||||||
snippets(valid_spikes:end,:) = [];
|
|
||||||
|
|
||||||
sta = mean(snippets, 1);
|
sta = mean(snippets, 1);
|
||||||
std_sta = std(snippets,[],1);
|
std_sta = std(snippets,[],1);
|
||||||
|
end
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
BASENAME=pointprocesses
|
BASENAME=pointprocesses
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
GPTFILES=$(wildcard *.gpt)
|
|
||||||
GPTTEXFILES=$(GPTFILES:.gpt=.tex)
|
|
||||||
|
|
||||||
|
|
||||||
all: pdf slides thumbs
|
all: pdf slides thumbs
|
||||||
|
|
||||||
|
include ../../chapter.mk
|
||||||
|
|
||||||
# script:
|
# script:
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
pdf : chapter
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex ../../header.tex $(GPTTEXFILES) $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
|
|
||||||
# slides:
|
# slides:
|
||||||
@ -31,31 +22,15 @@ $(BASENAME)-handout.pdf: $(BASENAME)-slides.tex $(GPTTEXFILES)
|
|||||||
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
pdfnup --nup 2x4 --no-landscape --paper a4paper --trim "-1cm -1cm -1cm -1cm" --outfile $@ thumbsfoils.pdf # 1-19
|
||||||
rm thumbsfoils.*
|
rm thumbsfoils.*
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
watchslides :
|
watchslides :
|
||||||
while true; do ! make -q slides && make slides; sleep 0.5; done
|
while true; do ! make -q slides && make slides; sleep 0.5; done
|
||||||
|
|
||||||
# python plots:
|
|
||||||
$(PYPDFFILES) : %.pdf: %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
# gnuplot plots:
|
|
||||||
$(GPTTEXFILES) : %.tex: %.gpt whitestyles.gp
|
|
||||||
gnuplot whitestyles.gp $<
|
|
||||||
epstopdf $*.eps
|
|
||||||
|
|
||||||
|
|
||||||
clean :
|
clean : cleanchapter
|
||||||
rm -f *~
|
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
rm -f $(BASENAME)-slides.aux $(BASENAME)-slides.log $(BASENAME)-slides.out $(BASENAME)-slides.toc $(BASENAME)-slides.nav $(BASENAME)-slides.snm $(BASENAME)-slides.vrb
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
cleanall : clean cleanchapter
|
||||||
rm -f $(BASENAME)-chapter.pdf $(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
$(BASENAME)-slides.pdf $(BASENAME)-handout.pdf
|
||||||
|
|
||||||
|
|
||||||
help :
|
help :
|
||||||
|
@ -98,4 +98,4 @@ plotisih(ax, isis(inhspikes))
|
|||||||
|
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
plt.savefig('isihexamples.pdf')
|
plt.savefig('isihexamples.pdf')
|
||||||
plt.show()
|
plt.close()
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{111}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{7}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,5 +16,11 @@
|
|||||||
|
|
||||||
\input{pointprocesses}
|
\input{pointprocesses}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Add spikeraster function
|
||||||
|
\item Multitrial firing rates
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\chapter{Analyse von Spiketrains}
|
\chapter{Analyse von Spiketrains}
|
||||||
|
|
||||||
\determ{Aktionspotentiale} (\enterm{Spikes}) sind die Tr\"ager der
|
\determ[Aktionspotential]{Aktionspotentiale} (\enterm{spikes}) sind die Tr\"ager der
|
||||||
Information in Nervensystemen. Dabei ist in erster Linie nur der
|
Information in Nervensystemen. Dabei ist in erster Linie nur der
|
||||||
Zeitpunkt des Auftretens eines Aktionspotentials von Bedeutung. Die
|
Zeitpunkt des Auftretens eines Aktionspotentials von Bedeutung. Die
|
||||||
genaue Form des Aktionspotentials spielt keine oder nur eine
|
genaue Form des Aktionspotentials spielt keine oder nur eine
|
||||||
@ -10,13 +10,13 @@ untergeordnete Rolle.
|
|||||||
|
|
||||||
Nach etwas Vorverarbeitung haben elektrophysiologische Messungen
|
Nach etwas Vorverarbeitung haben elektrophysiologische Messungen
|
||||||
deshalb Listen von Spikezeitpunkten als Ergebniss --- sogenannte
|
deshalb Listen von Spikezeitpunkten als Ergebniss --- sogenannte
|
||||||
\enterm{Spiketrains}. Diese Messungen k\"onnen wiederholt werden und
|
\enterm{spiketrains}. Diese Messungen k\"onnen wiederholt werden und
|
||||||
es ergeben sich mehrere \enterm{trials} von Spiketrains
|
es ergeben sich mehrere \enterm{trials} von Spiketrains
|
||||||
(\figref{rasterexamplesfig}).
|
(\figref{rasterexamplesfig}).
|
||||||
|
|
||||||
Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen
|
Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen
|
||||||
--- und deren Analyse f\"allt daher in das Gebiet der Statistik von
|
--- und deren Analyse f\"allt daher in das Gebiet der Statistik von
|
||||||
sogenannten \determ{Punktprozessen}.
|
sogenannten \determ[Punktprozess]{Punktprozessen}.
|
||||||
|
|
||||||
\begin{figure}[ht]
|
\begin{figure}[ht]
|
||||||
\includegraphics[width=1\textwidth]{rasterexamples}
|
\includegraphics[width=1\textwidth]{rasterexamples}
|
||||||
@ -25,7 +25,9 @@ sogenannten \determ{Punktprozessen}.
|
|||||||
(homogener Poisson Prozess mit Rate $\lambda=20$\;Hz, links) und
|
(homogener Poisson Prozess mit Rate $\lambda=20$\;Hz, links) und
|
||||||
eines nicht-station\"aren Punktprozesses (perfect
|
eines nicht-station\"aren Punktprozesses (perfect
|
||||||
integrate-and-fire Neuron getrieben mit Ohrnstein-Uhlenbeck
|
integrate-and-fire Neuron getrieben mit Ohrnstein-Uhlenbeck
|
||||||
Rauschen mit Zeitkonstante $\tau=100$\,ms, rechts).}
|
Rauschen mit Zeitkonstante $\tau=100$\,ms, rechts). Jeder
|
||||||
|
vertikale Strich markiert den Zeitpunkt eines Ereignisses.
|
||||||
|
Jede Zeile zeigt die Ereignisse eines trials.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -79,11 +81,12 @@ Zeitpunkte der Ereignisse durch senkrechte Striche markiert werden.
|
|||||||
|
|
||||||
Die Intervalle $T_i=t_{i+1}-t_i$ zwischen aufeinanderfolgenden
|
Die Intervalle $T_i=t_{i+1}-t_i$ zwischen aufeinanderfolgenden
|
||||||
Ereignissen sind reelle, positive Zahlen. Bei Aktionspotentialen
|
Ereignissen sind reelle, positive Zahlen. Bei Aktionspotentialen
|
||||||
heisen die Intervalle auch \enterm{Interspikeintervalle}. Deren Statistik
|
heisen die Intervalle auch \determ{Interspikeintervalle}
|
||||||
kann mit den \"ublichen Gr\"o{\ss}en beschrieben werden.
|
(\enterm{interspike intervals}). Deren Statistik kann mit den
|
||||||
|
\"ublichen Gr\"o{\ss}en beschrieben werden.
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{isihexamples}\hfill
|
\includegraphics[width=0.96\textwidth]{isihexamples}\vspace{-2ex}
|
||||||
\titlecaption{\label{isihexamplesfig}Interspikeintervall Histogramme}{der in
|
\titlecaption{\label{isihexamplesfig}Interspikeintervall Histogramme}{der in
|
||||||
\figref{rasterexamplesfig} gezeigten Spikes.}
|
\figref{rasterexamplesfig} gezeigten Spikes.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
@ -104,21 +107,21 @@ kann mit den \"ublichen Gr\"o{\ss}en beschrieben werden.
|
|||||||
\frac{1}{n}\sum\limits_{i=1}^n T_i$.
|
\frac{1}{n}\sum\limits_{i=1}^n T_i$.
|
||||||
\item Standardabweichung der Intervalle: $\sigma_{ISI} = \sqrt{\langle (T - \langle T
|
\item Standardabweichung der Intervalle: $\sigma_{ISI} = \sqrt{\langle (T - \langle T
|
||||||
\rangle)^2 \rangle}$\vspace{1ex}
|
\rangle)^2 \rangle}$\vspace{1ex}
|
||||||
\item Variationskoeffizient (\enterm{coefficient of variation}): $CV_{ISI} =
|
\item \determ{Variationskoeffizient} (\enterm{coefficient of variation}): $CV_{ISI} =
|
||||||
\frac{\sigma_{ISI}}{\mu_{ISI}}$.
|
\frac{\sigma_{ISI}}{\mu_{ISI}}$.
|
||||||
\item Diffusions Koeffizient: $D_{ISI} =
|
\item \determ{Diffusionskoeffizient} (\enterm{diffusion coefficient}): $D_{ISI} =
|
||||||
\frac{\sigma_{ISI}^2}{2\mu_{ISI}^3}$.
|
\frac{\sigma_{ISI}^2}{2\mu_{ISI}^3}$.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\begin{exercise}{isi_hist.m}{}
|
\begin{exercise}{isiHist.m}{}
|
||||||
Schreibe eine Funktion \code{isi\_hist()}, die einen Vektor mit Interspikeintervallen
|
Schreibe eine Funktion \code{isiHist()}, die einen Vektor mit Interspikeintervallen
|
||||||
entgegennimmt und daraus ein normiertes Histogramm der Interspikeintervalle
|
entgegennimmt und daraus ein normiertes Histogramm der Interspikeintervalle
|
||||||
berechnet.
|
berechnet.
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
\begin{exercise}{plot_isi_hist.m}{}
|
\begin{exercise}{plotISIHist.m}{}
|
||||||
Schreibe eine Funktion, die die Histogrammdaten der Funktion
|
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
|
Plot sollen die Interspikeintervalle in Millisekunden aufgetragen
|
||||||
werden. Das Histogramm soll zus\"atzlich mit Mittelwert,
|
werden. Das Histogramm soll zus\"atzlich mit Mittelwert,
|
||||||
Standardabweichung und Variationskoeffizient der
|
Standardabweichung und Variationskoeffizient der
|
||||||
@ -139,9 +142,10 @@ sichtbar.
|
|||||||
im Abstand des Lags $k$.}
|
im Abstand des Lags $k$.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Solche Ab\"angigkeiten werden durch die serielle Korrelation der
|
Solche Ab\"angigkeiten werden durch die \determ{serielle
|
||||||
Intervalle quantifiziert. Das ist der Korrelationskoeffizient
|
Korrelationen} (\enterm{serial correlations}) der Intervalle
|
||||||
zwischen aufeinander folgenden Intervallen getrennt durch lag $k$:
|
quantifiziert. Das ist der \determ{Korrelationskoeffizient} zwischen
|
||||||
|
aufeinander folgenden Intervallen getrennt durch lag $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)}
|
\[ \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) \]
|
= {\rm corr}(T_{i+k}, T_i) \]
|
||||||
\"Ublicherweise wird die Korrelation $\rho_k$ gegen den Lag $k$
|
\"Ublicherweise wird die Korrelation $\rho_k$ gegen den Lag $k$
|
||||||
@ -151,6 +155,7 @@ Intervalls mit sich selber).
|
|||||||
\begin{exercise}{isiserialcorr.m}{}
|
\begin{exercise}{isiserialcorr.m}{}
|
||||||
Schreibe eine Funktion \code{isiserialcorr()}, die einen Vektor mit Interspikeintervallen
|
Schreibe eine Funktion \code{isiserialcorr()}, die einen Vektor mit Interspikeintervallen
|
||||||
entgegennimmt und daraus die seriellen Korrelationen berechnet und plottet.
|
entgegennimmt und daraus die seriellen Korrelationen berechnet und plottet.
|
||||||
|
\pagebreak[4]
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
@ -170,10 +175,10 @@ durch folgende Sch\"atzer charakterisiert werden:
|
|||||||
\item Histogramm der counts $n_i$.
|
\item Histogramm der counts $n_i$.
|
||||||
\item Mittlere Anzahl von Ereignissen: $\mu_N = \langle n \rangle$.
|
\item Mittlere Anzahl von Ereignissen: $\mu_N = \langle n \rangle$.
|
||||||
\item Varianz der Anzahl: $\sigma_n^2 = \langle (n - \langle n \rangle)^2 \rangle$.
|
\item Varianz der Anzahl: $\sigma_n^2 = \langle (n - \langle n \rangle)^2 \rangle$.
|
||||||
\item Fano Faktor (Varianz geteilt durch Mittelwert): $F = \frac{\sigma_n^2}{\mu_n}$.
|
\item \determ{Fano Faktor} (Varianz geteilt durch Mittelwert): $F = \frac{\sigma_n^2}{\mu_n}$.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
Insbesondere ist die mittlere Rate der Ereignisse $r$ (Spikes pro
|
Insbesondere ist die mittlere Rate der Ereignisse $r$ (Spikes pro
|
||||||
Zeit, \determ{Feuerrate}) gemessen in Hertz
|
Zeit, \determ{Feuerrate}) gemessen in Hertz \sindex[term]{Feuerrate!mittlere Rate}
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{firingrate}
|
\label{firingrate}
|
||||||
r = \frac{\langle n \rangle}{W} \; .
|
r = \frac{\langle n \rangle}{W} \; .
|
||||||
@ -209,18 +214,18 @@ u.a. wegen dem Zentralen Grenzwertsatz die Standardverteilung. Eine
|
|||||||
\"ahnliche Rolle spielt bei Punktprozessen der \determ{Poisson
|
\"ahnliche Rolle spielt bei Punktprozessen der \determ{Poisson
|
||||||
Prozess}.
|
Prozess}.
|
||||||
|
|
||||||
Beim homogenen Poisson Prozess treten Ereignisse mit einer festen Rate
|
Beim \determ[Poisson Prozess!homogener]{homogenen Poisson Prozess}
|
||||||
$\lambda=\text{const.}$ auf und sind unabh\"angig von der Zeit $t$ und
|
treten Ereignisse mit einer festen Rate $\lambda=\text{const.}$ auf
|
||||||
unabh\"angig von den Zeitpunkten fr\"uherer Ereignisse
|
und sind unabh\"angig von der Zeit $t$ und unabh\"angig von den
|
||||||
(\figref{hompoissonfig}). Die Wahrscheinlichkeit zu irgendeiner Zeit
|
Zeitpunkten fr\"uherer Ereignisse (\figref{hompoissonfig}). Die
|
||||||
ein Ereigniss in einem kleinen Zeitfenster der Breite $\Delta t$ zu
|
Wahrscheinlichkeit zu irgendeiner Zeit ein Ereigniss in einem kleinen
|
||||||
bekommen ist
|
Zeitfenster der Breite $\Delta t$ zu bekommen ist
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{hompoissonprob}
|
\label{hompoissonprob}
|
||||||
P = \lambda \cdot \Delta t \; .
|
P = \lambda \cdot \Delta t \; .
|
||||||
\end{equation}
|
\end{equation}
|
||||||
Beim inhomogenen Poisson Prozess h\"angt die Rate $\lambda$ von der
|
Beim \determ[Poisson Prozess!inhomogener]{inhomogenen Poisson Prozess}
|
||||||
Zeit ab: $\lambda = \lambda(t)$.
|
h\"angt die Rate $\lambda$ von der Zeit ab: $\lambda = \lambda(t)$.
|
||||||
|
|
||||||
\begin{exercise}{poissonspikes.m}{}
|
\begin{exercise}{poissonspikes.m}{}
|
||||||
Schreibe eine Funktion \code{poissonspikes()}, die die Spikezeiten
|
Schreibe eine Funktion \code{poissonspikes()}, die die Spikezeiten
|
||||||
@ -253,14 +258,15 @@ Der homogene Poissonprozess hat folgende Eigenschaften:
|
|||||||
\item Das mittlere Intervall ist $\mu_{ISI} = \frac{1}{\lambda}$ .
|
\item Das mittlere Intervall ist $\mu_{ISI} = \frac{1}{\lambda}$ .
|
||||||
\item Die Varianz der Intervalle ist $\sigma_{ISI}^2 = \frac{1}{\lambda^2}$ .
|
\item Die Varianz der Intervalle ist $\sigma_{ISI}^2 = \frac{1}{\lambda^2}$ .
|
||||||
\item Der Variationskoeffizient ist also immer $CV_{ISI} = 1$ .
|
\item Der Variationskoeffizient ist also immer $CV_{ISI} = 1$ .
|
||||||
\item Die seriellen Korrelationen $\rho_k =0$ f\"ur $k>0$, da das
|
\item Die \determ[serielle Korrelationen]{seriellen Korrelationen}
|
||||||
Auftreten der Ereignisse unabh\"angig von der Vorgeschichte ist. Ein
|
$\rho_k =0$ f\"ur $k>0$, da das Auftreten der Ereignisse
|
||||||
solcher Prozess wird auch \determ{Erneuerungsprozess} genannt (\enterm{renewal
|
unabh\"angig von der Vorgeschichte ist. Ein solcher Prozess wird
|
||||||
process}).
|
auch \determ{Erneuerungsprozess} genannt (\enterm{renewal process}).
|
||||||
\item Die Anzahl der Ereignisse $k$ innerhalb eines Fensters der L\"ange W ist Poissonverteilt:
|
\item Die Anzahl der Ereignisse $k$ innerhalb eines Fensters der
|
||||||
|
L\"ange W ist \determ[Poisson-Verteilung]{Poissonverteilt}:
|
||||||
\[ P(k) = \frac{(\lambda W)^ke^{\lambda W}}{k!} \]
|
\[ P(k) = \frac{(\lambda W)^ke^{\lambda W}}{k!} \]
|
||||||
(\figref{hompoissoncountfig})
|
(\figref{hompoissoncountfig})
|
||||||
\item Der Fano Faktor ist immer $F=1$ .
|
\item Der \determ{Fano Faktor} ist immer $F=1$ .
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\begin{exercise}{hompoissonspikes.m}{}
|
\begin{exercise}{hompoissonspikes.m}{}
|
||||||
@ -299,13 +305,11 @@ Abbildung \ref{psthfig} n\"aher erl\"autert.
|
|||||||
|
|
||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
\includegraphics[width=\columnwidth]{firingrates}
|
\includegraphics[width=\columnwidth]{firingrates}
|
||||||
\titlecaption{Verschiedene Methoden die zeitabh\"angige Feuerrate
|
\titlecaption{Bestimmung der zeitabh\"angigen
|
||||||
zu bestimmen.}{\textbf{A)} Rasterplot einer einzelnen neuronalen
|
Feuerrate.}{\textbf{A)} Rasterplot eines Spiketrains. \textbf{B)}
|
||||||
Antwort. Jeder vertikale Strich notiert den Zeitpunkt eines
|
Feurerrate aus der instantanen Feuerrate bestimmt. \textbf{C)}
|
||||||
Aktionspotentials. \textbf{B)} Feurerrate aus der instantanen
|
klassisches PSTH mit der Binning Methode. \textbf{D)} Feuerrate
|
||||||
Feuerrate bestimmt. \textbf{C)} klassisches PSTH mit der Binning
|
durch Faltung mit einem Gauss Kern bestimmt.}\label{psthfig}
|
||||||
Methode. \textbf{D)} Feuerrate durch Faltung mit einem Gauss Kern
|
|
||||||
bestimmt.}\label{psthfig}
|
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
@ -314,26 +318,27 @@ Abbildung \ref{psthfig} n\"aher erl\"autert.
|
|||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
\includegraphics[width=\columnwidth]{isimethod}
|
\includegraphics[width=\columnwidth]{isimethod}
|
||||||
\titlecaption{Instantane Feuerrate.}{Skizze eines Spiketrains
|
\titlecaption{Instantane Feuerrate.}{Skizze eines Spiketrains
|
||||||
(oben). Jeder vertikale Strich notiert den Zeitpunkt eines
|
(oben). Die Pfeile zwischen aufeinanderfolgenden
|
||||||
Aktionspotentials. Die Pfeile zwischen aufeinanderfolgenden
|
|
||||||
Aktionspotentialen mit den Zahlen in Millisekunden illustrieren
|
Aktionspotentialen mit den Zahlen in Millisekunden illustrieren
|
||||||
die Interspikeintervalle. Der Kehrwert des Interspikeintervalle
|
die Interspikeintervalle. Der Kehrwert des Interspikeintervalle
|
||||||
ergibt die instantane Feuerrate.}\label{instrate}
|
ergibt die instantane Feuerrate.}\label{instrate}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist
|
Ein sehr einfacher Weg, die zeitabh\"angige Feuerrate zu bestimmen ist
|
||||||
die sogenannte \determ{instantane Feuerrate}. Dabei wird die Feuerrate
|
die sogenannte \determ[Feuerrate!instantane]{instantane Feuerrate}
|
||||||
aus dem Kehrwert der Interspikeintervalle, der Zeit zwischen zwei
|
(\enterm[firing rate!instantaneous]{instantaneous firing rate}). Dabei
|
||||||
aufeinander folgenden Aktionspotentialen (\figref{instrate} A),
|
wird die Feuerrate aus dem Kehrwert der Interspikeintervalle, der Zeit
|
||||||
bestimmt. Die abgesch\"atzte Feuerrate (\figref{instrate} B) ist
|
zwischen zwei aufeinander folgenden Aktionspotentialen
|
||||||
g\"ultig f\"ur das gesammte Interspikeintervall. Diese Methode hat den
|
(\figref{instrate} A), bestimmt. Die abgesch\"atzte Feuerrate
|
||||||
Vorteil, dass sie sehr einfach zu berechnen ist und keine Annahme
|
(\figref{instrate} B) ist g\"ultig f\"ur das gesammte
|
||||||
\"uber eine relevante Zeitskala (der Kodierung oder des
|
Interspikeintervall. Diese Methode hat den Vorteil, dass sie sehr
|
||||||
Auslesemechanismus der postsynaptischen Zelle) macht. $r(t)$ ist
|
einfach zu berechnen ist und keine Annahme \"uber eine relevante
|
||||||
allerdings keine kontinuierliche Funktion, die Spr\"unge in der
|
Zeitskala (der Kodierung oder des Auslesemechanismus der
|
||||||
Feuerrate k\"onnen f\"ur manche Analysen nachteilig sein. Au{\ss}erdem
|
postsynaptischen Zelle) macht. $r(t)$ ist allerdings keine
|
||||||
wird die Feuerrate nie gleich Null, auch wenn lange keine Aktionspotentiale
|
kontinuierliche Funktion, die Spr\"unge in der Feuerrate k\"onnen
|
||||||
generiert wurden.
|
f\"ur manche Analysen nachteilig sein. Au{\ss}erdem wird die Feuerrate
|
||||||
|
nie gleich Null, auch wenn lange keine Aktionspotentiale generiert
|
||||||
|
wurden.
|
||||||
|
|
||||||
\begin{exercise}{instantaneousRate.m}{}
|
\begin{exercise}{instantaneousRate.m}{}
|
||||||
Implementiere die Absch\"atzung der Feuerrate auf Basis der
|
Implementiere die Absch\"atzung der Feuerrate auf Basis der
|
||||||
@ -345,9 +350,10 @@ generiert wurden.
|
|||||||
W\"ahrend die Instantane Rate den Kehrwert der Zeit von einem bis zum
|
W\"ahrend die Instantane Rate den Kehrwert der Zeit von einem bis zum
|
||||||
n\"achsten Aktionspotential misst, sch\"atzt das sogenannte
|
n\"achsten Aktionspotential misst, sch\"atzt das sogenannte
|
||||||
\determ{Peri-Stimulus-Zeit-Histogramm} (\enterm{peri stimulus time
|
\determ{Peri-Stimulus-Zeit-Histogramm} (\enterm{peri stimulus time
|
||||||
histogram}, PSTH) die Wahrscheinlichkeit ab, zu einem Zeitpunkt
|
histogram}, \determ[PSTH|see{Peri-Stimulus-Zeit-Histogramm}]{PSTH})
|
||||||
Aktionspotentiale anzutreffen. Es wird versucht die mittlere Rate \eqnref{firingrate}
|
die Wahrscheinlichkeit ab, zu einem Zeitpunkt Aktionspotentiale
|
||||||
im Grenzwert kleiner Beobachtungszeiten abzusch\"atzen:
|
anzutreffen. Es wird versucht die mittlere Rate \eqnref{firingrate} im
|
||||||
|
Grenzwert kleiner Beobachtungszeiten abzusch\"atzen:
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{psthrate}
|
\label{psthrate}
|
||||||
r(t) = \lim_{W \to 0} \frac{\langle n \rangle}{W} \; ,
|
r(t) = \lim_{W \to 0} \frac{\langle n \rangle}{W} \; ,
|
||||||
@ -377,9 +383,9 @@ Bei der Binning-Methode wird die Zeitachse in gleichm\"aßige
|
|||||||
Abschnitte (Bins) eingeteilt und die Anzahl Aktionspotentiale, die in
|
Abschnitte (Bins) eingeteilt und die Anzahl Aktionspotentiale, die in
|
||||||
die jeweiligen Bins fallen, gez\"ahlt (\figref{binpsth} A). Um diese
|
die jeweiligen Bins fallen, gez\"ahlt (\figref{binpsth} A). Um diese
|
||||||
Z\"ahlungen in die Feuerrate umzurechnen muss noch mit der Binweite
|
Z\"ahlungen in die Feuerrate umzurechnen muss noch mit der Binweite
|
||||||
normiert werden. Das ist fast so, wie beim Absch\"atzen einer
|
normiert werden. Das ist \"aquivalent zur Absch\"atzung einer
|
||||||
Wahrscheinlichkeitsdichte. Es kann auch die \code{hist} Funktion zur
|
Wahrscheinlichkeitsdichte. Es kann auch die \code{hist()} Funktion zur
|
||||||
Bestimmung des PSTHs verwendet werden.
|
Bestimmung des PSTHs verwendet werden. \sindex[term]{Feuerrate!Binningmethode}
|
||||||
|
|
||||||
Die bestimmte Feuerrate gilt f\"ur das gesamte Bin (\figref{binpsth}
|
Die bestimmte Feuerrate gilt f\"ur das gesamte Bin (\figref{binpsth}
|
||||||
B). Das so berechnete PSTH hat wiederum eine stufige Form, die von der
|
B). Das so berechnete PSTH hat wiederum eine stufige Form, die von der
|
||||||
@ -390,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
|
wird somit eine Annahme \"uber die relevante Zeitskala des Spiketrains
|
||||||
gemacht.
|
gemacht.
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
\begin{exercise}{binnedRate.m}{}
|
\begin{exercise}{binnedRate.m}{}
|
||||||
Implementiere die Absch\"atzung der Feuerrate mit der ``binning''
|
Implementiere die Absch\"atzung der Feuerrate mit der ``binning''
|
||||||
Methode. Plotte das PSTH.
|
Methode. Plotte das PSTH.
|
||||||
@ -421,7 +428,7 @@ wobei $\omega(\tau)$ der Filterkern und $\rho(t)$ die bin\"are Antwort
|
|||||||
ist. Bildlich geprochen wird jede 1 in $\rho(t)$ durch den Filterkern
|
ist. Bildlich geprochen wird jede 1 in $\rho(t)$ durch den Filterkern
|
||||||
ersetzt (Abbildung \ref{convrate} A). Wenn der Kern richtig normiert
|
ersetzt (Abbildung \ref{convrate} A). Wenn der Kern richtig normiert
|
||||||
wurde (Integral gleich Eins), ergibt sich die Feuerrate direkt aus der
|
wurde (Integral gleich Eins), ergibt sich die Feuerrate direkt aus der
|
||||||
\"Uberlagerung der Kerne (Abb. \ref{convrate} B).
|
\"Uberlagerung der Kerne (Abb. \ref{convrate} B). \sindex[term]{Feuerrate!Faltungsmethode}
|
||||||
|
|
||||||
Die Faltungsmethode f\"uhrt, anders als die anderen Methoden, zu einer
|
Die Faltungsmethode f\"uhrt, anders als die anderen Methoden, zu einer
|
||||||
stetigen Funktion was insbesondere f\"ur spektrale Analysen von
|
stetigen Funktion was insbesondere f\"ur spektrale Analysen von
|
||||||
@ -430,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
|
macht also auch wieder eine Annahme \"uber die relevante Zeitskala des
|
||||||
Spiketrains.
|
Spiketrains.
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
\begin{exercise}{convolutionRate.m}{}
|
\begin{exercise}{convolutionRate.m}{}
|
||||||
Verwende die Faltungsmethode um die Feuerrate zu bestimmen. Plotte
|
Verwende die Faltungsmethode um die Feuerrate zu bestimmen. Plotte
|
||||||
das Ergebnis.
|
das Ergebnis.
|
||||||
@ -438,8 +446,9 @@ Spiketrains.
|
|||||||
\section{Spike-triggered Average}
|
\section{Spike-triggered Average}
|
||||||
Die graphischer Darstellung der Feuerrate allein reicht nicht aus um
|
Die graphischer Darstellung der Feuerrate allein reicht nicht aus um
|
||||||
den Zusammenhang zwischen neuronaler Antwort und einem Stimulus zu
|
den Zusammenhang zwischen neuronaler Antwort und einem Stimulus zu
|
||||||
analysieren. Eine Methode um mehr \"uber diesen Zusammenhang zu erfahren,
|
analysieren. Eine Methode um mehr \"uber diesen Zusammenhang zu
|
||||||
ist der \enterm{Spike-triggered average} (STA). Der STA
|
erfahren, ist der \enterm{spike-triggered average}
|
||||||
|
(\enterm[STA|see{spike-triggered average}]{STA}). Der STA
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
STA(\tau) = \langle s(t - \tau) \rangle = \frac{1}{N} \sum_{i=1}^{N} s(t_i - \tau)
|
STA(\tau) = \langle s(t - \tau) \rangle = \frac{1}{N} \sum_{i=1}^{N} s(t_i - \tau)
|
||||||
\end{equation}
|
\end{equation}
|
||||||
@ -477,17 +486,20 @@ antworten.
|
|||||||
|
|
||||||
Der STA kann auch dazu benutzt werden, aus den Antworten der Zelle den
|
Der STA kann auch dazu benutzt werden, aus den Antworten der Zelle den
|
||||||
Stimulus zu rekonstruieren (\figref{stafig} B). Bei der
|
Stimulus zu rekonstruieren (\figref{stafig} B). Bei der
|
||||||
\determ{invertierten Rekonstruktion} wird die Zellantwort mit dem STA
|
\determ[invertierte Rekonstruktion]{invertierten Rekonstruktion} wird
|
||||||
verfaltet.
|
die Zellantwort mit dem STA verfaltet.
|
||||||
|
|
||||||
\begin{exercise}{spikeTriggeredAverage.m}{}
|
\begin{exercise}{spikeTriggeredAverage.m}{}
|
||||||
Implementiere eine Funktion, die den STA ermittelt. Verwende dazu
|
Implementiere eine Funktion, die den STA ermittelt. Verwende dazu
|
||||||
den Datensatz \codeterm{sta\_data.mat}. Die Funktion sollte folgende
|
den Datensatz \file{sta\_data.mat}. Die Funktion sollte folgende
|
||||||
R\"uckgabewerte haben:
|
R\"uckgabewerte haben:
|
||||||
|
\vspace{-1ex}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
|
\setlength{\itemsep}{0ex}
|
||||||
\item den Spike-Triggered-Average.
|
\item den Spike-Triggered-Average.
|
||||||
\item die Standardabweichung der individuellen STAs.
|
\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{itemize}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
@ -495,7 +507,5 @@ verfaltet.
|
|||||||
Rekonstruiere den Stimulus mithilfe des STA und der Spike
|
Rekonstruiere den Stimulus mithilfe des STA und der Spike
|
||||||
Zeiten. Die Funktion soll Vektor als R\"uckgabewert haben, der
|
Zeiten. Die Funktion soll Vektor als R\"uckgabewert haben, der
|
||||||
genauso gro{\ss} ist wie der Originalstimulus aus der Datei
|
genauso gro{\ss} ist wie der Originalstimulus aus der Datei
|
||||||
\codeterm{sta\_data.mat}.
|
\file{sta\_data.mat}.
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
set term epslatex size 11.4cm, 7cm
|
set term epslatex size 11.4cm, 6.5cm
|
||||||
set out 'pointprocessscetch.tex'
|
set out 'pointprocessscetch.tex'
|
||||||
|
|
||||||
set border 0
|
set border 0
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
%!PS-Adobe-2.0 EPSF-2.0
|
%!PS-Adobe-2.0 EPSF-2.0
|
||||||
%%Title: pointprocessscetchA.tex
|
%%Title: pointprocessscetchA.tex
|
||||||
%%Creator: gnuplot 4.6 patchlevel 4
|
%%Creator: gnuplot 4.6 patchlevel 4
|
||||||
%%CreationDate: Tue Nov 3 17:29:16 2015
|
%%CreationDate: Sat Nov 28 12:01:31 2015
|
||||||
%%DocumentFonts:
|
%%DocumentFonts:
|
||||||
%%BoundingBox: 50 50 373 135
|
%%BoundingBox: 50 50 373 135
|
||||||
%%EndComments
|
%%EndComments
|
||||||
@ -430,10 +430,10 @@ SDict begin [
|
|||||||
/Title (pointprocessscetchA.tex)
|
/Title (pointprocessscetchA.tex)
|
||||||
/Subject (gnuplot plot)
|
/Subject (gnuplot plot)
|
||||||
/Creator (gnuplot 4.6 patchlevel 4)
|
/Creator (gnuplot 4.6 patchlevel 4)
|
||||||
/Author (grewe)
|
/Author (jan)
|
||||||
% /Producer (gnuplot)
|
% /Producer (gnuplot)
|
||||||
% /Keywords ()
|
% /Keywords ()
|
||||||
/CreationDate (Tue Nov 3 17:29:16 2015)
|
/CreationDate (Sat Nov 28 12:01:31 2015)
|
||||||
/DOCINFO pdfmark
|
/DOCINFO pdfmark
|
||||||
end
|
end
|
||||||
} ifelse
|
} ifelse
|
||||||
|
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
%!PS-Adobe-2.0 EPSF-2.0
|
%!PS-Adobe-2.0 EPSF-2.0
|
||||||
%%Title: pointprocessscetchB.tex
|
%%Title: pointprocessscetchB.tex
|
||||||
%%Creator: gnuplot 4.6 patchlevel 4
|
%%Creator: gnuplot 4.6 patchlevel 4
|
||||||
%%CreationDate: Tue Nov 3 18:24:39 2015
|
%%CreationDate: Sat Nov 28 12:01:32 2015
|
||||||
%%DocumentFonts:
|
%%DocumentFonts:
|
||||||
%%BoundingBox: 50 50 373 237
|
%%BoundingBox: 50 50 373 237
|
||||||
%%EndComments
|
%%EndComments
|
||||||
@ -430,10 +430,10 @@ SDict begin [
|
|||||||
/Title (pointprocessscetchB.tex)
|
/Title (pointprocessscetchB.tex)
|
||||||
/Subject (gnuplot plot)
|
/Subject (gnuplot plot)
|
||||||
/Creator (gnuplot 4.6 patchlevel 4)
|
/Creator (gnuplot 4.6 patchlevel 4)
|
||||||
/Author (grewe)
|
/Author (jan)
|
||||||
% /Producer (gnuplot)
|
% /Producer (gnuplot)
|
||||||
% /Keywords ()
|
% /Keywords ()
|
||||||
/CreationDate (Tue Nov 3 18:24:39 2015)
|
/CreationDate (Sat Nov 28 12:01:32 2015)
|
||||||
/DOCINFO pdfmark
|
/DOCINFO pdfmark
|
||||||
end
|
end
|
||||||
} ifelse
|
} ifelse
|
||||||
|
Binary file not shown.
@ -83,4 +83,4 @@ ax.eventplot(inhspikes, colors=[[0, 0, 0]], linelength=0.8)
|
|||||||
|
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
plt.savefig('rasterexamples.pdf')
|
plt.savefig('rasterexamples.pdf')
|
||||||
plt.show()
|
plt.close()
|
||||||
|
@ -38,18 +38,22 @@ def reconstruct_stimulus(spike_times, sta, stimulus, t_max=30., dt=1e-4):
|
|||||||
|
|
||||||
|
|
||||||
def plot_results(sta_time, st_average, stim_time, s_est, stimulus, duration, dt):
|
def plot_results(sta_time, st_average, stim_time, s_est, stimulus, duration, dt):
|
||||||
|
plt.xkcd()
|
||||||
sta_ax = plt.subplot2grid((1, 3), (0, 0), rowspan=1, colspan=1)
|
sta_ax = plt.subplot2grid((1, 3), (0, 0), rowspan=1, colspan=1)
|
||||||
stim_ax = plt.subplot2grid((1, 3), (0, 1), rowspan=1, colspan=2)
|
stim_ax = plt.subplot2grid((1, 3), (0, 1), rowspan=1, colspan=2)
|
||||||
|
|
||||||
fig = plt.gcf()
|
fig = plt.gcf()
|
||||||
fig.set_size_inches(15, 5)
|
fig.set_size_inches(8, 3)
|
||||||
fig.subplots_adjust(left=0.075, bottom=0.12, top=0.92, right=0.975)
|
fig.subplots_adjust(left=0.08, bottom=0.15, top=0.9, right=0.975)
|
||||||
fig.set_facecolor("white")
|
fig.set_facecolor("white")
|
||||||
|
|
||||||
sta_ax.plot(sta_time * 1000, st_average, color="dodgerblue", lw=2.)
|
sta_ax.plot(sta_time * 1000, st_average, color="#FF9900", lw=2.)
|
||||||
sta_ax.set_xlabel("time [ms]", fontsize=12)
|
sta_ax.set_xlabel("Time (ms)")
|
||||||
sta_ax.set_ylabel("stimulus", fontsize=12)
|
sta_ax.set_ylabel("Stimulus")
|
||||||
sta_ax.set_xlim([-50, 50])
|
sta_ax.set_xlim(-40, 20)
|
||||||
|
sta_ax.set_xticks(np.arange(-40, 21, 20))
|
||||||
|
sta_ax.set_ylim(-0.1, 0.2)
|
||||||
|
sta_ax.set_yticks(np.arange(-0.1, 0.21, 0.1))
|
||||||
# sta_ax.xaxis.grid('off')
|
# sta_ax.xaxis.grid('off')
|
||||||
sta_ax.spines["right"].set_visible(False)
|
sta_ax.spines["right"].set_visible(False)
|
||||||
sta_ax.spines["top"].set_visible(False)
|
sta_ax.spines["top"].set_visible(False)
|
||||||
@ -58,22 +62,31 @@ def plot_results(sta_time, st_average, stim_time, s_est, stimulus, duration, dt)
|
|||||||
sta_ax.spines["bottom"].set_linewidth(2.0)
|
sta_ax.spines["bottom"].set_linewidth(2.0)
|
||||||
sta_ax.spines["left"].set_linewidth(2.0)
|
sta_ax.spines["left"].set_linewidth(2.0)
|
||||||
sta_ax.tick_params(direction="out", width=2.0)
|
sta_ax.tick_params(direction="out", width=2.0)
|
||||||
|
|
||||||
ylim = sta_ax.get_ylim()
|
ylim = sta_ax.get_ylim()
|
||||||
xlim = sta_ax.get_xlim()
|
xlim = sta_ax.get_xlim()
|
||||||
sta_ax.plot(list(xlim), [0., 0.], zorder=1, color='darkgray', ls='--', lw=0.75)
|
sta_ax.plot(list(xlim), [0., 0.], zorder=1, color='darkgray', ls='--', lw=1)
|
||||||
sta_ax.plot([0., 0.], list(ylim), zorder=1, color='darkgray', ls='--', lw=0.75)
|
sta_ax.plot([0., 0.], list(ylim), zorder=1, color='darkgray', ls='--', lw=1)
|
||||||
sta_ax.set_xlim(list(xlim))
|
sta_ax.set_xlim(list(xlim))
|
||||||
sta_ax.set_ylim(list(ylim))
|
sta_ax.set_ylim(list(ylim))
|
||||||
sta_ax.text(-0.225, 1.05, "A", transform=sta_ax.transAxes, size=14)
|
sta_ax.annotate('Time of\nspike',
|
||||||
|
xy=(0, 0.18), xycoords='data',
|
||||||
|
xytext=(-35, 0.19), textcoords='data', ha='left',
|
||||||
|
arrowprops=dict(arrowstyle="->", relpos=(1.0,0.5),
|
||||||
|
connectionstyle="angle3,angleA=0,angleB=-70") )
|
||||||
|
sta_ax.annotate('STA',
|
||||||
|
xy=(-10, 0.05), xycoords='data',
|
||||||
|
xytext=(-33, 0.09), textcoords='data', ha='left',
|
||||||
|
arrowprops=dict(arrowstyle="->", relpos=(1.0,0.0),
|
||||||
|
connectionstyle="angle3,angleA=60,angleB=-40") )
|
||||||
|
#sta_ax.text(-0.25, 1.04, "A", transform=sta_ax.transAxes, size=24)
|
||||||
|
|
||||||
stim_ax.plot(stim_time * 1000, stimulus[:,1], label='stimulus', color='dodgerblue', lw=2.)
|
stim_ax.plot(stim_time * 1000, stimulus[:,1], label='stimulus', color='#0000FF', lw=2.)
|
||||||
stim_ax.plot(stim_time * 1000, s_est, label='reconstruction', color='red', lw=2)
|
stim_ax.plot(stim_time * 1000, s_est, label='reconstruction', color='#FF9900', lw=2)
|
||||||
stim_ax.set_xlabel('time[ms]', fontsize=12)
|
stim_ax.set_xlabel('Time (ms)')
|
||||||
stim_ax.set_xlim([0.0, 250])
|
stim_ax.set_xlim(0.0, 200)
|
||||||
stim_ax.set_ylim([-1., 1.])
|
stim_ax.set_ylim([-1., 1.])
|
||||||
stim_ax.legend()
|
stim_ax.legend(loc=(0.3, 0.85), frameon=False, fontsize=12)
|
||||||
stim_ax.plot([0.0, 250], [0., 0.], color="darkgray", lw=0.75, ls='--', zorder=1)
|
stim_ax.plot([0.0, 250], [0., 0.], color="darkgray", lw=1, ls='--', zorder=1)
|
||||||
stim_ax.spines["right"].set_visible(False)
|
stim_ax.spines["right"].set_visible(False)
|
||||||
stim_ax.spines["top"].set_visible(False)
|
stim_ax.spines["top"].set_visible(False)
|
||||||
stim_ax.yaxis.set_ticks_position('left')
|
stim_ax.yaxis.set_ticks_position('left')
|
||||||
@ -81,8 +94,9 @@ def plot_results(sta_time, st_average, stim_time, s_est, stimulus, duration, dt)
|
|||||||
stim_ax.spines["bottom"].set_linewidth(2.0)
|
stim_ax.spines["bottom"].set_linewidth(2.0)
|
||||||
stim_ax.spines["left"].set_linewidth(2.0)
|
stim_ax.spines["left"].set_linewidth(2.0)
|
||||||
stim_ax.tick_params(direction="out", width=2.0)
|
stim_ax.tick_params(direction="out", width=2.0)
|
||||||
stim_ax.text(-0.075, 1.05, "B", transform=stim_ax.transAxes, size=14)
|
#stim_ax.text(-0.1, 1.04, "B", transform=stim_ax.transAxes, size=24)
|
||||||
|
|
||||||
|
fig.tight_layout()
|
||||||
fig.savefig("sta.pdf")
|
fig.savefig("sta.pdf")
|
||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
@ -3,5 +3,6 @@ counter = 1;
|
|||||||
x = 1;
|
x = 1;
|
||||||
while counter <= n
|
while counter <= n
|
||||||
x = x * counter;
|
x = x * counter;
|
||||||
|
counter = counter + 1
|
||||||
end
|
end
|
||||||
fprintf('Faculty of %i is: %i\n', n, x)
|
fprintf('Faculty of %i is: %i\n', n, x)
|
@ -3,14 +3,12 @@ if x < 0.5
|
|||||||
disp('x is less than 0.5');
|
disp('x is less than 0.5');
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if x < 0.5
|
if x < 0.5
|
||||||
disp('x is less than 0.5!');
|
disp('x is less than 0.5!');
|
||||||
else
|
else
|
||||||
disp('x is greater than or equal to 0.5!')
|
disp('x is greater than or equal to 0.5!')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
if x < 0.5
|
if x < 0.5
|
||||||
disp('x is less than 0.5!');
|
disp('x is less than 0.5!');
|
||||||
elseif x < 0.75
|
elseif x < 0.75
|
||||||
|
@ -6,7 +6,7 @@ figure()
|
|||||||
hold on
|
hold on
|
||||||
plot(t, x, 'displayname', 'measurements')
|
plot(t, x, 'displayname', 'measurements')
|
||||||
plot(t(t > 5 & t < 6), selection, 'displayname', 'selection')
|
plot(t(t > 5 & t < 6), selection, 'displayname', 'selection')
|
||||||
xlabel('time [s]')
|
xlabel('Time [s]')
|
||||||
ylabel('intensity')
|
ylabel('Intensity')
|
||||||
legend 'show'
|
legend 'show'
|
||||||
box 'off'
|
box 'off'
|
@ -1,12 +1,10 @@
|
|||||||
>> logicalVector
|
>> logicalVector
|
||||||
Logischer Vektor y:
|
Logischer Vektor y:
|
||||||
|
|
||||||
y =
|
y =
|
||||||
1 1 1 1 0 0 0 0 0 0
|
1 1 1 1 0 0 0 0 0 0
|
||||||
|
|
||||||
Datentyp von y: logical
|
Datentyp von y: logical
|
||||||
|
|
||||||
Alle Elemente aus x, die kleiner als 5 sind:
|
Alle Elemente aus x, die kleiner als 5 sind:
|
||||||
|
|
||||||
ans =
|
ans =
|
||||||
1 2 3 4
|
1 2 3 4
|
||||||
|
@ -1,14 +1,3 @@
|
|||||||
a = (11:20); % a vector with 10 Elements
|
s = size(a) % Speicher den Rueckgabewert von size() in einer Variablen
|
||||||
fprintf('length of a: %i\n', length(a))
|
|
||||||
size_of_a = size(a); % get the size and store it in a new variable
|
|
||||||
|
|
||||||
% size_of_a is a vector itself
|
|
||||||
fprintf('number of dimensions (rank) of size_of_a: %i\n', length(size_of_a))
|
|
||||||
|
|
||||||
% get the value of the second element of size_of_a
|
|
||||||
fprintf('number of entries in the 2nd dimesion of a: %i\n', size_of_a(2))
|
|
||||||
|
|
||||||
%% Uebersichtliche Alternative?
|
|
||||||
s = size(a); % Speicher den Rueckgabewert von size() in einer Variablen
|
|
||||||
s(2) % Inhalt der zweiten Zahl, d.h. Laenge der 2. Dimension
|
s(2) % Inhalt der zweiten Zahl, d.h. Laenge der 2. Dimension
|
||||||
size(a,2) % Kurze Alternative
|
size(a,2) % Die kurze Alternative
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
>> vectorsize
|
s = 1 10
|
||||||
length of a: 10
|
ans = 10
|
||||||
number of dimensions (rank) of size_of_a: 2
|
ans = 10
|
||||||
number of entries in the 2nd dimesion of a: 10
|
|
||||||
|
@ -2,33 +2,13 @@ BASENAME=programming
|
|||||||
|
|
||||||
#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex
|
#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{images/}}
|
\graphicspath{{images/}}
|
||||||
|
|
||||||
\setcounter{page}{15}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{0}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,5 +16,21 @@
|
|||||||
|
|
||||||
\input{programming}
|
\input{programming}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Ausgabeformat: \varcode{format} ?
|
||||||
|
\item Boolescher Ausdruck: ist doch eigentlich boolescher Ausdruck!
|
||||||
|
\item Expliziter die \varcode{(a:b:c)} Notation einf\"uhren!
|
||||||
|
\item Mathematische Funktionen sin(), cos(), exp()
|
||||||
|
\item Rundungsfunktionen round(), floor(), ceil()
|
||||||
|
\item Zeitvektoren, deltat, Umrechnung Zeit und Index.
|
||||||
|
\item Matrizen erstmal 2-D und nur kurz n-D
|
||||||
|
\item Zusammenfassung von Fehlermeldungen bezueglich Matrizen und Vektoren
|
||||||
|
\item Random-walk behutsam mit einer Schleife, dann zwei Schleifen. Plus Bildchen.
|
||||||
|
\item Doppelte for-Schleife
|
||||||
|
\item File output and input (load, save, fprintf, scanf) (extra chapter?)
|
||||||
|
\item help() und doc()
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,32 +1,12 @@
|
|||||||
BASENAME=programmingstyle
|
BASENAME=programmingstyle
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{57}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{2}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -1,19 +1,25 @@
|
|||||||
\chapter{\tr{Programming style}{Programmierstil}}
|
\chapter{\tr{Programming style}{Programmierstil}}
|
||||||
|
|
||||||
|
\shortquote{Any code of your own that you haven't looked at for six or
|
||||||
|
more months might as well have been written by someone
|
||||||
|
else.}{Eagleson's law}
|
||||||
|
|
||||||
Guter Programmierstil ist keine Frage des guten Geschmacks sondern des
|
Guter Programmierstil ist keine Frage des guten Geschmacks sondern des
|
||||||
Verst\"andnisses von Programmcode und ein Baustein in dem Bestreben
|
Verst\"andnisses von Programmcode und ein Baustein in dem Bestreben
|
||||||
wissenschaftlichen Erkenntnisgewinn reproduzierbar zu
|
wissenschaftlichen Erkenntnisgewinn reproduzierbar zu
|
||||||
machen.
|
machen.
|
||||||
|
|
||||||
Programme sollten so geschrieben und strukturiert sein, dass es sowohl
|
Programme sollten so geschrieben und strukturiert sein, dass es sowohl
|
||||||
einem Au{\ss}enstehenden als auch einem selbst, nach ein paar Monaten,
|
einem Au{\ss}enstehenden als auch einem selbst --- nach ein paar
|
||||||
leicht f\"allt den Programmablauf nachzuvollziehen und zu
|
Wochen oder Monaten! --- leicht f\"allt den Programmablauf
|
||||||
verstehen. Saubere Programmierung zahlt sich aber in erster Linie
|
nachzuvollziehen und zu verstehen. Saubere Programmierung zahlt sich
|
||||||
f\"ur den Verfasser eines Programmes aus.
|
in erster Linie f\"ur einen selbst aus und macht es aber gleichzeitig
|
||||||
|
f\"ur andere Personen leichter, den Code nachzuvollziehen und zu
|
||||||
|
benutzen.
|
||||||
|
|
||||||
Guter Programmierstil greift auf unterschiedlichen Ebenen an:
|
Guter Programmierstil greift auf unterschiedlichen Ebenen an:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Die Struktur von Programmen.
|
\item Die Dateistruktur von Programmen.
|
||||||
\item Die Namensgebung von Skripten und Funktionen.
|
\item Die Namensgebung von Skripten und Funktionen.
|
||||||
\item Die Namensgebung f\"ur Variablen und Konstanten.
|
\item Die Namensgebung f\"ur Variablen und Konstanten.
|
||||||
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im
|
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im
|
||||||
@ -82,46 +88,45 @@ aktuellen Ordner nach passenden Dateien sucht (mehr Information zum
|
|||||||
(siehe Abbildung). Der \codeterm{Suchpfad} ist eine Liste von
|
(siehe Abbildung). Der \codeterm{Suchpfad} ist eine Liste von
|
||||||
Ordnern in denen \matlab{} nach Funktionen und Skripten suchen
|
Ordnern in denen \matlab{} nach Funktionen und Skripten suchen
|
||||||
soll. Die Suche nach der aufgerufenen Funktion wird dabei von oben
|
soll. Die Suche nach der aufgerufenen Funktion wird dabei von oben
|
||||||
nach unten durchgef\"uhrt. Das heisst, dass es, bei
|
nach unten durchgef\"uhrt. Das heisst, dass es bei
|
||||||
Namensgleichheit, eine Rolle spielen kann an welcher Stelle im
|
Namensgleichheit eine Rolle spielen kann an welcher Stelle im
|
||||||
Suchpfad der erste Treffer gefunden wird. Wichtig: \matlab{} sucht
|
Suchpfad der erste Treffer gefunden wird. Wichtig: \matlab{} sucht
|
||||||
nicht rekursiv! Wenn die gew\"unschte Funktion in einem Unterordner
|
nicht rekursiv! Wenn die gew\"unschte Funktion in einem Unterordner
|
||||||
des aktuellen Arbeitsverzeichnisses liegt, dieses aber nicht
|
des aktuellen Arbeitsverzeichnisses liegt, dieses aber nicht
|
||||||
explizit im Suchpfad enthalten ist, so wird die Funktion nicht
|
explizit im Suchpfad enthalten ist, so wird die Funktion nicht
|
||||||
gefunden werden.
|
gefunden.
|
||||||
|
|
||||||
\vspace{2ex}
|
\vspace{2ex}
|
||||||
\includegraphics[width=0.75\textwidth]{search_path}
|
\includegraphics[width=0.9\textwidth]{search_path}
|
||||||
\vspace{1.5ex}
|
\vspace{1.5ex}
|
||||||
|
|
||||||
Der Suchpfad kann sowohl \"uber die in der Abbildung gezeigte GUI
|
Der Suchpfad kann sowohl \"uber die Kommandozeile mit dem Kommandos
|
||||||
oder auch \"uber die Kommandozeile eingestellt werden. Die GUI
|
\code{addpath()} und \code{userpath()} als auch\"uber die in der
|
||||||
erlaubt Ordner aus dem Suchpfad zu entfernen, neue
|
Abbildung gezeigte GUI angezeigt und eingestellt werden. Die GUI
|
||||||
Ordner (optional inklusive aller Unterordner) hinzuzuf\"ugen oder
|
erlaubt Ordner aus dem Suchpfad zu entfernen, neue Ordner (optional
|
||||||
die Reihenfolge der Pfade zu ver\"andern.
|
inklusive aller Unterordner) hinzuzuf\"ugen oder die Reihenfolge der
|
||||||
|
Pfade zu ver\"andern.
|
||||||
Zum Wechseln des aktuelle Arbeitsverzeichnis wechseln wird das
|
|
||||||
Kommando \code{cd} verwendet. \code{which} zeigt an, in welchem Pfad
|
Zum Wechseln des aktuellen Arbeitsverzeichnisses wird das Kommando
|
||||||
eine bestimmte Funktion gefunden wurde. Das aktuelle
|
\code{cd} verwendet. \code{which} zeigt an, in welchem Pfad eine
|
||||||
Areitsverzeichnis wird durch den Aufruf \code{pwd} auf der
|
bestimmte Funktion gefunden wurde. Das aktuelle Areitsverzeichnis
|
||||||
Kommandozeile ausgegeben.
|
wird durch den Aufruf \code{pwd} auf der Kommandozeile ausgegeben.
|
||||||
\end{ibox}
|
\end{ibox}
|
||||||
|
|
||||||
\section{Namensgebung von Funktionen und Skripten}
|
\section{Namensgebung von Funktionen und Skripten}
|
||||||
|
|
||||||
\matlab{} sucht Funktionen und Skripte ausschlie{\ss}lich anhand des
|
\matlab{} sucht Funktionen und Skripte ausschlie{\ss}lich anhand des
|
||||||
Namens. Dabei spielt die Gro{\ss}- und Kleinschreibung eine Rolle. Das
|
Namens. Dabei spielt die Gro{\ss}- und Kleinschreibung eine Rolle. Die
|
||||||
hei{\ss}t, dass die beiden Dateien \file{test\_funktion.m} und
|
beiden Dateien \file{test\_funktion.m} und \file{Test\_Funktion.m}
|
||||||
\file{Test\_funktion.m} zwei unterschiedliche Funktionen benennen
|
zwei unterschiedliche Funktionen benennen k\"onnen. Diese Art der
|
||||||
k\"onnen. Diese Art der Variation des Namens ist nat\"urlich nicht
|
Variation des Namens ist nat\"urlich nicht sinnvoll. Sie tr\"agt keine
|
||||||
sinnvoll. Sie tr\"agt keine Information \"uber den Unterschied der
|
Information \"uber den Unterschied der beiden Funktionen. Auch sagt
|
||||||
beiden Funktionen. Auch sagt der Name nahezu nichts \"uber den Zweck
|
der Name nahezu nichts \"uber den Zweck der Funktion aus.
|
||||||
der Funktion aus.
|
|
||||||
|
|
||||||
Die Namensgebung f\"allt mitunter nicht leicht --- manchmal ist es
|
Die Namensgebung f\"allt mitunter nicht leicht --- manchmal ist es
|
||||||
sogar der schwierigste Aspekt des Programmierens! Ausdrucksstarke
|
sogar der schwierigste Aspekt des Programmierens! Ausdrucksstarke
|
||||||
Namen zu finden lohnt sich aber. Ausdrucksstark bedeutet, dass sich
|
Namen zu finden lohnt sich aber. Ausdrucksstark bedeutet, dass sich
|
||||||
aus dem Namen ein R\"uckschluss auf den Zweck ziehen lassen sollte.
|
aus dem Namen R\"uckschl\"usse auf den Zweck ziehen lassen sollte.
|
||||||
|
|
||||||
\begin{important}[Benennung von Funktionen und Skripten]
|
\begin{important}[Benennung von Funktionen und Skripten]
|
||||||
Die Namen von Funktionen und Skripten sollten m\"oglichst viel \"uber
|
Die Namen von Funktionen und Skripten sollten m\"oglichst viel \"uber
|
||||||
@ -136,10 +141,10 @@ die Namensgebung selbst keine weiteren Vorgaben. Allerdings folgt die
|
|||||||
Benennung der in \matlab{} vordefinierten Funktionen gewissen Mustern:
|
Benennung der in \matlab{} vordefinierten Funktionen gewissen Mustern:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Namen werden immer klein geschrieben.
|
\item Namen werden immer klein geschrieben.
|
||||||
\item Es werden gerne Abk\"urzungen eingesetzt (z.B. \code{xcorr}
|
\item Es werden gerne Abk\"urzungen eingesetzt (z.B. \code{xcorr()}
|
||||||
f\"ur die Kreuzkorrelation oder \code{repmat} f\"ur ``repeat matrix'')
|
f\"ur die Kreuzkorrelation oder \code{repmat()} f\"ur ``repeat matrix'')
|
||||||
\item Funktionen, die zwischen Formaten konvertieren sind immer nach
|
\item Funktionen, die zwischen Formaten konvertieren sind immer nach
|
||||||
dem Muster ``format2format'' (z.B. \code{num2str} f\"ur die
|
dem Muster ``format2format'' (z.B. \code{num2str()} f\"ur die
|
||||||
Konvertierung ``number to string'', Umwandlung eines numerischen
|
Konvertierung ``number to string'', Umwandlung eines numerischen
|
||||||
Wertes in einen Text) benannt.
|
Wertes in einen Text) benannt.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
@ -158,24 +163,24 @@ F\"ur die Bennennung von Variablen und Konstanten gelten die gleichen
|
|||||||
Regeln wie f\"ur die Namen von Funktionen und Skripten. Die Maxime von
|
Regeln wie f\"ur die Namen von Funktionen und Skripten. Die Maxime von
|
||||||
gutem Programmierstil ist: \emph{``Programmcode muss lesbar
|
gutem Programmierstil ist: \emph{``Programmcode muss lesbar
|
||||||
sein.''}. Dabei helfen gute Namen ungemein. Auch wenn es schwer
|
sein.''}. Dabei helfen gute Namen ungemein. Auch wenn es schwer
|
||||||
f\"allt passende und nicht zu lange Namen zu finden, sollte einer gute
|
f\"allt passende und trotzdem nicht zu lange Namen zu finden, sollte
|
||||||
Namensgebung ernst genommen werden.
|
einer gute Namensgebung sehr ernst genommen werden.
|
||||||
|
|
||||||
W\"ahrend die Namen von Funktionen und Skripten ihren Zweck
|
W\"ahrend die Namen von Funktionen und Skripten ihren Zweck
|
||||||
beschreiben, sollten die Namen von Variablen ihren Inhalt
|
beschreiben, sollten die Namen von Variablen ihren Inhalt
|
||||||
beschreiben. Eine Variable, die die mittlere Anzahl von
|
beschreiben. Eine Variable, die die mittlere Anzahl von
|
||||||
Aktionspotentialen speichert, k\"onnte also
|
Aktionspotentialen speichert, k\"onnte also
|
||||||
\codeterm{average\_spike\_count} hei{\ss}en. Wenn die Variable nicht
|
\varcode{average\_spike\_count} hei{\ss}en. Wenn die Variable nicht
|
||||||
nur einen sondern mehrere Werte aufnimmt, dann ist der Plural
|
nur einen sondern mehrere Werte aufnimmt, dann ist der Plural
|
||||||
angebracht (\codeterm{average\_spike\_counts}).
|
angebracht (\varcode{average\_spike\_counts}).
|
||||||
|
|
||||||
Die Laufvariablen von \code{for}-Schleifen werden oft nur \code{i},
|
Die Laufvariablen von \code{for}-Schleifen werden oft nur \varcode{i},
|
||||||
\code{j} oder \code{k} benannt und sollten aber die einzige Ausnahme
|
\varcode{j} oder \varcode{k} benannt und sollten aber die einzige Ausnahme
|
||||||
bzgl. ausdrucksstarker Namensgebung bleiben.
|
bzgl. ausdrucksstarker Namensgebung bleiben.
|
||||||
|
|
||||||
\begin{important}[Benennung von Variablen]
|
\begin{important}[Benennung von Variablen]
|
||||||
Die Namen von Variablen sollten m\"oglichst viel \"uber ihren Inhalt
|
Die Namen von Variablen sollten m\"oglichst viel \"uber ihren Inhalt
|
||||||
aussagen (\code{spike\_count} statt \code{x}). Gute Namen
|
aussagen (\varcode{spike\_count} statt \varcode{x}). Gute Namen
|
||||||
f\"ur Variablen sind die beste Dokumentation.
|
f\"ur Variablen sind die beste Dokumentation.
|
||||||
\end{important}
|
\end{important}
|
||||||
|
|
||||||
@ -223,7 +228,7 @@ end
|
|||||||
end
|
end
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
\clearpage
|
\pagebreak[4]
|
||||||
|
|
||||||
\begin{lstlisting}[label=cleancode, caption={\"Ubersichtliche Implementation des Random-walk.}]
|
\begin{lstlisting}[label=cleancode, caption={\"Ubersichtliche Implementation des Random-walk.}]
|
||||||
num_runs = 10;
|
num_runs = 10;
|
||||||
@ -248,7 +253,7 @@ Kommentarzeilen werden in \matlab{} mit dem Prozentzeichen \code{\%}
|
|||||||
gekennzeichnet. Gezielt und sparsam eingesetzte Kommentare sind f\"ur
|
gekennzeichnet. Gezielt und sparsam eingesetzte Kommentare sind f\"ur
|
||||||
das Verst\"andnis eines Programms sehr n\"utzlich. Am wichtigsten
|
das Verst\"andnis eines Programms sehr n\"utzlich. Am wichtigsten
|
||||||
sind kurze Kommentare, die den Zweck und das Ziel eines Abschnitts im
|
sind kurze Kommentare, die den Zweck und das Ziel eines Abschnitts im
|
||||||
Programm erl\"autern (z.B. \code{\% compute mean firing rate over all
|
Programm erl\"autern (z.B. \varcode{\% compute mean firing rate over all
|
||||||
trials}).
|
trials}).
|
||||||
|
|
||||||
Viele und h\"aufige Kommentare k\"onnen in der Entwicklungsphase eines
|
Viele und h\"aufige Kommentare k\"onnen in der Entwicklungsphase eines
|
||||||
@ -259,7 +264,7 @@ Zeilen sowieso weitestgehend selbsterkl\"arend sein.
|
|||||||
Die beste Dokumentation ist der Code selbst. Gut geschriebener Code
|
Die beste Dokumentation ist der Code selbst. Gut geschriebener Code
|
||||||
mit ausdrucksstarken Variablen- und Funktionsnamen ben\"otigt keine
|
mit ausdrucksstarken Variablen- und Funktionsnamen ben\"otigt keine
|
||||||
Kommentare, um den Zweck einzelner Zeilen zu erkl\"aren. z.B. ist\\
|
Kommentare, um den Zweck einzelner Zeilen zu erkl\"aren. z.B. ist\\
|
||||||
\code{ x = x + 2; \% add two to x}\\
|
\varcode{ x = x + 2; \% add two to x}\\
|
||||||
ein v\"ollig unn\"otiger Kommentar.
|
ein v\"ollig unn\"otiger Kommentar.
|
||||||
|
|
||||||
\begin{important}[Verwendung von Kommentaren]
|
\begin{important}[Verwendung von Kommentaren]
|
||||||
@ -270,21 +275,29 @@ ein v\"ollig unn\"otiger Kommentar.
|
|||||||
\item Ein falscher Kommentar ist schlimmer als gar kein Kommentar!
|
\item Ein falscher Kommentar ist schlimmer als gar kein Kommentar!
|
||||||
\item Kommentare m\"ussen gepflegt werden, sonst sind sie wertlos!
|
\item Kommentare m\"ussen gepflegt werden, sonst sind sie wertlos!
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
\widequote{Good code is its own best documentation. As you're about to add
|
||||||
|
a comment, ask yourself, ``How can I improve the code so that this
|
||||||
|
comment isn't needed?'' Improve the code and then document it to
|
||||||
|
make it even clearer.}{Steve McConnell}
|
||||||
\end{important}
|
\end{important}
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
\section{Dokumentation von Funktionen}
|
\section{Dokumentation von Funktionen}
|
||||||
|
|
||||||
Bei allen vordefinierten \matlab{} Funktionen findet sich am Anfang
|
Bei allen vordefinierten \matlab{} Funktionen findet sich am Anfang
|
||||||
eine Kommentarblock, der den Zweck der Funktion, die verschiedenen
|
eine Kommentarblock, der den Zweck der Funktion, die verschiedenen
|
||||||
M\"oglichkeiten des Funktionsaufrufs und die Argumente und
|
M\"oglichkeiten des Funktionsaufrufs und die Argumente und
|
||||||
R\"uckgabewerte beschreibt. Auch in eingenen Funktionen sind diese
|
R\"uckgabewerte beschreibt. Mit dem \code{help}- Befehl wird dieser
|
||||||
Kommentare sehr hilfreich. Siehe Listing~\ref{localfunctions} f\"ur
|
Kommentarblock angezeigt. Auch in eigenen Funktionen sind
|
||||||
ein Beispiel einer gut Dokumentierten Funktion.
|
diese Kommentare sehr wichtig. Siehe Listing~\ref{localfunctions}
|
||||||
|
f\"ur ein Beispiel einer gut dokumentierten Funktion.
|
||||||
|
|
||||||
\begin{important}[Dokumentation von Funktionen]
|
\begin{important}[Dokumentation von Funktionen]
|
||||||
Funktionen m\"ussen unbedingt kommentiert werde!
|
Funktionen m\"ussen unbedingt kommentiert werde!
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item In wenigen Zeilen kurz den Zweck der Funktion beschreiben.
|
\item In wenigen Zeilen kurz den Zweck der Funktion beschreiben.
|
||||||
|
\item Den Funktionskopf nocheinmal hinschreiben, damit
|
||||||
|
klar ist, in welcher Reihenfolge Argumente \"ubergeben werden.
|
||||||
\item F\"ur jedes Funktionsargument die Bedeutung, der erwartete
|
\item F\"ur jedes Funktionsargument die Bedeutung, der erwartete
|
||||||
Datentyp (Zahl, Vektor, Matrix, etc.), und eventuell die Einheit,
|
Datentyp (Zahl, Vektor, Matrix, etc.), und eventuell die Einheit,
|
||||||
in der die Zahlen erwartet werden (z.B. Sekunden).
|
in der die Zahlen erwartet werden (z.B. Sekunden).
|
||||||
@ -302,7 +315,7 @@ ob dieser Teil des Programms nicht in eine eigene Funktion ausgelagert
|
|||||||
werden sollte. Fast immer kann dies bejaht werden.
|
werden sollte. Fast immer kann dies bejaht werden.
|
||||||
|
|
||||||
Abschnitte nicht auszulagern f\"uhrt zu sehr langen
|
Abschnitte nicht auszulagern f\"uhrt zu sehr langen
|
||||||
\codeterm{m-Files}, die leicht un\"ubersichtlich werden. Diese Art von
|
\codeterm{m-files}, die leicht un\"ubersichtlich werden. Diese Art von
|
||||||
Code wird \codeterm{Spaghetticode} genannt. Es ist h\"ochste Zeit
|
Code wird \codeterm{Spaghetticode} genannt. Es ist h\"ochste Zeit
|
||||||
\"uber Auslagerung in Funktionen nachzudenken.
|
\"uber Auslagerung in Funktionen nachzudenken.
|
||||||
|
|
||||||
@ -318,25 +331,31 @@ Code wird \codeterm{Spaghetticode} genannt. Es ist h\"ochste Zeit
|
|||||||
|
|
||||||
\subsection{Lokale Funktionen und geschachtelte Funktionen}
|
\subsection{Lokale Funktionen und geschachtelte Funktionen}
|
||||||
|
|
||||||
Das Auslagern von Funktionalit\"at in eigene Funktionen f\"uhrt
|
Das Auslagern von Funktionalit\"at in eigene Funktionen f\"uhrt dazu,
|
||||||
dazu, dass eine F\"ulle von Dateien erzeugt wird, die die
|
dass eine F\"ulle von Dateien erzeugt wird, die die
|
||||||
\"Ubersichtlichkeit nicht unbedingt erh\"oht. Wenn die auszulagernde
|
\"Ubersichtlichkeit nicht unbedingt erh\"oht. Wenn die auszulagernde
|
||||||
Funktionalit\"at an vielen Stellen ben\"otigt wird ist es
|
Funktionalit\"at an vielen Stellen ben\"otigt wird ist es dennoch sehr
|
||||||
dennoch sinnvoll dies zu tun. Wenn nicht, dann bietet \matlab{} die
|
sinnvoll dies zu tun. Wenn Funktionen nur von einzelnen anderen
|
||||||
M\"oglichkeit sogenannte \codeterm{lokale Funktionen} oder auch
|
Funktionen verwendet werden, dann bietet \matlab{} die M\"oglichkeit
|
||||||
\codeterm{geschachtelte Funktionen} (\enterm{nested functions}) zu
|
sogenannte \codeterm[Funktion!lokale]{lokale Funktionen} oder auch
|
||||||
|
\codeterm[Funktion!geschachtelte]{geschachtelte Funktionen}
|
||||||
|
(\enterm{nested functions}) in einer einzelnen Datei zu
|
||||||
erstellen. Listing \ref{localfunctions} zeigt ein Beispiel f\"ur eine
|
erstellen. Listing \ref{localfunctions} zeigt ein Beispiel f\"ur eine
|
||||||
lokale Funktion.
|
lokale Funktion.
|
||||||
|
|
||||||
\lstinputlisting[label=localfunctions, caption={\codeterm{Lokale Funktionen} erh\"ohen die Lesbarkeit sind aber nur innerhalb der definierenden Datei verf\"ugbar.}]{calculateSines.m}
|
\pagebreak[3]
|
||||||
|
\lstinputlisting[label=localfunctions, caption={Beispiel f\"ur den
|
||||||
|
Einsatz von lokalen Funktionen.}]{calculateSines.m}
|
||||||
|
|
||||||
Lokale Funktionen existieren in der gleichen Datei und sind nur dort
|
Lokale Funktionen existieren in der gleichen Datei und sind nur dort
|
||||||
verf\"ugbar. Jede Funktion hat ihren eigenen G\"ultigkeitsbereich, das
|
verf\"ugbar. Jede Funktion hat ihren eigenen G\"ultigkeitsbereich, das
|
||||||
hei{\ss}t, dass Variablen aus den aufrufenden Funktionen nicht
|
hei{\ss}t, dass Variablen aus den aufrufenden Funktionen nicht
|
||||||
sichtbar sind. Bei sogenannten \codeterm{geschachtelten Funktionen}
|
sichtbar sind.
|
||||||
ist das anders. Diese werden innerhalb eines Funktionsk\"orpers
|
|
||||||
(zwischen den Schl\"usselworten \codeterm{function} und dem
|
Bei sogenannten \codeterm[Funktion!geschachtelte]{geschachtelten
|
||||||
\codeterm{end} definiert und k\"onnen auf alle Variablen der
|
Funktionen} ist das anders. Diese werden innerhalb eines
|
||||||
|
Funktionsk\"orpers (zwischen den Schl\"usselworten \code{function} und
|
||||||
|
dem \code{end} definiert und k\"onnen auf alle Variablen der
|
||||||
``Mutterfunktion'' zugreifen und diese auch ver\"andern. Folglich
|
``Mutterfunktion'' zugreifen und diese auch ver\"andern. Folglich
|
||||||
sollten sie nur mit Bedacht eingesetzt werden.
|
sollten sie nur mit Bedacht eingesetzt werden.
|
||||||
|
|
||||||
@ -403,8 +422,20 @@ diese sollten dann beachtet werden.
|
|||||||
|
|
||||||
Wiederholte Programmabschnitte sollten in Funktionen ausgelagert
|
Wiederholte Programmabschnitte sollten in Funktionen ausgelagert
|
||||||
werden. Wenn diese nicht von globalem Interesse sind, kann mit
|
werden. Wenn diese nicht von globalem Interesse sind, kann mit
|
||||||
\codeterm{lokalen} oder \codeterm{geschachtelten Funktionen} die
|
\codeterm[Funktion!lokale]{lokalen} oder
|
||||||
\"Ubersichtlichkeit erh\"oht werden.
|
\codeterm[Funktion!geschachtelte]{geschachtelten
|
||||||
|
Funktionen} die \"Ubersichtlichkeit erh\"oht werden.
|
||||||
|
|
||||||
|
Es lohnt sich auf den eigenen Programmierstil zu
|
||||||
|
achten!\footnote{Buchtip: Robert C. Martin: \textit{Clean Code: A
|
||||||
|
Handbook of Agile Software Craftmanship}, Prentice Hall}
|
||||||
|
|
||||||
|
\shortquote{Programs must be written for people to read, and only
|
||||||
|
incidentally for machines to execute.}{Abelson / Sussman}
|
||||||
|
|
||||||
|
\shortquote{Any fool can write code that a computer can
|
||||||
|
understand. Good programmers write code that humans can
|
||||||
|
understand.}{Martin Fowler}
|
||||||
|
|
||||||
\noindent Es lohnt sich auf den eigenen Programmierstil zu achten!\footnote{Literatur zum Programmierstil: z.B. Robert C. Martin: \textit{Clean
|
\shortquote{First, solve the problem. Then, write the code.}{John
|
||||||
Code: A Handbook of Agile Software Craftmanship}, Prentice Hall}
|
Johnson}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
load('lin_regression.mat')
|
load('lin_regression.mat')
|
||||||
|
|
||||||
ms = -1:0.5:5;
|
ms = -1:0.5:5;
|
||||||
ns = -10:1:10;
|
ns = -10:1:10;
|
||||||
|
|
||||||
|
@ -7,11 +7,8 @@ function gradient = lsqGradient(parameter, x, y)
|
|||||||
% y, vector of the corresponding measured output values
|
% y, vector of the corresponding measured output values
|
||||||
%
|
%
|
||||||
% Returns: the gradient as a vector with two elements
|
% Returns: the gradient as a vector with two elements
|
||||||
|
|
||||||
h = 1e-6; % stepsize for derivatives
|
h = 1e-6; % stepsize for derivatives
|
||||||
|
|
||||||
partial_m = (lsqError([parameter(1)+h, parameter(2)], x, y) - lsqError(parameter, x, y))/ h;
|
partial_m = (lsqError([parameter(1)+h, parameter(2)], x, y) - lsqError(parameter, x, y))/ h;
|
||||||
partial_n = (lsqError([parameter(1), parameter(2)+h], x, y) - lsqError(parameter, x, y))/ h;
|
partial_n = (lsqError([parameter(1), parameter(2)+h], x, y) - lsqError(parameter, x, y))/ h;
|
||||||
|
|
||||||
gradient = [partial_m, partial_n];
|
gradient = [partial_m, partial_n];
|
||||||
end
|
end
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=regression
|
BASENAME=regression
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES)
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{89}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{5}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -68,9 +68,9 @@ Summe k\"onnen wir genauso gut fordern, dass der \emph{mittlere} Abstand
|
|||||||
der Menge der $N$ Datenpaare $(x_i, y_i)$ gegeben die Modellvorhersagen
|
der Menge der $N$ Datenpaare $(x_i, y_i)$ gegeben die Modellvorhersagen
|
||||||
$y_i^{est}$ klein sein soll.
|
$y_i^{est}$ klein sein soll.
|
||||||
|
|
||||||
Am h\"aufigsten wird jedoch bei einem Kurvenfit der \determ{mittlere
|
Am h\"aufigsten wird jedoch bei einem Kurvenfit der \determ[mittlerer
|
||||||
quadratische Abstand} (\enterm{mean squared distance} oder
|
quadratische Abstand]{mittlere quadratische Abstand} (\enterm{mean
|
||||||
\enterm{mean squared error})
|
squared distance} oder \enterm{mean squared error})
|
||||||
\begin{equation}
|
\begin{equation}
|
||||||
\label{meansquarederror}
|
\label{meansquarederror}
|
||||||
f_{mse}(\{(x_i, y_i)\}|\{y^{est}_i\}) = \frac{1}{N} \sum_{i=1}^N (y_i - y^{est}_i)^2
|
f_{mse}(\{(x_i, y_i)\}|\{y^{est}_i\}) = \frac{1}{N} \sum_{i=1}^N (y_i - y^{est}_i)^2
|
||||||
@ -81,10 +81,11 @@ quadratischen Abst\"ande immer positiv, unabh\"angig ob die Datenwerte
|
|||||||
zus\"atzlich gro{\ss}e Abst\"ande st\"arker gewichtet.
|
zus\"atzlich gro{\ss}e Abst\"ande st\"arker gewichtet.
|
||||||
|
|
||||||
\begin{exercise}{meanSquareError.m}{}\label{mseexercise}%
|
\begin{exercise}{meanSquareError.m}{}\label{mseexercise}%
|
||||||
Schreibe eine Funktion \code{meanSquareError}, die die mittlere
|
Schreibe eine Funktion \code{meanSquareError()}, die die mittlere
|
||||||
quadratische Abweichung zwischen einem Vektor mit den beobachteten
|
quadratische Abweichung zwischen einem Vektor mit den beobachteten
|
||||||
Werten $y$ und einem Vektor mit den entsprechenden Vorhersagen
|
Werten $y$ und einem Vektor mit den entsprechenden Vorhersagen
|
||||||
$y^{est}$ berechnet.\newpage
|
$y^{est}$ berechnet.
|
||||||
|
\pagebreak[4]
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
@ -130,20 +131,21 @@ f\"ur die Zielfunktion
|
|||||||
den mittleren quadratischen Abstand der Datenpaare $(x_i, y_i)$
|
den mittleren quadratischen Abstand der Datenpaare $(x_i, y_i)$
|
||||||
gegeben die Parameterwerte $m$ und $b$ der Geradengleichung. Ziel des
|
gegeben die Parameterwerte $m$ und $b$ der Geradengleichung. Ziel des
|
||||||
Kurvenfits ist es, die Werte f\"ur $m$ und $b$ so zu optimieren, dass
|
Kurvenfits ist es, die Werte f\"ur $m$ und $b$ so zu optimieren, dass
|
||||||
der Fehler \eqnref{mseline} minimal wird.
|
der Fehler \eqnref{mseline} minimal wird (\determ{Methode der
|
||||||
|
kleinsten Quadrate}, \enterm{least square error}).
|
||||||
|
|
||||||
\begin{exercise}{lsqError.m}{}
|
\begin{exercise}{lsqError.m}{}
|
||||||
Implementiere die Zielfunktion f\"ur die Optimierung mit der
|
Implementiere die Zielfunktion f\"ur die Optimierung mit der
|
||||||
linearen Geradengleichung als Funktion \code{lsqError}.
|
linearen Geradengleichung als Funktion \code{lsqError()}.
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Die Funktion \"ubernimmt drei Argumente: Das erste Argument
|
\item Die Funktion \"ubernimmt drei Argumente: Das erste Argument
|
||||||
ist ein 2-elementiger Vektor, der die Parameter \code{m} und
|
ist ein 2-elementiger Vektor, der die Parameter \varcode{m} und
|
||||||
\code{b} enth\"alt. Das zweite ist ein Vektor mit den $x$-Werten,
|
\varcode{b} enth\"alt. Das zweite ist ein Vektor mit den $x$-Werten,
|
||||||
an denen gemessen wurde, und das dritte ein Vektor mit den
|
an denen gemessen wurde, und das dritte ein Vektor mit den
|
||||||
zugeh\"origen $y$-Werten.
|
zugeh\"origen $y$-Werten.
|
||||||
\item Die Funktion gibt als Ergebniss den Fehler als mittleren
|
\item Die Funktion gibt als Ergebniss den Fehler als mittleren
|
||||||
quadratischen Abstand \eqnref{mseline} zur\"uck.
|
quadratischen Abstand \eqnref{mseline} zur\"uck.
|
||||||
\item Die Funktion soll die Funktion \code{meanSquareError} der
|
\item Die Funktion soll die Funktion \code{meanSquareError()} der
|
||||||
vorherigen \"Ubung benutzen.
|
vorherigen \"Ubung benutzen.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
@ -160,7 +162,7 @@ $f_{cost}(m,b)$, die die beiden Variablen $m$ und $b$ auf einen
|
|||||||
Fehlerwert abbildet.
|
Fehlerwert abbildet.
|
||||||
|
|
||||||
Es gibt also f\"ur jeden Punkt in der sogenannten
|
Es gibt also f\"ur jeden Punkt in der sogenannten
|
||||||
\emph{Fehlerfl\"ache} einen Fehlerwert. In diesem Beispiel eines
|
\determ{Fehlerfl\"ache} einen Fehlerwert. In diesem Beispiel eines
|
||||||
2-dimensionalen Problems (zwei freie Parameter) kann die
|
2-dimensionalen Problems (zwei freie Parameter) kann die
|
||||||
Fehlerfl\"ache graphisch durch einen 3-d \enterm{surface-plot}
|
Fehlerfl\"ache graphisch durch einen 3-d \enterm{surface-plot}
|
||||||
dargestellt werden. Dabei werden auf der $x$- und der $y$-Achse die
|
dargestellt werden. Dabei werden auf der $x$- und der $y$-Achse die
|
||||||
@ -181,12 +183,12 @@ beiden Parameter und auf der $z$-Achse der Fehlerwert aufgetragen
|
|||||||
|
|
||||||
\begin{exercise}{errorSurface.m}{}\label{errorsurfaceexercise}%
|
\begin{exercise}{errorSurface.m}{}\label{errorsurfaceexercise}%
|
||||||
Lade den Datensatz \textit{lin\_regression.mat} in den Workspace (20
|
Lade den Datensatz \textit{lin\_regression.mat} in den Workspace (20
|
||||||
Datenpaare in den Vektoren \code{x} und \code{y}). Schreibe ein Skript
|
Datenpaare in den Vektoren \varcode{x} und \varcode{y}). Schreibe ein Skript
|
||||||
\file{errorSurface.m}, dass den Fehler, berechnet als mittleren
|
\file{errorSurface.m}, dass den Fehler, berechnet als mittleren
|
||||||
quadratischen Abstand zwischen den Daten und einer Geraden mit
|
quadratischen Abstand zwischen den Daten und einer Geraden mit
|
||||||
Steigung $m$ und $y$-Achsenabschnitt $b$, in Abh\"angigkeit von $m$
|
Steigung $m$ und $y$-Achsenabschnitt $b$, in Abh\"angigkeit von $m$
|
||||||
und $b$ als surface plot darstellt (siehe Hilfe f\"ur die
|
und $b$ als surface plot darstellt (siehe Hilfe f\"ur die
|
||||||
\code{surf} Funktion).
|
\code{surf()} Funktion).
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
An der Fehlerfl\"ache kann direkt erkannt werden, bei welcher
|
An der Fehlerfl\"ache kann direkt erkannt werden, bei welcher
|
||||||
@ -278,7 +280,7 @@ Kostenfunktion verwenden. Da die Kugel immer entlang des steilsten
|
|||||||
Gef\"alles rollt, ben\"otigen wir Information \"uber die Richtung des
|
Gef\"alles rollt, ben\"otigen wir Information \"uber die Richtung des
|
||||||
Gef\"alles an der jeweils aktuellen Position.
|
Gef\"alles an der jeweils aktuellen Position.
|
||||||
|
|
||||||
Der Gradient (Box~\ref{partialderivativebox}) der Kostenfunktion
|
Der \determ{Gradient} (Box~\ref{partialderivativebox}) der Kostenfunktion
|
||||||
\[ \nabla f_{cost}(m,b) = \left( \frac{\partial e(m,b)}{\partial m},
|
\[ \nabla f_{cost}(m,b) = \left( \frac{\partial e(m,b)}{\partial m},
|
||||||
\frac{\partial f(m,b)}{\partial b} \right) \] bzgl. der beiden
|
\frac{\partial f(m,b)}{\partial b} \right) \] bzgl. der beiden
|
||||||
Parameter $m$ und $b$ der Geradengleichung ist ein Vektor, der in
|
Parameter $m$ und $b$ der Geradengleichung ist ein Vektor, der in
|
||||||
@ -299,7 +301,7 @@ partielle Ableitung nach $m$ durch
|
|||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=0.75\columnwidth]{error_gradient}
|
\includegraphics[width=0.75\columnwidth]{error_gradient}
|
||||||
\titlecaption{Der Gradienten der Fehlerfl\"ache.}
|
\titlecaption{Gradient der Fehlerfl\"ache.}
|
||||||
{Jeder Pfeil zeigt die Richtung und die
|
{Jeder Pfeil zeigt die Richtung und die
|
||||||
Steigung f\"ur verschiedene Parameterkombination aus Steigung und
|
Steigung f\"ur verschiedene Parameterkombination aus Steigung und
|
||||||
$y$-Achsenabschnitt an. Die Kontourlinien im Hintergrund
|
$y$-Achsenabschnitt an. Die Kontourlinien im Hintergrund
|
||||||
@ -310,7 +312,7 @@ partielle Ableitung nach $m$ durch
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{exercise}{lsqGradient.m}{}\label{gradientexercise}%
|
\begin{exercise}{lsqGradient.m}{}\label{gradientexercise}%
|
||||||
Implementiere eine Funktion \code{lsqGradient}, die den
|
Implementiere eine Funktion \code{lsqGradient()}, die den
|
||||||
Parametersatz $(m, b)$ der Geradengleichung als 2-elementigen Vektor
|
Parametersatz $(m, b)$ der Geradengleichung als 2-elementigen Vektor
|
||||||
sowie die $x$- und $y$-Werte der Messdaten als Argumente
|
sowie die $x$- und $y$-Werte der Messdaten als Argumente
|
||||||
entgegennimmt und den Gradienten an dieser Stelle zur\"uckgibt.
|
entgegennimmt und den Gradienten an dieser Stelle zur\"uckgibt.
|
||||||
@ -321,17 +323,17 @@ partielle Ableitung nach $m$ durch
|
|||||||
um f\"ur jede Parameterkombination aus der Fehlerfl\"ache
|
um f\"ur jede Parameterkombination aus der Fehlerfl\"ache
|
||||||
(\"Ubung \ref{errorsurfaceexercise}) auch den Gradienten zu
|
(\"Ubung \ref{errorsurfaceexercise}) auch den Gradienten zu
|
||||||
berechnen und darzustellen. Vektoren im Raum k\"onnen mithilfe der
|
berechnen und darzustellen. Vektoren im Raum k\"onnen mithilfe der
|
||||||
Funktion \code{quiver} geplottet werden.
|
Funktion \code{quiver()} geplottet werden.
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
\section{Gradientenabstieg}
|
\section{Gradientenabstieg}
|
||||||
|
|
||||||
Zu guter Letzt muss nur noch der Gradientenabstieg implementiert
|
Zu guter Letzt muss nur noch der \determ{Gradientenabstieg} implementiert
|
||||||
werden. Die daf\"ur ben\"otigten Zutaten haben wir aus den
|
werden. Die daf\"ur ben\"otigten Zutaten haben wir aus den
|
||||||
vorangegangenen \"Ubungen bereits vorbereitet. Wir brauchen: 1. Die Fehlerfunktion
|
vorangegangenen \"Ubungen bereits vorbereitet. Wir brauchen: 1. Die Fehlerfunktion
|
||||||
(\code{meanSquareError.m}), 2. die Zielfunktion (\code{lsqError.m})
|
(\code{meanSquareError()}), 2. die Zielfunktion (\code{lsqError()})
|
||||||
und 3. den Gradienten (\code{lsqGradient.m}). Der Algorithmus
|
und 3. den Gradienten (\code{lsqGradient()}). Der Algorithmus
|
||||||
f\"ur den Abstieg lautet:
|
f\"ur den Abstieg lautet:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0,
|
\item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0,
|
||||||
@ -342,7 +344,7 @@ f\"ur den Abstieg lautet:
|
|||||||
abbrechen. Wir suchen ja das Minimum, bei dem der Gradient gleich
|
abbrechen. Wir suchen ja das Minimum, bei dem der Gradient gleich
|
||||||
Null ist. Da aus numerischen Gr\"unden der Gradient nie exakt Null
|
Null ist. Da aus numerischen Gr\"unden der Gradient nie exakt Null
|
||||||
werden wird, k\"onnen wir nur fordern, dass er hinreichend klein
|
werden wird, k\"onnen wir nur fordern, dass er hinreichend klein
|
||||||
wird (z.B. \code{norm(gradient) < 0.1}).
|
wird (z.B. \varcode{norm(gradient) < 0.1}).
|
||||||
\item \label{gradientstep} Gehe einen kleinen Schritt ($\epsilon =
|
\item \label{gradientstep} Gehe einen kleinen Schritt ($\epsilon =
|
||||||
0.01$) in die entgegensetzte Richtung des Gradienten:
|
0.01$) in die entgegensetzte Richtung des Gradienten:
|
||||||
\[p_{i+1} = p_i - \epsilon \cdot \nabla f_{cost}(m_i, b_i)\]
|
\[p_{i+1} = p_i - \epsilon \cdot \nabla f_{cost}(m_i, b_i)\]
|
||||||
@ -367,7 +369,7 @@ Punkte in Abbildung \ref{gradientdescentfig} gro{\ss}.
|
|||||||
\begin{exercise}{gradientDescent.m}{}
|
\begin{exercise}{gradientDescent.m}{}
|
||||||
Implementiere den Gradientenabstieg f\"ur das Problem der
|
Implementiere den Gradientenabstieg f\"ur das Problem der
|
||||||
Parameteranpassung der linearen Geradengleichung an die Messdaten in
|
Parameteranpassung der linearen Geradengleichung an die Messdaten in
|
||||||
der Datei \code{lin\_regression.mat}.
|
der Datei \file{lin\_regression.mat}.
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Merke Dir f\"ur jeden Schritt den Fehler zwischen
|
\item Merke Dir f\"ur jeden Schritt den Fehler zwischen
|
||||||
Modellvorhersage und Daten.
|
Modellvorhersage und Daten.
|
||||||
@ -388,7 +390,7 @@ mittlere quadratische Abstand als Kostenfunktion in der Tat ein
|
|||||||
einziges klar definiertes Minimum. Wie wir im n\"achsten Kapitel
|
einziges klar definiertes Minimum. Wie wir im n\"achsten Kapitel
|
||||||
sehen werden, kann die Position des Minimums bei Geradengleichungen
|
sehen werden, kann die Position des Minimums bei Geradengleichungen
|
||||||
sogar analytisch bestimmt werden, der Gradientenabstieg w\"are also
|
sogar analytisch bestimmt werden, der Gradientenabstieg w\"are also
|
||||||
gar nicht n\"otig \matlabfun{polyfit}.
|
gar nicht n\"otig \matlabfun{polyfit()}.
|
||||||
|
|
||||||
F\"ur Parameter, die nichtlinear in einer Funktion
|
F\"ur Parameter, die nichtlinear in einer Funktion
|
||||||
enthalten sind, wie z.B. die Rate $\lambda$ als Parameter in der
|
enthalten sind, wie z.B. die Rate $\lambda$ als Parameter in der
|
||||||
@ -401,9 +403,9 @@ Gradientenabstiegs auf vielf\"altige Weise verbessert
|
|||||||
werden. z.B. kann die Schrittweite an die St\"arke des Gradienten
|
werden. z.B. kann die Schrittweite an die St\"arke des Gradienten
|
||||||
angepasst werden. Diese numerischen Tricks sind in bereits vorhandenen
|
angepasst werden. Diese numerischen Tricks sind in bereits vorhandenen
|
||||||
Funktionen implementiert. Allgemeine Funktionen sind f\"ur beliebige
|
Funktionen implementiert. Allgemeine Funktionen sind f\"ur beliebige
|
||||||
Kostenfunktionen gemacht \matlabfun{fminsearch}, w\"ahrend spezielle
|
Kostenfunktionen gemacht \matlabfun{fminsearch()}, w\"ahrend spezielle
|
||||||
Funktionen z.B. f\"ur die Minimierung des quadratischen Abstands bei
|
Funktionen z.B. f\"ur die Minimierung des quadratischen Abstands bei
|
||||||
einem Kurvenfit angeboten werden \matlabfun{lsqcurvefit}.
|
einem Kurvenfit angeboten werden \matlabfun{lsqcurvefit()}.
|
||||||
|
|
||||||
\begin{important}[Achtung Nebenminima!]
|
\begin{important}[Achtung Nebenminima!]
|
||||||
Das Finden des globalen Minimums ist leider nur selten so leicht wie
|
Das Finden des globalen Minimums ist leider nur selten so leicht wie
|
||||||
|
@ -8,14 +8,20 @@
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
|
\hypersetup{pageanchor=false}
|
||||||
\maketitle
|
\maketitle
|
||||||
|
\hypersetup{pageanchor=true}
|
||||||
|
|
||||||
|
\frontmatter
|
||||||
|
|
||||||
\tableofcontents
|
\tableofcontents
|
||||||
\listoffigures
|
\listoffigures
|
||||||
\lstlistoflistings
|
\lstlistoflistings
|
||||||
\listofexercisefs
|
\listofexercisefs
|
||||||
\listofiboxfs
|
\listofiboxfs
|
||||||
%\listofimportantfs
|
|
||||||
|
|
||||||
|
\mainmatter
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\part{Grundlagen des Programmierens}
|
\part{Grundlagen des Programmierens}
|
||||||
@ -67,9 +73,14 @@
|
|||||||
|
|
||||||
%\chapter{Cheat-Sheet}
|
%\chapter{Cheat-Sheet}
|
||||||
|
|
||||||
\addcontentsline{toc}{chapter}{Fachbegriffe}
|
\backmatter
|
||||||
|
|
||||||
|
%%%% indices: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
\printindex[term]
|
\printindex[term]
|
||||||
\addcontentsline{toc}{chapter}{Code}
|
|
||||||
|
\printindex[enterm]
|
||||||
|
|
||||||
|
%\setindexprenote{Some explanations.}
|
||||||
\printindex[code]
|
\printindex[code]
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
x = randn(100, 1); % generate some data
|
x = randn(100, 1); % generate some data
|
||||||
db1=2;
|
|
||||||
db2 = 0.5;
|
bins1 = -4:2:4; % large bins
|
||||||
bins1 = -4:db1:4; % large bins
|
bins2 = -4:0.5:4; % small bins
|
||||||
bins2 = -4:db2:4; % small bins
|
|
||||||
[h1,b1] = hist(x,bins1);
|
[h1,b1] = hist(x,bins1);
|
||||||
[h2,b2] = hist(x,bins2);
|
[h2,b2] = hist(x,bins2);
|
||||||
|
|
||||||
|
@ -12,16 +12,15 @@ hold off
|
|||||||
|
|
||||||
% compute integral between x1 and x2:
|
% compute integral between x1 and x2:
|
||||||
P = sum(p((x>=x1)&(x<x2)))*dx;
|
P = sum(p((x>=x1)&(x<x2)))*dx;
|
||||||
fprintf( 'The integral between %.2g and %.2g is %.3g\n', x1, x2, P );
|
fprintf( 'Integral between %.2g and %.2g: %.3g\n', x1, x2, P );
|
||||||
|
|
||||||
% draw random numbers:
|
% draw random numbers:
|
||||||
r = randn( 10000, 1 );
|
r = randn( 10000, 1 );
|
||||||
|
|
||||||
% check P:
|
% check P:
|
||||||
Pr = sum((r>=x1)&(r<x2))/length(r);
|
Pr = sum((r>=x1)&(r<x2))/length(r);
|
||||||
fprintf( 'The probability of getting a number between %.2g and %.2g is %.3g\n', x1, x2, Pr );
|
fprintf( 'Probability of a number between %.2g and %.2g: %.3g\n', x1, x2, Pr );
|
||||||
|
|
||||||
% infinite integral:
|
% infinite integral:
|
||||||
P = sum(p)*dx;
|
P = sum(p)*dx;
|
||||||
fprintf( 'The integral between -infinity and +infinity is %.3g\n', P );
|
fprintf( 'Integral between -infinity and +infinity: %.3g\n', P );
|
||||||
fprintf( 'I.e. the probability to get any number is %.3g\n', P );
|
|
||||||
|
@ -1,32 +1,12 @@
|
|||||||
BASENAME=statistics
|
BASENAME=statistics
|
||||||
|
|
||||||
PYFILES=$(wildcard *.py)
|
|
||||||
PYPDFFILES=$(PYFILES:.py=.pdf)
|
|
||||||
|
|
||||||
all : pdf
|
all : pdf
|
||||||
|
|
||||||
# script:
|
include ../../chapter.mk
|
||||||
pdf : $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) ../../header.tex
|
|
||||||
CHAPTER=$$(( $$(sed -n -e '/contentsline {chapter}/{s/.*numberline {\([0123456789]*\)}.*/\1/; p}' $(BASENAME).aux) - 1 )); \
|
|
||||||
PAGE=$$(sed -n -e '/contentsline {chapter}/{s/.*numberline {.*}.*}{\(.*\)}{chapter.*/\1/; p}' $(BASENAME).aux); \
|
|
||||||
sed -i -e "s/setcounter{page}{.*}/setcounter{page}{$$PAGE}/; s/setcounter{chapter}{.*}/setcounter{chapter}{$$CHAPTER}/" $(BASENAME)-chapter.tex
|
|
||||||
pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true
|
|
||||||
|
|
||||||
$(PYPDFFILES) : %.pdf : %.py
|
|
||||||
python $<
|
|
||||||
|
|
||||||
clean :
|
# script:
|
||||||
rm -f *~
|
pdf : chapter
|
||||||
rm -f $(BASENAME).aux $(BASENAME).log
|
|
||||||
rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out
|
|
||||||
rm -f $(PYPDFFILES) $(GPTTEXFILES)
|
|
||||||
|
|
||||||
cleanall : clean
|
|
||||||
rm -f $(BASENAME)-chapter.pdf
|
|
||||||
|
|
||||||
watchpdf :
|
|
||||||
while true; do ! make -q pdf && make pdf; sleep 0.5; done
|
|
||||||
|
|
||||||
|
clean : cleanchapter
|
||||||
|
|
||||||
|
cleanall : clean cleanchapter
|
||||||
|
@ -5,7 +5,7 @@ rng = np.random.RandomState(981)
|
|||||||
x = rng.randn( 40, 10 )
|
x = rng.randn( 40, 10 )
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,4) )
|
fig = plt.figure( figsize=(6,3.4) )
|
||||||
ax = fig.add_subplot( 1, 1, 1 )
|
ax = fig.add_subplot( 1, 1, 1 )
|
||||||
ax.spines['right'].set_visible(False)
|
ax.spines['right'].set_visible(False)
|
||||||
ax.spines['top'].set_visible(False)
|
ax.spines['top'].set_visible(False)
|
||||||
|
@ -8,7 +8,7 @@ x1=0.0
|
|||||||
x2=1.0
|
x2=1.0
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,3.8) )
|
fig = plt.figure( figsize=(6,3.4) )
|
||||||
ax = fig.add_subplot( 1, 1, 1 )
|
ax = fig.add_subplot( 1, 1, 1 )
|
||||||
ax.spines['right'].set_visible(False)
|
ax.spines['right'].set_visible(False)
|
||||||
ax.spines['top'].set_visible(False)
|
ax.spines['top'].set_visible(False)
|
||||||
|
@ -7,7 +7,7 @@ g = np.exp(-0.5*x*x)/np.sqrt(2.0*np.pi)
|
|||||||
q = [ -0.67488, 0.0, 0.67488 ]
|
q = [ -0.67488, 0.0, 0.67488 ]
|
||||||
|
|
||||||
plt.xkcd()
|
plt.xkcd()
|
||||||
fig = plt.figure( figsize=(6,4) )
|
fig = plt.figure( figsize=(6,3.4) )
|
||||||
ax = fig.add_subplot( 1, 1, 1 )
|
ax = fig.add_subplot( 1, 1, 1 )
|
||||||
ax.spines['right'].set_visible(False)
|
ax.spines['right'].set_visible(False)
|
||||||
ax.spines['top'].set_visible(False)
|
ax.spines['top'].set_visible(False)
|
||||||
|
@ -5,8 +5,10 @@
|
|||||||
\lstset{inputpath=../code}
|
\lstset{inputpath=../code}
|
||||||
\graphicspath{{figures/}}
|
\graphicspath{{figures/}}
|
||||||
|
|
||||||
\setcounter{page}{69}
|
\typein[\pagenumber]{Number of first page}
|
||||||
\setcounter{chapter}{3}
|
\typein[\chapternumber]{Chapter number}
|
||||||
|
\setcounter{page}{\pagenumber}
|
||||||
|
\setcounter{chapter}{\chapternumber}
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
@ -14,6 +16,13 @@
|
|||||||
|
|
||||||
\input{statistics}
|
\input{statistics}
|
||||||
|
|
||||||
|
\section{TODO}
|
||||||
|
\begin{itemize}
|
||||||
|
\item Proper introduction to probabilities and densities first!
|
||||||
|
\item Cumulative propability
|
||||||
|
\item Kernel Histogramms (important for convolved PSTH)!
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,17 +34,17 @@ der Daten eingesetzt:
|
|||||||
nicht unbedingt identsich mit dem Modus.}
|
nicht unbedingt identsich mit dem Modus.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Der Modus ist der h\"aufigste Wert, d.h. die Position des Maximums
|
Der \determ{Modus} ist der h\"aufigste Wert, d.h. die Position des Maximums
|
||||||
einer Wahrscheinlichkeitsverteilung.
|
einer Wahrscheinlichkeitsverteilung.
|
||||||
|
|
||||||
Der Median teilt eine Liste von Messwerten so in zwei H\"alften, dass
|
Der \determ{Median} teilt eine Liste von Messwerten so in zwei H\"alften, dass
|
||||||
die eine H\"alfte der Daten nicht gr\"o{\ss}er und die andere H\"alfte
|
die eine H\"alfte der Daten nicht gr\"o{\ss}er und die andere H\"alfte
|
||||||
nicht kleiner als der Median ist (\figref{medianfig}).
|
nicht kleiner als der Median ist (\figref{medianfig}).
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\begin{exercise}{mymedian.m}{}
|
\begin{exercise}{mymedian.m}{}
|
||||||
\tr{Write a function \code{mymedian} that computes the median of a vector.}
|
\tr{Write a function \code{mymedian()} that computes the median of a vector.}
|
||||||
{Schreibe eine Funktion \code{mymedian}, die den Median eines Vektors zur\"uckgibt.}
|
{Schreibe eine Funktion \code{mymedian()}, die den Median eines Vektors zur\"uckgibt.}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
\matlab{} stellt die Funktion \code{median()} zur Berechnung des Medians bereit.
|
\matlab{} stellt die Funktion \code{median()} zur Berechnung des Medians bereit.
|
||||||
@ -55,22 +55,23 @@ nicht kleiner als der Median ist (\figref{medianfig}).
|
|||||||
returns a median above which are the same number of data than
|
returns a median above which are the same number of data than
|
||||||
below. In particular the script should test data vectors of
|
below. In particular the script should test data vectors of
|
||||||
different length.} {Schreibe ein Skript, das testet ob die
|
different length.} {Schreibe ein Skript, das testet ob die
|
||||||
\code{mymedian} Funktion wirklich die Zahl zur\"uckgibt, \"uber
|
\code{mymedian()} Funktion wirklich die Zahl zur\"uckgibt, \"uber
|
||||||
der genauso viele Datenwerte liegen wie darunter. Das Skript sollte
|
der genauso viele Datenwerte liegen wie darunter. Das Skript sollte
|
||||||
insbesondere verschieden lange Datenvektoren testen.}
|
insbesondere verschieden lange Datenvektoren testen.}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
Eine Wahrscheinlichkeitsverteilung kann weiter durch die Position
|
|
||||||
ihrere Quartile charakterisiert werden. Zwischen den Quartilen liegen
|
|
||||||
jeweils 25\,\% der Daten (\figref{quartilefig}). Perzentile erlauben
|
|
||||||
eine feinere Einteilung. Das 3. Quartil ist das 75. Perzentil, da
|
|
||||||
75\,\% der Daten unterhalb des 3. Quartils liegen.
|
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{quartile}
|
\includegraphics[width=1\textwidth]{quartile}
|
||||||
\titlecaption{\label{quartilefig} Median und Quartile einer Normalverteilung.}{}
|
\titlecaption{\label{quartilefig} Median und Quartile einer Normalverteilung.}{}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
|
Eine Wahrscheinlichkeitsverteilung kann weiter durch die Position
|
||||||
|
ihrere \determ[Quartil]{Quartile} charakterisiert werden. Zwischen den
|
||||||
|
Quartilen liegen jeweils 25\,\% der Daten
|
||||||
|
(\figref{quartilefig}). Perzentile erlauben eine feinere
|
||||||
|
Einteilung. Das 3. Quartil ist das 75. Perzentil, da 75\,\% der Daten
|
||||||
|
unterhalb des 3. Quartils liegen.
|
||||||
|
|
||||||
% \begin{definition}[\tr{quartile}{Quartile}]
|
% \begin{definition}[\tr{quartile}{Quartile}]
|
||||||
% Die Quartile Q1, Q2 und Q3 unterteilen die Daten in vier gleich
|
% Die Quartile Q1, Q2 und Q3 unterteilen die Daten in vier gleich
|
||||||
% gro{\ss}e Gruppen, die jeweils ein Viertel der Daten enthalten.
|
% gro{\ss}e Gruppen, die jeweils ein Viertel der Daten enthalten.
|
||||||
@ -90,11 +91,11 @@ eine feinere Einteilung. Das 3. Quartil ist das 75. Perzentil, da
|
|||||||
normalverteilte Zufallszahlen.}
|
normalverteilte Zufallszahlen.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Box-Whisker Plots sind eine h\"aufig verwendete Darstellung um die
|
\determ{Box-Whisker Plots} sind eine h\"aufig verwendete Darstellung
|
||||||
Verteilung unimodaler Daten zu visualisieren und vergleichbar zu
|
um die Verteilung unimodaler Daten zu visualisieren und vergleichbar
|
||||||
machen mit anderen Daten. Dabei wird um den Median eine Box vom 1. zum
|
zu machen mit anderen Daten. Dabei wird um den Median eine Box vom
|
||||||
3. Quartil gezeichnet. Die Whiskers deuten den minimalen und den
|
1. zum 3. Quartil gezeichnet. Die Whiskers deuten den minimalen und
|
||||||
maximalen Datenwert an (\figref{boxwhiskerfig}).
|
den maximalen Datenwert an (\figref{boxwhiskerfig}).
|
||||||
|
|
||||||
\begin{exercise}{boxwhisker.m}{}
|
\begin{exercise}{boxwhisker.m}{}
|
||||||
\tr{Generate eine $40 \times 10$ matrix of random numbers and
|
\tr{Generate eine $40 \times 10$ matrix of random numbers and
|
||||||
@ -111,25 +112,12 @@ maximalen Datenwert an (\figref{boxwhiskerfig}).
|
|||||||
|
|
||||||
\section{\tr{Histogram}{Histogramm}}
|
\section{\tr{Histogram}{Histogramm}}
|
||||||
|
|
||||||
Histogramme z\"ahlen die H\"aufigkeit $n_i$ des Auftretens von
|
\determ[Histogramm]{Histogramme} z\"ahlen die H\"aufigkeit $n_i$ des
|
||||||
$N=\sum_{i=1}^M n_i$ Messwerten in $M$ Messbereichsklassen $i$ (Bins).
|
Auftretens von $N=\sum_{i=1}^M n_i$ Messwerten in $M$
|
||||||
Die Klassen unterteilen den Wertebereich meist in angrenzende und
|
Messbereichsklassen $i$ (Bins). Die Klassen unterteilen den
|
||||||
gleich gro{\ss}e Intervalle. Histogramme k\"onnen verwendet werden, um die
|
Wertebereich meist in angrenzende und gleich gro{\ss}e Intervalle.
|
||||||
Wahrscheinlichkeitsverteilung der Messwerte abzusch\"atzen.
|
Histogramme k\"onnen verwendet werden, um die
|
||||||
|
\determ{Wahrscheinlichkeitsverteilung} der Messwerte abzusch\"atzen.
|
||||||
\begin{exercise}{rollthedie.m}{}
|
|
||||||
\tr{Write a function that simulates rolling a die $n$ times.}
|
|
||||||
{Schreibe eine Funktion, die das $n$-malige W\"urfeln mit einem W\"urfel simuliert.}
|
|
||||||
\end{exercise}
|
|
||||||
|
|
||||||
\begin{exercise}{diehistograms.m}{}
|
|
||||||
\tr{Plot histograms from rolling the die 20, 100, 1000 times. Use
|
|
||||||
the plain hist(x) function, force 6 bins via hist( x, 6 ), and set
|
|
||||||
meaningfull bins positions.} {Plotte Histogramme von 20, 100, und
|
|
||||||
1000-mal w\"urfeln. Benutze \code{hist(x)}, erzwinge sechs Bins
|
|
||||||
mit \code{hist(x,6)}, oder setze selbst sinnvolle Bins. Normiere
|
|
||||||
anschliessend das Histogram auf geeignete Weise.}
|
|
||||||
\end{exercise}
|
|
||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{diehistograms}
|
\includegraphics[width=1\textwidth]{diehistograms}
|
||||||
@ -141,7 +129,6 @@ Wahrscheinlichkeitsverteilung der Messwerte abzusch\"atzen.
|
|||||||
vergleichbar.}
|
vergleichbar.}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\newpage
|
|
||||||
Bei ganzzahligen Messdaten (z.B. die Augenzahl eines W\"urfels oder
|
Bei ganzzahligen Messdaten (z.B. die Augenzahl eines W\"urfels oder
|
||||||
die Anzahl von Aktionspotentialen in einem bestimmten Zeitfenster)
|
die Anzahl von Aktionspotentialen in einem bestimmten Zeitfenster)
|
||||||
kann f\"ur jede auftretende Zahl eine Klasse definiert werden. Damit
|
kann f\"ur jede auftretende Zahl eine Klasse definiert werden. Damit
|
||||||
@ -152,6 +139,18 @@ Histogrammbalken gibt dann die Wahrscheinlichkeit $P(x_i)$ des
|
|||||||
Auftretens der Gr\"o{\ss}e $x_i$ in der $i$-ten Klasse an
|
Auftretens der Gr\"o{\ss}e $x_i$ in der $i$-ten Klasse an
|
||||||
\[ P_i = \frac{n_i}{N} = \frac{n_i}{\sum_{i=1}^M n_i} \; . \]
|
\[ P_i = \frac{n_i}{N} = \frac{n_i}{\sum_{i=1}^M n_i} \; . \]
|
||||||
|
|
||||||
|
\begin{exercise}{rollthedie.m}{}
|
||||||
|
\tr{Write a function that simulates rolling a die $n$ times.}
|
||||||
|
{Schreibe eine Funktion, die das $n$-malige W\"urfeln mit einem W\"urfel simuliert.}
|
||||||
|
\end{exercise}
|
||||||
|
|
||||||
|
\begin{exercise}{diehistograms.m}{}
|
||||||
|
Plotte Histogramme von 20, 100, und 1000-mal W\"urfeln. Benutze
|
||||||
|
\code[hist()]{hist(x)}, erzwinge sechs Bins mit
|
||||||
|
\code[hist()]{hist(x,6)}, oder setze selbst sinnvolle Bins. Normiere
|
||||||
|
anschliessend das Histogram.
|
||||||
|
\end{exercise}
|
||||||
|
|
||||||
|
|
||||||
\section{\tr{Probability density function}{Wahrscheinlichkeitsdichte}}
|
\section{\tr{Probability density function}{Wahrscheinlichkeitsdichte}}
|
||||||
|
|
||||||
@ -171,7 +170,7 @@ Im Grenzwert zu sehr kleinen Bereichen $\Delta x$ ist die Wahrscheinlichkeit
|
|||||||
eines Wertes $x$ zwischen $x_0$ und $x_0+\Delta x$
|
eines Wertes $x$ zwischen $x_0$ und $x_0+\Delta x$
|
||||||
\[ P(x_0<x<x_0+\Delta x) \approx p(x) \cdot \Delta x \; . \]
|
\[ P(x_0<x<x_0+\Delta x) \approx p(x) \cdot \Delta x \; . \]
|
||||||
Die Gr\"o{\ss}e $p(x)$ ist eine sogenannte
|
Die Gr\"o{\ss}e $p(x)$ ist eine sogenannte
|
||||||
``Wahrscheinlichkeitsdichte''. Sie ist keine einheitenlose
|
\determ{Wahrscheinlichkeitsdichte}. Sie ist keine einheitenlose
|
||||||
Wahrscheinlichkeit mit Werten zwischen Null und Eins, sondern kann
|
Wahrscheinlichkeit mit Werten zwischen Null und Eins, sondern kann
|
||||||
jeden positiven Wert annehmen und hat als Einheit den Kehrwert der
|
jeden positiven Wert annehmen und hat als Einheit den Kehrwert der
|
||||||
Einheit von $x$.
|
Einheit von $x$.
|
||||||
@ -190,19 +189,21 @@ Da die Wahrscheinlichkeit irgendeines Wertes $x$ Eins ergeben muss gilt die Norm
|
|||||||
\label{pdfnorm}
|
\label{pdfnorm}
|
||||||
P(-\infty < x < \infty) = \int\limits_{-\infty}^{+\infty} p(x) \, dx = 1 \; .
|
P(-\infty < x < \infty) = \int\limits_{-\infty}^{+\infty} p(x) \, dx = 1 \; .
|
||||||
\end{equation}
|
\end{equation}
|
||||||
|
|
||||||
|
\pagebreak[2]
|
||||||
Die gesamte Funktion $p(x)$, die jedem Wert $x$ einen
|
Die gesamte Funktion $p(x)$, die jedem Wert $x$ einen
|
||||||
Wahrscheinlichkeitsdichte zuordnet wir auch
|
Wahrscheinlichkeitsdichte zuordnet wir auch
|
||||||
Wahrscheinlichkeitsdichtefunktion (``probability density function'',
|
\determ{Wahrscheinlichkeitsdichtefunktion} (\enterm{probability
|
||||||
``pdf'', oder kurz ``density'') genannt. Die bekannteste
|
density function}, \enterm[pdf|see{probability density
|
||||||
Wahrscheinlichkeitsdichtefunktion ist die der Normalverteilung
|
function}]{pdf}, oder kurz \enterm[density|see{probability density
|
||||||
|
function}]{density}) genannt. Die bekannteste
|
||||||
|
Wahrscheinlichkeitsdichtefunktion ist die der \determ{Normalverteilung}
|
||||||
\[ p_g(x) =
|
\[ p_g(x) =
|
||||||
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
|
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
|
||||||
--- die Gau{\ss}sche-Glockenkurve mit Mittelwert $\mu$ und
|
--- die \determ{Gau{\ss}sche-Glockenkurve} mit Mittelwert $\mu$ und
|
||||||
Standardabweichung $\sigma$.
|
Standardabweichung $\sigma$.
|
||||||
|
|
||||||
\newpage
|
|
||||||
\begin{exercise}{gaussianpdf.m}{gaussianpdf.out}
|
\begin{exercise}{gaussianpdf.m}{gaussianpdf.out}
|
||||||
\vspace{-3ex}
|
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Plotte die Wahrscheinlichkeitsdichte der Normalverteilung $p_g(x)$.
|
\item Plotte die Wahrscheinlichkeitsdichte der Normalverteilung $p_g(x)$.
|
||||||
\item Berechne f\"ur die Normalverteilung mit Mittelwert Null und
|
\item Berechne f\"ur die Normalverteilung mit Mittelwert Null und
|
||||||
@ -217,13 +218,13 @@ Standardabweichung $\sigma$.
|
|||||||
|
|
||||||
\begin{figure}[t]
|
\begin{figure}[t]
|
||||||
\includegraphics[width=1\textwidth]{pdfhistogram}
|
\includegraphics[width=1\textwidth]{pdfhistogram}
|
||||||
\titlecaption{\label{pdfhistogramfig} Histogramme mit verschiednenen
|
\titlecaption{\label{pdfhistogramfig} Histogramme mit verschiedenen
|
||||||
Klassenbreiten von normalverteilten Messwerten.}{Links: Die H\"ohe
|
Klassenbreiten von normalverteilten Messwerten.}{Links: Die H\"ohe
|
||||||
des absoluten Histogramms h\"angt von der Klassenbreite
|
des absoluten Histogramms h\"angt von der Klassenbreite
|
||||||
ab. Rechts: Bei auf das Integral normierten Histogrammen werden
|
ab. Rechts: Bei auf das Integral normierten Histogrammen werden
|
||||||
auch unterschiedliche Klassenbreiten untereinander vergleichbar
|
auch unterschiedliche Klassenbreiten untereinander vergleichbar
|
||||||
und auch mit der theoretischen Wahrschinlichkeitsdichtefunktion
|
und auch mit der theoretischen Wahrschinlichkeitsdichtefunktion
|
||||||
(blau).}}
|
(blau).}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\begin{exercise}{gaussianbins.m}{}
|
\begin{exercise}{gaussianbins.m}{}
|
||||||
@ -233,6 +234,7 @@ Standardabweichung $\sigma$.
|
|||||||
unterschiedlichen Klassenbreiten. Was f\"allt auf?}
|
unterschiedlichen Klassenbreiten. Was f\"allt auf?}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
|
|
||||||
|
\pagebreak[2]
|
||||||
Damit Histogramme von reellen Messwerten trotz unterschiedlicher
|
Damit Histogramme von reellen Messwerten trotz unterschiedlicher
|
||||||
Anzahl von Messungen und unterschiedlicher Klassenbreiten
|
Anzahl von Messungen und unterschiedlicher Klassenbreiten
|
||||||
untereinander vergleichbar werden und mit bekannten
|
untereinander vergleichbar werden und mit bekannten
|
||||||
@ -251,6 +253,7 @@ und das normierte Histogramm hat die H\"ohe
|
|||||||
Es muss also nicht nur durch die Summe, sondern auch durch die Breite
|
Es muss also nicht nur durch die Summe, sondern auch durch die Breite
|
||||||
$\Delta x$ der Klassen geteilt werden (\figref{pdfhistogramfig}).
|
$\Delta x$ der Klassen geteilt werden (\figref{pdfhistogramfig}).
|
||||||
|
|
||||||
|
\pagebreak[4]
|
||||||
\begin{exercise}{gaussianbinsnorm.m}{}
|
\begin{exercise}{gaussianbinsnorm.m}{}
|
||||||
Normiere das Histogramm der vorherigen \"Ubung zu einer Wahrscheinlichkeitsdichte.
|
Normiere das Histogramm der vorherigen \"Ubung zu einer Wahrscheinlichkeitsdichte.
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
@ -266,13 +269,13 @@ $\Delta x$ der Klassen geteilt werden (\figref{pdfhistogramfig}).
|
|||||||
Bisher haben wir Eigenschaften einer einzelnen Me{\ss}gr\"o{\ss}e
|
Bisher haben wir Eigenschaften einer einzelnen Me{\ss}gr\"o{\ss}e
|
||||||
angeschaut. Bei mehreren Me{\ss}gr\"o{\ss}en, kann nach
|
angeschaut. Bei mehreren Me{\ss}gr\"o{\ss}en, kann nach
|
||||||
Abh\"angigkeiten zwischen den beiden Gr\"o{\ss}en gefragt werden. Der
|
Abh\"angigkeiten zwischen den beiden Gr\"o{\ss}en gefragt werden. Der
|
||||||
Korrelations\-koeffizient
|
\determ[Korrelationskoeffizient]{Korrelations\-koeffizient}
|
||||||
\[ r_{x,y} = \frac{Cov(x,y)}{\sigma_x \sigma_y} = \frac{\langle
|
\[ r_{x,y} = \frac{Cov(x,y)}{\sigma_x \sigma_y} = \frac{\langle
|
||||||
(x-\langle x \rangle)(y-\langle y \rangle) \rangle}{\sqrt{\langle
|
(x-\langle x \rangle)(y-\langle y \rangle) \rangle}{\sqrt{\langle
|
||||||
(x-\langle x \rangle)^2} \rangle \sqrt{\langle (y-\langle y
|
(x-\langle x \rangle)^2} \rangle \sqrt{\langle (y-\langle y
|
||||||
\rangle)^2} \rangle} \]
|
\rangle)^2} \rangle} \]
|
||||||
quantifiziert einfache lineare Zusammenh\"ange \matlabfun{corr}. Der
|
quantifiziert einfache lineare Zusammenh\"ange \matlabfun{corr()}. Der
|
||||||
Korrelationskoeffizient ist die Covarianz normiert durch die
|
Korrelationskoeffizient ist die \determ{Kovarianz} normiert durch die
|
||||||
Standardabweichungen. Perfekt korrelierte Variablen ergeben einen
|
Standardabweichungen. Perfekt korrelierte Variablen ergeben einen
|
||||||
Korrelationskoeffizienten von $+1$, antikorrelierte Daten einen
|
Korrelationskoeffizienten von $+1$, antikorrelierte Daten einen
|
||||||
Korrelationskoeffizienten von $-1$ und nicht korrelierte Daten einen
|
Korrelationskoeffizienten von $-1$ und nicht korrelierte Daten einen
|
||||||
@ -283,7 +286,7 @@ nur unzureichend oder \"uberhaupt nicht erfasst (\figref{nonlincorrelationfig}).
|
|||||||
|
|
||||||
\begin{figure}[tp]
|
\begin{figure}[tp]
|
||||||
\includegraphics[width=1\textwidth]{nonlincorrelation}
|
\includegraphics[width=1\textwidth]{nonlincorrelation}
|
||||||
\titlecaption{\label{nonlincorrelationfig} Korrelationen von
|
\titlecaption{\label{nonlincorrelationfig} Korrelationen bei
|
||||||
nichtlineare Zusammenh\"angen.}{Der Korrelationskoeffizienten
|
nichtlineare Zusammenh\"angen.}{Der Korrelationskoeffizienten
|
||||||
erfasst nur lineare Zusammenh\"ange. Sowohl die quadratische
|
erfasst nur lineare Zusammenh\"ange. Sowohl die quadratische
|
||||||
Abh\"angigkeit (links) als auch eine Rauschkorrelation (rechts),
|
Abh\"angigkeit (links) als auch eine Rauschkorrelation (rechts),
|
||||||
|
Reference in New Issue
Block a user