From 993ab5d8e70e309bc1b342fac3c68ac891a1dc31 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sun, 22 Nov 2015 23:16:22 +0100 Subject: [PATCH] Improved indices. Added optional parameter for index to *term* macros. --- Makefile | 2 +- bootstrap/lecture/bootstrap.tex | 2 +- designpattern/lecture/designpattern.tex | 4 +- header.tex | 15 +-- likelihood/lecture/likelihood.tex | 6 +- plotting/lecture/plotting.tex | 99 ++++++++++--------- .../lecture/pointprocesses-chapter.tex | 4 +- pointprocesses/lecture/pointprocesses.tex | 23 ++--- programming/lecture/programming.tex | 40 ++++---- .../lecture/programmingstyle-chapter.tex | 2 +- programmingstyle/lecture/programmingstyle.tex | 22 ++--- regression/lecture/regression-chapter.tex | 2 +- regression/lecture/regression.tex | 32 +++--- scientificcomputing-script.tex | 5 +- statistics/lecture/statistics-chapter.tex | 2 +- statistics/lecture/statistics.tex | 12 +-- 16 files changed, 138 insertions(+), 134 deletions(-) diff --git a/Makefile b/Makefile index 9a4e91f..2a9b5ef 100644 --- a/Makefile +++ b/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 diff --git a/bootstrap/lecture/bootstrap.tex b/bootstrap/lecture/bootstrap.tex index 0cf4cb0..f142de5 100644 --- a/bootstrap/lecture/bootstrap.tex +++ b/bootstrap/lecture/bootstrap.tex @@ -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. diff --git a/designpattern/lecture/designpattern.tex b/designpattern/lecture/designpattern.tex index a13c290..ec90e3f 100644 --- a/designpattern/lecture/designpattern.tex +++ b/designpattern/lecture/designpattern.tex @@ -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'); diff --git a/header.tex b/header.tex index 9329c5d..01414c8 100644 --- a/header.tex +++ b/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}{} diff --git a/likelihood/lecture/likelihood.tex b/likelihood/lecture/likelihood.tex index bdeb82d..62872f3 100644 --- a/likelihood/lecture/likelihood.tex +++ b/likelihood/lecture/likelihood.tex @@ -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, diff --git a/plotting/lecture/plotting.tex b/plotting/lecture/plotting.tex index 1aba67d..77456da 100644 --- a/plotting/lecture/plotting.tex +++ b/plotting/lecture/plotting.tex @@ -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'} \\ diff --git a/pointprocesses/lecture/pointprocesses-chapter.tex b/pointprocesses/lecture/pointprocesses-chapter.tex index abbf168..70de527 100644 --- a/pointprocesses/lecture/pointprocesses-chapter.tex +++ b/pointprocesses/lecture/pointprocesses-chapter.tex @@ -5,8 +5,8 @@ \lstset{inputpath=../code} \graphicspath{{figures/}} -\setcounter{page}{} -\setcounter{chapter}{-1} +\setcounter{page}{111} +\setcounter{chapter}{7} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/pointprocesses/lecture/pointprocesses.tex b/pointprocesses/lecture/pointprocesses.tex index 7249097..88a718a 100644 --- a/pointprocesses/lecture/pointprocesses.tex +++ b/pointprocesses/lecture/pointprocesses.tex @@ -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} diff --git a/programming/lecture/programming.tex b/programming/lecture/programming.tex index 05548b0..ff1d646 100644 --- a/programming/lecture/programming.tex +++ b/programming/lecture/programming.tex @@ -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 diff --git a/programmingstyle/lecture/programmingstyle-chapter.tex b/programmingstyle/lecture/programmingstyle-chapter.tex index 2ad3b5d..d82204d 100644 --- a/programmingstyle/lecture/programmingstyle-chapter.tex +++ b/programmingstyle/lecture/programmingstyle-chapter.tex @@ -5,7 +5,7 @@ \lstset{inputpath=../code} \graphicspath{{figures/}} -\setcounter{page}{55} +\setcounter{page}{57} \setcounter{chapter}{2} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/programmingstyle/lecture/programmingstyle.tex b/programmingstyle/lecture/programmingstyle.tex index d4f88a7..31187ce 100644 --- a/programmingstyle/lecture/programmingstyle.tex +++ b/programmingstyle/lecture/programmingstyle.tex @@ -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. diff --git a/regression/lecture/regression-chapter.tex b/regression/lecture/regression-chapter.tex index 9b9fc79..0df5e2b 100644 --- a/regression/lecture/regression-chapter.tex +++ b/regression/lecture/regression-chapter.tex @@ -5,7 +5,7 @@ \lstset{inputpath=../code} \graphicspath{{figures/}} -\setcounter{page}{85} +\setcounter{page}{89} \setcounter{chapter}{5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/regression/lecture/regression.tex b/regression/lecture/regression.tex index 4cae7bd..fdb6906 100644 --- a/regression/lecture/regression.tex +++ b/regression/lecture/regression.tex @@ -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 diff --git a/scientificcomputing-script.tex b/scientificcomputing-script.tex index 3d090c5..4a4ce18 100644 --- a/scientificcomputing-script.tex +++ b/scientificcomputing-script.tex @@ -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} diff --git a/statistics/lecture/statistics-chapter.tex b/statistics/lecture/statistics-chapter.tex index fa31714..ad93f38 100644 --- a/statistics/lecture/statistics-chapter.tex +++ b/statistics/lecture/statistics-chapter.tex @@ -5,7 +5,7 @@ \lstset{inputpath=../code} \graphicspath{{figures/}} -\setcounter{page}{67} +\setcounter{page}{69} \setcounter{chapter}{3} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/statistics/lecture/statistics.tex b/statistics/lecture/statistics.tex index 0e9569e..91c9775 100644 --- a/statistics/lecture/statistics.tex +++ b/statistics/lecture/statistics.tex @@ -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