From 321608664216a3a170d42ae2a7d696f903a9ed89 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Wed, 4 Nov 2015 23:52:29 +0100 Subject: [PATCH] Updated statistics chapter --- Makefile | 3 +- header.tex | 18 +- programming/lectures/Makefile | 27 +- programming/lectures/programming-chapter.tex | 363 +----------------- programming/lectures/programming.tex | 195 ++++------ programming/lectures/variables_datatypes.tex | 15 +- scientificcomputing-script.tex | 2 +- .../lecture/images/psth_comparison.pdf | Bin 22263 -> 103782 bytes .../lecture/images/reconstruction.pdf | Bin 18683 -> 18671 bytes spike_trains/lecture/images/sta.pdf | Bin 11418 -> 11386 bytes statistics/code/diehistograms.m | 3 - statistics/code/gaussianbins.m | 11 - statistics/code/gaussianbinsnorm.m | 9 + statistics/lecture/boxwhisker.py | 21 +- statistics/lecture/boxwhiskerdata.npy | Bin 3280 -> 0 bytes statistics/lecture/correlation.py | 9 +- statistics/lecture/nonlincorrelation.py | 2 +- statistics/lecture/statistics.tex | 186 +++++---- 18 files changed, 254 insertions(+), 610 deletions(-) create mode 100644 statistics/code/gaussianbinsnorm.m delete mode 100644 statistics/lecture/boxwhiskerdata.npy diff --git a/Makefile b/Makefile index 1e7bc1c..1702b05 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ BASENAME=scientificcomputing-script -SUBDIRS=programming statistics bootstrap likelihood pointprocesses spike_trains designpattern +SUBDIRS=programming statistics bootstrap likelihood pointprocesses +#spike_trains designpattern # regression pdf : $(BASENAME).pdf diff --git a/header.tex b/header.tex index 77c43df..4cf2881 100644 --- a/header.tex +++ b/header.tex @@ -28,7 +28,12 @@ %%%%% graphics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{subcaption} \usepackage{graphicx} + +%%%%%%%%%%%%% Colors %%%%%%%%%%%%%%%% \usepackage{xcolor} +\definecolor{lightblue}{rgb}{.7,.7,1.} +\definecolor{mygreen}{rgb}{0.2,0.7,0.2} +\definecolor{myred}{rgb}{1.,0,0} \pagecolor{white} %%%%% figures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -149,6 +154,9 @@ belowskip=2ex } +%%%%%%%%%%%%% Table stuff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{multirow} + %%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{amsmath} \usepackage{bm} @@ -203,13 +211,3 @@ {\addtocounter{lstlisting}{-1}\lstinputlisting[language={},title={\textbf{\tr{Output}{Ausgabe}:}},belowskip=0pt]{\codepath\exerciseoutput}}}}% \endMakeFramed\stepcounter{theexercise}% \renewcommand{\theenumi}{\saveenumi}} - -%%%%%%%%%%%%% Table stuff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{multirow} - - -%%%%%%%%%%%%% Colors %%%%%%%%%%%%%%%% -\usepackage{xcolor} -\definecolor{lightblue}{rgb}{.7,.7,1.} -\definecolor{mygreen}{rgb}{0.2,0.7,0.2} -\definecolor{myred}{rgb}{1.,0,0} \ No newline at end of file diff --git a/programming/lectures/Makefile b/programming/lectures/Makefile index 355432d..89774df 100644 --- a/programming/lectures/Makefile +++ b/programming/lectures/Makefile @@ -1,20 +1,31 @@ -TEXFILES=$(wildcard *.tex) -TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex +BASENAME=programming -PDFFILES=$(TEXFILES:.tex=.pdf) +#TEXFILES=boolean_logical_indexing.tex control_structures.tex data_structures.tex plotting.tex programming_basics.tex scripts_functions.tex sta_stc.tex variables_datatypes.tex vectors_matrices.tex -pdf : $(PDFFILES) +PYFILES=$(wildcard *.py) +PYPDFFILES=$(PYFILES:.py=.pdf) -$(PDFFILES) : %.pdf : %.tex +all : pdf + +# script: +pdf : $(BASENAME)-chapter.pdf + +$(BASENAME)-chapter.pdf : $(BASENAME)-chapter.tex $(BASENAME).tex $(PYPDFFILES) pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true +$(PYPDFFILES) : %.pdf : %.py + python $< + clean : - rm -f *~ $(TEXFILES:.tex=.aux) $(TEXFILES:.tex=.log) $(TEXFILES:.tex=.out) $(TEXFILES:.tex=.nav) $(TEXFILES:.tex=.snm) $(TEXFILES:.tex=.toc) $(TEXFILES:.tex=.vrb) + rm -f *~ + rm -f $(BASENAME).aux $(BASENAME).log + rm -f $(BASENAME)-chapter.aux $(BASENAME)-chapter.log $(BASENAME)-chapter.out + rm -f $(PYPDFFILES) $(GPTTEXFILES) cleanall : clean - rm -f $(PDFFILES) + rm -f $(BASENAME)-chapter.pdf -watch : +watchpdf : while true; do ! make -q pdf && make pdf; sleep 0.5; done diff --git a/programming/lectures/programming-chapter.tex b/programming/lectures/programming-chapter.tex index ff364e7..00d52a4 100644 --- a/programming/lectures/programming-chapter.tex +++ b/programming/lectures/programming-chapter.tex @@ -1,372 +1,17 @@ \documentclass[12pt]{report} -%%%%% title %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\title{\tr{Introduction to Scientific Computing}{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}} -\author{Jan Benda\\Abteilung Neuroethologie\\[2ex]\includegraphics[width=0.3\textwidth]{UT_WBMW_Rot_RGB}} -\date{WS 15/16} +\input{../../header} -%%%% language %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \newcommand{\tr}[2]{#1} % en -% \usepackage[english]{babel} -\newcommand{\tr}[2]{#2} % de -\usepackage[german]{babel} +\lstset{inputpath=../code} -%%%%% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{pslatex} % nice font for pdf file -\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} - -%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[left=25mm,right=25mm,top=20mm,bottom=30mm]{geometry} -\setcounter{tocdepth}{1} - -%%%%% section style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[sf,bf,it,big,clearempty]{titlesec} -\setcounter{secnumdepth}{1} - - -%%%%% units %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro - - -%%%%% figures %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{subcaption} -\usepackage{graphicx} -\usepackage{xcolor} -\pagecolor{white} - -\newcommand{\ruler}{\par\noindent\setlength{\unitlength}{1mm}\begin{picture}(0,6)% - \put(0,4){\line(1,0){170}}% - \multiput(0,2)(10,0){18}{\line(0,1){4}}% - \multiput(0,3)(1,0){170}{\line(0,1){2}}% - \put(0,0){\makebox(0,0){{\tiny 0}}}% - \put(10,0){\makebox(0,0){{\tiny 1}}}% - \put(20,0){\makebox(0,0){{\tiny 2}}}% - \put(30,0){\makebox(0,0){{\tiny 3}}}% - \put(40,0){\makebox(0,0){{\tiny 4}}}% - \put(50,0){\makebox(0,0){{\tiny 5}}}% - \put(60,0){\makebox(0,0){{\tiny 6}}}% - \put(70,0){\makebox(0,0){{\tiny 7}}}% - \put(80,0){\makebox(0,0){{\tiny 8}}}% - \put(90,0){\makebox(0,0){{\tiny 9}}}% - \put(100,0){\makebox(0,0){{\tiny 10}}}% - \put(110,0){\makebox(0,0){{\tiny 11}}}% - \put(120,0){\makebox(0,0){{\tiny 12}}}% - \put(130,0){\makebox(0,0){{\tiny 13}}}% - \put(140,0){\makebox(0,0){{\tiny 14}}}% - \put(150,0){\makebox(0,0){{\tiny 15}}}% - \put(160,0){\makebox(0,0){{\tiny 16}}}% - \put(170,0){\makebox(0,0){{\tiny 17}}}% - \end{picture}\par} - -% figures: -\setlength{\fboxsep}{0pt} -\newcommand{\texpicture}[1]{{\sffamily\footnotesize\input{#1.tex}}} -%\newcommand{\texpicture}[1]{\fbox{\sffamily\footnotesize\input{#1.tex}}} -%\newcommand{\texpicture}[1]{\setlength{\fboxsep}{2mm}\fbox{#1}} -%\newcommand{\texpicture}[1]{} -\newcommand{\figlabel}[1]{\textsf{\textbf{\large \uppercase{#1}}}} - -% maximum number of floats: -\setcounter{topnumber}{2} -\setcounter{bottomnumber}{0} -\setcounter{totalnumber}{2} - -% float placement fractions: -\renewcommand{\textfraction}{0.2} -\renewcommand{\topfraction}{0.8} -\renewcommand{\bottomfraction}{0.0} -\renewcommand{\floatpagefraction}{0.5} - -% spacing for floats: -\setlength{\floatsep}{12pt plus 2pt minus 2pt} -\setlength{\textfloatsep}{20pt plus 4pt minus 2pt} -\setlength{\intextsep}{12pt plus 2pt minus 2pt} - -% spacing for a floating page: -\makeatletter - \setlength{\@fptop}{0pt} - \setlength{\@fpsep}{8pt plus 2.0fil} - \setlength{\@fpbot}{0pt plus 1.0fil} -\makeatother - -% rules for floats: -\newcommand{\topfigrule}{\vspace*{10pt}{\hrule height0.4pt}\vspace*{-10.4pt}} -\newcommand{\bottomfigrule}{\vspace*{-10.4pt}{\hrule height0.4pt}\vspace*{10pt}} - -% captions: -\usepackage[format=plain,singlelinecheck=off,labelfont=bf,font={small,sf}]{caption} - -% put caption on separate float: -\newcommand{\breakfloat}{\end{figure}\begin{figure}[t]} - -% references to panels of a figure within the caption: -\newcommand{\figitem}[1]{\textsf{\bfseries\uppercase{#1}}} -% references to figures: -\newcommand{\panel}[1]{\textsf{\uppercase{#1}}} -\newcommand{\fref}[1]{\textup{\ref{#1}}} -\newcommand{\subfref}[2]{\textup{\ref{#1}}\,\panel{#2}} -% references to figures in normal text: -\newcommand{\fig}{Fig.} -\newcommand{\Fig}{Figure} -\newcommand{\figs}{Figs.} -\newcommand{\Figs}{Figures} -\newcommand{\figref}[1]{\fig~\fref{#1}} -\newcommand{\Figref}[1]{\Fig~\fref{#1}} -\newcommand{\figsref}[1]{\figs~\fref{#1}} -\newcommand{\Figsref}[1]{\Figs~\fref{#1}} -\newcommand{\subfigref}[2]{\fig~\subfref{#1}{#2}} -\newcommand{\Subfigref}[2]{\Fig~\subfref{#1}{#2}} -\newcommand{\subfigsref}[2]{\figs~\subfref{#1}{#2}} -\newcommand{\Subfigsref}[2]{\Figs~\subfref{#1}{#2}} -% references to figures within bracketed text: -\newcommand{\figb}{Fig.} -\newcommand{\figsb}{Figs.} -\newcommand{\figrefb}[1]{\figb~\fref{#1}} -\newcommand{\figsrefb}[1]{\figsb~\fref{#1}} -\newcommand{\subfigrefb}[2]{\figb~\subfref{#1}{#2}} -\newcommand{\subfigsrefb}[2]{\figsb~\subfref{#1}{#2}} - -% references to tables: -\newcommand{\tref}[1]{\textup{\ref{#1}}} -% references to tables in normal text: -\newcommand{\tab}{Tab.} -\newcommand{\Tab}{Table} -\newcommand{\tabs}{Tabs.} -\newcommand{\Tabs}{Tables} -\newcommand{\tabref}[1]{\tab~\tref{#1}} -\newcommand{\Tabref}[1]{\Tab~\tref{#1}} -\newcommand{\tabsref}[1]{\tabs~\tref{#1}} -\newcommand{\Tabsref}[1]{\Tabs~\tref{#1}} -% references to tables within bracketed text: -\newcommand{\tabb}{Tab.} -\newcommand{\tabsb}{Tab.} -\newcommand{\tabrefb}[1]{\tabb~\tref{#1}} -\newcommand{\tabsrefb}[1]{\tabsb~\tref{#1}} - - -%%%%% equation references %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\newcommand{\eqref}[1]{(\ref{#1})} -\newcommand{\eqn}{\tr{Eq}{Gl}.} -\newcommand{\Eqn}{\tr{Eq}{Gl}.} -\newcommand{\eqns}{\tr{Eqs}{Gln}.} -\newcommand{\Eqns}{\tr{Eqs}{Gln}.} -\newcommand{\eqnref}[1]{\eqn~\eqref{#1}} -\newcommand{\Eqnref}[1]{\Eqn~\eqref{#1}} -\newcommand{\eqnsref}[1]{\eqns~\eqref{#1}} -\newcommand{\Eqnsref}[1]{\Eqns~\eqref{#1}} - - -%%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{listings} -\lstset{ - inputpath=../code, - basicstyle=\ttfamily\footnotesize, - numbers=left, - showstringspaces=false, - language=Matlab, - commentstyle=\itshape\color{red!60!black}, - keywordstyle=\color{blue!50!black}, - stringstyle=\color{green!50!black}, - backgroundcolor=\color{blue!10}, - breaklines=true, - breakautoindent=true, - columns=flexible, - frame=single, - caption={\protect\filename@parse{\lstname}\protect\filename@base}, - captionpos=t, - xleftmargin=1em, - xrightmargin=1em, - aboveskip=10pt -} - -%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{amsmath} -\usepackage{bm} -\usepackage{dsfont} -\newcommand{\naZ}{\mathds{N}} -\newcommand{\gaZ}{\mathds{Z}} -\newcommand{\raZ}{\mathds{Q}} -\newcommand{\reZ}{\mathds{R}} -\newcommand{\reZp}{\mathds{R^+}} -\newcommand{\reZpN}{\mathds{R^+_0}} -\newcommand{\koZ}{\mathds{C}} - - -%%%%% structure: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\usepackage{ifthen} - -\newcommand{\code}[1]{\texttt{#1}} - -\newcommand{\source}[1]{ - \begin{flushright} - \color{gray}\scriptsize \url{#1} - \end{flushright} -} - -\newenvironment{definition}[1][]{\medskip\noindent\textbf{Definition}\ifthenelse{\equal{#1}{}}{}{ #1}:\newline}% - {\medskip} - -\newcounter{maxexercise} -\setcounter{maxexercise}{9} % show listings up to exercise maxexercise -\newcounter{theexercise} -\setcounter{theexercise}{1} -\newenvironment{exercise}[1][]{\medskip\noindent\textbf{\tr{Exercise}{\"Ubung} - \arabic{theexercise}:}\newline \newcommand{\exercisesource}{#1}}% - {\ifthenelse{\equal{\exercisesource}{}}{}{\ifthenelse{\value{theexercise}>\value{maxexercise}}{}{\medskip\lstinputlisting{\exercisesource}}}\medskip\stepcounter{theexercise}} - -\graphicspath{{figures/}} +\graphicspath{{images/}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} -\chapter{Grundlagen der Programmierung in Matlab} - - -\include{variables_datatypes} - - -\include{vectors_matrices} - - -\include{control_structures} - - -\end{document} - +\include{programming} \end{document} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Statistics} -What is "a statistic"? % dt. Sch\"atzfunktion -\begin{definition}[statistic] - A statistic (singular) is a single measure of some attribute of a - sample (e.g., its arithmetic mean value). It is calculated by - applying a function (statistical algorithm) to the values of the - items of the sample, which are known together as a set of data. - - \source{http://en.wikipedia.org/wiki/Statistic} -\end{definition} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Data types} - -\subsection{Nominal scale} -\begin{itemize} -\item Binary - \begin{itemize} - \item ``yes/no'', - \item ``true/false'', - \item ``success/failure'', etc. - \end{itemize} -\item Categorial - \begin{itemize} - \item cell type (``rod/cone/horizontal cell/bipolar cell/ganglion cell''), - \item blood type (``A/B/AB/0''), - \item parts of speech (``noun/veerb/preposition/article/...''), - \item taxonomic groups (``Coleoptera/Lepidoptera/Diptera/Hymenoptera''), etc. - \end{itemize} -\item Each observation/measurement/sample is put into one category -\item There is no reasonable order among the categories.\\ - example: [rods, cones] vs. [cones, rods] -\item Statistics: mode, i.e. the most common item -\end{itemize} - -\subsection{Ordinal scale} -\begin{itemize} -\item Like nominal scale, but with an order -\item Examples: ranks, ratings - \begin{itemize} - \item ``bad/ok/good'', - \item ``cold/warm/hot'', - \item ``young/old'', etc. - \end{itemize} -\item {\bf But:} there is no reasonable measure of {\em distance} - between the classes -\item Statistics: mode, median -\end{itemize} - -\subsection{Interval scale} -\begin{itemize} -\item Quantitative/metric values -\item Reasonable measure of distance between values, but no absolute zero -\item Examples: - \begin{itemize} - \item Temperature in $^\circ$C ($20^\circ$C is not twice as hot as $10^\circ$C) - \item Direction measured in degrees from magnetic or true north - \end{itemize} -\item Statistics: - \begin{itemize} - \item Central tendency: mode, median, arithmetic mean - \item Dispersion: range, standard deviation - \end{itemize} -\end{itemize} - -\subsection{Absolute/ratio scale} -\begin{itemize} -\item Like interval scale, but with absolute origin/zero -\item Examples: - \begin{itemize} - \item Temperature in $^\circ$K - \item Length, mass, duration, electric charge, ... - \item Plane angle, etc. - \item Count (e.g. number of spikes in response to a stimulus) - \end{itemize} -\item Statistics: - \begin{itemize} - \item Central tendency: mode, median, arithmetic, geometric, harmonic mean - \item Dispersion: range, standard deviation - \item Coefficient of variation (ratio standard deviation/mean) - \item All other statistical measures - \end{itemize} -\end{itemize} - -\subsection{Data types} -\begin{itemize} -\item Data type selects - \begin{itemize} - \item statistics - \item type of plots (bar graph versus x-y plot) - \item correct tests - \end{itemize} -\item Scales exhibit increasing information content from nominal - to absolute.\\ - Conversion ,,downwards'' is always possible -\item For example: size measured in meter (ratio scale) $\rightarrow$ - categories ``small/medium/large'' (ordinal scale) -\end{itemize} - -\subsection{Examples from neuroscience} -\begin{itemize} -\item {\bf absolute:} - \begin{itemize} - \item size of neuron/brain - \item length of axon - \item ion concentration - \item membrane potential - \item firing rate - \end{itemize} - -\item {\bf interval:} - \begin{itemize} - \item edge orientation - \end{itemize} - -\item {\bf ordinal:} - \begin{itemize} - \item stages of a disease - \item ratings - \end{itemize} - -\item {\bf nominal:} - \begin{itemize} - \item cell type - \item odor - \item states of an ion channel - \end{itemize} - -\end{itemize} - diff --git a/programming/lectures/programming.tex b/programming/lectures/programming.tex index 2fb77cf..d34ad99 100644 --- a/programming/lectures/programming.tex +++ b/programming/lectures/programming.tex @@ -1,6 +1,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\chapter{\tr{Programming basics}{Grundlagen der Programmierung in Matlab}} +\chapter{\tr{Programming basics}{Grundlagen der Programmierung in \matlab}} \section{Variablen und Datentypen} @@ -8,13 +8,13 @@ Eine Variable ist ein Zeiger auf eine Stelle im Speicher. Dieser Zeiger hat einen Namen, den Variablennamen, und einen Datentyp -(Abbildung \ref{variablefig}).Im Speicher wird der Wert der Variablen +(Abbildung \ref{variablefig}). Im Speicher wird der Wert der Variablen bin\"ar gespeichert. Wird auf den Wert der Variable zugegriffen, wird dieses Bitmuster je nach Datentyp interpretiert. Das Beispiel in Abbildung \ref{variablefig} zeigt, dass das gleiche Bitmuster im einen Fall als 8-Bit Integer Datentyp zur Zahl 38 interpretiert wird und im anderen Fall als Character zum kaufm\"annischen ``und'' ausgewertet -wird. In Matlab sind Datentypen nicht von sehr zentraler +wird. In \matlab{} sind Datentypen nicht von sehr zentraler Bedeutung. Wir werden uns dennoch sp\"ater etwas genauer mit ihnen befassen. @@ -37,10 +37,9 @@ befassen. \subsection{Erzeugen von Variablen} -In Matlab kann eine Variable auf der Kommandozeile, in einem Skript +In \matlab{} kann eine Variable auf der Kommandozeile, in einem Skript oder einer Funktion an beliebiger Stelle erzeugen. Das folgende Listing zeigt zwei M\"oglichkeiten: -\footnotesize \begin{lstlisting}[label=varListing1, caption=Erzeugen von Variablen] >> y = [] y = @@ -50,26 +49,23 @@ y = x = 38 \end{lstlisting} -\normalsize Die Zeile 1 kann etwa so gelesen werden:''Erzeuge eine Variable mit dem Namen y und weise ihr einen leeren Wert zu.'' Das Gleichheitszeichen ist der sogenannte \textit{Zuweisungsoperator}. Zeile 5 definiert eine Variable x, der -nun der Zahlenwert 38 zugewiesen wird. Da Matlab, wenn nicht anders +nun der Zahlenwert 38 zugewiesen wird. Da \matlab{}, wenn nicht anders angegeben immer den ``double'' Datentypen benutzt, haben beide Variablen diesen Datentyp. -\footnotesize \begin{lstlisting}[label=varListing2, caption={Erfragen des Datentyps einer Variable, Listen aller definierten Variablen.}] >>disp(class(x)) double >> >> who % oder whos um mehr Information zu bekommen \end{lstlisting} -\normalsize -Bei der Namensgebung ist zu beachten, dass Matlab auf Gro{\ss}- und +Bei der Namensgebung ist zu beachten, dass \matlab{} auf Gro{\ss}- und Kleinschreibung achtet und ein Variablennane mit einem alphabethischen Zeichen beginnen muss. Des Weiteren sind Umlaute, Sonder- und Leerzeichen in Variablennamen nicht erlaubt. @@ -77,12 +73,11 @@ Leerzeichen in Variablennamen nicht erlaubt. \subsection{Arbeiten mit Variablen} -Nat\"urlich kann man mit den Variablen auch arbeiten, bzw -rechnen. Matlab kennt alle normalen arithmetischen Operatoren wie +Nat\"urlich kann mit den Variablen auch gearbeitet, bzw +gerechnet werden. \matlab{} kennt alle normalen arithmetischen Operatoren wie \code{+, -, *. /}. Die Potenz wird \"uber das Dach Symbol \code{\^} dargestellt. Das folgende Listing zeigt, wie sie benutzt werden. -\footnotesize \begin{lstlisting}[label=varListing3, caption={Rechnen mit Variablen.}] >> x = 1; >> x + 10 @@ -110,12 +105,11 @@ z = >> >> clear z \end{lstlisting} -\normalsize Beachtenswert ist z.B. in Zeilen 3 und 6, dass wir mit dem Inhalt einer Variablen rechnen k\"onnen, ohne dass dadurch ihr Wert -ver\"andert w\"urde. Wenn der Wert einer Variablen ver\"andert werden -soll, dann muss dieser der Variable expliyit zugewiesen werden (mit +ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden +soll, dann muss dieser der Variable explizit zugewiesen werden (mit dem \code{=} Zuweisungsoperator, z.B. Zeilen 16, 20). Zeile 25 zeigt wie eine einzelne Variable gel\"oscht wird. @@ -127,8 +121,8 @@ interpretiert werden. Die Wichtigsten Datentpyen sind folgende: \begin{itemize} \item \textit{integer} - Ganze Zahlen. Hier gibt es mehrere - Unterarten, die wir in Matlab (meist) ignorieren k\"onnen. -\item \textit{double} - Flie{\ss}kommazahlen. + Unterarten, die wir in \matlab{} (meist) ignorieren k\"onnen. +\item \textit{double} - Flie{\ss}kommazahlen. Im Gegensatz zu den reelen Zahlen, die durch diesen Datentyp dargestellt werden, sind sie abz\"ahlbar. \item \textit{complex} - Komplexe Zahlen. \item \textit{logical} - Boolesche Werte, die als wahr (\textit{true}) oder falsch (\textit{false}) interpretiert werden. @@ -142,18 +136,18 @@ unterschiedlichem Speicherbedarf und Wertebreich. \centering \caption{Gel\"aufige Datentypen und ihr Wertebereich.} \label{dtypestab} -\begin{tabular}{l|l|c|cl} -Datentyp & Speicherbedarf & Wertebereich & Beispiel \\ \cline{1-4} -double & 64 bit & & Flie{\ss}kommazahlen.\\ \cline{1-4} -int & 64 bit & $-2^{31} bis 2^{31}-1$ & Ganzzahlige Werte \\ \cline{1-4} -int16 & 64 bit & $-2^{15} bis 2^{15}-1$ & Digitalisierte Spannungen. \\ \cline{1-4} -uint8 & 64 bit & 0 bis 255 & Digitalisierte Imaging Daten. \\ \cline{1-4} - & & & +\begin{tabular}{llcl} +\hline +Datentyp & Speicherbedarf & Wertebereich & Beispiel \rule{0pt}{2.5ex} \\ \hline +double & 64 bit & $\approx -10^{308}$ bis $\approx 10^{308}$ & Flie{\ss}kommazahlen \rule{0pt}{2.5ex}\\ +int & 64 bit & $-2^{31}$ bis $2^{31}-1$ & Ganzzahlige Werte \\ +int16 & 64 bit & $-2^{15}$ bis $2^{15}-1$ & Digitalisierte Spannungen. \\ +uint8 & 64 bit & $0$ bis $255$ & Digitalisierte Imaging Daten. \\ \hline \end{tabular} \end{table} -Matlab arbeitet meist mit dem ``double'' Datentyp wenn numerische +\matlab{} arbeitet meist mit dem ``double'' Datentyp wenn numerische Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit den Datentypen auseinanderzusetzen. Ein Szenario, dass in der Neurobiologie nicht selten ist, ist, dass wir die elektrische @@ -161,54 +155,50 @@ Aktivit\"at einer Nervenzelle messen. Die gemessenen Spannungen werden mittels Messkarte digitalisiert und auf dem Rechner gespeichert. Typischerweise k\"onnen mit solchen Messkarten Spannungen im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung der Wandler -betr\"agt typischerweise 16 bit. Das heisst, dass der gesamte +betr\"agt heutzutage meistens 16 bit. Das heisst, dass der gesamte Spannungsbereich in $2^{16}$ Schritte aufgeteilt ist. Um Speicherplatz -zu sparen ist es sinnvoll, die gemessenen Daten als ``int16'' Werte im +zu sparen w\"are es sinnvoll, die gemessenen Daten als ``int16'' Werte im Rechner abzulegen. Die Daten als ``echte'' Spannungen, also als Flie{\ss}kommawerte, abzulegen w\"urde den 4-fachen Speicherplatz ben\"otigen. - \section{Vektoren und Matrizen} -\begin{definition}[Vektoren und Matrizen] +%\begin{definition}[Vektoren und Matrizen] Vektoren und Matrizen sind die wichtigsten Datenstrukturen in - Matlab. In andern Programmiersprachen spricht man von ein- + \matlab. In anderen Programmiersprachen spricht man von ein- bzw. mehrdimensionalen Feldern. Felder sind Datenstrukturen, die mehrere Werte des geleichen Datentyps in einer Variablen vereinen. Da Matalb seinen Ursprung in der Verarbeitung von - mathematischen Vektoren und Matrizen hat werden sie hier auch so - genannt.\\ + mathematischen Vektoren und Matrizen hat, werden sie hier auch so + genannt. - In Wahrheit existiert auch in Matlab kein Unterschied zwischen - beiden Datenstrukturen. Im Hintergrund sind auch Vektoren - 2-diemsensionale Matrizen bei denen eine Dimension die Gr\"o{\ss}e 1 + \matlab{} macht keinen Unterschied zwischen Vektoren und Matrizen. + Vektoren sind 2-dimsensionale Matrizen bei denen eine Dimension die Gr\"o{\ss}e 1 hat. -\end{definition} +%\end{definition} \subsection{Vektoren} -Im Gegensatz zu den Variablen, die einzelene Werte beinhalten, -Skalare, kann ein Vektor mehrere Werte des gleichen Datentyps +Im Gegensatz zu Variablen, die einzelene Werte beinhalten +(Skalare), kann ein Vektor mehrere Werte des gleichen Datentyps beinhalten (Abbildung \ref{vectorfig} B). Die Variable ``test'' enth\"alt in diesem Beispiel vier ganzzahlige Werte. - \begin{figure} \includegraphics[width=0.8\columnwidth]{scalarArray} \caption{\textbf{Skalare und Vektoren. A)} Eine skalare Variable kann genau einen Wert tragen. \textbf{B)} Ein Vektor kann mehrer Werte des gleichen Datentyps (z.B. ganzzahlige Integer Werte) - beinhalten. Matlab kennt den Zeilen- (row-) und Spaltenvektor + beinhalten. \matlab{} kennt den Zeilen- (row-) und Spaltenvektor (columnvector).}\label{vectorfig} \end{figure} Das folgende Listing zeigt, wie einfache Vektoren erstellt werden k\"onnen. -\footnotesize \begin{lstlisting}[label=arrayListing1, caption={Erstellen einfacher Zeilenvektoren.}] >> a = [0 1 2 3 4 5 6 7 8 9] % Erstellen eines Zeilenvektors a = @@ -222,14 +212,12 @@ k\"onnen. c = 0 2 4 6 8 10 \end{lstlisting} -\normalsize -Die L\"ange eines Vektors kann mithilfe der Funktion \code{length()} -bestimmt werden. \"Ahnliche Information kann man \"uber die Funktion -\code{size()} erhalten. Im Falle des Vektors \code{a} von oben erh\"alt -man folgende Ausgabe: +Die L\"ange eines Vektors, d.h. die Anzahl der Elemente des Vektors, +kann mithilfe der Funktion \code{length()} bestimmt werden. \"Ahnliche +Information kann \"uber die Funktion \code{size()} erhalten werden. Im +Falle des Vektors \code{a} von oben erh\"alt man folgende Ausgabe: -\footnotesize \begin{lstlisting}[label=arrayListing2, caption={Gr\"o{\ss}e von Vektoren.}] >> length(a) ans = @@ -238,19 +226,17 @@ ans = ans = 1 10 \end{lstlisting} -\normalsize 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. -\footnotesize \begin{lstlisting}[label=arrayListing3, caption={Spaltenvektoren.}] >> b = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10] % Erstellen eines Spaltenvektors b = 1 2 - .... + ... 9 10 >> length(b) @@ -278,14 +264,13 @@ Zeilenvektor. Der Zugriff auf die Inhalte eines Vektors erfolgt \"uber den Index (Abbildung \ref{vectorindexingfig}). Jedes Feld in einem Vektor hat -einen \textit{Index} \"uber den auf die Werte des Vektors zugegriffen -werden kann. Dabei spielt es keine Rolle, ob es sich um einen Zeilen- -oder Spaltenvektor handlet. \textbf{Achtung!} Anders als viele andere -Sprachen beginnt Matlab mit dem Index 1. Die Listings -\ref{arrayListing4} und \ref{arrayListing5} zeigen wie man mit dem -Index auf die Inhalte zugreifen kann. - -\footnotesize +einen fortlaufenden \textit{Index}, \"uber den auf die Werte des +Vektors zugegriffen werden kann. Dabei spielt es keine Rolle, ob es +sich um einen Zeilen- oder Spaltenvektor handelt. \textbf{Achtung!} +Anders als viele andere Sprachen beginnt \matlab{} mit dem Index +1. Die Listings \ref{arrayListing4} und \ref{arrayListing5} zeigen wie +man mit dem Index auf die Inhalte zugreifen kann. + \begin{lstlisting}[label=arrayListing4, caption={Zugriff auf den Inhalt von Vektoren I}] >> a = (11:20); >> a(1) % das 1. Element @@ -298,42 +283,34 @@ ans = ans = 20 \end{lstlisting} -\normalsize -Hierbei kann man auf einzelne Werte zugreifen oder, analog zur -Erzeugung von Vektoren, die \code{:} Notation verwenden um auf mehrere +Hierbei kann auf einzelne Werte zugegriffen werden oder, analog zur +Erzeugung von Vektoren, die \code{:} Notation verwendet werden, um auf mehrere Element gleichzeitig zuzugreifen. -\footnotesize \begin{lstlisting}[caption={Zugriff auf den Inhalt von Vektoren I}, label=arrayListing5] >> a([1 3 5]) % das 1., 3. und 5. Element ans = 11 13 15 ->> a(2:4) % alle element von Index 2 bis 4 +>> a(2:4) % alle Elemente von Index 2 bis einschliesslich 4 ans = 12 13 14 >> a(1:2:end) %jedes zweite Element ans = 11 13 15 17 19 \end{lstlisting} -\normalsize -\paragraph{Frage:} +\begin{exercise}{vectorsize.m}{} Der R\"uckgabewert von \code{size(a)} ist wieder ein Vektor der L\"ange 2. Wie k\"onnte man also die Gr\"o{\ss}e von \code{a} in der zweiten Dimension herausfinden? - -\paragraph{Antwort:} -Man speichert den R\"uckgabewert in einer Variable (\code{s = size(a);}) -und gibt den Inhalt an der Stelle 2 aus (\code{disp(s(2))}). - +\end{exercise} \subsubsection{Operationen auf Vektoren} -Nat\"urlich kann man mit Vektoren auch rechnen. Listing +Mit Vektoren kann sehr einfach gerechnet werden. Listing \ref{arrayListing5} zeigt Rechnungen mit Vektoren. -\footnotesize \begin{lstlisting}[caption={Rechnen mit Vektoren.},label=arrayListing5] >> a = (0:2:8); >> a + 5 % addiere einen Skalar @@ -360,29 +337,27 @@ ans = ??? Error using ==> plus Matrix dimensions must agree. \end{lstlisting} -\normalsize Wird ein Vektor mit einem skalaren Wert verrechnet, dann ist das -Problemlos m\"oglich. Bei der Multiplikation (Zeile 10), der Division -(Zeile 14) und auch der Potenzierung sollte man mit vorangestellem '.' -klar machen, dass es sich um einen \textit{elementweise} Verarbeitung -handelt. F\"ur diese elementweisen Operationen kennt Matlab die -Operatoren \code{.*, ./} und \code{.\^}. Die einfachen Operatoren sind -im Kontext von Vektoren und Matrizen anders belegt, als man es -vielleicht erwarten w\"urde. Es sind dann die entsprechenden -Matrixoperationen, die man aus der linearen Algebrar kennt (s.u.). - -Zu Beachten ist des Weiteren noch die Fehlermeldung am SChluss von +problemlos m\"oglich. Bei der Multiplikation (Zeile 10), der Division +(Zeile 14) und auch der Potenzierung mu{\ss} mit vorangestellem '.' +klar gemacht werden, dass es sich um eine \textit{elementweise} +Verarbeitung handeln soll. F\"ur diese elementweisen Operationen kennt +\matlab{} die Operatoren \code{.*}, \code{./} und \code{.\^}. Die +einfachen Operatoren \code{*}, \code{/} und \code{\^} sind mit den +entsprechenden Matrixoperationen aus der linearen Algebrar belegt +(s.u.). + +Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von Listing \ref{arrayListing5}. Wenn zwei Vektoren (elementweise) -miteinander verrechnet werden sollen muss nicht nur die Anzahl Element -übereinstimmen sondern es muss auch das Layout (Zeilen- oder +miteinander verrechnet werden sollen, muss nicht nur die Anzahl der Elemente +übereinstimmen, sondern es muss auch das Layout (Zeilen- oder Spaltenvektoren) \"ubereinstimmen. Will man Elemente aus einem Vektor entfernen, dann weist man den entsprechenden Zellen einen leeren Wert (\code{[]}) zu. -\footnotesize \begin{lstlisting}[label=arrayListing6, caption={L\"oschen von Elementen aus einem Vektor.}] >> a = (0:2:8); >> length(a) @@ -400,17 +375,15 @@ ans = 2 \end{lstlisting} -Neben dem L\"oschen von Vektorinhalten kann man Vektoren auch -erweitern oder zusammensetzen. Auch hier muss das Layout der Vektoren +Neben dem L\"oschen von Vektorinhalten k\"onnen Vektoren auch +erweitert oder zusammengesetzt werden. Auch hier muss das Layout der Vektoren \"ubereinstimmen (Listing \ref{arrayListing7}, Zeile 12). Will man einen Vektor erweitern, kann man \"uber das Ende hinaus -zuweisen. Matlab erweitert dann die Variable. Auch hierbei muss auf +zuweisen. \matlab{} erweitert dann die Variable. Auch hierbei muss auf das Layout geachtet werden. Zudem ist dieser Vorgang -``rechenintensiv'' und man sollte, soweit m\"oglich, vermeiden -Vektoren bei Bedarf einfach zu erweitern. +``rechenintensiv'' und sollte soweit m\"oglich vermieden werden. -\footnotesize -\begin{lstlisting}[caption={Zusammenf\"ugen und erweitern von Vektoren.}, label=arrayListing7] +\begin{lstlisting}[caption={Zusammenf\"ugen und Erweitern von Vektoren.}, label=arrayListing7] >> a = (0:2:8); >> b = (10:2:19); >> c = [a b] % erstelle einen Vektor aus einer Liste von Vektoren @@ -451,7 +424,6 @@ Erzeugt werden Matrizen sehr \"ahnlich zu den Vektoren (Listing Vektor, durch \code{[]} eingeschlossen. Das \code{;} trennt die einzelnen Zeilen der Matrize. -\footnotesize \begin{lstlisting}[label=matrixListing, caption={Erzeugen von Matrizen.}] >> a = [1 2 3; 4 5 6; 7 8 9] >> a = @@ -472,10 +444,9 @@ einzelnen Zeilen der Matrize. 1 1 1 1 1 1 \end{lstlisting} -\normalsize Zur Defintion von mehr-dimensionalen Matrizen ist die Notation in -Zeile 1 nicht wirklich geeignet. Es gibt allerdings eine Reihe von +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} @@ -504,7 +475,6 @@ angesprochen, der aus $n$ Zahlen besteht wobei $n$ die Dimensionalit\"at der Matrize ist. Diese Art des Zugriffs wird \textit{subsript indexing} genannt. -\footnotesize \begin{lstlisting}[caption={Zugriff auf Inhalte von Matrizen, Indexierung.}, label=matrixIndexing] >> x = randi(100, [3, 4, 5]); % 3-D Matrix mit Zufallszahlen @@ -527,7 +497,6 @@ ans(:,:,4) = ans(:,:,5) = 56 \end{lstlisting} -\normalsize Alternativ zum \textit{subscript indexing} k\"onnen die Zellen einer Matrize auch \textit{linear} angesprochen werden (Abbildung @@ -569,13 +538,12 @@ Vektoren. Matrizen k\"onnen solange elementweise miteinander Verrechnet werden, wie die Dimensionalit\"aten \"ubereinstimmen. Besondere Vorsicht sollte man immer dann walten lassen, wenn man Matrizen miteinander mulitplizieren, dividieren oder -postenzieren will. Hier ist es wichtig sich klarzumachen was man will: -Eine elementweise multiplikation (\code{.*} Operator, Listing +potenzieren will. Hier ist es wichtig sich klarzumachen was man will: +Eine elementweise Multiplikation (\code{.*} Operator, Listing \ref{matrixOperations} Zeile 18) oder ob eine Matrixmultiplikation (\code{*} Operator, Listing \ref{matrixOperations} Zeile 12) durchgef\"uhrt werden soll. -\footnotesize \begin{lstlisting}[label=matrixOperations, caption={Zwei Arten von Multiplikationen auf Matrizen.}] >> A = randi(10, [3, 3]) % 2-D Matrix A = @@ -601,13 +569,12 @@ durchgef\"uhrt werden soll. 50 70 5 >> \end{lstlisting} -\normalsize \section{Boolesche Operationen} Boolesche Ausdr\"ucke sind Anweisungen, die zu \textit{wahr} oder \textit{falsch} ausgewertet werden. Man kennt sie z.B. aus der -Mengenlehre. In der Programmierung werdens sie eingesetzt um z.B. die +Mengenlehre. In der Programmierung werdens sie eingesetzt, um z.B. die Beziehung zwischen Entit\"aten zu testen. Hierzu werden die \textit{relationalen Operatoren} (\code{>, <, ==, !}, gr\"o{\ss}er als, kleiner als, gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke @@ -650,19 +617,19 @@ wahr, wenn sich der eine \textit{oder} der andere Ausdruck zu wahr auswerten l\"a{\ss}t. Tabelle \ref{logicaloperators} zeigt die logischen Operatoren, die in -Matlab definiert sind. Zu bemerken sind hier noch die \code{\&\&} und -\code{||} Operatoren. Man kann beliebige Ausdr\"ucke verkn\"uepfen und +\matlab{} definiert sind. Zu bemerken sind hier noch die \code{\&\&} und +\code{||} Operatoren. Man kann beliebige Ausdr\"ucke verkn\"upfen und h\"aufig kann schon anhand des ersten Ausdrucks entschieden werden, ob der gesamte Boolesche Ausdruck zu wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit einem UND verkn\"upft werden und der erste zu falsch ausgewerte wird, dann muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der ``short-circuit'' Versionen spart -rechenzeit. Das auschliessende ODER (XOR) ist in Matlab nur als Funktion +Rechenzeit. Das auschliessende ODER (XOR) ist in \matlab{} nur als Funktion \code{xor(A, B)} verf\"ugbar. \begin{table}[th] \caption{\label{logicaloperators} - \textbf{Logische Operatoren in Matlab.}} + \textbf{Logische Operatoren in \matlab.}} \begin{center} \begin{tabular}{c|c} \hline @@ -684,7 +651,7 @@ auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als \begin{table}[th] \caption{\label{relationaloperators} - \textbf{Relationale Operatoren in Matlab.}} + \textbf{Relationale Operatoren in \matlab.}} \begin{center} \begin{tabular}{c|c} \hline @@ -703,16 +670,15 @@ auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als Das Ergebnis eines Booleschen Ausdrucks ist immer vom Datentyp \textit{logical}. Man kann jede beliebige Variable zu wahr oder falsch auswerten indem man in den Typ \textit{logical} umwandelt. Dabei -werden von Matlab alle Werte, die nicht 0 sind als wahr +werden von \matlab{} alle Werte, die nicht 0 sind als wahr eingesch\"atzt. Listing \ref{booleanexpressions} zeigt einige -Beispiele. Matlab kennt die Schl\"usselworte \code{true} und +Beispiele. \matlab{} kennt die Schl\"usselworte \code{true} und \code{false}. Diese sind jedoch nur Synonyme f\"ur die \textit{logical} Werte 1 und 0. Man beachte, dass der Zuweisungsoperator \code{=} und der logische Operator \code{==} zwei grundverschiedene Dinge sind. Da sie umgangsprachlich gleich sind kann man sie leider leicht verwechseln. -\footnotesize \begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions] >> true ans = @@ -751,7 +717,6 @@ ans = ans = 1 0 1 1 0 \end{lstlisting} -\normalsize \section{Logisches Indizieren}\label{logicalindexingsec} @@ -759,7 +724,7 @@ ans = \section{Kontrollstrukturen}\label{controlstructsec} -\begin{definition}[Kontrollstrukturen] +%\begin{definition}[Kontrollstrukturen] In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten ausgef\"uhrt. Manchmal muss der Kontrollfluss aber so gesteuert werden, dass bestimmte Teile des Programmcodes wiederholt oder nur @@ -770,7 +735,7 @@ ans = \item Schleifen. \item Bedingte Anweisungen und Verzweigungen. \end{enumerate} -\end{definition} +%\end{definition} \section{Skripte und Funktionen} diff --git a/programming/lectures/variables_datatypes.tex b/programming/lectures/variables_datatypes.tex index a3ad152..7e937ad 100644 --- a/programming/lectures/variables_datatypes.tex +++ b/programming/lectures/variables_datatypes.tex @@ -2,9 +2,9 @@ \subsection{Variablen} -Eine Variable ist ein Zeiger auf eine Stelle im Speicher. Dieser +Eine Variable ist ein Zeiger auf eine Stelle im Speicher (RAM). Dieser Zeiger hat einen Namen, den Variablennamen, und einen Datentyp -(Abbildung \ref{variablefig}).Im Speicher wird der Wert der Variablen +(Abbildung \ref{variablefig}). Im Speicher wird der Wert der Variablen bin\"ar gespeichert. Wird auf den Wert der Variable zugegriffen, wird dieses Bitmuster je nach Datentyp interpretiert. Das Beispiel in Abbildung \ref{variablefig} zeigt, dass das gleiche Bitmuster im einen @@ -73,8 +73,8 @@ Leerzeichen in Variablennamen nicht erlaubt. \subsection{Arbeiten mit Variablen} -Nat\"urlich kann man mit den Variablen auch arbeiten, bzw -rechnen. Matlab kennt alle normalen arithmetischen Operatoren wie +Nat\"urlich kann mit den Variablen auch gearbeitet, bzw +gerechnet werden. Matlab kennt alle normalen arithmetischen Operatoren wie \code{+, -, *. /}. Die Potenz wird \"uber das Dach Symbol \verb+^+ dargestellt. Das folgende Listing zeigt, wie sie benutzt werden. @@ -110,8 +110,8 @@ z = Beachtenswert ist z.B. in Zeilen 3 und 6, dass wir mit dem Inhalt einer Variablen rechnen k\"onnen, ohne dass dadurch ihr Wert -ver\"andert w\"urde. Wenn der Wert einer Variablen ver\"andert werden -soll, dann muss dieser der Variable expliyit zugewiesen werden (mit +ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden +soll, dann muss dieser der Variable explizit zugewiesen werden (mit dem \code{=} Zuweisungsoperator, z.B. Zeilen 16, 20). Zeile 25 zeigt wie eine einzelne Variable gel\"oscht wird. @@ -143,8 +143,7 @@ Datentyp & Speicherbedarf & Wertebereich & Beispiel \\ \cline{1-4} double & 64 bit & $-2^{15} bis 2^{15}-1$ & Flie{\ss}kommazahlen.\\ \cline{1-4} int & 64 bit & $-2^{31} bis 2^{31}-1$ & Ganzzahlige Werte \\ \cline{1-4} int16 & 64 bit & $-2^{15} bis 2^{15}-1$ & Digitalisierte Spannungen. \\ \cline{1-4} -uint8 & 64 bit & 0 bis 255 & Digitalisierte Imaging Daten. \\ \cline{1-4} - & & & +uint8 & 64 bit & 0 bis 255 & Digitalisierte Imaging Daten. \cline{1-4} \end{tabular} \end{table} diff --git a/scientificcomputing-script.tex b/scientificcomputing-script.tex index faeaf4d..891303c 100644 --- a/scientificcomputing-script.tex +++ b/scientificcomputing-script.tex @@ -1,4 +1,4 @@ -g\documentclass[12pt]{report} +\documentclass[12pt]{report} \input{header} diff --git a/spike_trains/lecture/images/psth_comparison.pdf b/spike_trains/lecture/images/psth_comparison.pdf index 66bc2bff4bd146ea750f6b8d53b8992647859175..216f26b20252572f0c67f0af89c446510f9f8251 100644 GIT binary patch literal 103782 zcmc$`1y~hb+doPwCDJLl>4qJ2C>_!vARy96H-dpEC?cKGAStDUARr(ijetQ3B1lOo zrJ$&sHEi~N9^cRN{ypDy&UG%GYi9PWb+6yu_nKKOEZsjiK)y{#`y z;-C%a;OlGe?G6)zZb?M+ygh6U?R{b9fRwT-Aa5Vw3lq_B17sBs&q{}94cK{@h)RI3 znxU_?uRTl@O~CM?wVji@BTO7kUe&|h7lt~x{s#^M4t~Hepyuu2=Lv&YQ8I*yDBJrx z+1eYZfx*C?k+-$GkEgY_y}NB7hE;U?Q>P$a!2@43vm_$g_I6IziXH&~Iz(Pf6b?g) z!y$|Y_C6kd-nKw4kQ@v!gdkCYK>zF-Z|h+P zdTQCbJNjOPAs}rW2;0Zk+uquZBp{>UymkUtms{h`qmOyl)@^aWTuW>dXOTX~&T&=m zBTQ5C^8C!J53dYDuQ#D?1XXV}kfQQpm1f?#HGUE{x*try|1$BXZu;u`&rbU*!h56U zZSRA|TxPO$zdE}AnD{xk|F(Ie`8(mK-AK&~9yP0P_sZv9h1H5mdn8|N-nFCm(Z8~= zL4Rs_aN^O<>CdA@iPAg9?lotVvUuEoEw%qTxmWbF^aAgDp(l57i_+CS3W}sVlh(jG8UfBnOt; zlWX~v+grM%V(t$vlWUUg%k9s(oV&?VKT=gzBj_U3XVzB*U6#2Bt(f&Sj8r|WDZ4QX znv9x_)FcBM=Uv7}%xY_r-OBCF4=!7tJ*;tc5t=aTs~xF&RI}!u5iLOljIa(y*a9Q$ zh7k_I2*+TA(=fu1Fv4{h;rH8c-XRG*MM|o>IeMYD*x@wy?-P*|2B_o7bKm;|O-u@q#&V72|Q(HG<>HG=PR;^=o^<5@{IikAT@oGZ4!$9Y5-Amx zq6f<~Ntw9~hDHG-f7Si}*1omY z>(rpv>yBePE2A=WKkkP3R_?BydF^%Iar)jRn~qA>|J-PmNe|}=oX@SP$XnXsVol(pv>jjT;aak5RU;KvT8&30i z^S?fZW&6bKhp%MpMLkn)Y)dgnI-;Ak<8d91NBVjH$LW*%d+m#RN>hD?();Y=pmy%`Ax zi{=;6jBmvXn7J8QbGZV(ob)%7nLQ4Ap3L<$5vc$TIOddgh%$Au5n&O*kHJ z?3U5CxFNIWu+JThIdOxM2?J!otJ+s}X9-kNuj$bHJxEtG!+5o@ROI(OML#X z8^yF7&PQCPd>6a)-as)+W?4O-P2**H)u-x2D+B(noPZOFnbo#u;kQX#RN}p9*JxVT z^l!fGN5XGUYV!!P1na*~rXq{R?}Bx zYAl&5|A#|2^+TeB_f{OWOx07;mY#90iPM=O_+ek@TRHu>b9EO~;l~1n__{vH3f<>s zh*)b$Ql2UMR_H6hH#maOW(eVqWaB87CH5zAuun}^`Z%`bG{^1CPIlwzwtiK8zJrf` z{Y#D_gNcf+nT@8cL}xC>JnKB$lT(Y2$r4(`1_o}O50@U4u8CDmaZ%IL7cL`7Hhg$9 z^JXz!i1&TQA|uf+4(w%?h5J`yU4?tjx)QDD7Z*j>xOTWZdn&1mBvVbFbx$#yu{Cs3 zs(DIuJE26*gUuj0rl#fBnHw(dJy+>%1Sf~`7bOAjB!j#&_uPxwo`w_*yHnK(+MQ>3 ze&&tl{RaFiK`mcrGTqFQWSYERXDL^RyZSkJnOWQW*FUYLh&<(FPTG@UL?m2kb%BIc z=&PWhityv|gzgXW{OYP=D}5Cj#1_I=M{5(`*wo&_f!$G59JG#j7%Wh>md(Y?#nSma zy|;W2UoJ((Ipm3i=DG0O^=*B*9LD|urAY3ZB~(J42k&%o zGBzW;<^prLUZ8z0cyyk(gs$C^MfyT;j&GEY2>uJNHRtTD_x@_SP1$ zTA|y+iY?yKx^4sUQB=z5^;PP-lngE;%AOkSjpT(ifqFcFGd;$I>a%akl|!$Rk~%iW zx}6`S`{biR>4p-kLufRs6AB=zT{Sgyt_5VUi0m%It$sYUBw!}2=4$6nVJkBZTRZM^ zLa({V0FScqWG+>0VlBeE_nl&s@y&kOoq~J{&a8VUNY6ZS2>Rkm7Tc2AXVYb@C6TN2 zE;;wEwdDd1H_X}GgRQlYmvl&PCL`@zYZ4JdvyjD+m)jrvOiA=B$2%P!;p;ZE8$=Rb z#7(z1zdQYM)9-ScCsp$3%1|>&r8e=RJ*71p->{KfAa?+TpdMH8-11{4lRLqzI)qo~ z7w%-V2&QPri=A$aeKX=)^UTbTCVggw z^Lqol_J+2{QCk^i=UPS839N%=@MWkq$oCYg>Iqcs5dIlI;MB~)Y4QYNct_8rRKWzT z`j~~0dCyOWhtYfDJ00gfB|_MJ`L#1or81J}x(QYPXd@F+_01hFIy!P(U-9YS=~qYT zrDZZc5$Su@F|?lvRpt~K(mW|zK^SlYhkC^1>u{?5SjHn|T1)q*ou+mHVuMvA&nUzs zLpxwcLb@{|ypDIqzM^vx-5!zNSk`P^xOs}~6s1@jRqU)?jAtGW=aPj+Fpf75UNH08 zTJ$Y)%J|RqB3#u>1gGVWGew!3H6P7F&|WavlbE~^wCnh=Vfzhr^{DG{VNTDSqZGId zpZZDCTW5>=lR8zZ3~yQ#Kg6RWbs>uCC#BE*bf1#$#=6W*+SO9+!Xxz-D$FW)0_(Di z^8_}isnEvy0s?M%4&C6efYTN**Kl?^zN&z4^XyIqEcH&;bxIMp$*evTK1#4FB4Ayv zne0a75p4ufq*`(b(wHLe#lF+?*jP`gl!iC^g22|_V?%8)@v^cySY^$cz{Tha zm(_eJYpT$XTBOvCI1WE08kcW^Z_gVgbPw+$4LBzamTPIgq-~oC-57?Yo)~2sSJe=1 z+`rk4JfX_x5HFxlh#V8>K|$pOfV|nf87ycyLC&WhI}A-l!km6sLuVan=jBp`8mL z+{mA$+azY7xNDW#<8BjMTh*;7zx`}IAjKe`t&}D){*zw=HF5%el{3vvxR;%V?Xlq9 zt^m2SRZ*1`3Owig@o%mvo7JWqeQreND|{vZ=lIyorX#tQVjd=r-Fl;|fdcv`!*q^6 zJk2rETCyd^ze*G31YaRYiKR#SQ{8!}j9OwZx^=QmcS5Y_9dD|VaS~abr0bnV{xE$} z=9TJH4O*(Dj8am#y{W>Jx$69{DlE=@WYP9#!`|{SWx+G=o@8uARJuM%yyN`Pgg3*n zu)Y_{*9e|be5zFff~%S>bn&lH_ZK>D4XCM-HS~Qr{$5CGRMk0HG`)=JG@w<22%8f~~!(_Rm z>^Po~#Iik3;!S^|)xU8$q@8&ocG_i0eNCH`(tE+{+)Oz|6!(I{VvUG$UYf~S?Yj;F zMA;@9A)}SjCxi7nzl_J(d$BvWof0ft&EPcG9;!665Bt)6d8|Qf#g_Pr#Nd-yGD(Ln zN;r-DbE&&K-?tK-BzNo7MH6IIQW6M1kx#wWA*Xnf^KhW_VvNd!#Mhs}A7l3~^P9W6 zS+e#9NzFa`@ja;fdQ-dZmWafOupguEPlkQF$NULg$bh zSd-XweLrm`HvX?q3E8M%C-~CJCrPKeFP*&peRpZ^XVLrpAJ+S8&wjrDYzbGNQrYx8 z((`I7qvnT0!p|#5??Abo>8Iw;HNtn(-1ySIvIf67dQm`@Ws5#jnOUV{DiPP@ zc+ukHV~Rm0eq3$eqdOS*VaCJ5f_jM)AGDc^IWCiZ{=t2x>e%NT4Wb0QUz^|FzdNEB zJ*3pZjC-~_+w#n`|IzFlk7wNZjSZ<6UjN!vi_6@&lx{Kd{=z4fg{GQ`yJgC5Z?)ys zMKle~D&Aeq(#eftuM8}?BfLZ?Ig6|QWu{zt9XI8UxW}wi%w!Wy)>Us4_R1c)W0SFZ z8-dLqMFr{2j(Jdd@bY}%&wcMi`ntd6QHP&&I=9O3&WoNz3j5TGhh>5sKRD8JR5G-} zZ#6a6I^ONISj`aH3V8g`e?aG@Z>A1ir?bgdxdtlQ*GsNe_45;+nF9_QFB6kgDnjpH zbE2fNpJ2Ktag2_@#N&JXXHB;!i;PwL0*E#1D>3XLPse`_I9ZYgU(w6m&$*LsJJba^(yDQE@0H>)C?&nwtmiI!{w}b z)Z$#E1=DK8<7MQg>9(<%UwA_YtC!;R&g11DD~l`lWTGE0Uv2-nIllvbx!S(w2}iMhNHn{e@X_P()0$B^&j9oj5=|E5Rhdi;bg zUvlrbJiUR#+AMcESaUu5eO*~g5q&}4MRIF_iJaVJ{2)G zex5w1AEn>Iv~IGjTB{&SFSxBbd44SY)m@h7@kFh-MhlGHE@r9z-`f)Nw|vkg z>`22yhMS+vO699J5$9HX6X{uS;nf>)huV8vf{7M3<{bSvg%x|b?B`cy$4f@y+EWlYH#l?S^f_>=V}$2P{t~OdpdyS966ZHZVV&%~k`xocv<0 z{CpTEck*%7kP9vC$fwC9Wd$#JyQzcS@E=KJ+cFuy?yt#il27iBgu&I$*s^6B>}l0c z;f{MXM3+tNJprex-}`(xj;m)@xu@xzs@8Qm3$Dp~4v!Y)ZO0UbL zGwwoQ6s$pbCIsa|NNU%>p-04=@5z#`Vc;Lrq;KU@X*-z^ENi{l=n_6vnvV07B%Q`( zIm$38*>H7!_+s9%nXGp9chPHgLj3$J55TwpDxF^7jnC`Q> z{my80u9YtPVOz*Xaed(Nk^I(FE34D}84XX*s;0KS=*UVgHszcPPnXalK0Ps9wkK@e zt)|9kbDLo{tlwDDa&_Ox;--3p$w*Yd6Lu@u(C&y$^IKQa1jSnc@}@ICl~Q~SIAFm$ zC8isbjceiCJ#T7Ng=tppJZC>oO(c%Xw3$~lH#%M(9LrC4>|ShLZSgeyjF9LshLXPcj>7kQ zeUxh9E%J=)(>eL6YGUW(haBGNZeAtRfFG-^s=dil_(JDN<^}F+E{{nWm}6?2j@=!o zVDg4BlJvQLZDSRfKR0peP6WS{s!~i9*Q%a4oj=8qnTQD=IUnw?+;}op$0+T(m&A!j zA}$DX1_a+qIv0 z<(QihRD$2u>9`48gJ}Is16YHP5siO+kT-gJHnRfuGQ=pnE>rM9 z+m=s5J%LlQ+WEy1wkHPVIf`poRteli@2uJ6*fs3 zh38hPI0(JkPa3CGd{FcBa8=UcWTo0J7O}rdzLM zIEP4bVtH92j{cYpc*A>qPG+4|3#Et(T1?s;Na7W?zQ9+Q*PrKz|LI9uK3;jNh@`3` zanq2uq`2!V{mRO!Cz77jRQ9c3-bOoCXV-j~l;PvO5vIiZv0VZl7&2!>R;wW(&guWD z=>q$XAPsEj)h*Z=w<+pYWata-6FkAjtq&(-+=&-v`bjF@SC*}+yldiON3e`d_XzCS z9Vvdb_i_q8UZp|eMg5hFUSwLLkWR(PmMGv(&9EHl`D3d^?wuiN0i-$U?{5s3trlc) zdbL!;A`FW5+6{58rQjUFr?(-XmXmFgBON(E4qG@M5cM?TQ;hk|riL*awLLuZ>u=-; z9Z2h3#`ennf{UZhxrXdLxAzN@nUQ?OzS&zLoG{f!I5x?NG*G;AEN1+T)V?V_6Al-n z!0`(E=So!XE8o2##3@rhA6?iPGO4qdtt?%4?fZ?R>GO#A)~k4(p_2uY)tTCr3(+L$ zxf(uR9-)NKOL*z2D6A-ObX>UDWkd$GWNw;w*wJq^YvhevpLOlh$_@7AX-vp!HC8i2 zb_!^*zKH+G6?%)qhGC)H)x+Oel0NndW8Kk!+ZjEpj+zM^F7_M<>bn%(jy&GgxDlkS zBjh-$^H*Fg9c)Dz$ev%blCb5WHN1U;!RaO&=LhQDAMSzTPLoZ@otaO;+4*71SZiHXn*gDY<^DnlqNkxfo2N>BuV&^U#ns>Y?=~A0_>v=NWuX{>NGYksC)yAhH zGJKJ_ktsyJV!<()mO8f=wn^|A+d~sS#P@t{ov8^^C>d6ER_v{zxWew2YsHj$Da~UL zF9lI(>l6G^+4wBWcXuWuQ_d*NY?Sf!Jaqf$J+e3y3;$$mzB(kO~b$L zS}!=YmxNM}H*ZWY`f4~8ty(J`5v2?lQe`)=rHh!4DV`m_bpiFk&z|a{6tY^PC3xv| zbg){m>vRm+C|M%v=kwzN-5!W)6+tm8KOFk&N2`UBJEd`J;u_w~1tz=Hk+6E<5wH{U z>qI-`j&*0R`DUf)g^Ea6i8pO8QT=-2QK1Phe8H7aLw_a!MihHtIrGB%F(x%!e3IP3 z#@8#=H7$OhaqL%$6jZ%GrrJ)lCkiEN3ktxrS#?f+msk*L)4>a>OScP1K7BEEh`J&p z`BGzZ!tQ&mA-L7W&l}vf{(*W5xN%*uqc0q8hY!nMr7T0dJSioY*>odBtiJO$lNj$% z#;2^+73veF>}T5hO=~;x4cKN<9N%?^2H$!|x&RV}+acBgs* z?Fv_Ed>l-*NQm`At$)Vt>)cUxkTg0maFpjK%S>*yW3kuG5)Ts9BmSBQJsZ=c>6rnW zqmx3lUx|BQ@u#0u3Yp*0mjnXoF&Mx_u zcL4-tIgAA~rKB-DVL4a4!|vJDo_eXo6ylDV#n zcQ~U>R1J(pVOHm+B59;>H0unSn!}q0azjtPicIElKgxGt8ewRw~HR!!c-TRk1atj@(<`Xk6Uk(k}JvA2Oa;+)?Wipy?2 zI+4iWhHOXJaKOi*GP)Nxt6Q41uG3xdz;z20g{@lSGgP2L6r+FSWG1=4YY!;jF{BGR zb4O)RRX0NB?Zts2tMpLU&he6pTc5raW|}%(k|fBZc}0{Ulw?Mq$SO~KKRln;TyUC@ z)gmpFR^56q;XS@y*VP^!A}X?yllZl;Q$IdhRXqp^uqyKG&+?WDW>Uq!GhOd*EtMIe z=z6c`qR4XSp7SE3<<4{ekVie7{f2E{sAYB(Ryi71-34!(yEU5*$Xm4M*6G8_d&`2V zH3)HZj$U{c=yAg|TOcetvGDb#+qo3dFRN+<+q8{?8r-g9pIn{o%4u+--6*ywU~aV? zj*Lw3l0f{BFBeL(#bLV@pIkrPE+^{eTGj8)h|Pz+iBxJUL39zu>PiRi2-0;5npgC~ zyJ*BNNpQ+|Omz2zYAX3JEUH)F1}XNE$9E4nJPVcU)+tIKed^+<@qR*x!8{`{2Z~HbvM=5u1XpY zzYM{t5}PQK9y$ghid0s1R38P6m3CF;c8gP=onNOo!PAGk8YL`s#On08E8P!BpQ#Uz z-w#Wji+r_tzU3pHk#3mDjWC?o<)3m^yQLYx_! zDx;oR$~qhwqY82g-nPE0D7^AzFP4XjWx+(<$4ru+ZQpA7wYqiGlK_6-wjydN1OIG4 z^@*3;lQiq$V$+o`i|Ax_FXbrSHkegwU-hB4gTY+K`-)gb#e4*Y+MMTt!rnd!S#_n1 zw&Kj1tq+y$wLAKhGpaJ)Dx8%wC0^RXV7KW(ug5pWKoW&gRww2*+F+7CCI913)8DMA z;|M2q1qxduW`azKpN!0CuC4IdzYRZsI$9!?kJF>DY!%@i#)2@P`9;TLmS8AexP)(a zJAL}n=XfX6xFUrVKI@m=={D*#eEwO90nas`Tqy6j&3LTTn6t0lzQtv!b-9Et=|vb$ z5v}m1uPR=I&Fg4lQ?Bf>J;f*OK`i~QV$>mBg!v5q1diHL>pnJgE&UGb&lf4QTxP>w zSbbcjdGt$g%tQb5W~|h?XP?_^>{OU_ayIf@J?m4PzC2>!R^?-*u80`D{8QB@96og! zm!-LWi{i>95`~&aR1fZ#h9s`7R=*f)zH4Itp8P_96HgEGW6>g^>A}%r;akVf+g!-7 zb1yu4Y03EBo3xNJhr#CkpI;UuXlF8LzpRref0`G_m~!xt{Pq1i>Fzlq&VVix)Je;V zk(r$Kapq6guZNI7kJn$GMQTe8%~(a8cpNu+QYYf%(ae?Y^#)F+bF-lZd)m!& z8n;jVI??AJqg88SdgW_eoErPYY{5=bLf{rh+!}2!>$6m^50!G3mycf}_gYuBxpM0f z&{DHr`dU=Xy{RqLuhh7ybG;3d>2^(O%ZUkJbbL!L#eHF5y8|P=a`BgO6>Hylb;54- z`Krc<(jEC@J~~tH)+}ix-==e0r3Bo%w$5CAc{H`l^Y|z^l_h^nW7QsYt)6$_05h4a ztmBD@BV&D45yyKB3QMQot;z&(^||w~?0xgsSvnc?WBcC8>|frw?|)w2yYAAz8V@Zj zJ6!H`xWw#W85Fc$N=j5z6tnIOB@V4b`-el%Y7wtRA2 zxZ+(ldUc%V{qr}87lO|nk!Q-4Jo=D3OyC$!=f`8*{}T>M99netHzP~Je;ZjP^69Y_ zIFa&|LMwtGZij5%r0VO;urrgMx(!$Aq^XdGQ`Wb`2(rioZyRnLNzJnot5Y?I%3RH> zaKGSpW8t!4>6e|O{JQ@BUUDz`7`Oif3|c7nH^7i!ncTl+BBs}OObJ2s)RBbl0S(>_ zyDZ}-zkL_CAsK7ReMQsmM54gro&mlk%~R4^$7_Y3RkD+o`*E%IroplVKHpERs(d;2 z!OD|~+cKC=!s??_6qA_m%*{gKB*hyYT8r9 zn;olz`(Zz*{gcq#{rIikEaq>_8Efk@)$TJq&i?E#y=jqesztjPh^SRqWdl_TJwH^B zTpAXodgDN7>HY1* z3nWU9jqj#K(9QzuZM=~g3 znn@%H3GrQAq`%1SO$nb^v~@Wh!*NOOventhP%7L$8tOckbJ9=S)1rRJ7UG`%KWMUT)iO=>uiazsQUBE@_?WH^o zr+)T?hxb%GBs{Lk)yZ!O_g=Sr0aGv>;dQz?RFY}So5pB=>(YrdGSRLRVg1yyVJND^ z?Q6V27c{vWc;il!AG?430&8Am#t{!(pO@LSck$^r#;qTnu)6iCBW>=QJU{hitMB`x zyMe!c;Gd`sHu{rpprxpPqZ{%6(0Z*X2oe>dCPQMP;zn?BxISD0rKgUVyNU2=6|8V2 zr`KW$wLfCRz?cTB><{j|!8Jn`%P8gf+Pm%*&Oiw5>px-n_fpyaw(L{lKd?xM82~Jg zai|;$xk(mOlS%k)TgacflhkK_(TUt)KKLAW=Mnkj;$l83Qg+hUq}Hu-R*x&grQQ$_ zka8Za6+h}=PHw`4lQqqp_9s+-yBJjh@tg6Y&=P_hq9s%%YJ4amJdzux^%n5T6Y#!% zs^>^i2_>7QG)6`HI8)fHcb(Od#g_iQnKSq}8;|KY{(wi~-wSyEo0O2Ezk8FAzEnKE z0#V;0?PW!u*Pko<;&%3zNP2NYZY#m0g}n4Sbt#esrZ&6JKA!oU%FueL_5S-_KV~{9 z3R?A73`W`y&Ns3)9rZuqfVY(|CK$rFf`8hUMB=hnfL7=DnjfPW!Ie=LT?aj+0KHew zb3#MEvF_A%-NH!HHH*Px-Sw0s_6+&yNu80Q9NKIK>i3tqi%|-(1bLYIFs#JXikj!P!BMP%Fva{N)@P?Wc2lPkP00A+4!PG#fYg?mV(Oj*@V*1jMX`b zsaN&Y9oxH>K2?oyTGNe%8s=E-nq3Kz54&=+E8l+LKPWJ#`;!F!y@vb0Ne~4W{Y|BE z@iOu4a5AMUnK$XXBX<+#w(NM4c7Cm$LiQL3YlP$Qiuk2g70SY#xQX{)&dk`z%wHPI zdePrfqbx$*$2WLi;Q6G=x2n{rhAQcfl6H8e`Syd1h}+r;X^Z@tj890j+H1lWldnBL zE+P8hs9%(3+p%}U7tfKr@buf4X;K@%BqmFrZnXS{K89YOcHtYFZf@ApnGaWGdD$$k zz*Xs}<_urTM^{^vZ(1sTC4a(H)u!OAu~^L`JLY#;SJ<8Y1;uf@dZS$({nfQ0RP*W? zVmYeX8PiYKWYQ{^n9?OzgFdT{^hQ3s$QIOX!n49PK=O?%v|BfDJ_tYSQqW!7f5h^N*vjgnX2uIjW@gHO@YX?vxlZ$u$h6(` zp7R?|WocQ7pWNipC$PMIWt>>pgW=v!$^NVBmS$23Ou9%I{rL8}a<|nz`HwBDOmD2y zop`?A4jqhE7h^uBb3t=Rvy_5YcRZ+w^vvV(<-xUT;m2z(x{~8-#XL#6uq^W`yn9h5 zT6DII+sgC89oq^e)wi-jH*>F&SABcHMs+?n;|9->qj~Z&6^pgm;U>3o{QRwFlLLedNQ-s`*R z*p}R4Vs!6PlgRmT^=p^HN`f5hu2iePh)qh8{-P+#J;p{U#{sNf&?h9HuiRk1nb$m6 zcsZ$7Me_w`!}t2B)199z*#9K9zb^Ac#eQ>e6}_iXN(izQIYN3OtDk~bvM#A7O+1r3 zqw0B!&Fpl%8CA-i7EQ9sM2`<@stR(X&**P`Ks_I%zojq`nlGR6g^?mP;PzWp_mBRb z1C8ydNGUw}4l~cf*QsAE#^y4P@=y%8C2mA2HfR{pdKqPVX>F8L4MvULD5!C*ejT^U z78RhHj7qPM-O;?(?xdd4%P zgi^;p6|HGqJ#NaKsz1+{xrjW)Q@mxNbL~?#%gedkg0p)WKd0i7H`!|@?hh}SaOtN; z4Hw1M$?ivHZ~VfK&N+ARXDYwXCQuT8TL~hOzgwM{u1pm^8`+A~E#X+kNH?p&>Qp0< z9gl3gs$*2Y)Hk=4)wnGex{1ohH)`n^?=bGt8E!n1TWb$pma7XRn*X4fV$GQ$wo;c~ zG~4m){5)!;_35!@n`C-|T6n^jq>j`+|5j5b9xt6LX4_F^SKIR|OEe>tTDRw|8{g?W$>#k>V=cy$#$W0CpHUA z?CuQ5W~)XkKc{%lcfaM~W_@GwbBk{G@G~3tSx(<8kU+k8I8^dPtw=mVRZM_m5vCM+ z+4y7sC;bV#_7#7&C22#tFi*jKCBmvizh1sX0yl;CV;mnn=wvA;k5n&sSJ!K~e|h%F zoHT1x+Pu>3s6279&y>{>oagPtZ*iVazMZ1u<2`w{;jTto`KASrj9%?fiEpDsFym1M zDXaGQa`MrO9ysl%j&J9xc6_DHc_0Y;H8AebI)&&_ui#lYq9f-e-4W-hA=!y1f4BSt zO~VGu*as2%hj-G}iT$MQwHw>A-hSv(Od$Gf;Dxu&&g_1kMWx17caiwz;s+>c?j89u#I#oz&iE+m`9fCnyVGq_*(-bWbaf%qf6~q07Pkl#>bE$c9iu?i z4kyC@9CRxyxDt0O%lGn`U)P0V#Xk|QMFz*+h7-x!kgdSE8ZYn7oXywt6p#MK#i$}n z161(c1XbNrzLY(Lb^CxAn33?}Z-<`Q)Hh$ECVW2kK*oBM0?y zb8&dRqA(RTp2g-m@A4ZB;GWoC~)9*pwN)SXTNs@r{^*4{GY)5ZCNb& zds!^k|CBZuPDD6#%CM1A@oMnuY~`z;=B>)ibytV+S=bog9CK$0dt9b@DdF1k<(lyP z?%-F3&K68Mkq?}%6<>3ne#*R{IUIia#o!`-SQn$qACQ5U3V%1HL5lrH^pDew$A=Lq z?_}NN2>vlAo0@jkdw)$dMN8cO-h-c^XE+L}1Q%%n;Xk`KU)a?y)to5JjKaIiPSZcf zzioPBIFs)~e~og@mrA7fCIkqUFIPZghtm|$_LT7XDFm0WV_}(%X!_k{T_ldPOwR8M# z%g-+GUG^say5aS7OTOYsBXPbf(Ofr0B)P&zO*5u z|7dT?6vo2zT7pOW@m?l-lCWnT!O6ZxR`aJ(|GGv*{6}@J_mmR6qXEgAbZ+44n#5pV zLEkSo&WwCTaYd@cG_9V*FzMd-GCp0FQ<^qmjbZcdcH&(8Dk2FLTsuP~8`r`YXm;KW zCs!+p-n%FjM2g}sVP<))DW2xZPu-9+*^c^t%*_|yIE=N@95$41HChYv?mEsu)|yHk z!A^EY`^bK|_m08jXSov|xpxwM*B^eH-|ia}YSfX7R&HqecGtzLP#UbWS9RXJ>ucRn z)vc62OduwQ?^1*FaO(0miHmB!jKQna;j^LzCzSR_>bh3&!|odV=^d8j-`0c(@!vg9 zC03KF9Y&_KlcA`#u6E>VmT$wE&(F%)w5x-QD&>z{;vp!mA*6muDB`BsKzhoYc%U=j zqqw^m)f|CeuyOwE#YBT^^&L)0z8e?CeFR9$saYJzFDK?P=1@q}POat6c^7^f_@?Ih z<-!-W%1;?Dp10V|lZQHd;rnzookjorJG<+zY~4p(uG4-ksd!vgFdsTGa2}OI@TvI3 z+E2n_AL-CPnZjS!aVYWM@s^|lcS9?wslyWe6xq~$eo0e9p3KEQ+(0BPT zs_Kx_w*IKJ|JG;qiEimTF5M~?J;`m3%7Sx<=d#alexBH6Wc^mw-&1|GQ)GOH(Rj6( zxKFV&0`<6^Kf0a2yV7cfz2r)OVSalt=h$q-{;3Wh`kQpk92Z+ezAct=1T^QXyp?m9 zcx-+=*-0&lCOKryX`pXTb4AdkYxWy#e2P{^(b*(87k;TTP&gXtX0PmG?HH2Z+3|H@ zET(|q{KroFd`Y}-sr+sDXVUszb78-_m)MGs6on6$&hR|Zr@ge?V^Lk-n5ls@-%+{y zf@WZ)E%nQ#6lCcOnZRV~0v(lI#w)c1$1-P^$6ZoysXmcv72vum?tj^PvnlP|@t$IJ zb=ubrBszKBG@4_{yJ>gRUcKpCe}8X>@%lb4>cdssKWXJ}>qLau??tsrY&{g#lzq-B z5K~nUEmwBEytH3T|Lx3U4;-PeM_h&_CwbTlCr2-C!vo2)wYiK1$GB?~n7oKAG3AQ0+hr4>)$@y+}31MDr(1PQTw2(c6;DsKt&INypa^i zZ5g$d9l638O}tF&*4pq`=FWV#y7?o0})!p+sqc6tWoe3ujtv24GD zprEI(&%Y_~+j-4FlF=QlN51d(7G?<4e}v?izGGmTuJqYxhH8`XRB_mF*4VE{EATW0 z#a#tug6gn6b`JEY7t$*4TUU-roH+9LZ>qM%|o>t(?WvbM99bzR3!$7+^eYC79|UC|JJ z?@!G9ZDA+zd-M>CtfT}VZ}6`a4iSl)T76E?RQc+mbX5mmgys0X+*Y$=4L3PF{fd9Q z8rh0wMcc=MD}q-aDxU1$){?oT!O^r{NKNT* zoX{XOGcHM5&gR+^`TcBrf!)2H!L6U9w7eGle-hx|)^QU5QBXy;9t(z(;qPa%bBKm( zBPl)*?p=2xS?fBLY4@7<{4}kTVra(OZVg@YPg$WMAvCcS7u-G$H}h*=DSM@hI@WGrs|RI!XKQ0WL$DbI zi3qf#g|@Y?x6{E+6T)yf#2NU9y#hN)UF>~b z?Hzn!QsD97y|Gsb9sjbG1G4{V zComCh>wp7=!w@J@Kt;*g^B+1IV7C@0TLpJVS9@qI1vE%0Z1@=sDCLvf+a>cr6Ut z|F?q#^Be`*LI*?xbBKX_g@8i>kQ4<6AS5LTlK@|!#DNuyfx#u9LktN+N{Nwx112se z4if_fj3ihBAOVb8LJ|OggKOvvJx759ELV^K{UMrCl2YJ|{tY@GFoTjHfzA*Jh$-k0 zN1zV+iUG#aG(cN0?!h%m6bM4{;1H9LIyg&#P$mw37e^oggXnQZ!MI|;TTxO_KT((% zI76a z&fqxE2Q(b|AQ3y%8I~0K0suslKmv|IH!%nmKn`_>%mAY<%o(VR1Ow!Nf+#4g0NV%f zAv?g*hgv~A9T*d!1l?n)K%n4ol7nZ51f;~JV3-3k1hfr6cJTXgAZuV3kWKvSIIsuE zCNRf=tsL3}WDoy7AY2FcfCgk6m;>Tm94-cQ2(Usn@P|W666gf73j`#oe-4aIV9t!ADwfa}d)} z;?O)6+@ZrhO8juYCv<>Ei9<63@btGZjskh);8%6v%m+CO+u$JXqkwY2bCQF6fnIO} zNLa&AKzRrKY{4b;CIuo4F45aSfoy;Ro^kN29k@IM;s`DeK{$ZR!;zi9<>AOK;PNmj zyTMQgFW3NGS8#bS8bARq4@YwcmxrTyf=dkR;PPNJD9@lkBssv~2QCjrBLR5_C3!fS zKe#*`?I80(!Qi0zW#GGL_Ws!_>bJKcz)cP+i-Rqp4z=~~cL)jy^k!EIfF35VVK>nd zv9*RBl;U=oFzb4%O{0OmlXe0mp`0v?~9>}o3)DAe)1CEN(ksesM zg;A0o6h{x`rU%Rjqb5CILufsLZNq>8VH5>uf&eIbXajn{h%kE716G7loE|V9wC2D@ zUcgk*ssogO@nCePhk^rmpe{h;1Ga=wr5*r^(WM>|1O}w&p}zG1Y_w`2T4FG?ZowEJ zHi}^>fyjEOXg$CJM$>wL1&p4-*eEdep>^s377o=eq6b(2u8772SODeE;WZK_g&6^` z0KyLXcjyy73RGv{4q$>Z&Y|h)0Tw{5bl6)QWFpM91WfAC`t%TBIK)5W9mIVMDJc+H zF>(gLK_PfZ00k;76j&sMCJm4y05^v>NN{ri6MzBOp`z^Yi72?iKm+KZIt~2MsFqFi4^FgTl%fFoQVQ=nZ(O9^eK6!ssD25cCls(1ANZ0^$GxLMrAN zfQQvM0+=2GYkLq62((53Nr(wh>SCz?yjX@IHV^;g5fj9D)egHMdg@<>58K@w|+yT@eJ!0+vY9vOe5H|>rGBMAc!Os3=w~Q^6NSbJNf+>j0LkpI9~c?> z&V;!GsIlG;afA40JirYC6dj=D0TqA~)Mc1{04GS6=sO4|7A4>Xfx@B$ydc0fd>9%4 zB{nKR=n=qP4k!nCQ0g3e+ z2t5KUGCjls&?7*)KBNMi6)F%8#{-BFpv1yFgNg?%=KwJRZQ+nqK-fZHQjQ*kAMuav z0K^DTh+?P!tz$hE0VZ7t%p?%>1IRGbO>hU09p(=aJtXi?$dwO~0mO)d6}6B{L5NXk z4+U6|Vju<{ta(L010^KdNg+=G^EU)K;Y0mEHw-^W;G~ef0QwLOs4l}G1|EyTdMpZf zEDG(hfC38ehQjg&y(>guDgiJSz>ldsz#Y&zrW(+L_(EU`0&oX(j?Fg^UkG%@0Z1Ue zP*{(JI65&^`*N022bZ(Q-ure??*a z70Nd#w7(wc7@)-FBM3bLn}eVLi^BROdai?!9~89^n7Tp_LJz&^KGY*XkHF>}$X8KV zF9eOywhnO$up`j+49NswN1;6udIm5dur>>!hvrR(^npzxu$c%2d=iEB$pb1tmRKz# zKmtNwts4cRCd37X3Xm)|BcXtYLeUXCgQNnoClc5MrX}z@taU@Ypn!#=pMjfyT?3S8 zsY5gXXGm;Tf;d9~+ei08f`|eZC1U6UFF^j|1%NXoI!ys8fH>NdAejJpAh9_M;u4xF zVQ>Kazz+@)1HPc;)!^;`3BZrFb%-w{*481ukl5^m1PK<2%}xL^8Zn@O1epklj@=+;Q;uMSnq`JA+a6_ z$qD(77Xh?LY>fh;MPh3dsM>nsM-ZBAu2$UP<@N;2UVm{9fZCEwJauCLDe1h8pK@;`%r2= zqy$A#C?25u0;(9I02l@rg!r%lRMJ8z7Tp{QtWZe=?f@uYBG?BYBtrg-ZU)UTpjsBw z3F!8pnh-QRXa@)YVPIteg>6g^XkH3sd31j$grjrLKd+7sIL5qm{NrCOV83apdU(5G z_ecj0efX;DaQAr<5$tyuafGlKToN)w2{B$0N3XBJ@4l{DM(QXP9-KP4j@#CR%V!)0OHJe=b{sWI8G5NBBDWpND@Q> zh$$HR_RGC_p%RdYB#e09FH$B25vLR+Dj&4`;FQ0$&yzdnIcuH0s&<{8Pq0_t?&trk zz1LoQz5Lfz+@9?20hV$vd)=2_`-&g=zF*ir`OSxKd*qh2JO0$h%M3K4t(nnOi`{x5 z$9;^ZYI=c#=G?_{uWDZxMf1GRZ2W|QMz(tj8nTE}x~Zz&hKHH4)vA0caq#5Vam3ns zxYd^Gc|Q^PyT9~}ji=VvUh=rP*~Ap20E%q3D%)L%FQwE|w!OfCbN(u?;^Ng&_1yWt zH;n9guwN-?BI+r+-KMIra|%vTFC`A1;s!6Cym8d?AyYkKdglgI?RH&e?YAOdN<2W< z%kx?0?YDQCfaJQK8BkvCHeDvq?6Ez_v!%oVR9!9)v%SjE(7hI*aO=$sC~J4?w!xEE zfU;^SaR6mk2v(Ja1L!dmkhl_a1FClkL|R)eE0z)u&~<#A#@lk{eHuKB6hPDN!J^sC zB=R-Z&w^_Cj9N#L;A^CTpy7GeEQX0_*Mx z5AS(((`CC=Cef|&K5N^hAd05GaPgqZnmn$Xt>;*dP6!>$i-r%~wVh$6TP~y^h@)w* zl+6XxNDp-L{3pzvChwXQG}9)aWv4aa$-e4Qw`??7cd)R}%A?mrO~5Um+gLLWO{zyQ zZ36iITk?{|Hp`a+2h4SB-eDHsW_NzqJT$59z|Hal_0~ZFtziJ#EG#=nE|d4rI3D}a zXAJYVzvuRMXsv`GV9ExI;J}NPaLUN1Y4D+0j^jAMgKmx8HNf%TfA9A988}ie|LKF$ zEOxs_vLj<4O~39SxmY#_Rs62J<*U{~31N*Cl|-PlyG=-@P>p z{L?>n`+qXDBGHd|q40#RI>|SUpzwkY>v1Ugjf2Cz!&gP2JnONII}9kPcmCu-X$b~M zPG*FpEBfUakp1i`*@!xRP`>@|Z-3mtks1h?++EaI?ACQ3z8yxKsG;cBV@L>h6K<+Y zXLtS9?SEiEnLPwR8O1J1C+)aU<*^hvV6Gly#N@Rl9>$wCKe1u)_RN0OQ*g4Ib&}Uu zJu3uy`*jD)jq)fvZ|t#wx4(XN z)O&u?YoUZ^x2;f#QVVadUJwV9bJtVlmTL#3LUd+k7`a^kh^d%V2Vi=S@sS%zt&guvBAQ`64rT9ZS?yO2l#g0aLZ&~( zFh`&)c3U3F8cNZx$DveL%l+&i#ls9`3Mo*gkISOi#U>l~|AK5;5IA5i@ouP{`+w_K zEISrTi&D@`zAdR&-Idx3wZ({yv+N+bc91~;`b_%2x5vX^(sw?5`v>&x63QS_a7461 z?6vE(5u>bhDTre^yjq^$%RE2k!17~4QP<397Q3|5>E|V-pG!d$O~JFjY6|ChdB+o$ zAA`FwvyVwlDv6d%Dh^kDe~KQL0tXHIj1tYbSGM_i>w*b|bhGM4KJi=r zG1E}^{%N~W*Cl1J{kj8%r+<;fugj;uY=xIX*<}ipNoz(`FXmU8rj=U6T#LW~a~aEg z;GCGPH(7T~C>xy_4VQeq(CHV7ke31n&84z9^3pF`5143X5BJM8)1Y5> zuv{Z3Q?3LuLY>*r!Cd=A>%@eb-I*0bUW{HhW1A7I2?7Vq6}lzNnuVb$`;2AELM43) zn#lRb|B@P8b!MnkbqKPh{2x8))U}|6*N~p|X754aP>Qdg6~& zV_XmgkaY*j<%6oeV7y=kP}W~>J&{9;!^}_$^4_|rln$PL-GOq6gt$>sx^k~PVQsL` zpOFG(+I`{Mry5R&Vd*$p3LG%kq!!Kz!)|`rx>rJf$;@a7kypfF_0cCp9s~}WD=>59 z-h=;xmirR=V^Yve-;zbMOAnU;hKE4tW{Ony(b;tax)8&!T-jz%n%gWj#Xo&ZvYV(1 zH~dPnv%Mg$n0<^gT?@;1<+F=__~dh6`XmhufBf#7S*7i_Sug(3j5M=aIx3N*>2-AF zlN%4~aU|r%>5+>Yvj6udZ@;KRF~sB3p8L~k;oBFo1BHZV7|RY2uKdQx@ek^HzWo`? zc?msW^Qwfeo*HmNB~`!fAh}%DnN@i)xLcn7Z`LrWus(k!IGalE^z>ydQ_%JuTF zYT{4hwNIIce)jl2`3SN_(y2Ix!dp_-9VnMbBGra>JkZM8XH6)x$M@+>B`K-n`*foA z>kgD_W#+~A?FUQfbewsE)$}DJ%K4RZ2AVQkf_W zDPth=ycDL2sCS(62s>X1l;;#b{^Y6mF8#?tmD1X8n^r9KjX%A;=((gr+{hqRJi&s% zfx;84uAL0h*2m4ml6vV!&~Ul)Ak?pxO5A1{;^Oy4jRTJx^g8KfFJChKu5HD;`6oea{xb!a$^ zX)l*)#qj-iwGg+Ck3Zezy}$u;8G_FPXPa$3ZXKGym^QCsYRak`BVt+8Vkzqmmg^;( z%y^0oJ>_3D6_fhXpWb8arNu&+5k_XY#w^Ra1LYD$y_Mtif7OJNdhbV|@Z_qDrx^9I zVcmg3i$(4|#eUa>lKRk(KxyzHg$i)2l|{eqK)Hc$c_H3naqHb1+d5_u*hXePE0m82 z@8%c^)yZK!4u$IErdq8|)=9lTFtw6;^G~}lHTIa7u!e#?mi0IkNIlvM1Fv%JJ+J@J z&Nu(e=kCAB>0y`h2VR#HokXnhg2Qcey;Ezr6gW_>a_qf!%B}aA);RUjpZ1VtCmG4f zhMUFBO_rCTBQWAG0}uH-4_Jj(5P&CMlGCSNh+|sAd1<6`-}PNeu9ensT~-3fpR
  • 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 Q7aQOI{eSi^-nH@n0StfGJ^%m! delta 13204 zcmZ{}Wmpt!&^9dH64JSVbnUWqry?EF(%s$Q(n!aGl%z<RL)(_@Dv(vJkRtt5zAAa1wdi2vs-~nImQ&?Gyt_9Kb5^d5g*)m3JjvcFTe^IDl{`wEen(}xJ5 zUi#(7H)gE4SD(L&-LWWa?k;4Sw%lZ#n~tFRq%pXzvgY8dCpWQT(ql4K(WTF*P7lHL?PYkV?|R% z=GuhtmF?2yl*3?1Jb=ATJ!WmA_e`Guy^T%^b%1rVYv$eN$BQVIR|0xE+f{-aM=*RN z+S%RRY~ftdN1bUM@9PbWjzkh<$&KiJo?O2gqdTY)I`Md%gH|KQlCZcVnTt(q9Z7vDhA~+nQ3m;?d zNSt}V1`524s_ljYUn>hL5}m-&Ex-UzQc7OIi{h+$Swv5ngQeGPJTdWZ-vl<$FZveZ_Aff5BljURFSjI;jLIOA-OhtAjWWvJo~lI z7{qE7bo+oXt7_aJwjnp95!p3-2pz5N4ZUs`J+Co-aH2_uUou6FTt{F1r_L)lacH=_ zmy?gJ@h7>d?x0>w)_p@gw0>|nV;zspq9AyC&r{n2m7XpXroKVXr ze?R!Fj3>E2%nYd*$&V<7X6fk0X5TZMawNU(v=_5D{+!nMkW1~0*lIX~NLV?)HsNW) zS!u};XaWUHNq5dGO=(ZR7&^Zo%=;rDE@|OA=0fKb;$5&s|k`D zLaN2glg>|qCG^GwwRiOi4IG2wqblz@3fF|r%5-Xq!*;sRbYS>LSrT_VjrV4jlnZdU zI8VgheS;4RA*K3z;m>I9c+#?|e3Wi$62vU!$3Mso;M4dsa0O*88!n_EJbfNO(@)n! z60Al>L&J zVPgiF*Am1w!PsYr8>8?fic3e~Ft|%6Wo&j&ZLaL1p@*jvv8Oo`#~9^&ssOyWtCY;$ zG%h$U@zgDcpYTn^5BE9oKZW-VWpeAP7hWy5y1vLDe4dWhYoM=usQV>_xKR?Mn-HS$ zggBWXPSWrx(6(2DSmIhURpzx=x*2T2UjXmyj{4Vd!p&-`f!W47V|0#Hh%66pg5fQyci!zrF1l%I`wR}`a0(mqA~(QYu#{${kKO%dQ^XELFCjl z_PXtHLWTB!9W>2poI5tEH3SX?KcY=ZqF+Yo#6}Zt8W`-)W%eFWxkL=p+=GzYNDZ~8 zUelY7VOoC5tU*S{pAmUJulni~`Zm!ecgx2ekwSLj+Yjz9dzUUw2Jo5l=}Wl)STUClX7_7HucQ`2(pRF3N+x+>D<7(G!ie55 zd_rLQ*!!)5x7G5zlQDb{p{)aW<+$`!Rc?IC+Y(h-ry?$s1=g{q%zx7i0Y*_AP=Do~ z?un(&k3}!qcD!DRC_I=q4qw%CVOK#y>r(JSDm+}#<&h#Y!`a_(15B!O@DIx*Zp?S0 zs?RR=$9FEIra7g3=vq=V^#3w;wX?2#1{*dOh-5GiF;jXW7`EuZ5n}#gWjlb`O*jdA(bOh_zO$$vpy?izSE zvjtP`&Enp{?%AN&hs^7Tg{%^7kq){~jsyy&BvLE`lMiN&it<8UJa41|I&5u(<>EMS zHP-X%CvCmqm&y+bk-p?M4mU09a{;S_D7;?#AW_$*^T_k`6>9i|QV_GMvrM#?hNOX( z)9{za1~a`!VUQxuGUbeC0Kz2gXfx6)uj{0eTHxhHUTp985r{M6{%2u_$?f*DA6V$Y zX;snuOVsiV9p5h@+#?bQ`FB)%AvlQ*0( z{22}WG{MQ+PbRIbi>;TN&{E~NEF7V;%88$NNiH({;M-=q^xj(U9jRbPaO=26NVeVy zt3FN-A1A-RxDF)nM%=BTbib1E-1#n*A?cW9f8KfPS*JvS$O7NpuVa3QxCrDlXAK;_iQDEkW>q;a z(u!CyXNjB0|LbTp{vPjc?KDDMMOC$`548dN zSH)~jJu_^`Q1XRks_GQ|Y2z!i&)8%)*FO$zE$9lD!d*nHT(^TYcPY0>(s?tVRfS1mb-5#sIdnpBDk56( zC#L^mE@5_^XOSdT4r|0Ia>*t_Cn}?CaK~f=3+pEgNP~@f!E}g_2*EUI1mL+>s7xpo zPU5pS5$0IE9sCreN`;rN1W+x1YV2#v8Q_j#YSyngbmmvEcm-&f$=V*`l5{K!9Q7v) zIz~A1BOh26UEV$}7By8wnblQ{;~=(5iyR{PT<3L`V10$6)J3sYa!NbScbV`OjfCn# zc$!#oAA$%u>B^ud=N-gQbCTiP#o3*O?FyGscC*B&wO_s#K-cG;!c9P2lVJ$%3YQ!M z8KCZ9)F?;25Z!K!W!dB8xzO>?S}*lXg;Mlw1Wpo$b^zi z&N$2^D!KEaKZ_W+yZX_l$ID-5Q%3pM3SCJt5W?MYu=0cd=#7@ypuiiF?gh@m=Erk9 zXRkoy%Z7`-a^Qg9HF*+McH}im^*lS*<*tV7ZqFD$Y2E(O;xY&7S zqiAXLAdF7DMuqQ*5wz3qXwx`V1rQ7`#@6QS##3ya6F_?ERC{7Y7U+@kle0xw=W=EB zFi0!z7ldS~)y~ozIzxndi{YnKh?h_7DWzWI@k{EoC|+HKi(n6Enk)|%_E0a2PHVYq zn3)8eCJuKGgs{-S0&HM3pC!w!G=6l1z%-*uKY_77chv0Ut8}_5f8bI{Am@%k>}7Xz z0`BOnOoS<7VT!yePUY6@%IW_vn4u{*WZ2 zUm50C0E}zp`+BjJ2}@1z8zwnl03qY;oEhxpW`u{0gs14M0=-xiLWxk~sANh#_Xa!W zOn0fNwei}h6yxLeZ{RgK%5?IA7J;6SaG4d0@%c6cn{^k=+`O7NtXl5WoJIl?M@rn64iAcFSGR5`H&rZ zjrEazm~W{0`lXGykSaNkn#!rI0j+^(ek#jolxm47#n-#jKCNN!kGrn0{DEIk-Mo>p z^A}8VH&07HR{}-)ALY?KqM0F4*X@LC)4G2zjp{x%o@+_}k?S{eCYzJEPhAf*`WY&l zZSgFkDNwPDxRo9Gt1Q7TjmjHe#axHNzC?RUj3{YuJei4vsgC5%_-*!%YZ!G>F?$Kx z_zyRMcNeW0j9iqCZZF<6laY7pU^mEpsI_4hd-W7e6a53rcW*cA@{clw--UBuLy~PC zv++6g*m@k@B`h1qzevE^mrQs)AXK(MD)@s_v&s@W+?^7UoFCYKlcX;!pZH1?EN#(3 zh%#l-#~qEnuS&!DQkTIkJEXL7Yh(EFWL)~)P!Er>usoFV3@~>zf=^bOx?jnO@{;H4 z+@8nsi_f|lbNQWf?OkDj@e>c|KMkhxW2zH5Sdh1j_Px2};webk5A zG22(PnkRg#Y2-1^;ihixr zPAd#`L3dL_4~gYr7D0~j;GHbTC?pzHL?RGI$|oV~NB3TVeNTv>HKyC1bAcpvx!WhH zKcYqsLPXHrswqBX=;tKRSgopypmGZl<%&%=LhEP0cl9KYrVQDriZE{7NJ*>^F64{o z5}sVK73EUp3~P%=!yOTmG@T6eS7b!?-xGMbRTn0j||JJW1 zOl#X86uRJu3Bzx91mGbDh+C%{;-g~z7)GJy2tJG}q@IsN+Q1^|&hTOkQ3?`mp3{ZN zo&(A4ZtZc6f0Q|9b3lH0=DQ&>T3IPmbL8X|N%F#omWTa!#)Eb$aY=Sk!rV8lBQrdb zy+mktjs`qehv(@uW|i?3d{x6Njv8SJ3tos0Yix*F zjE{2}%_37msp5NEhsmWiG{=e5_*HBB7v_gwp5pp%_|_|7thnuG8aqwA;=&v)#VRgj z%b%gu(Nw=G70V=gN9O({rLL3ivBd88MDM+`l1VqoNcZT;EOsz25>Xjcgu)>-SMS|& zbq2(CqSqPVuK{u0Kp6CFaF+$57WVLlyP>P>OEk?=6wfBpXq(7s&Yp?j?wH*a@{f-a z=Phx#`z8I_q0Zp0RYrZ1877p8M8nA=?dq@Rfm82!ZZmDm^ZbmC%$BBf9xDPrBlcK# zMhi_~LQorNs+=MgIx4rXOgX3*8$}YKUNsJk*e1MHwSwSxd2$kf^3H8BYkSc5$g2{r zlRlLWezCzjCr?M(0DQ2@$RNQVEPT)TzCXm+f-N_yt#n;(A`znLrVdIZ)vYE6F*hPA zC7Tm`$&F}Fd2dr!&yT(zJjX4fh+%+7T0cOy9a9klN+-C7%@pLWou=5fbGc=cZl7b|^zihPB*+rc;tn-afj)E`dfiRG5B9@HsN;L?>^elc*UJ zVOG#Xz4mUAT*kq8dd^Bjl;(ryzu}^5VrPwc7V^bz)K}43kE^ug;Dc7KSQUDFgvLAE zaJAm^`4tNnx~ZO*r1OHb@q;xnrTvfB57Sqc8;Fr!JSrZLTmFKT;)5|-)V zWHcmCbwBzq>k{I5C1ej$N;n;-Rr-WwUykvYJ!(x(uV)QpvuP@@Ytz7677Lcm%rWvL zM1EC#863Dv_4cZ55k`dkYWrjN{d#x{VA(eU%%v|GD7_o7-Ke~)jfqGXfGB4Q6L-3{ zlx&9#n15sqtqp?QtH1e0U5<$`ET(%Y7S4U=ZPNl_BlX7etDkT9*lKjMp>I=MLKlQs z*0sqdGEk-)B-IGva8zUyx2OteyXcvnXeGsqIqQgMxu7ueQ{20>gd&<_b-u1_lKcL% zz^iTE(Cy?y+sU(^S3$p8htZ$%JD2#r+{>sI1GGtT4U;L|=8^49OO643& z(K_hsH~bw^RPja0ip3&w==Wb|n>nxVew~iqpQX~|+#ea;jfx+rEDkCThbL+yL;$)jck_t?;;cLuw4Vluned`OG ztnV%(Ztt~LUZIv6;-X!7dp^c=H2YEQ^!0pUFh94ZC6|ySu9U3P;2sZOi8(K29prvrLlk{i|n zeuP2tB`q-i$MEs<%gP{_@fOD|m5vs+#SglK=#Ww4wXR-HOqi_D?8Q$nIgIB0LauRd#ahb&Af0aL~LN(jF8+h;3}g{V%6Xui2W8c;XmD_A%ZL0?6B(g78ETm(6> zaXB`I?n zx#WkJF}{Z03s(0M3|5_)X>7Iu3PHA7Yy|JC8)iY$m`xK~i{6J+Nun7_2k$oO+XoLN zDOV)veJK&ZKZrgL;fGF~3FJ>jjXt=OJbxEvza16ebCRm+7Dl8$FXcM_M%A6H0ks%E z6CKyK@{#4_j62x{G~R>kO7zTuW|z&^>$IA)U_C#kZPUyrzTH`6340E9s9NyX8qY`5OWse z{OGe-=M6Pm?c$sqaXg3oDlS{T15qBIVV9Dom(#kpq;VzxJ#3# zwU-5w#pWNjY+%wzI$GO|0*Zv1ky!*Mq|fTv^*1rU^lIT(Vqz01fZ8Wm64m^N)v`Ee6b#e#kuwihL7wiq|)GJLqv_g5Ppx}m52Um&Z1@fcZ&q;Rc zxyyPVhQX&-I3e{i!;jmwkcPe>dNCJ&4B4zOCF>`xouy{-6sq!yBgVDm30+Ab$%fLW zCT+8f@F{kWSCb|0s5UTc3)M=qA8c3u&=p)hl9(NX$_9s?`gWcoCTg$|_kMp>%NNBmF(F`%va)$V@2n^Qv*lh zxW`*fBzJq^^);~Ik{#m0u;ZW&M0M?ufsAhi$3gVE6Tt^Ujky@@b)$k^sIZ{-3;JnJ zYY1{0qlh$h>3}ajJL|>%&=#t%bhU$l#|8MiVy>$0!P@GGHqIkjFGj`Y ztfh@KJTt8sM*boY-^6R^B>EQK`?KJsv*V4)MJaGUS=Vrd#jTUP$sL(##bKuC~a zsD*ujaG#U8&b}AI^&#+5dThqca6xN?0f|K>@Oxoe+}p+e&KL)!hhUbmrBb=8362`3muCNzU1| zZeN;-Op6d!@MR_tK;Ca-uwizVr}R#4mglk5xM9xD+tJj#u>S>&*;tKqQ6V2jfLiS< zLV6x+n;~q=%@ycq>=u{)c$c55Jq_hc!=xnMJvzc|L!QLo4DPTUU1b6{>F81tE*D8# zUgFrWBNy+D1+uSUh+TJoL7X?8)Jy~Au<+Y`$uJi{K)Ny67*i_Wc}nWY$@h6UR5p0@ zCrr5%opwltEU09*Wg1(EzLZd|s7`vN0YVl-@TnbG^WE{i2U%z!H<~Z$=hk?B>D@J_P52h2BsM%j=1j;bdMxHqe00g z@Vbs(38pP*9pdC_d=c$8FHsFFvZ?N4j4XA+NEESiO&VYqC^4TK6u^oH*~t6pujuZ@ zKWlwd3)*z}rA8R8`4*|H05-fz!e<0wVC>Bf@l>-o9+%Tchcdksb?3DI!0!0m-VK$H zqtkOsBvPwqNeX7DLrjLd4C7XSCH-hgd68)QmQadPKX!9`Kn6J)Q8VGQXv|j>)@LS8 zarH`;(q#)hTb9oEYj2S%1S5l)sQ6n>6MolE`E)l)9H?lL6O98qO8tw=A7OPawX0KTX%^@6 zRDb0t(NCsbe_^?SKup#N^xAs^De{OPQ-G8bqM;7K!Uak#fq)TNEp$^%-H6-j>Aa(6 zgN<;~`!z|bnYxZr(zmU!gwzVwF^UVAR0M&{ZHWM5r;bm%=jxi341iTXtbCoZR`}LwMEoN2LNoPB9Go$coe-kX|P>;^0|7Nnqzmr;#!N}O-)aS+P@R&p_~VK~FV zQpEZ(xm}A)(Q_BiqK3b}8b8G3iNdokiQrWLD(23IE{EoQpmCXBVBTVyWNUxjS5x!i z+@^&f=%77Be69~Qql0`0ve{RZvt{hy5^b-;Nj&W2&LK}1FS#N)s|95zth@`cR+uIISf(~vvl zG>le->Lf4EA$dw7PlejMo&tPgyt1Um1Rw$`PJ0P8{oDQH+odlkVK-qPK8DLre?La% zKS+DQ2G~nED*s@N3wbI?wifG7-SZ-uATcPbQkq)d^n2}ej2l8zs?X02)k(Joktd@` zVb?w|(7(pgSVXG z`VrPAn}~J7LZj?To}#t7v0i4RBov zic%ROlpT(1z8#hbj4N8L)hYj?&Z5cQ`H37BUvcp6L*^tMHakP%3o@MaJvK^WKhpA! z3}+>sXet}OP7gYu=DIM$SMX>d*`&Q2>HDDdd_Hc}oq3VbI_3i7O;l!I;vvVVtI{y5 zh!WG3N03YU9eT+8msm*n1^zof_S{00J=t{1Pqti7;`yFZXrBjYMCmYSS=tb1Zj^O` zhQ-aB)P7RV*t;mfUZ9yFW?adX;lD4AX)>ABZtxVXaL?YHIQCU>p9&`mWz2?E$QI-W zY7aN5%Sz?HA6Xh7Y_`cI6K5Zh&EYpCWyfYIjakCl(cOh$S*TCbJ|16CSlr#dGJ{=9 zptJZl8fI%&%$!HXeM=~P{XMWB&(BsTWkY6W1@~<&R;0h)K2HmV5<6A8k8^!%=t#D= z=YZOkxUERz758j)mochhrYALhX^0ftC3UhI#O}_J4`!>T$FNrx#aBcyTo^VmR|TG*;$8o| zd)5|Kq%Os!q&Wb-l??Cp>SSlybf`MqL$^jGM;)et6hK=CQrhxSP3GL`(1}0Wanc~` z2;}Rx#|EAB@642axna)$r=4@7WK4IUQ7Lo;q3GG9k@?suzI~=e2R_76L2pp4<94H7 z$U_CqWS;iprnU91uoGnch_3Y1oDbg_N*Eb2R@tOx#`uOFZGQ zL4SME8a0+#4Y62hS(-mKQes%8zN}!q{5)||3q?YPkY(_;9ePpW8;3CGAea2ef)SNT z9eLPsABx`h%3W=)M=y(swLXH8!%eoI7u6s(orKbQUrd~h$r{nVb^W#xRg`nWB|~6F z4^bPiF4L(}&)~s+g3G($zSBm&sR66>{ScG<~M@*vwi%4QB<| z(c+jbmJL0Dge9X;wT$Vbe@#EmH>Z~?zC@Fld($YMW7ntnqhjJPr9$*qA1Lxy5=mmxCoh_ z67SVCh>0CIs}?rhsS=y5PWr3D(4a*U#(Uh`nP40lHR#bp-y!(n`6&mw@qPMIAcPG> zww{B?9g7~z4?5^I)(X(^5f<^TO|~xh;`l`(Pnv2zr1$KpHsz|tLhW2K*5um~glx&2 zpQnR*1jM7bC%W6VY`u0B<26Syw5XyK3>*j6?{yteZkSf3&-IC#$40)t++g(pN3XYy;tdVV!yEgmkCBO&9QTtn+F^^^SVB4|M2I)3V`HgbI3~Q zcHERNhh{BieT$1p=?pZ3bT2+?9MSU+&og<(yKAp%W?5s8l#ILfg@AugEtf0r`SIDV zq$ZdzRLv|7>zUZ(`OI+tX>9~?x%$Ys?8rCL7gr5vyF9cL%UQbAkyb`s$eMJKAExXJ z#zK-s9f=PsvuFc$yK)^(gk&MFc*x(f>7ogGCq@vOx|8sPW$T4%s;0 z;|QsT13iTp*IqB`>j=5M!;mmg3};QJ4nkK|m#m=uiD$TxnP;uBP$~UV1_jT=RXTZn z8i;r|*@TXVY@Fu+i#>QpR+`3yo^R7y5_d)&Ai}H>O>k;i4AUz)<^g4ebYLPBbF}!g z8q7Y`IwFcn{7UsA0u#dW5nU39cA}Sh|+O76=hLl%k{&5*?yrO`#IZ%g#5gCDomx%w z+Z`C%emNh!t4?vqqBi^%Om`kScUhy-Cm-eAW%T-bEq)a8bDiceD#u=?OJ|pD-CM-& zL}O*aL6b-+P-A-G=0g?HD(L3Mu-4P4pTTam#dQDI#O%%w(mTH@ottMK*~%avE*-zN zvwE+I``27Lkeg>V)VS*c(`7A2*YdHH5Vo}zoqY-qA7~r8SF*xx>|tu_$umCuj?RIU z^%g8Xwn1U6&sBu$YLjCG9DAcz^|C&);*NdjO>ft=&qS4UtjB{7LpCQ0e}U8T z{604j{RlfT^lT7cagl6QjgQdp04XXN^|xQx?iX-~PLV`{SaV z`+XIfdr#Kho3DNMD8vDbHPGW)LTmsK;ACox2?7f80ii7>tk6RyH0T{;+?b$QGXpwoX9>%4`~T*p6`b$sSfJEuRgB)E`ZgVd8-4{Z1)C_;D8yTiPopm;@cLvo`9Z?rwY7rsYbI8`6O` zn857ehHkl>OWVBE9?d~z(f2X8TxIPi)B2~#fWWKhPq|5~;k6~Gy@Ahih277SYSaCK zl)7}B2?`1h8zh)S*fZy~>eW(UetXaZx)&7-@3|+jV$g%Eu=iouu+Nz)ln86}g@r~L zEZdoLV4Ad#M{=1`=5O={FI{#Bt^DpEiSG)4q17Hwph=#83RaSM4>j`oQx>_T6_msK z58vgI#0b!v-v>14o|Fxg(fBdg$R~sjD0Eq8TA?{vI0B)W?vaf}!696Re=iugSVrBsV3H~*+cD1ko za04Gsm|Ui=CT4aP?ykSHbA$ev$N{+jlJoc4-onxyzzqgKesk~S2#?19$J7MC{QwCb z$qc~#7lj~ibo5a$_ z(*nTrKcoS8c%g|3)Rdq<3iyUuIGR5^RuAWgZ#e7FQw2r@Oz5xzBa}>00#QsXHQWP1 z20Gw_lRD>tK#B@qO>Q3k)C&&;X(S#_aH@zW0xKe1VdIIwY0V7+K9utC0XPCMe+%3| zfd_>D*73s;{!1sw56Ay+o#21$KtNFHy(fZVsx}mX2qMVy(93^#fdsjMaPI!86X1WC zqkrhQfjs>GMhgP*Jhbm0b|4Th@4qVmf%t(B$RKdb|F2XKNKoM4NkDKc|4G8l^Z#SV z_b_SyOw7&C4{y!Cbb=4F`9Hdc{6HWG%>6JU51;=F2F&-cP5;sfJ}k{Yb#MaztK;SQ zPa!-4|JCuP(k3H3fxxZ*-6jw(-*1B8x&ALCUVh&HgynFEfTp#v~>xHAG6X1c-hv#11$;ll6NBtmc*!aSCmjBN$KoeJYZ&wRT SOl}Z24;YhyL007%=Kld?k>BtD diff --git a/spike_trains/lecture/images/reconstruction.pdf b/spike_trains/lecture/images/reconstruction.pdf index 0820a94c441e7a8d59bec30d5ebbc74c2400ab93..cf2372b6b5360eca7891c47bc0b23c4c77ea86df 100644 GIT binary patch delta 11744 zcmZv>RaBipm$eHaXn^4E4#Ay`yKX#4aCeuWd4s!dbfZCoyIYW;!QI{6g2Va#zB%2U zuB)nNteR`hRikdIo)Tcs6JV?BVF8Ds&xKFN+9!0}?WE_j*zZH6#&nudq-MI4?SqEvLyY=p3czu0+yuB?OXhLL- z17<`4?`r7H2^rh00omJh(AnjQ1=k7F_~ez>PHlFDO3`|@$H^r_zK9!fxkHTAk_Nc& zg1V@B&n;Pm%uZOb@^$hX@Yj$>{mXdz^UBzGEw`8agRT__?7`enV3m=P(AdAyB2*h% zT5>P@`FvXLlc)wEcl~}jRLt>s5pw5SRop0Pc3iW@tvnZR)AX02LwNejBY4i2zDr(O z1M0{)KFjBHJT9;;d%Gy(yCaZO=M*=S^C(-Dv8x+ulsfGfTW*5~y!iDuR!@oO7#WV^ zXxtsy*=Y|EvEH^hBo}<{YC5&r6;mJ^7e2DFJvl5p%o|cvS7coKmD%tI`dZbfE0pk8 zzpO>xmyd3Het+#YvZ(PZw+;1Jm6qKfrB9=aVCgK>oE*WX=_w+tAELJFFOj_HPmUl_ zJrRdjxv$e?#~O3#Hi#rf*j<@Y7Qdbv?|_nq zv>ay2k0R^IZ-pKf@_$b_GV^JI-0ve(mclYHPM7Xt@+c7vw^Fs5ql|(rg2d2yp~hR zjG4K*I1OSa;JQy;y`sj+1`oZX&a_coru>Ycf_iZTT#Gsx{D(>lG_SR{+Sov<&3NMV z(=t_vmAv-kdhv3Nhcg3*P6rK?vUhrxh^AM&((rRnWA35At9xRMhP*C%_{wvzn)N*v zCc!clm(KxZ7&C0$muPRzLbFYKN*Yt-0A|q1XO;vmz=mvzM~WFYPPFDH5kSwlbD>jr zT+J~y6|ib1kKJu+_}!cf>TaG$+JHuQ;tCDzyYazqXc4`k8duFJ^av%KC9HC38m-O; zEg7`S3Ylt%aO_gbFce8^bIn~!XDGcIvw3`9DzKg|cR$fCS?WGL^wzRgN~Ji(aPiKI z(6rPAdS}drPs)n(Myoo!nLrAe#j%YlPE{*^8cDz%?ZFF9>Gs_C4rDfML&|cW;zLNd zLK8V_IzVWrRzeJu4hI!uYCS;Hscy=+ua+V$9;IHq`PaW+=I=bULCWnrinGpwy{8O(CpO6MC^`hpPl*x+k(mlj z;z<|LyLbY~QAVb3Pd1V13VXH03vQkgkPnccosUELH~GR(m5xi$tYm_SzqaN@*CMg> z$v)7Yd~0M0;uCHRnkQ%4#s(ifn+zT7;D#6ia8*;9|A~l$!P&uMo`dOx4RNEEPM9Vz z_n5~>5(Cv*;=m+Ka2exUdTtAF$aA>!fYOv6Yd}!H{r347pXg8FVD{x_f$Z@ga9KB< z(qjIrEtJw4dbd<;qo`JSM;8GW2%GQ}0OOXul@yLoCyn2v3h&;w*z99MbOejy!e_3e zH3&su6c24m!CTKQCCg>)EOKjgxY>X`Qo4#kXgM=?Wgg9JM$Fqy$ujK6H>DBy!6EV+ z+(0^Q0W1|$)sttnAPdF9*)#rTrn`4i)mcdEl6rTY3L|kn^4JA)qgp@C{GdgAlK0+n zFjdxi{2x%I(QFbxu1U>toTkLH_3Y*KqXb4GjYJbTnXl&Mp;tb5X@U2+P!QlUKUL<5 zpqKlVS2Bao3>HoF5h3_}A-B*|q|hQ2?gOZWq0wsV`--N(!If7pQ~lzk8Tr@augib3 z)7y1oR#R3<8mYu0?Ykiw_4$17Yxmm~=26N`1|5wnrqqBZ!kKmO6@>cNd5jdTno8)r zFJ0_469rce-QG3{cD5UUbqjR+F1*E>hO!VNG31ZfmM_@rp2KWlC0H(K?C_)I3yk1W zqB@Km99NVqc`Y8wUMR%R5YYm2E zHjPpoiS}>~-@~`gj~_qGiu|=E)SIlw(IZ@u)4W0rm@0A?oSd-slm#k1XE54UO+V7| zjGCm6waIEq={4=X#KTfae5j#OiOQD_voFEW*UUUb+&z^14DTrOD^jAl*~+U&Yy-Xq zbz9~h_j+NlSXgZO{MhCTuY7K3o#zrWVO3+9T-6Rd_2Wn^#JW`ES_Rx2b{FXBm;sxc z7vmw1Kjq1cj1`l^5e}$r`fAh>0wzq*)(RKytQz}Q`~>e-^311^#sJ*#OYQ8h8LKz@ zMPkxXa;_`jxf>O5ep5B#?@Kyxnb%?QP}h={|Cnf)6jdfdE9YT_t9tUU{sc8MqI9&< zjkMoY>@*@~zX@GC=AN~a)FA=wu~{%yveWK+8?G=D(2Sc>7$ECs(7sxP@8uOaY*FK9 z&>v5;?C6h`P`w?L0(&zDG54(YQWSRzYBq;kHWA4C!R(gbGIMSCm=PyCxXU|W#@(abD; z9R?PRT8F2;;dc%r7Bg^plRGC7GyY-7*dV0jo|dZbaLExt6YeLBLKI-i!gB|SYdJhU z0knH-q6oLH3|7Wg)eN+hzs5d|Srp{!&fBw*X$xHK@c;ujK|)6bk&j3o>*%mdKA{lc zE~qYCH94?}yb%B1B+#U}8(3PW8E*Wc;y}j}kA|4_WE?lDrn<$~u&wp8SWB%u~=ujukKke>=c3+2+q3#i}i_;vFcJnS1n=W&1 zm9ebD6#%UHlY%XYQs1kcm*)6MT6kkVbk-U=>K%_1aVWdmdypW2+g8wCW8R}+yrdB2 zRs`gASra?$yGu`V5`>#&PD{L#OK{M` z_0~T8%Sook`}?XQ^i5jh%RqnLk@5`>7R-=3IB{rm_ETm`*o4V~OKz1*?9^@e!Y90i zbDEXkshJb9Pb=ncF}WQ0i_=a!U#N!{6OwF7NbhJBaYe;-To4nN)Yy;k9byycGcvbY zyn(#C!%Vq)`Iu-2c9vL`4Es0sMgbSD>*4qQ^lcvM12Nxc43#aN2&;xBvKXGT3AeTe zwfbGx%}%j{fE`4lP(dIugYIi;rt|X!OFg)UGVkc*519JK9g7p&FZzDb`OgcU98aLY zlW>+33d!^iRU~-W_`>{0In=pYPLuuCsIV~;D?WvJ$re! zK6yaz&oD2LR(gP@Hi~R}kDzaA#^f4^Hr0rNusqPKY`* zzL#?7{ZF^uma4wMTnOP|*E8hh(;4W;649`8angg)&0DpmcXye=Zlvw965B#U>L_+Z ze+R!VgAQ|TNoMfqVaL=92)jRk+d#!;;JC(NxRDGssxbKsYPFQkPhwF(5qzufdJMe% zHK*c+F#O5pxnWIJ21)l+QYxRGY)tz%sr!0{SN*uu0oz=WUQzb-=8VWVbubnhF;0W@ z&L?;g2^Kc237k`8FBv_lJhTI>^8%gu??+3&zj>zck6^Bs1p5rFx zn`X(ao+s?t-X@ilWV6EFCKYYsJO@ zp3}jtKsBH<@(N%90G!z)y~IA1Q;VC(vv?IkrEzDNaM|ZSd^Fz~J>h;uTQSWl){G;> zH6dd0zCrO1x3I~#Z)`2G1^P5O=3wPvlVUjiqB=?+@vl16tKmtcGLFaiiD5sX`x^Sc zLX)9|>#NydsBp5 zjAS_3-IYJ=HaR#`9GxYU$yG%N5zTC$GiNM5D!pVkN1#_IORS~(hl5H#hz8<6@-W7q zV8rDPRO2->X+zBqE$f~1e82Z3p=mLvb!ZTyF>sW0;=HRIB-IFYY0)1822&2#N5Wvk za@&*@>5Rt20TFIhM$JG+0!W1P&bBA38YN`viKP~?=O)N`$W^hi+b|HMpKME)Dimlm z(IbS%#NV^lktN%Ioo`$OIjRFW7xq%X6f%}+*?30OC|d{fGjH;rO1M(RlFf(DQW~WE z)>C^4h{dq+YTudBQtk__sfUd9U8Iz-j4j$;bZdzL`G57*pJ`>Cee%*;uoURgw3LY5 z;l#ho{h}?EhUz=1X^(&XBc&tN-FW(oKFrTKz@q>~` zwRSXz(06;g5+bN(8EO2bWw|ohSPAKrYO_8G_hw4~%+g1-FcoV-Y9BhEeey~KWSRG* zqb5p0{RXw|XW9Pz^pI0Fho!)sz)6wIU@b-6fU$#zuA1Q;E`4jEkM&+`9c7>L_YhdY0=c0A;^Uh?*Wo1Mwo|%@9icv7 z=lqc0=5PcMKp0MN+5&Bng9zfe$jJ>1@|OH;kyXp9HIA$!GLL1)?=E;869;Kd4^~CX zQ6$&}g}BA@G&SBQB%wo1aLCFI`c5DKp`Azt0s43PT0ha6SW(V4OV5tmlLavT`psXuIhN;9qv5M2M25-@GifRU#7Qi)W6>JPLy=B%{*CudqP!HFdauHs#4|(O} z`X>5JXoWnwggK0rjT$H37`nx~R;*aT(SJE8k1B^+{JtF9@e3swK#jZIMrKM_gzr3LH>!VB0a2SsoMH2G}gess> zH;VPEiWgmbrZFU#dB-VfJDnStn=7%to?8vDYE@!PU{o7Gx@6u1X}I_xT51&=0cdqTc~>-p7ey*uuuJk+T~2T5MIw9GR~swPVB+%aigv2F_nvaJ zJ&!=JIy&;eY{XLVeL$=w(w~p=8iJYmwtuERUAF!8aw?WkVsIgAz-D7vR3{9`WmQ|h z(&-tvg7NugI7xPke1+!#7_+*m3hncELyv{YnC>!KG)Mh|aHc}S8d@f6{@g^hhm_kd zp^)qy>h9&CQ;9N0Q&fJ8>2uPhlRAX|YBFAkkxNtGR`;qg%`llGN^?-seCJGe zGag`kPS;J8kMuU^_VjXG0LU2+)0WC|@+hkmXp5UlzX1VYih`s5%sbP6orc63`6FrJzE7%j81!xtag@XFGT9+wu zc!C6EAAOkPAXMrprZDZ z7cDi>W{v%tg4l}qpMyFY7jDpb1^=!mg0`Y2z%&o@!ll%d{Ee4waz#u zWTF7#u778q#mQU4b77d}rrXC&q&&wM9+7T768@(#uq9ZmN+%lGC+sR3U>9ki^H0LB zM|C*b6z(Cb$D|_GHMha7Y@EjQ_{KoR*#VX@OYfrJ-WUwYOPX;*ewa7zM{ai4R-egV zkYWW`#&Xh_P7p}kJEUvV{Y_)%wPunVia{|nkiSTdrWjp|_92uc(gLJvJsbx~diWA0 zWFP3RkOYi^X68kh+bpffLqEqFIv116m=u7rf@aG(%an3-zq$T3v!+DD`Rir1olvUM zgKk5=at+V*Gi`nfOqk}pW?6lxt{OTd$Fv0CA~}YMrmB1nuH`?eX)#SLp&?XjF=S=I zUs>v2Z{sSZSU`5iC-_oayp-!cwHUNuFxh+i67UvE2?=DdzRrf3O@r97?Y!fdJibvn z+zM$*rNFc!{YHCRCbzBOKDCzMf4!!OdLuu_$j^$CY&Ny9WYH{Ls!?gy$MFfJeBcM* zAOOQs2M?QYVb3oHD?VanXP4>lgI>t?_krSg$WTz&90Mhel{?R7X#nZ;v`8i*`(eE8 zoQQ@zOYP>t799;O=ZcCa1H{4i-jI~ZVH0X07nFgzncYuLF ztebTO!bqS11a@xjy{of?&%*M<)mS1RRJ^gRCgrw>4kr@9^bvej#PNupXk2mP(r&&i z485V58+7*I%!Cw(3sp4RqWRc8$xv3GQQG>EgzLd)~lL*C{tg25|@d0t>q+f${B3D1;c`{Bm`i zVp;0t1zPWm|D3}~*r-d&DWM;ZG4myV#v7XDH@X&DD&_?}_3NezN5<#Y{%cjlZV~Jd zJ0`y0L;jA>%5280ZG%B=!+XSB_o4KCH)xtw*Dw^2S50VPqFIMLj896sEPKjrs9;n09%bX6V3yTa2fu$o zl}Ta*H_lPx=+KMwhvCn&EEj2lf7Z0~pRrFfQ-=}i--5pOB_OL!wy zI?LP6f@;9wC<#k~E$>n4X$gx`ohj2k=*I&nhsvrs=(_?(53+lZW`na}%drF4G|Qiudy zMY5X>_-hnkBp#DT$EQewo^+B>hw(A05j4ZnxhNWf4GCmq@r5VW{S9XCJaC_nG2O^0 zPY`j_Y^A9EaZ8m|RvNYyLL{&zuusFKBA$FV5@R*Y3|ICt`4WP}G}@qB5q`cnNUEQ` ze9__?^h!T!k?b!^>F&4i#TF zykvMM3y<@TPd(TA>Q^ac_l@7eT7hz%!$0GXwJ_y^9apXw;tr64ldhg~_H-dzA zw?(H}NTCW@QWmDAmy4BGfZf(ryvZs zHF^7ldXr+wNMCDktv6<(VVmVhw92rTXSD&3H&V8fv>Lx%LFu?vx_dwLF*}CckUxjY zA0M(N1tilR2|L0{OvLJ?W1C_=+B3;q)cc+n2luyfKNFT`e^4`4doi3;wfU-|xyq0( z2A|vM1K+#sj93jaK^hGHVlDoQ)xkwjkDwrODJgRYhtT}=BZP&*vP%xcM9wuUMBfM&GJ>lDV5REqx<^HNZ z)_OW^P5A*&2zQKoCaHc8t@d{@_}RALeb?;7T;-or$xD$w`%h^Qp_okRdv0DnN4Ms1 z=2McebD(bI1J8SPrpJ*sp{15dut_suR}OyN6T)ihGLbx?!Td?NKezS8F9>^u>SfF% zrdoo;l|x(qhEqa-zIJ8D z%&nThcnonn{$6cOnImxf>;3iWMN4`;rLeG}@tS5rC@_;9gZE76^EZm~6IVsN6Fd%x z#e0S>v}k4SL>_1iJ+Zx{*994r;0fvITqC^Ye4<#fTqY+KJQ}<=34k9?7O_HVSc-`% z_~4S3sT_m-UGFf@c^jqawT|SKQFu1f_ErpSx>j93N$1nqLpE8KUSuvnP6mLqpGuw+ zB}R)^OMIG}>k_n;rl%Dl=!Cj5howl@!ifK zJcx0A1}Tmfq3s+ECoC?|k-9JEoT30%d4dE_9LI<@PpEFpLhf66+L84&*}fahdzU1C zT)oDF^sl&RraR?&6N~MDfg@49kBENme(-V0cUxSAG{#9q5-B&j+o|?@EJ98- zG5CxaPmIASPQ1)kqZNv^OIO~E3$v=iLFdcWzp%k^WO*ocI(eD^%DNi+MP&8{^HjbC z$~$Lhcq@f1RD2TcNs(s0_ zQj&_1cNZ;j7Yu_yI;zimdHorrA_|0o%y!B0F}AZXk_H-ZBp!K?bsw=O!-QvU>aNRJ z-TPi@ZdLWV2GRb?m6xA0xHG2Qh zr7`HS#Q}?lTtq!jwM+ttB&OKqhc?@24bHSt$d3EC*zU4}$bG9PFxsLa37XaL1v)NW zL2`YY$9+ElWJ7VZNE7hz5nc#sS$Sl?F4^F_C&h~%3p#F;;X9`FEm^F> zK1QynO9~ywvcwnsMwBh+9tzMAy;GW^9QX==#GqQCCP>0+8!k(DUF%eS`Bquot$_(G z+ruW?aH5S2ID9yYY{(NWB5=fBh$iJODKmT9V@d)*4wRtth7rziOM_+wayYB4z!;FS z%K%ziKhrBPS0rB9!kzbBdN7ZM(~)*^4em_~&GxW@oBDrpB#T<&hOz!*XS# z)oJSc9Spa#afRv%9J)TEa58l0?^$)czJxnB!e$~vGPjJdaB-4|dQd}&2ZxquPA*4= zTBrzsO*o)a-LB{t9a-p967b^#pT~vdyzXAou5(&0nRu#uXUV>pz-YFz_@=>w~i= z_iMRjS~KYMd@@{M=W|w45j|&|CRDqdo+WJPro35bsTmWdke8L%`L4vX*bpsbFaA#` zfX+ZrvUhsPL!@r#Q{BJ9fODVr>5MgpnNB+gT4m#6H(kE!!pauwarX4iG$;dqJ!yMR z!;jb6MNnf2DQEJLyG0#$Lzk6DgB?vEEb-``aBfXKb0_Ka@Ni$|d$4q)Gj!B-l7rOg zC*mgg-mm)vSCLKFx{~qepzsgk7ySzQfZW{SNR&0M3>Cz#VqdwdC*E+2ZhzT>W!;1< zcWUiC`$z&oILVH%GAnz~?@>~1N}N7Qc^q}gIks6wj!MsVZ}jSd3ucq(((A)JNk2?F zaV5n3fjK3k!5a}aIT;**3S~FM>2-64EU!Q>`&EkCh`!~EEV8Q)m)Rb5Z1-Bd0F_CO zOfDi_#@If&dvN0BRR8Mq(~ywOT!E2WT$F)ksbUgpGYMp&RaRd}@XzSca?$&p<4)VT zV{mUOw9%$?_V;crbld~e1_o!y72$Y59=ljAEfw#NPRz&?{b_B0Uk2y+9)T?VO zclAt;h3JgQUKkbHSZyOS&?v12);EBXNnT4foN}va*Mk-Rrj4RJwbNr-9P7q0*uw?y7NUes% ztckj%nA|y+k~J8{K}~Yx-azZTz8+mG^hxQ^=KabBNHP9`qC4i}9y{MS&|{zQ`Yz%@ z!D>ZxWG~wJP<-ShA?o1Oa_`|+)S9x|QVC1R*=2Y74Lof>jk&*coM_d~kHJqS8vE3a zRl9zj8w=gs)Lzr>V#ZM!!;0vi^JAJ<=VFU@uT3zVjIrvcvF8mSzl~DlG5N%qgcC4B zC~1)imkx09;RkvSKNGI(0``lC2Y0)c_n&9(wcFMzMmQ5{!~eV=Ms-sp1QmXBX`PPf_S*T3D} z@4gLwO#goV`qI-O?|2`q6~Zu0zW%a&tNm-W>zm)*)4)3LRrIjCYD3lcY4yixay0^fZ7 z0uOH*9#X5u-~3AN{p#+Q&CKi`=l2W^-QL<$G3p-*$mT1znt<2Uk6kbOIj_5A8s0-X zcLNYnm7O^46pB|WVGOZK1Us=b6{RgcQ9nv*IY}k1hl<)@p#5@+_{}Rpka3@Q@Xm;6 zGZna7UVl4&dwiIGd)!v(y5IaN`uaS*eg5kFqVV?Q8v6=8N#B2X63zMKB4<^p&%S)y z#iiSE@V0F}9+sDW{GfcpH>MprB}3U&G7ETWzUD0vK0dz~MGHSr&X&z@7~wx$m)OUh zoJ0IamYVH>J_LtFu2iC&Yf|VxwPqzuWNkcZ!`ig4^KHjE8@dd z@7jOfMe#W39_%_v&RUc8>1I+pLU-S`c>6lKAY$)DSn6?xmgeSLbnUkGsW@67;> zuT=6k*_uGqu9^(im(vbM`rq(WE`d%BY!gX0CD+T)G zOs`(O3FVt^{pDZ;9#5TKFSb>H*Xi-DhwJnI%!SL04Bikq-qzkA0j${g92D#nPNudf z9PGU8d?*%<=Kr6`2xVgJpm^h$#WrE|u=n|9|L3f#X`0PKf z;o`2X^$%Z~JTD%$0&f&4C5wCENM*NVWJAXeysC#d(Az(7(iz5F=R_aV#3CQzI&`zmQybeQtz^jJ+;66R5Dz@L>cuCJDzHm);>q!VeEZfmZ7@^laVIcMjgmPS ztBOkO48JffjJ|?3b`GWM(qtse;7|IfiJwrrh#c~>&@@%!vvu^AmhgF$;pqcx_g}%M zx&T%uR4jH*4hj}-4qgflUVaV=4h~+vTEXA2C{h--CR!dECXQ~96(M$_|9?rrrfp;H zZtX_F!TF!gsG~r*gysJa5lFP~#s7&#$YI$bl_FHM|6LMn;`Lvu6dYXKoG5IPCeCse zHdfZ|6m{=KMc=`3@o++9#J|FEaq!pu5@&<^@6}yPc_VOgadUI>LtLdL;kZ~iAkESS zmb_dP?Ei02I8vbe*Mx(Qo16Pz#>e{)W3J<>2`zJ&(Zu z!Fag-mE~mrhjFm;@%`_TIJo%P|BC_t%_9e|0RKOM0^I*OssGsvPImr(88`nwNjUjA z{xQcX!1X`&0{@Zb;Ns*E_}@vmxc_y`#rLmcE&<+u9CNe(TMYMq;Q!9S&BJ5ypBwr= t-TlYNKa7W+^WP)k5crpI{ZDuQ&m12gCl{nlP8OMu1BI4WT15us{{v-8EV2Lq delta 11733 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 diff --git a/statistics/code/diehistograms.m b/statistics/code/diehistograms.m index 256c9d7..5b47597 100644 --- a/statistics/code/diehistograms.m +++ b/statistics/code/diehistograms.m @@ -5,9 +5,6 @@ for i = [1:length(nrolls)] % plain hist: %hist(d) - % check bin counts of plain hist: - % h = hist(d) - % force 6 bins: %hist(d, 6) diff --git a/statistics/code/gaussianbins.m b/statistics/code/gaussianbins.m index e933a79..02c5c98 100644 --- a/statistics/code/gaussianbins.m +++ b/statistics/code/gaussianbins.m @@ -13,14 +13,3 @@ bar(b2,h2, 'facecolor', 'r' ) xlabel('x') ylabel('Frequency') hold off - -% normalize: -hn1 = h1/sum(h1)/db1; -hn2 = h2/sum(h2)/db2; -subplot( 1, 2, 2 ) -bar(b1,hn1) -hold on -bar(b2,hn2, 'facecolor', 'r' ) -xlabel('x') -ylabel('Probability density') -hold off diff --git a/statistics/code/gaussianbinsnorm.m b/statistics/code/gaussianbinsnorm.m new file mode 100644 index 0000000..3341bd0 --- /dev/null +++ b/statistics/code/gaussianbinsnorm.m @@ -0,0 +1,9 @@ +hn1 = h1/sum(h1)/db1; +hn2 = h2/sum(h2)/db2; +subplot( 1, 2, 2 ) +bar(b1,hn1) +hold on +bar(b2,hn2, 'facecolor', 'r' ) +xlabel('x') +ylabel('Probability density') +hold off diff --git a/statistics/lecture/boxwhisker.py b/statistics/lecture/boxwhisker.py index 38a0dcb..9fe31fe 100644 --- a/statistics/lecture/boxwhisker.py +++ b/statistics/lecture/boxwhisker.py @@ -1,9 +1,8 @@ import numpy as np import matplotlib.pyplot as plt -#x = np.random.randn( 40, 10 ) -#np.save('boxwhiskerdata', x ) -x = np.load('boxwhiskerdata.npy') +rng = np.random.RandomState(981) +x = rng.randn( 40, 10 ) plt.xkcd() fig = plt.figure( figsize=(6,4) ) @@ -16,27 +15,27 @@ ax.set_xlabel('Experiment') ax.set_ylabel('x') ax.set_ylim( -4.0, 4.0) ax.annotate('Median', - xy=(3.9, 0.1), xycoords='data', - xytext=(3.5, -2.5), textcoords='data', ha='right', + xy=(3.9, 0.0), xycoords='data', + xytext=(3.5, -2.7), textcoords='data', ha='right', arrowprops=dict(arrowstyle="->", relpos=(0.8,1.0), connectionstyle="angle3,angleA=-110,angleB=60") ) ax.annotate('1. quartile', - xy=(5.8, -0.7), xycoords='data', - xytext=(5.5, -3.5), textcoords='data', ha='right', - arrowprops=dict(arrowstyle="->", relpos=(0.5,1.0), + xy=(5.8, -0.9), xycoords='data', + xytext=(5.5, -3.4), textcoords='data', ha='right', + arrowprops=dict(arrowstyle="->", relpos=(0.9,1.0), connectionstyle="angle3,angleA=30,angleB=70") ) ax.annotate('3. quartile', - xy=(6.1, 0.6), xycoords='data', + xy=(6.1, 1.1), xycoords='data', xytext=(6.5, 3.0), textcoords='data', ha='left', arrowprops=dict(arrowstyle="->", relpos=(0.0,0.0), connectionstyle="angle3,angleA=30,angleB=70") ) ax.annotate('minimum', - xy=(6.1, -2.3), xycoords='data', + xy=(6.1, -1.9), xycoords='data', xytext=(7.2, -3.3), textcoords='data', ha='left', arrowprops=dict(arrowstyle="->", relpos=(0.0,0.5), connectionstyle="angle3,angleA=10,angleB=100") ) ax.annotate('maximum', - xy=(5.9, 2.8), xycoords='data', + xy=(5.9, 2.7), xycoords='data', xytext=(4.9, 3.5), textcoords='data', ha='right', arrowprops=dict(arrowstyle="->", relpos=(1.0,0.5), connectionstyle="angle3,angleA=0,angleB=120") ) diff --git a/statistics/lecture/boxwhiskerdata.npy b/statistics/lecture/boxwhiskerdata.npy deleted file mode 100644 index 6751afa775ea24f0c9cf7a38661516374ed7f54a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3280 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