Updated statistics chapter

This commit is contained in:
Jan Benda 2015-11-04 23:52:29 +01:00
parent be13ea7610
commit 3216086642
18 changed files with 254 additions and 610 deletions

View File

@ -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

View File

@ -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}

View File

@ -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

View File

@ -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}

View File

@ -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}

View File

@ -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}

View File

@ -1,4 +1,4 @@
g\documentclass[12pt]{report}
\documentclass[12pt]{report}
\input{header}

Binary file not shown.

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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") )

View File

@ -2,11 +2,12 @@ import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
fig = plt.figure( figsize=(6,5) )
fig = plt.figure( figsize=(6,4.6) )
rng = np.random.RandomState(2981)
n = 200
for k, r in enumerate( [ 1.0, 0.6, 0.0, -0.9 ] ) :
x = np.random.randn( n )
y = r*x + np.sqrt(1.0-r*r)*np.random.randn( n )
x = rng.randn( n )
y = r*x + np.sqrt(1.0-r*r)*rng.randn( n )
ax = fig.add_subplot( 2, 2, k+1 )
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
@ -25,7 +26,7 @@ for k, r in enumerate( [ 1.0, 0.6, 0.0, -0.9 ] ) :
ax.set_ylabel('y')
ax.set_xlim( -3.0, 3.0)
ax.set_ylim( -3.0, 3.0)
ax.scatter( x, y )
ax.scatter( x[(np.abs(x)<2.8)&(np.abs(y)<2.8)], y[(np.abs(x)<2.8)&(np.abs(y)<2.8)] )
plt.tight_layout()
plt.savefig('correlation.pdf')

View File

@ -2,7 +2,7 @@ import numpy as np
import matplotlib.pyplot as plt
plt.xkcd()
fig = plt.figure( figsize=(6,3) )
fig = plt.figure( figsize=(6,2.2) )
n = 200
x = np.random.randn( n )
y = np.random.randn( n )

View File

