Improved indices. Added optional parameter for index to *term* macros.
This commit is contained in:
parent
3d4d778bdd
commit
993ab5d8e7
2
Makefile
2
Makefile
@ -20,7 +20,7 @@ index :
|
||||
pdflatex -interaction=scrollmode $(BASENAME).tex | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex $(BASENAME).tex || true
|
||||
|
||||
clean :
|
||||
rm -f *~ $(BASENAME).aux $(BASENAME).log $(BASENAME).out $(BASENAME).toc $(BASENAME).lo? $(BASENAME).idx $(BASENAME)-term.i* $(BASENAME)-code.i*
|
||||
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
|
||||
|
||||
cleanall : clean
|
||||
|
@ -186,7 +186,7 @@ Bestimme die Signifikanz eines Korrelationskoeffizienten.
|
||||
\item Berechne den Korrelationskoeffizient dieser Datenpaare.
|
||||
\item Generiere die Verteilung der Nullhypothese ``unkorrelierte
|
||||
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.
|
||||
\item Bestimme aus den Nullhypothesendaten das 95\,\%-Perzentil und
|
||||
vergleiche es mit dem tats\"achlichen Korrelationskoeffizienten.
|
||||
|
@ -86,7 +86,7 @@ sigma = 2.3;
|
||||
y = randn(100, 1)*sigma + mu;
|
||||
\end{lstlisting}
|
||||
|
||||
Das gleiche Prinzip ist manchmal auch sinnvoll f\"ur \code{zeros} oder \code{ones}:
|
||||
Das gleiche Prinzip ist manchmal auch sinnvoll f\"ur \code{zeros()} oder \code{ones()}:
|
||||
\begin{lstlisting}[caption={Skalierung von zeros und ones}]
|
||||
x = -1:0.01:2; % Vektor mit x-Werten
|
||||
plot(x, exp(-x.*x));
|
||||
@ -141,7 +141,7 @@ Meistens sollten Histogramme normiert werden, damit sie vergleichbar
|
||||
mit anderen Histogrammen oder mit theoretischen
|
||||
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}]
|
||||
x = randn(100, 1); % irgendwelche reellwertige Daten
|
||||
histogram(x, 'Normalization', 'pdf');
|
||||
|
15
header.tex
15
header.tex
@ -27,7 +27,8 @@
|
||||
\usepackage[makeindex]{splitidx}
|
||||
\makeindex
|
||||
\newindex[Fachbegriffe]{term}
|
||||
\newindex[Code]{code}
|
||||
\newindex[Englische Fachbegriffe]{enterm}
|
||||
\newindex[MATLAB Code]{code}
|
||||
|
||||
%%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro
|
||||
@ -189,9 +190,10 @@
|
||||
\newcommand{\koZ}{\mathds{C}}
|
||||
|
||||
%%%%% english, german, code and file terms: %%%%%%%%%%%%%%%
|
||||
\newcommand{\enterm}[1]{``#1''\protect\sindex[term]{#1}}
|
||||
\newcommand{\determ}[1]{\textit{#1}\protect\sindex[term]{#1}}
|
||||
\newcommand{\codeterm}[1]{\textit{#1}\protect\sindex[term]{#1}}
|
||||
\usepackage{ifthen}
|
||||
\newcommand{\enterm}[2][]{``#2''\ifthenelse{\equal{#1}{}}{\protect\sindex[enterm]{#2}}{\protect\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}}
|
||||
|
||||
%%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
@ -203,9 +205,9 @@
|
||||
%%%%% code/matlab commands: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\usepackage{textcomp}
|
||||
\newcommand{\varcode}[1]{\setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1}}}
|
||||
\newcommand{\code}[1]{\varcode{#1}\sindex[code]{#1}}
|
||||
\newcommand{\code}[2][]{\varcode{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[code]{#2}}{\protect\sindex[code]{#1}}}
|
||||
\newcommand{\matlab}{\texorpdfstring{MATLAB$^{\copyright}$}{MATLAB}}
|
||||
\newcommand{\matlabfun}[1]{(\tr{\matlab{}-function}{\matlab-Funktion} \setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1}})\sindex[code]{#1}}
|
||||
\newcommand{\matlabfun}[2][]{(\tr{\matlab-function}{\matlab-Funktion} \setlength{\fboxsep}{0.5ex}\colorbox{codeback}{\texttt{#1}})\ifthenelse{\equal{#1}{}}{\protect\sindex[code]{#2}}{\protect\sindex[code]{#1}}}
|
||||
|
||||
%%%%% exercises environment: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% usage:
|
||||
@ -224,7 +226,6 @@
|
||||
% content of someoutput.out
|
||||
%
|
||||
% Innerhalb der exercise Umgebung ist enumerate umdefiniert, um (a), (b), (c), .. zu erzeugen.
|
||||
\usepackage{ifthen}
|
||||
\usepackage{mdframed}
|
||||
\usepackage{xstring}
|
||||
\newcommand{\codepath}{}
|
||||
|
@ -195,7 +195,7 @@ die Steigung $m$ und der y-Achsenabschnitt $b$ einer Geradengleichung
|
||||
\[ y = m \cdot x +b \]
|
||||
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 \]
|
||||
\matlabfun{polyfit}.
|
||||
\matlabfun{polyfit()}.
|
||||
|
||||
Parameter, die nichtlinear in einer Funktion enthalten sind, k\"onnen
|
||||
im Gegensatz dazu nicht analytisch aus den Daten berechnet
|
||||
@ -203,7 +203,7 @@ werden. z.B. die Rate $\lambda$ eines exponentiellen Zerfalls
|
||||
\[ y = c \cdot e^{\lambda x} \quad , \quad c, \lambda \in \reZ \; . \]
|
||||
F\"ur diesen Fall bleibt dann nur auf numerische Verfahren zur
|
||||
Optimierung der Kostenfunktion, wie z.B. der Gradientenabstieg,
|
||||
zur\"uckzugreifen \matlabfun{lsqcurvefit}.
|
||||
zur\"uckzugreifen \matlabfun{lsqcurvefit()}.
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
@ -243,7 +243,7 @@ Maximum Likelihood! Wir suchen einfach die Parameter $\theta$ der
|
||||
gesuchten Wahrscheinlichkeitsdichtefunktion bei der die Log-Likelihood
|
||||
\eqnref{loglikelihood} maximal wird. Das ist im allgemeinen ein
|
||||
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}
|
||||
Erzeuge Gammaverteilte Zufallszahlen und benutze Maximum-Likelihood,
|
||||
|
@ -34,13 +34,13 @@ Zwecken genutzt wird.
|
||||
Ein Datenplot muss ausreichend beschriftet werden:
|
||||
\begin{itemize}
|
||||
\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
|
||||
diese mit einer Legende oder \"ahnlichem benannt werden
|
||||
\matlabfun{legend()}.
|
||||
\item Mehrere Plots mit den gleichen Gr\"o{\ss}en auf den Achsen,
|
||||
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
|
||||
Abbildungsunterschrift erw\"ahnt werden.
|
||||
\item Die Beschriftung mu{\ss} gro{\ss} genug sein, um lesbar zu sein.
|
||||
@ -142,7 +142,7 @@ darzustellen (\figref{misleadingsymbolsfig}).
|
||||
\section{Das Plottingsystem von \matlab{}}
|
||||
|
||||
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
|
||||
Achsbeschriftungen, Legenden, etc. Es gibt zwei M\"oglichkeiten diese
|
||||
hinzuzuf\"ugen: (i) das Graphische User Interface oder (ii) die
|
||||
@ -212,9 +212,9 @@ Datens\"atzen erstellt werden soll.
|
||||
\subsection{Einfaches Plotten}
|
||||
|
||||
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
|
||||
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
|
||||
und stellt die Daten als Linienplot dar. Dabei werden die Datenpunkte
|
||||
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()}
|
||||
Befehl aufgerufen wird.
|
||||
|
||||
Im obigen Plot Aufruf wird nur ein Argument, das \code{y}, an die
|
||||
Funktion \code{plot} \"ubergeben. \code{plot} erh\"alt nur die
|
||||
Im obigen Plot Aufruf wird nur ein Argument, das \varcode{y}, an die
|
||||
Funktion \code{plot()} \"ubergeben. \code{plot()} erh\"alt nur die
|
||||
y-Werte. \matlab{} substituiert in diesem Fall die fehlenden x-Werte,
|
||||
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,
|
||||
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
|
||||
durchgezogener Linie, ohne Marker und der Strichst\"arke 1
|
||||
dargestellt. Der zweite Linienplot erh\"alt automatisch die Farbe
|
||||
@ -291,11 +291,11 @@ die Farbe und die verschiedenen Marker.
|
||||
\subsection{Ver\"andern von Linieneigenschaften}
|
||||
|
||||
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
|
||||
Linie der St\"arke 1.5 und Sternmarkern an den Positionen der
|
||||
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.
|
||||
|
||||
\begin{lstlisting}[label=settinglineprops, caption={Setzen von Linieneigenschaften beim \varcode{plot} Aufruf}]
|
||||
@ -307,46 +307,47 @@ geben, der in einer Legende verwendet werden kann.
|
||||
\subsection{Ver\"andern von Achseneigenschaften}
|
||||
|
||||
Das erste, was ein Plot zus\"atzlich braucht, ist eine
|
||||
Achsenbeschriftung. Mithilfe der Funktionen \code{xlabel('Time [ms]')}
|
||||
und \code{ylabel('Voltage [V]')} k\"onnen diese gesetzt
|
||||
Achsenbeschriftung. Mithilfe der Funktionen \code[xlabel()]{xlabel('Time [ms]')}
|
||||
und \code[ylabel()]{ylabel('Voltage [V]')} k\"onnen diese gesetzt
|
||||
werden.
|
||||
|
||||
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
|
||||
ganzzahligen Wert aufgerundet. Mit den Funktionen \code{xlim} und
|
||||
\code{ylim} k\"onnen die Grenezen der Achsen aber auch manuell
|
||||
eingestellt werden. Die Funktionen \code{xlim} und \code{ylim}
|
||||
ganzzahligen Wert aufgerundet. Mit den Funktionen \code{xlim()} und
|
||||
\code{ylim()} k\"onnen die Grenezen der Achsen aber auch manuell
|
||||
eingestellt werden. Die Funktionen \code{xlim()} und \code{ylim()}
|
||||
erwarten als Argument einen 2-elementigen Vektor mit dem Minimum und
|
||||
dem Maximum der jeweiligen Achse. Tabelle \ref{plotaxisprops} listet
|
||||
weitere h\"aufig genutzte Einstellungen der Achsen. Mit der \code{set}
|
||||
- Funktion k\"onnen diese ver\"andert werden wie in Zeile 15 in
|
||||
Listing \ref{niceplotlisting} gezeigt. Die \code{set} - Funktion
|
||||
erwartet als erstes Argument ein sogenanntes Handle der Achse, dieses
|
||||
wird gefolgt von einer beliebig langen Reihe von Eigenschaft-Wert
|
||||
Paaren. Soll z.B. das Gitternetz der x-Achse gezeigt werden, wird die
|
||||
Eigenschaft \codeterm{XGrid} auf den Wert \codeterm{'on'} gesetzt:
|
||||
\code{set(gca, 'XGrid', 'on');}. Das erste Argument ist ein Aufruf der
|
||||
Funktion \code{gca}, ``get-current-axis'' und ist das Achsenhandle der
|
||||
gerade aktiven Achse.
|
||||
weitere h\"aufig genutzte Einstellungen der Achsen. Mit der
|
||||
\code{set()} - Funktion k\"onnen diese ver\"andert werden wie in Zeile
|
||||
15 in Listing \ref{niceplotlisting} gezeigt. Die \code{set()} -
|
||||
Funktion erwartet als erstes Argument ein sogenanntes Handle der
|
||||
Achse, dieses wird gefolgt von einer beliebig langen Reihe von
|
||||
Eigenschaft-Wert Paaren. Soll z.B. das Gitternetz der x-Achse gezeigt
|
||||
werden, wird die Eigenschaft \code{XGrid} auf den Wert
|
||||
\varcode{'on'} gesetzt: \code[set()!set(gca, 'XGrid',
|
||||
'on')]{set(gca, 'XGrid', 'on');}. Das erste Argument ist ein Aufruf
|
||||
der Funktion \code{gca}, \enterm{get-current-axis} und ist das Achsenhandle
|
||||
der gerade aktiven Achse.
|
||||
|
||||
\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
|
||||
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline
|
||||
\codeterm{Box} & Definiert, ob der Rahmen der Achse vollst\"andig gezeichnet wird. & $\{'on'|'off'\}$ \\
|
||||
\codeterm{Color} & Hintergrundfarbe des Koordinatensystems. & Beliebige RGB, CMYK ... Werte. \\
|
||||
\codeterm{Fontname} & Der Name der Schriftart. & Im System installierte Schriften. \\
|
||||
\codeterm{FontSize} & Gr\"o{\ss}e der Schrift. & Skalarer Wert.\\
|
||||
\codeterm{FontUnit} & Einheit, in der die Schriftgr\"o{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\
|
||||
\codeterm{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{'normal' | 'bold'\}$\\
|
||||
\code{Box} & Definiert, ob der Rahmen der Achse vollst\"andig gezeichnet wird. & $\{'on'|'off'\}$ \\
|
||||
\code{Color} & Hintergrundfarbe des Koordinatensystems. & Beliebige RGB, CMYK ... Werte. \\
|
||||
\code{Fontname} & Der Name der Schriftart. & Im System installierte Schriften. \\
|
||||
\code{FontSize} & Gr\"o{\ss}e der Schrift. & Skalarer Wert.\\
|
||||
\code{FontUnit} & Einheit, in der die Schriftgr\"o{\ss}e bestimmt wird. & $\{'points' | 'centimeters' | 'inches', ...\}$\\
|
||||
\code{FontWeight} & Fett- oder Normalsatz der Schrift. & $\{'normal' | 'bold'\}$\\
|
||||
% & 'd' \\ ??????
|
||||
\codeterm{TickDir} & Richtung der Teilstriche auf der Achse. & $\{'in' | 'out'\}$\\
|
||||
\codeterm{TickLength} & L\"ange der Haupt- und Nebenteilstriche & \\
|
||||
\codeterm{X-, Y-, ZDir} & Richtung der Achsskalierung. & $\{'normal' | 'reversed'\}$\\
|
||||
\codeterm{X-, Y-, ZGrid} & Sollen Gitternetzlinien gezeigt werden? & $\{'off'|'on'\}$ \\
|
||||
\codeterm{X-, Y-, ZScale} & Lineare oder logarithmische Skalierung der Achse. & $\{'linear' | 'log'\}$\\
|
||||
\codeterm{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{TickDir} & Richtung der Teilstriche auf der Achse. & $\{'in' | 'out'\}$\\
|
||||
\code{TickLength} & L\"ange der Haupt- und Nebenteilstriche & \\
|
||||
\code{X-, Y-, ZDir} & Richtung der Achsskalierung. & $\{'normal' | 'reversed'\}$\\
|
||||
\code{X-, Y-, ZGrid} & Sollen Gitternetzlinien gezeigt werden? & $\{'off'|'on'\}$ \\
|
||||
\code{X-, Y-, ZScale} & Lineare oder logarithmische Skalierung der Achse. & $\{'linear' | 'log'\}$\\
|
||||
\code{X-, Y-, ZTick} & Position der Teilstriche auf der Achse. & Vektor mit Positionen.\\
|
||||
\code{X-, Y-, ZTickLabel} & Beschriftung der Teilstriche. & Vektor mit entsprechenden Zahlen oder Cell-Array mit Strings.\\ \hline
|
||||
\end{tabular*}
|
||||
\end{table}
|
||||
|
||||
@ -357,16 +358,16 @@ gerade aktiven Achse.
|
||||
\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}
|
||||
\begin{tabular*}{1\textwidth}{lp{6.3cm}p{6cm}} \hline
|
||||
\textbf{Eigenschaft} & \textbf{Beschreibung} & \textbf{Optionen} \\ \hline
|
||||
\codeterm{Color} & Hintergrundfarbe der Zeichenfl\"ache. & Beliebige RGB, CMYK ... Werte. \\
|
||||
\codeterm{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.\\
|
||||
\codeterm{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{Color} & Hintergrundfarbe der Zeichenfl\"ache. & Beliebige RGB, CMYK ... Werte. \\
|
||||
\code{PaperPosition} & Position der Abbildung auf dem Papier & 4-elementiger Vektor mit den Positionen der linken-unteren, und rechten-oberen Ecke. \\
|
||||
\code{PaperSize} & Gr\"o{\ss}e der des Papiers. & 2-elementiger Vektor mit der Papiergr\"o{\ss}e.\\
|
||||
\code{PaperUnits} & Einheit, in der die Papiergr\"o{\ss}e bestimmt wird. & $\{'inches' | 'centimeters' | 'normalized' | 'points'\}$\\
|
||||
\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{table}
|
||||
|
||||
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
|
||||
meistverwendeten). Das erste Argument f\"ur \code{set()} ist jetzt
|
||||
aber eine Handle f\"ur die Abbildung, nicht das
|
||||
@ -380,7 +381,7 @@ 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
|
||||
Abbildung in Zentimetern definiert wird. In Zeile 16 wird die
|
||||
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
|
||||
Argument ist der Dateiname, und zuletzt muss das gew\"unschte Format
|
||||
(Box \ref{graphicsformatbox}) angegeben werden.
|
||||
@ -423,10 +424,10 @@ Homepage viele Beispiele mit zugeh\"origem Code
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\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{Auswahl, mehr Information in der Hilfe zu \code{saveas()}}:\\[2ex]
|
||||
\begin{tabular}{|l|c|l|}
|
||||
\hline
|
||||
\textbf{Format} & \textbf{Typ} & \code{saveas} Argument \rule[-1.2ex]{0pt}{3.5ex} \\ \hline
|
||||
\textbf{Format} & \textbf{Typ} & \code{saveas()} Argument \rule[-1.2ex]{0pt}{3.5ex} \\ \hline
|
||||
pdf & Vektor & \varcode{'pdf'} \rule{0pt}{2.5ex} \\
|
||||
eps & Vektor & \varcode{'eps'}, \varcode{'epsc'} \\
|
||||
SVG & Vektor & \varcode{'svg'} \\
|
||||
|
@ -5,8 +5,8 @@
|
||||
\lstset{inputpath=../code}
|
||||
\graphicspath{{figures/}}
|
||||
|
||||
\setcounter{page}{}
|
||||
\setcounter{chapter}{-1}
|
||||
\setcounter{page}{111}
|
||||
\setcounter{chapter}{7}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -2,7 +2,7 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\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
|
||||
Zeitpunkt des Auftretens eines Aktionspotentials von Bedeutung. Die
|
||||
genaue Form des Aktionspotentials spielt keine oder nur eine
|
||||
@ -16,7 +16,7 @@ es ergeben sich mehrere \enterm{trials} von Spiketrains
|
||||
|
||||
Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen
|
||||
--- und deren Analyse f\"allt daher in das Gebiet der Statistik von
|
||||
sogenannten \determ{Punktprozessen}.
|
||||
sogenannten \determ[Punktprozess]{Punktprozessen}.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\includegraphics[width=1\textwidth]{rasterexamples}
|
||||
@ -345,9 +345,10 @@ generiert wurden.
|
||||
W\"ahrend die Instantane Rate den Kehrwert der Zeit von einem bis zum
|
||||
n\"achsten Aktionspotential misst, sch\"atzt das sogenannte
|
||||
\determ{Peri-Stimulus-Zeit-Histogramm} (\enterm{peri stimulus time
|
||||
histogram}, PSTH) die Wahrscheinlichkeit ab, zu einem Zeitpunkt
|
||||
Aktionspotentiale anzutreffen. Es wird versucht die mittlere Rate \eqnref{firingrate}
|
||||
im Grenzwert kleiner Beobachtungszeiten abzusch\"atzen:
|
||||
histogram}, \determ[PSTH|see{Peri-Stimulus-Zeit-Histogramm}]{PSTH})
|
||||
die Wahrscheinlichkeit ab, zu einem Zeitpunkt Aktionspotentiale
|
||||
anzutreffen. Es wird versucht die mittlere Rate \eqnref{firingrate} im
|
||||
Grenzwert kleiner Beobachtungszeiten abzusch\"atzen:
|
||||
\begin{equation}
|
||||
\label{psthrate}
|
||||
r(t) = \lim_{W \to 0} \frac{\langle n \rangle}{W} \; ,
|
||||
@ -378,7 +379,7 @@ Abschnitte (Bins) eingeteilt und die Anzahl Aktionspotentiale, die in
|
||||
die jeweiligen Bins fallen, gez\"ahlt (\figref{binpsth} A). Um diese
|
||||
Z\"ahlungen in die Feuerrate umzurechnen muss noch mit der Binweite
|
||||
normiert werden. Das ist fast so, wie beim Absch\"atzen einer
|
||||
Wahrscheinlichkeitsdichte. Es kann auch die \code{hist} Funktion zur
|
||||
Wahrscheinlichkeitsdichte. Es kann auch die \code{hist()} Funktion zur
|
||||
Bestimmung des PSTHs verwendet werden.
|
||||
|
||||
Die bestimmte Feuerrate gilt f\"ur das gesamte Bin (\figref{binpsth}
|
||||
@ -439,7 +440,7 @@ Spiketrains.
|
||||
Die graphischer Darstellung der Feuerrate allein reicht nicht aus um
|
||||
den Zusammenhang zwischen neuronaler Antwort und einem Stimulus zu
|
||||
analysieren. Eine Methode um mehr \"uber diesen Zusammenhang zu erfahren,
|
||||
ist der \enterm{Spike-triggered average} (STA). Der STA
|
||||
ist der \enterm{Spike-triggered average} (\enterm[STA|see{Spike-triggered average}]{STA}). Der STA
|
||||
\begin{equation}
|
||||
STA(\tau) = \langle s(t - \tau) \rangle = \frac{1}{N} \sum_{i=1}^{N} s(t_i - \tau)
|
||||
\end{equation}
|
||||
@ -477,12 +478,12 @@ antworten.
|
||||
|
||||
Der STA kann auch dazu benutzt werden, aus den Antworten der Zelle den
|
||||
Stimulus zu rekonstruieren (\figref{stafig} B). Bei der
|
||||
\determ{invertierten Rekonstruktion} wird die Zellantwort mit dem STA
|
||||
verfaltet.
|
||||
\determ[invertierte Rekonstruktion]{invertierten Rekonstruktion} wird
|
||||
die Zellantwort mit dem STA verfaltet.
|
||||
|
||||
\begin{exercise}{spikeTriggeredAverage.m}{}
|
||||
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:
|
||||
\begin{itemize}
|
||||
\item den Spike-Triggered-Average.
|
||||
@ -495,7 +496,7 @@ verfaltet.
|
||||
Rekonstruiere den Stimulus mithilfe des STA und der Spike
|
||||
Zeiten. Die Funktion soll Vektor als R\"uckgabewert haben, der
|
||||
genauso gro{\ss} ist wie der Originalstimulus aus der Datei
|
||||
\codeterm{sta\_data.mat}.
|
||||
\file{sta\_data.mat}.
|
||||
\end{exercise}
|
||||
|
||||
|
||||
|
@ -199,7 +199,7 @@ Dimension die Gr\"o{\ss}e 1 hat.
|
||||
|
||||
Im Gegensatz zu Variablen, die einzelene Werte beinhalten
|
||||
(Skalare), kann ein Vektor mehrere Werte des gleichen Datentyps
|
||||
beinhalten (Abbildung \ref{vectorfig} B). Die Variable \code{a}
|
||||
beinhalten (Abbildung \ref{vectorfig} B). Die Variable \varcode{a}
|
||||
enth\"alt im Beispiel in Abbildung \ref{vectorfig} vier ganzzahlige Werte.
|
||||
|
||||
\begin{figure}
|
||||
@ -228,10 +228,10 @@ k\"onnen.
|
||||
0 2 4 6 8 10
|
||||
\end{lstlisting}
|
||||
Die L\"ange eines Vektors, d.h. die Anzahl der Elemente des Vektors,
|
||||
kann mithilfe der Funktionen \code{length()} und \code{numel} bestimmt
|
||||
kann mithilfe der Funktionen \code{length()} und \code{numel()} bestimmt
|
||||
werden. \"Ahnliche Information kann \"uber die Funktion \code{size()}
|
||||
erhalten werden (Listing \ref{arrayListing2}). Im Falle des Vektors
|
||||
\code{a} von oben erh\"alt man folgende Ausgabe:
|
||||
\varcode{a} von oben erh\"alt man folgende Ausgabe:
|
||||
|
||||
\begin{lstlisting}[label=arrayListing2, caption={Gr\"o{\ss}e von Vektoren.}]
|
||||
>> length(a)
|
||||
@ -244,7 +244,7 @@ erhalten werden (Listing \ref{arrayListing2}). Im Falle des Vektors
|
||||
|
||||
Diese Ausgabe zeigt, dass Vektoren im Grunde 2-dimensional sind. Bei
|
||||
einem Zeilenvektor hat die erste Dimension die Gr\"o{\ss}e
|
||||
1. \code{length(a)} gibt die l\"angste Ausdehnung an. Der \code{'}-
|
||||
1. \code[length()]{length(a)} gibt die l\"angste Ausdehnung an. Der \code{'}-
|
||||
Operator transponiert den Spaltenvektor zu einem Zeilenvektor (Zeilen 14 ff.).
|
||||
|
||||
|
||||
@ -323,7 +323,7 @@ Element gleichzeitig zuzugreifen.
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{exercise}{vectorsize.m}{vectorsize.out}
|
||||
Der R\"uckgabewert von \code{size(a)} ist wieder ein Vektor der
|
||||
Der R\"uckgabewert von \code[size()]{size(a)} ist wieder ein Vektor der
|
||||
L\"ange 2. Wie k\"onnte man also die Gr\"o{\ss}e von \varcode{a} in der
|
||||
zweiten Dimension herausfinden?
|
||||
\end{exercise}
|
||||
@ -470,14 +470,14 @@ einzelnen Zeilen der Matrize.
|
||||
Zur Defintion von mehr-dimensionalen Matrizen ist die Notation in
|
||||
Zeile 1 nicht geeignet. Es gibt allerdings eine Reihe von
|
||||
Helferfunktionen, die n-dimensionale Matrizen erstellen k\"onnen
|
||||
(z.B. \code{ones}, Zeile 7). Sollte sich die Notwendigkeit ergeben
|
||||
mehrdimensionale Matrizen zusammenzuf\"ugen hilft die \code{cat}
|
||||
(z.B. \code{ones()}, Zeile 7). Sollte sich die Notwendigkeit ergeben
|
||||
mehrdimensionale Matrizen zusammenzuf\"ugen hilft die \code{cat()}
|
||||
Funktion.
|
||||
|
||||
Um Informationen \"uber die Gr\"o{\ss}e einer Matrize zu bekommen ist
|
||||
die Funktion \code{length} nicht geeignet. Wie oben erw\"ahnt gibt sie
|
||||
die Funktion \code{length()} nicht geeignet. Wie oben erw\"ahnt gibt sie
|
||||
die Gr\"o{\ss}e der l\"angsten Dimension aus. Wann immer es um
|
||||
Matrizen geht, wird \code{size} benutzt.
|
||||
Matrizen geht, wird \code{size()} benutzt.
|
||||
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.9\columnwidth]{matrixIndexing}
|
||||
@ -524,7 +524,7 @@ Alternativ zum \codeterm{subscript indexing} k\"onnen die Zellen einer
|
||||
Matrize auch \emph{linear} angesprochen werden (Abbildung
|
||||
\ref{matrixlinearindexingfig}). Diese Art der Adressierung ist nicht
|
||||
so intuitiv verst\"andlich, kann aber sehr hilfreich sein. Der
|
||||
``linare'' Index einer Zelle reicht von 1 bis \code{numel(M)}
|
||||
``linare'' Index einer Zelle reicht von 1 bis \code[numel()]{numel(M)}
|
||||
Elemente. Wobei dieser erst entlang der 1. Dimension, dann der 2.,
|
||||
3. etc. Dimension ansteigt. Listing \ref{matrixLinearIndexing} zeigt
|
||||
ein Beispiel f\"ur den Einsatz des linearen Indizierens z.B. wenn man
|
||||
@ -682,7 +682,7 @@ zu wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit
|
||||
einem UND verkn\"upft werden und der erste zu falsch ausgewertet wird,
|
||||
muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der
|
||||
``short-circuit'' Versionen spart Rechenzeit. Das auschlie{\ss}ende ODER
|
||||
(XOR) ist in \matlab{} nur als Funktion \code{xor(A, B)} verf\"ugbar.
|
||||
(XOR) ist in \matlab{} nur als Funktion \code[xor()]{xor(A, B)} verf\"ugbar.
|
||||
|
||||
\begin{table}[th]
|
||||
\titlecaption{\label{logicaloperators}
|
||||
@ -935,7 +935,7 @@ end
|
||||
\begin{exercise}{facultyLoop.m}{facultyLoop.out}
|
||||
Wie k\"onnte Fakult\"at mit einer Schleife implementiert werden?
|
||||
Implementiere eine \code{for} Schleife, die die Fakul\"at von einer
|
||||
Zahl \code{n} berechnet.
|
||||
Zahl \varcode{n} berechnet.
|
||||
\end{exercise}
|
||||
|
||||
|
||||
@ -1254,18 +1254,18 @@ hei{\ss}en soll, (ii) welche Information sie ben\"otigt und (iii)
|
||||
welche Daten sie zur\"uckliefern soll.
|
||||
|
||||
\begin{enumerate}
|
||||
\item \codeterm{Name:} der Name sollte beschreiben, was die Funktion
|
||||
\item \codeterm{Name}: der Name sollte beschreiben, was die Funktion
|
||||
tut. In diesem Fall berechnet sie einen Sinus. Ein geeigneter Name
|
||||
w\"are also \code{calculate\_sinewave}.
|
||||
\item \codeterm{Argumente:} die zu brechnende Sinusschwingung sei durch
|
||||
w\"are also \code{calculate\_sinewave()}.
|
||||
\item \codeterm{Argumente}: die zu brechnende Sinusschwingung sei durch
|
||||
ihre Frequenz und die Amplitude bestimmt. Des Weiteren soll noch
|
||||
festgelegt werden, wie lang der Sinus sein soll und mit welcher
|
||||
zeitlichen Aufl\"osung gerechnet werden soll. Es werden also vier
|
||||
Argumente ben\"otigt, sie k\"onnten hei{\ss}en: \code{amplitude},
|
||||
\code{frequency}, \code{t\_max}, \code{t\_step}.
|
||||
\item \codeterm{R\"uckgabewerte:} Um den Sinus korrekt darstellen zu k\"onnen brauchen wir die
|
||||
Argumente ben\"otigt, sie k\"onnten hei{\ss}en: \varcode{varamplitude},
|
||||
\varcode{frequency}, \varcode{t\_max}, \varcode{t\_step}.
|
||||
\item \codeterm{R\"uckgabewerte}: Um den Sinus korrekt darstellen zu k\"onnen brauchen wir die
|
||||
Zeitachse und die entsprechenden Werte. Es werden also zwei
|
||||
Variablen zur\"uckgegeben: \code{time, sine}
|
||||
Variablen zur\"uckgegeben: \varcode{time}, \varcode{sine}
|
||||
\end{enumerate}
|
||||
Mit dieser Information ist es nun gut m\"oglich die Funktion zu
|
||||
implementieren (Listing \ref{sinefunctionlisting}).
|
||||
@ -1289,7 +1289,7 @@ function [time, sine] = calculate_sinewave(frequency, amplitude, t_max, t_step)
|
||||
Diese Aufgabe kann auch von einer Funktion \"ubernommen werden. Diese
|
||||
Funktion hat keine andere Aufgabe, als die Daten zu plotten. Ihr Name
|
||||
sollte sich an dieser Aufgabe orientieren
|
||||
(z.B. \code{plot\_sinewave}). Um einen einzelnen Sinus zu plotten
|
||||
(z.B. \code{plot\_sinewave()}). Um einen einzelnen Sinus zu plotten
|
||||
werden im Wesentlichen die x-Werte und die zugeh\"origen y-Werte
|
||||
ben\"otigt. Da mehrere Sinus geplottet werden sollen ist es auch
|
||||
sinnvoll eine Zeichenkette f\"ur die Legende an die Funktion zu
|
||||
|
@ -5,7 +5,7 @@
|
||||
\lstset{inputpath=../code}
|
||||
\graphicspath{{figures/}}
|
||||
|
||||
\setcounter{page}{55}
|
||||
\setcounter{page}{57}
|
||||
\setcounter{chapter}{2}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -136,10 +136,10 @@ die Namensgebung selbst keine weiteren Vorgaben. Allerdings folgt die
|
||||
Benennung der in \matlab{} vordefinierten Funktionen gewissen Mustern:
|
||||
\begin{itemize}
|
||||
\item Namen werden immer klein geschrieben.
|
||||
\item Es werden gerne Abk\"urzungen eingesetzt (z.B. \code{xcorr}
|
||||
f\"ur die Kreuzkorrelation oder \code{repmat} f\"ur ``repeat matrix'')
|
||||
\item Es werden gerne Abk\"urzungen eingesetzt (z.B. \code{xcorr()}
|
||||
f\"ur die Kreuzkorrelation oder \code{repmat()} f\"ur ``repeat matrix'')
|
||||
\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
|
||||
Wertes in einen Text) benannt.
|
||||
\end{itemize}
|
||||
@ -165,9 +165,9 @@ W\"ahrend die Namen von Funktionen und Skripten ihren Zweck
|
||||
beschreiben, sollten die Namen von Variablen ihren Inhalt
|
||||
beschreiben. Eine Variable, die die mittlere Anzahl von
|
||||
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
|
||||
angebracht (\codeterm{average\_spike\_counts}).
|
||||
angebracht (\varcode{average\_spike\_counts}).
|
||||
|
||||
Die Laufvariablen von \code{for}-Schleifen werden oft nur \varcode{i},
|
||||
\varcode{j} oder \varcode{k} benannt und sollten aber die einzige Ausnahme
|
||||
@ -175,7 +175,7 @@ bzgl. ausdrucksstarker Namensgebung bleiben.
|
||||
|
||||
\begin{important}[Benennung von Variablen]
|
||||
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.
|
||||
\end{important}
|
||||
|
||||
@ -248,7 +248,7 @@ Kommentarzeilen werden in \matlab{} mit dem Prozentzeichen \code{\%}
|
||||
gekennzeichnet. Gezielt und sparsam eingesetzte Kommentare sind f\"ur
|
||||
das Verst\"andnis eines Programms sehr n\"utzlich. Am wichtigsten
|
||||
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}).
|
||||
|
||||
Viele und h\"aufige Kommentare k\"onnen in der Entwicklungsphase eines
|
||||
@ -259,7 +259,7 @@ Zeilen sowieso weitestgehend selbsterkl\"arend sein.
|
||||
Die beste Dokumentation ist der Code selbst. Gut geschriebener Code
|
||||
mit ausdrucksstarken Variablen- und Funktionsnamen ben\"otigt keine
|
||||
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.
|
||||
|
||||
\begin{important}[Verwendung von Kommentaren]
|
||||
@ -333,10 +333,10 @@ lokale Funktion.
|
||||
Lokale Funktionen existieren in der gleichen Datei und sind nur dort
|
||||
verf\"ugbar. Jede Funktion hat ihren eigenen G\"ultigkeitsbereich, das
|
||||
hei{\ss}t, dass Variablen aus den aufrufenden Funktionen nicht
|
||||
sichtbar sind. Bei sogenannten \codeterm{geschachtelten Funktionen}
|
||||
sichtbar sind. Bei sogenannten \codeterm[geschachtelte Funktionen]{geschachtelten Funktionen}
|
||||
ist das anders. Diese werden innerhalb eines Funktionsk\"orpers
|
||||
(zwischen den Schl\"usselworten \codeterm{function} und dem
|
||||
\codeterm{end} definiert und k\"onnen auf alle Variablen der
|
||||
(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
|
||||
sollten sie nur mit Bedacht eingesetzt werden.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
\lstset{inputpath=../code}
|
||||
\graphicspath{{figures/}}
|
||||
|
||||
\setcounter{page}{85}
|
||||
\setcounter{page}{89}
|
||||
\setcounter{chapter}{5}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -81,7 +81,7 @@ quadratischen Abst\"ande immer positiv, unabh\"angig ob die Datenwerte
|
||||
zus\"atzlich gro{\ss}e Abst\"ande st\"arker gewichtet.
|
||||
|
||||
\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
|
||||
Werten $y$ und einem Vektor mit den entsprechenden Vorhersagen
|
||||
$y^{est}$ berechnet.\newpage
|
||||
@ -134,16 +134,16 @@ der Fehler \eqnref{mseline} minimal wird.
|
||||
|
||||
\begin{exercise}{lsqError.m}{}
|
||||
Implementiere die Zielfunktion f\"ur die Optimierung mit der
|
||||
linearen Geradengleichung als Funktion \code{lsqError}.
|
||||
linearen Geradengleichung als Funktion \code{lsqError()}.
|
||||
\begin{itemize}
|
||||
\item Die Funktion \"ubernimmt drei Argumente: Das erste Argument
|
||||
ist ein 2-elementiger Vektor, der die Parameter \code{m} und
|
||||
\code{b} enth\"alt. Das zweite ist ein Vektor mit den $x$-Werten,
|
||||
ist ein 2-elementiger Vektor, der die Parameter \varcode{m} und
|
||||
\varcode{b} enth\"alt. Das zweite ist ein Vektor mit den $x$-Werten,
|
||||
an denen gemessen wurde, und das dritte ein Vektor mit den
|
||||
zugeh\"origen $y$-Werten.
|
||||
\item Die Funktion gibt als Ergebniss den Fehler als mittleren
|
||||
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.
|
||||
\end{itemize}
|
||||
\end{exercise}
|
||||
@ -181,12 +181,12 @@ beiden Parameter und auf der $z$-Achse der Fehlerwert aufgetragen
|
||||
|
||||
\begin{exercise}{errorSurface.m}{}\label{errorsurfaceexercise}%
|
||||
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
|
||||
quadratischen Abstand zwischen den Daten und einer Geraden mit
|
||||
Steigung $m$ und $y$-Achsenabschnitt $b$, in Abh\"angigkeit von $m$
|
||||
und $b$ als surface plot darstellt (siehe Hilfe f\"ur die
|
||||
\code{surf} Funktion).
|
||||
\code{surf()} Funktion).
|
||||
\end{exercise}
|
||||
|
||||
An der Fehlerfl\"ache kann direkt erkannt werden, bei welcher
|
||||
@ -310,7 +310,7 @@ partielle Ableitung nach $m$ durch
|
||||
\end{figure}
|
||||
|
||||
\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
|
||||
sowie die $x$- und $y$-Werte der Messdaten als Argumente
|
||||
entgegennimmt und den Gradienten an dieser Stelle zur\"uckgibt.
|
||||
@ -321,7 +321,7 @@ partielle Ableitung nach $m$ durch
|
||||
um f\"ur jede Parameterkombination aus der Fehlerfl\"ache
|
||||
(\"Ubung \ref{errorsurfaceexercise}) auch den Gradienten zu
|
||||
berechnen und darzustellen. Vektoren im Raum k\"onnen mithilfe der
|
||||
Funktion \code{quiver} geplottet werden.
|
||||
Funktion \code{quiver()} geplottet werden.
|
||||
\end{exercise}
|
||||
|
||||
|
||||
@ -330,8 +330,8 @@ partielle Ableitung nach $m$ durch
|
||||
Zu guter Letzt muss nur noch der Gradientenabstieg implementiert
|
||||
werden. Die daf\"ur ben\"otigten Zutaten haben wir aus den
|
||||
vorangegangenen \"Ubungen bereits vorbereitet. Wir brauchen: 1. Die Fehlerfunktion
|
||||
(\code{meanSquareError.m}), 2. die Zielfunktion (\code{lsqError.m})
|
||||
und 3. den Gradienten (\code{lsqGradient.m}). Der Algorithmus
|
||||
(\code{meanSquareError()}), 2. die Zielfunktion (\code{lsqError()})
|
||||
und 3. den Gradienten (\code{lsqGradient()}). Der Algorithmus
|
||||
f\"ur den Abstieg lautet:
|
||||
\begin{enumerate}
|
||||
\item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0,
|
||||
@ -342,7 +342,7 @@ f\"ur den Abstieg lautet:
|
||||
abbrechen. Wir suchen ja das Minimum, bei dem der Gradient gleich
|
||||
Null ist. Da aus numerischen Gr\"unden der Gradient nie exakt Null
|
||||
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 =
|
||||
0.01$) in die entgegensetzte Richtung des Gradienten:
|
||||
\[p_{i+1} = p_i - \epsilon \cdot \nabla f_{cost}(m_i, b_i)\]
|
||||
@ -367,7 +367,7 @@ Punkte in Abbildung \ref{gradientdescentfig} gro{\ss}.
|
||||
\begin{exercise}{gradientDescent.m}{}
|
||||
Implementiere den Gradientenabstieg f\"ur das Problem der
|
||||
Parameteranpassung der linearen Geradengleichung an die Messdaten in
|
||||
der Datei \code{lin\_regression.mat}.
|
||||
der Datei \file{lin\_regression.mat}.
|
||||
\begin{enumerate}
|
||||
\item Merke Dir f\"ur jeden Schritt den Fehler zwischen
|
||||
Modellvorhersage und Daten.
|
||||
@ -388,7 +388,7 @@ mittlere quadratische Abstand als Kostenfunktion in der Tat ein
|
||||
einziges klar definiertes Minimum. Wie wir im n\"achsten Kapitel
|
||||
sehen werden, kann die Position des Minimums bei Geradengleichungen
|
||||
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
|
||||
enthalten sind, wie z.B. die Rate $\lambda$ als Parameter in der
|
||||
@ -401,9 +401,9 @@ Gradientenabstiegs auf vielf\"altige Weise verbessert
|
||||
werden. z.B. kann die Schrittweite an die St\"arke des Gradienten
|
||||
angepasst werden. Diese numerischen Tricks sind in bereits vorhandenen
|
||||
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
|
||||
einem Kurvenfit angeboten werden \matlabfun{lsqcurvefit}.
|
||||
einem Kurvenfit angeboten werden \matlabfun{lsqcurvefit()}.
|
||||
|
||||
\begin{important}[Achtung Nebenminima!]
|
||||
Das Finden des globalen Minimums ist leider nur selten so leicht wie
|
||||
|
@ -17,7 +17,6 @@
|
||||
\lstlistoflistings
|
||||
\listofexercisefs
|
||||
\listofiboxfs
|
||||
%\listofimportantfs
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\part{Grundlagen des Programmierens}
|
||||
@ -71,7 +70,9 @@
|
||||
|
||||
\addcontentsline{toc}{chapter}{Fachbegriffe}
|
||||
\printindex[term]
|
||||
\addcontentsline{toc}{chapter}{Code}
|
||||
\addcontentsline{toc}{chapter}{Englische Fachbegriffe}
|
||||
\printindex[enterm]
|
||||
\addcontentsline{toc}{chapter}{MATLAB Code}
|
||||
\printindex[code]
|
||||
|
||||
\end{document}
|
||||
|
@ -5,7 +5,7 @@
|
||||
\lstset{inputpath=../code}
|
||||
\graphicspath{{figures/}}
|
||||
|
||||
\setcounter{page}{67}
|
||||
\setcounter{page}{69}
|
||||
\setcounter{chapter}{3}
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
@ -43,8 +43,8 @@ nicht kleiner als der Median ist (\figref{medianfig}).
|
||||
|
||||
\newpage
|
||||
\begin{exercise}{mymedian.m}{}
|
||||
\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.}
|
||||
\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.}
|
||||
\end{exercise}
|
||||
|
||||
\matlab{} stellt die Funktion \code{median()} zur Berechnung des Medians bereit.
|
||||
@ -55,7 +55,7 @@ nicht kleiner als der Median ist (\figref{medianfig}).
|
||||
returns a median above which are the same number of data than
|
||||
below. In particular the script should test data vectors of
|
||||
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
|
||||
insbesondere verschieden lange Datenvektoren testen.}
|
||||
\end{exercise}
|
||||
@ -126,8 +126,8 @@ Wahrscheinlichkeitsverteilung der Messwerte abzusch\"atzen.
|
||||
\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
|
||||
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 auf geeignete Weise.}
|
||||
\end{exercise}
|
||||
|
||||
@ -271,7 +271,7 @@ Korrelations\-koeffizient
|
||||
(x-\langle x \rangle)(y-\langle y \rangle) \rangle}{\sqrt{\langle
|
||||
(x-\langle x \rangle)^2} \rangle \sqrt{\langle (y-\langle y
|
||||
\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
|
||||
Standardabweichungen. Perfekt korrelierte Variablen ergeben einen
|
||||
Korrelationskoeffizienten von $+1$, antikorrelierte Daten einen
|
||||
|
Reference in New Issue
Block a user