@ -2,35 +2,22 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{\tr{Descriptive statistics}{Deskriptive Statistik}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\section{Statistics of real-valued data}
\begin{itemize}
\item Location, central tendency
\begin{itemize}
\item arithmetic mean
\item median
\item mode
\end{itemize}
\item Spread, dispersion
\begin{itemize}
\item variance
\item standard deviation
\item interquartile range
\item coefficient of variation
\item minimum, maximum
\end{itemize}
\item Shape
\begin{itemize}
\item skewnees
\item kurtosis
\end{itemize}
\item Dependence
\begin{itemize}
\item Pearson correlation coefficient
\item Spearman's rank correlation coefficient
\end{itemize}
\end{itemize}
Bei der deskriptiven Statistik werden Datens\"atze durch wenige Kenngr\"o{\ss}en
\"ubersichtlich dargestellt.
Neben dem Histogramm, das die Wahrscheinlichkeitsverteilung der Daten
im Detail darstellt, werden u.a. folgende Kenngr\"o{\ss}en zur Beschreibung
der Daten eingesetzt:
\begin{description}
\item[Lagema{\ss}e] (``location'', ``central tendency''):
arithmetisches Mittel, Median, Modus (``Mode'')
\item[Streuungsma{\ss}e] (``spread'', ``dispersion''): Varianz,
Standardabweichung, Interquartilabstand,\linebreak Variations\-koeffizient
(``Coefficient of variation'')
\item[Shape]: Schiefe (``skewnees''), W\"olbung (``kurtosis'')
\item[Zusammenhangsma{\ss}e]: Pearson Korrelationskoeffizient,
Spearmans Rang\-korrelations\-koeffizient.
\end{description}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{\tr{Mode, median, quartile, etc.}{Modus, Median, Quartil, etc.}}
@ -54,6 +41,7 @@ Der Median teilt eine Liste von Messwerten so in zwei H\"alften, dass
die eine H\"alfte der Daten nicht gr\"o{\ss}er und die andere H\"alfte
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.}
@ -61,6 +49,7 @@ nicht kleiner als der Median ist (\figref{medianfig}).
\matlab{} stellt die Funktion \code{median()} zur Berechnung des Medians bereit.
\newpage
\begin{exercise}{checkmymedian.m}{}
\tr{Write a script that tests whether your median function really
returns a median above which are the same number of data than
@ -95,7 +84,9 @@ eine feinere Einteilung. Das 3. Quartil ist das 75. Perzentil, da
\begin{figure}[t]
\includegraphics[width=1\textwidth]{boxwhisker}
\caption{\label{boxwhiskerfig} Box-whisker plots illustrate distributions.}
\caption{\label{boxwhiskerfig} Box-Whisker Plots sind gut geeignet
um mehrere unimodale Verteilungen miteinander zu vergleichen.
Hier sind es jeweils 40 normalverteilte Zufallszahlen.}
\end{figure}
Box-Whisker Plots sind eine h\"aufig verwendete Darstellung um die
@ -151,12 +142,13 @@ Wahrscheinlichkeitsverteilung der Messwerte abzusch\"atzen.
mit der theoretischen Verteilung $P=1/6$ vergleichbar.}}
\end{figure}
\newpage
Bei ganzzahligen Messdaten (z.B. die Augenzahl eines W\"urfels oder
die Anzahl von Aktionspotentialen in einem bestimmten Zeitfenster)
kann f\"ur jede auftretende Zahl eine Klasse definiert werden. Damit
die H\"ohe der Histogrammbalken unabh\"angig von der Anzahl der
Messwerte wird, normiert man das Histogram auf die Anzahl der
Messwerte (\figref{diehistogramsfig}). Die H\"ohe der
Messwerte wird, wird das Histogram auf die Anzahl der
Messwerte normiert (\figref{diehistogramsfig}). Die H\"ohe der
Histogrammbalken gibt dann die Wahrscheinlichkeit $P(x_i)$ des
Auftretens der Gr\"o{\ss}e $x_i$ in der $i$-ten Klasse an
\[ P_i = \frac{n_i}{N} = \frac{n_i}{\sum_{i=1}^M n_i} \; . \]
@ -174,17 +166,54 @@ gleich Null, da es unabz\"ahlbar viele reelle Zahlen gibt.
Sinnvoller ist es dagegen, nach der Wahrscheinlichkeit zu fragen, eine
Zahl aus einem bestimmten Bereich zu erhalten, z.B. die
Wahrscheinlichkeit $P(1.2<x<1.3)$, dass die Zahl $x$ einen Wert
zwischen 1.2 und 1.3 hat.
zwischen 1.2 und 1.3 hat.
%Der Grenzwert zu einem immer kleineren
%Bereich f\"uhrt uns dann zum Begriff der Wahrscheinlichkeitsdichte
%\[ p(x) = \lim_{\Delta x \to 0}P(x_0<x<x_0+\Delta x) = P(x_0) + dP/dx \cdot \Delta x \]
Im Grenzwert zu sehr kleinen Bereichen $\Delta x$ ist die Wahrscheinlichkeit
eines Wertes $x$ zwischen $x_0$ und $x_0+\Delta x$
\[ P(x_0<x<x_0+\Delta x) \approx p(x) \cdot \Delta x \; . \]
Die Gr\"o{\ss}e $p(x)$ ist eine sogenannte
``Wahrscheinlichkeitsdichte''. Sie ist keine einheitenlose
Wahrscheinlichkeit mit Werten zwischen Null und Eins, sondern kann
jeden positiven Wert annehmen und hat als Einheit den Kehrwert der
Einheit von $x$.
\begin{exercise}{gaussianbins.m}{}
\tr{Draw 100 random data from a Gaussian distribution and plot
histograms with different bin sizes of the data.} {Ziehe 100
normalverteilte Zufallszahlen und erzeuge Histogramme mit
unterschiedlichen Klassenbreiten. Was f\"allt auf?}
\begin{figure}[t]
\includegraphics[width=1\textwidth]{pdfprobabilities}
\caption{\label{pdfprobabilitiesfig} Wahrscheinlichkeiten bei
einer Wahrscheinlichkeitsdichtefunktion.}
\end{figure}
F\"ur beliebige Bereiche ist die Wahrscheinlichkeit f\"ur den Wert $x$ zwischen
$x_1$ und $x_2$ gegeben durch
\[ P(x_1 < x < x2) = \int\limits_{x_1}^{x_2} p(x) \, dx \; . \]
Da die Wahrscheinlichkeit irgendeines Wertes $x$ Eins ergeben muss gilt die Normierung
\begin{equation}
\label{pdfnorm}
P(-\infty < x < \infty) = \int\limits_{-\infty}^{+\infty} p(x) \, dx = 1 \; .
\end{equation}
Die gesamte Funktion $p(x)$, die jedem Wert $x$ einen
Wahrscheinlichkeitsdichte zuordnet wir auch
Wahrscheinlichkeitsdichtefunktion (``probability density function'',
``pdf'', oder kurz ``density'') genannt. Die bekannteste
Wahrscheinlichkeitsdichtefunktion ist die der Normalverteilung
\[ p_g(x) =
\frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}} \]
--- die Gau{\ss}sche-Glockenkurve mit Mittelwert $\mu$ und
Standardabweichung $\sigma$.
\newpage
\begin{exercise}{gaussianpdf.m}{gaussianpdf.out}
\vspace{-3ex}
\begin{enumerate}
\item Plotte die Wahrscheinlichkeitsdichte der Normalverteilung $p_g(x)$.
\item Berechne f\"ur die Normalverteilung mit Mittelwert Null und
Standardabweichung Eins die Wahrscheinlichkeit, eine Zahl zwischen
0 und 1 zu erhalten.
\item Ziehe 1000 normalverteilte Zufallszahlen und bestimme von
diesen Zufallzahlen die Wahrscheinlichkeit der Zahlen zwischen
Null und Eins.
\item Berechne aus der Normalverteilung $\int_{-\infty}^{+\infty} p(x) \, dx$.
\end{enumerate}
\end{exercise}
\begin{figure}[t]
@ -200,65 +229,66 @@ zwischen 1.2 und 1.3 hat.
(blau).}}
\end{figure}
Histogramme von reellen Messwerten m\"ussen auf das Integral 1
normiert werden, so dass das Integral (nicht die Summe) \"uber das
Histogramm eins ergibt --- denn die Wahrscheinlichkeit, dass
irgendeiner der Messwerte auftritt mu{\ss} Eins sein. Das Integral ist
die Fl\"ache des Histogramms. Diese setzt sich zusammen aus der
Fl\"ache der einzelnen Histogrammbalken. Diese haben die H\"ohe $n_i$
und die Breite $\Delta x$. Die Gesamtfl\"ache $A$ des Histogramms ist
also
\begin{exercise}{gaussianbins.m}{}
\tr{Draw 100 random data from a Gaussian distribution and plot
histograms with different bin sizes of the data.} {Ziehe 100
normalverteilte Zufallszahlen und erzeuge Histogramme mit
unterschiedlichen Klassenbreiten. Was f\"allt auf?}
\end{exercise}
Damit Histogramme von reellen Messwerten trotz unterschiedlicher
Anzahl von Messungen und unterschiedlicher Klassenbreiten
untereinander vergleichbar werden und mit bekannten
Wahrscheinlichkeitsdichtefunktionen verglichen werden k\"onnen,
m\"ussen sie auf das Integral Eins normiert werden
\eqnref{pdfnorm}. Das Integral (nicht die Summe) \"uber das Histogramm
soll Eins ergeben --- denn die Wahrscheinlichkeit, dass irgendeiner
der Messwerte auftritt mu{\ss} Eins sein. Das Integral ist die
Fl\"ache des Histogramms, die sich aus der Fl\"ache der einzelnen
Histogrammbalken zusammen setzt. Die Balken des Histogramms haben die
H\"ohe $n_i$ und die Breite $\Delta x$. Die Gesamtfl\"ache $A$ des
Histogramms ist also
\[ A = \sum_{i=1}^N ( n_i \cdot \Delta x ) = \Delta x \sum_{i=1}^N n_i \]
und das normierte Histogramm hat die H\"ohe
\[ p(x_i) = \frac{n_i}{\Delta x \sum_{i=1}^N n_i} \]
Es muss also nicht nur durch die Summe, sondern auch durch die Breite $\Delta x$ der Klassen
geteilt werden.
\[ p(x_i) = \frac{n_i}{\Delta x \sum_{i=1}^N n_i} \]
Es muss also nicht nur durch die Summe, sondern auch durch die Breite
$\Delta x$ der Klassen geteilt werden (\figref{pdfhistogramfig}).
$p(x_i)$ kann keine Wahrscheinlichkeit sein, da $p(x_i)$ nun eine
Einheit hat --- das Inverse der Einheit der Messgr\"osse $x$. Man
spricht von einer Wahrscheinlichkeitsdichte.
\begin{figure}[t]
\includegraphics[width=1\textwidth]{pdfprobabilities}
\caption{\label{pdfprobabilitiesfig} Wahrscheinlichkeiten bei
einer Wahrscheinlichkeitsdichtefunktion.}
\end{figure}
\begin{exercise}{gaussianpdf.m}{gaussianpdf.out}
\tr{Plot the Gaussian probability density}{Plotte die Gauss'sche Wahrscheinlichkeitsdichte }
\[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}\]
\tr{What does it mean?}{Was bedeutet die folgende Wahrscheinlichkeit?}
\[ P(x_1 < x < x2) = \int\limits_{x_1}^{x_2} p(x) \, dx \]
\tr{How large is}{Wie gro{\ss} ist}
\[ \int\limits_{-\infty}^{+\infty} p(x) \, dx \; ?\]
\tr{Why?}{Warum?}
\begin{exercise}{gaussianbinsnorm.m}{}
Normiere das Histogramm der vorherigen \"Ubung zu einer Wahrscheinlichkeitsdichte.
\end{exercise}
\section{\tr{Correlations}{Korrelationen}}
\begin{figure}[t]
\begin{figure}[tp]
\includegraphics[width=1\textwidth]{correlation}
\caption{\label{correlationfig} Korrelationen zwischen zwei Datens\"atzen $x$ und $y$.}
\caption{\label{correlationfig} Korrelationen zwischen zwei
Datens\"atzen $x$ und $y$.}
\end{figure}
Bisher haben wir Eigenschaften einer einzelnen Me{\ss}gr\"o{\ss}e
angeschaut. Bei mehreren Me{\ss}gr\"o{\ss}en, kann nach
Abh\"angigkeiten zwischen den beiden Gr\"o{\ss}en gefragt werden. Der
Korrelationskoeffizient
Korrelations\-koeffizient
\[ r_{x,y} = \frac{Cov(x,y)}{\sigma_x \sigma_y} = \frac{\langle
(x-\langle x \rangle)(y-\langle y \rangle) \rangle}{\sqrt{\langle
(x-\langle x \rangle)^2} \rangle \sqrt{\langle (y-\langle y
\rangle)^2} \rangle} \] quantifiziert einfache lineare
Zusammenh\"ange \matlabfun{corr}. Perfekt korrelierte Variablen ergeben einen
\rangle)^2} \rangle} \]
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
Korrelationskoeffizienten von $-1$ und nicht korrelierte Daten einen
Korrelationskoeffizienten nahe 0 (\figrefb{correlationfig}).
Korrelationskoeffizienten nahe Null (\figrefb{correlationfig}).
\begin{figure}[t]
Nichtlineare Abh\"angigkeiten werden von dem Korrelationskoeffizienten
nur unzureichend oder \"uberhaupt nicht erfasst (\figref{nonlincorrelationfig}).
\begin{figure}[tp]
\includegraphics[width=1\textwidth]{nonlincorrelation}
\caption{\label{nonlincorrelationfig} Nichtlineare Zusammenh\"ange
werden durch den Korrelationskoeffizienten nicht erfasst! Sowohl
werden durch den Korrelationskoeffizienten nicht erfasst. Sowohl
die quadratische Abh\"angigkeit (links) als auch eine
Rauschkorrelation (rechts), bei der die Streuung der $y$-Werte von
$x$ abh\"angen, ergeben Korrelationskeffizienten nahe Null.