cleanup, fixes ind programming and plotting
This commit is contained in:
parent
4804946112
commit
cc1e264864
BIN
plotting/lecture/images/plot_editor.png
Normal file
BIN
plotting/lecture/images/plot_editor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
BIN
plotting/lecture/images/property_editor.png
Normal file
BIN
plotting/lecture/images/property_editor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
@ -1,6 +1,6 @@
|
|||||||
\chapter{\tr{Data plotting}{Graphische Darstellung von Daten}}
|
\chapter{\tr{Data plotting}{Graphische Darstellung von Daten}}
|
||||||
|
|
||||||
\section{Graphische Darstellung von Daten}
|
\section{Does and Don'ts bei der Graphische Darstellung von Daten}
|
||||||
|
|
||||||
Die ad\"aquate Darstellung wissenschaftlicher Daten darf man durchaus
|
Die ad\"aquate Darstellung wissenschaftlicher Daten darf man durchaus
|
||||||
zu den notwendigen Kernkompetenzen z\"ahlen. Wir brauchen sie um
|
zu den notwendigen Kernkompetenzen z\"ahlen. Wir brauchen sie um
|
||||||
@ -57,7 +57,7 @@ Beispiele (\url{https://en.wikipedia.org/wiki/Misleading_graph}).
|
|||||||
Man kann durch graphische Tricks wie Perspektive (Abbildung
|
Man kann durch graphische Tricks wie Perspektive (Abbildung
|
||||||
\ref{misleadingpiefig}) oder auch gezielte Achsenskalierungen
|
\ref{misleadingpiefig}) oder auch gezielte Achsenskalierungen
|
||||||
(Abbildung \ref{misleadingscalingfig}) den Eindruck des Betrachters
|
(Abbildung \ref{misleadingscalingfig}) den Eindruck des Betrachters
|
||||||
steuern. Insbesondere wenn die Gr ß''o{\ss}e von Symbolen zur
|
steuern. Insbesondere wenn die Gr\"o{\ss}e von Symbolen zur
|
||||||
Darstellung einer Quantit\"at eingesetzt werden, muss man mit Vorsicht
|
Darstellung einer Quantit\"at eingesetzt werden, muss man mit Vorsicht
|
||||||
vorgehen um Unterschiede nicht zu \"uberproportional zu verzerren
|
vorgehen um Unterschiede nicht zu \"uberproportional zu verzerren
|
||||||
(Abbildung \ref{misleadingsymbolsfig}).
|
(Abbildung \ref{misleadingsymbolsfig}).
|
||||||
@ -119,4 +119,134 @@ vorgehen um Unterschiede nicht zu \"uberproportional zu verzerren
|
|||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
|
||||||
\subsection{Plottingsystem in \matlab{}}
|
\section{Plottingsystem in \matlab{}}
|
||||||
|
|
||||||
|
Plotten in \matlab{} ist zun\"achst einmal einfach. Durch den Aufruf
|
||||||
|
von \code{plot(x, y)} wird ein einfacher, schlichter Linienplot
|
||||||
|
erstellt. Zun\"achst fehlem diesem Plot jegliche Annotationen wie
|
||||||
|
Achsbeschriftungen Legenden, etc. Um diese hizuzuf\"ugen kann man zwei
|
||||||
|
Wege gehen: Das Graphische User Interface oder die
|
||||||
|
Kommandozheile. Beide haben ihre Berechtigung und Vor- und
|
||||||
|
Nachteile. W\"ahrend es bequem ist die Abbildung mit der GUI
|
||||||
|
(Abbildung \ref{ploteditorfig}) zu bearbeiten sind die erhaltenen
|
||||||
|
Ergebnisse nicht unbedingt reproduzierbar. Auch wenn eine Abbildung
|
||||||
|
korrigiert werden mus{\ss}, wird es schwierig und zeitaufwendig. Die
|
||||||
|
Nachtr\"agliche Bearbeitung der Abbildungen mit dem Graphikprogramm
|
||||||
|
seiner Wahl birgt seine eigenen Risiken. Das Bestreben sollte sein,
|
||||||
|
aus \matlab{} heraus publikationsreife Abbildungen zu erzeugen.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\begin{minipage}[t]{0.45\columnwidth}
|
||||||
|
\includegraphics[width=0.9\textwidth]{plot_editor}
|
||||||
|
\end{minipage}
|
||||||
|
\begin{minipage}[t]{0.225\columnwidth}
|
||||||
|
\includegraphics[width=0.9\textwidth]{property_editor}
|
||||||
|
\end{minipage}
|
||||||
|
\caption{\textbf{Grahischer Plot Editor.} Editor f\"ur plots. Je
|
||||||
|
nachdem welches Element des Plots ausgew\"ahlt wurde ver\"andern
|
||||||
|
sich Einstellungsm\"oglichkeiten. Weitere Eigenschaften k\"onnen
|
||||||
|
\"uber den ``Property Editor'', rechts, eingestellt werden. Der
|
||||||
|
Property Editor ist \"uber die Schaltfl\"ache ``More Properties''
|
||||||
|
erreichbar.}\label{ploteditorfig}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Alle Einstellungen, die man \"uber das graphische Interface machen
|
||||||
|
kann sind auch \"uber Befehle auf der Kommandozeile m\"oglich. Das
|
||||||
|
heisst, dass die Einstellungen problemlos in eine Skript, eine
|
||||||
|
Funktion eingebaut werden k\"onnen. Dieser Ansatz hat den Vorteil,
|
||||||
|
dass man sich die M\"uhe nur ein mal machen muss. Unter den
|
||||||
|
h\"aufigsten Einstellungen sind:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Einstellungen der Linienplots:
|
||||||
|
\begin{itemize}
|
||||||
|
\item St\"arke und Farbe.
|
||||||
|
\item Linienstil, Marker.
|
||||||
|
\end{itemize}
|
||||||
|
\item Achsbeschriftung:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \code{xlabel}, \code{ylabel}.
|
||||||
|
\item Schriftart und Gr\"o{\ss}e.
|
||||||
|
\end{itemize}
|
||||||
|
\item Achsenskalierung und Ticks:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Skalierung der Achsen (Minumum und Maxmimum, logarithmisch oder linear).
|
||||||
|
\item Manuelles Setzen der Ticks, ihrer Richtung und Beschriftung.
|
||||||
|
\item Grid or no Grid?
|
||||||
|
\end{itemize}
|
||||||
|
\item Setzen von globalen Parametern:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Einstellung der Papiergr\"o{\ss}e und plzieren der
|
||||||
|
Zeichenfl\"ache.
|
||||||
|
\item Soll die Zeichenfl\"ache auf allen vier Seiten von einer Box eingeschlossen sein oder nicht?
|
||||||
|
\item Speichern der Abbildung als pdf.
|
||||||
|
\end{itemize}
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Das folgende Listing \ref{niceplotlisting} zeigt das Skript, das die
|
||||||
|
Abbildung \ref{spikedetectionfig} erstellt und speichert. Abh\"angig
|
||||||
|
davon, ob man Eigenschaften der Abbildung oder der Achsen setzen will
|
||||||
|
benutzt man die \code{set} Funktion und \"ubergibt ihr ein sogenanntes
|
||||||
|
Handle der Achse oder der Abbildung und sowohl den Namen als auch den
|
||||||
|
gew\"unschten Wert der der Eigenschaft: \code{set(gcf, 'PaperUnits',
|
||||||
|
'centimeters')} setzt die Eigenschaft ``PaperUnits'' der Abbildung
|
||||||
|
auf ``centimeters'', Standard ist, nat\"urlich, ``inches''.
|
||||||
|
\code{gcf} steht f\"ur ``get current figure'' und stellt ein Handle
|
||||||
|
der aktuellen Abbildung zur Verf\"ugung. Um Eigenschaften der Achse zu
|
||||||
|
setzten benutzt man: \code{set(gca, 'linewidth', 1.5)} wobei
|
||||||
|
\code{gca} f\"ur ``get current axis'' steht. Wenn man den Namen einer
|
||||||
|
Eigenschaft nicht kennt, kann man entweder in der Hilfe nachschlagen
|
||||||
|
oder sie im ``Property Editor'' finden.
|
||||||
|
|
||||||
|
\begin{lstlisting}[caption={Skript zur Erstellung des Plots in Abbildung \ref{spikedetectionfig}.}, label=niceplotlisting]
|
||||||
|
fig = figure();
|
||||||
|
set(gcf, 'PaperUnits', 'centimeters', 'PaperSize', [11.7 9.0]);
|
||||||
|
set(gcf, 'PaperPosition',[0.0 0.0 11.7 9.0], 'Color', 'white')
|
||||||
|
hold on
|
||||||
|
plot(time, neuronal_data, 'color', [ 0.2 0.5 0.7], 'linewidth', 1.)
|
||||||
|
plot(spike_times, ones(size(spike_times))*threshold, 'ro', 'markersize', 4)
|
||||||
|
line([time(1) time(end)], [threshold threshold], 'linestyle', '--',
|
||||||
|
'linewidth', 0.75, 'color', [0.9 0.9 0.9])
|
||||||
|
ylim([0 35])
|
||||||
|
xlim([0 2.25])
|
||||||
|
box('off')
|
||||||
|
xlabel('time [s]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
|
||||||
|
ylabel('potential [mV]', 'fontname', 'MyriadPro-Regular', 'fontsize', 10)
|
||||||
|
title('pyramidal cell', 'fontname', 'MyriadPro-Regular', 'fontsize', 12)
|
||||||
|
set(gca, 'TickDir','out', 'linewidth', 1.5, 'fontname', 'MyriadPro-Regular')
|
||||||
|
saveas(fig, 'spike_detection.pdf', 'pdf')
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\includegraphics[width=0.5\columnwidth]{./images/spike_detection}
|
||||||
|
\caption{\textbf{Annehmbarer Plot.} Dieser Plot wurde vollst\"andig
|
||||||
|
mit dem Skript in Listing \ref{niceplotlisting} erstellt und
|
||||||
|
gespeichert.}\label{spikedetectionfig}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
Neben den Standard Linienplots gibt es eine ganze Reihe weiterer
|
||||||
|
M\"oglichkeiten Daten zu Visualisieren. Mathworks zeigt unter
|
||||||
|
\url{http://www.mathworks.de/discovery/gallery.html} viele Beispiele
|
||||||
|
mit zugeh\"origem Code.
|
||||||
|
|
||||||
|
\subsection{Fazit}
|
||||||
|
|
||||||
|
Ein guter Datenplot stellt die Daten m\"oglichst vollst\"andig und
|
||||||
|
n\"uchtern dar. Verzerrungen durch perspektivische Darstellungen,
|
||||||
|
Achs- oder Symbolskalierungen sollten vermieden werden. Wenn man
|
||||||
|
verschiedene Linienplots in einen Graphen plottet, sollte man neben
|
||||||
|
der Farbe auch den Linienstil (durchgezogen, gepunktet, gestrichelt,
|
||||||
|
etc.) variieren um auch im Schwarzweissdruck eine Unterscheidung zu
|
||||||
|
erm\"oglichen. Bei der Farbwahl sollte man auf Kombinationen aus Rot
|
||||||
|
und Gr\"un verzichten, da sie f\"ur einen nicht unwesentlichen Teil
|
||||||
|
der m\"annlichen Bev\"olkerung nicht unterscheidbar sind. Man achte
|
||||||
|
insbesondere auf:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Klarheit.
|
||||||
|
\item Vollstaendige Beschriftung.
|
||||||
|
\item Deutliche Unterscheidbarkeit von Kurven.
|
||||||
|
\item Keine suggestive Darstellung.
|
||||||
|
\item Ausgewogenheit von Linienst\"arken Schrift- und Plotgr\"o{\ss}e.
|
||||||
|
\item Fehlerbalken, wenn sie angebracht sind.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
@ -17,11 +17,11 @@ Nervensystemen. Dabei ist in erster Linie nur der Zeitpunkt des
|
|||||||
Auftretens eines Aktionspotentials von Bedeutung. Die genaue Form
|
Auftretens eines Aktionspotentials von Bedeutung. Die genaue Form
|
||||||
spielt keine oder nur eine untergeordnete Rolle.
|
spielt keine oder nur eine untergeordnete Rolle.
|
||||||
|
|
||||||
Nach etwas Vorverarbeitung haben elektrophysiologischer Messungen
|
Nach etwas Vorverarbeitung haben elektrophysiologische Messungen
|
||||||
deshalb Listen von Spikezeitpunkten als Ergebniss - sogenannte
|
deshalb Listen von Spikezeitpunkten als Ergebniss - sogenannte
|
||||||
``Spiketrains''. Diese Messungen k\"onnen wiederholt werden und es
|
``Spiketrains''. Diese Messungen k\"onnen wiederholt werden und es
|
||||||
ergeben sich mehrere ``trials'' von Spiketrains
|
ergeben sich mehrere ``trials'' von Spiketrains
|
||||||
(\figref{rasterexamples}).
|
(\figref{rasterexamplesfig}).
|
||||||
|
|
||||||
Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen
|
Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen
|
||||||
--- und deren Analyse f\"allt daher in das Gebiet der Statistik von
|
--- und deren Analyse f\"allt daher in das Gebiet der Statistik von
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
\section{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
|
|
||||||
unter bestimmten Bedingungen ausgef\"uhrt werden. Von grosser
|
|
||||||
Bedeutung sind hier zwei Strukturen:
|
|
||||||
\begin{enumerate}
|
|
||||||
|
|
||||||
\item Schleigen.
|
|
||||||
\item Bedingte Anweisungen und Verzweigungen.
|
|
||||||
\end{enumerate}
|
|
||||||
\end{definition}
|
|
@ -128,7 +128,6 @@ interpretiert werden. Die wichtigsten Datentpyen sind folgende:
|
|||||||
(\code{true}) oder falsch (\code{false}) interpretiert werden.
|
(\code{true}) oder falsch (\code{false}) interpretiert werden.
|
||||||
\item \textit{char} - ASCII Zeichen
|
\item \textit{char} - ASCII Zeichen
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
Unter den numerischen Datentypen gibt es verschiedene Arten mit
|
Unter den numerischen Datentypen gibt es verschiedene Arten mit
|
||||||
unterschiedlichem Speicherbedarf und Wertebreich.
|
unterschiedlichem Speicherbedarf und Wertebreich.
|
||||||
|
|
||||||
@ -144,8 +143,6 @@ unterschiedlichem Speicherbedarf und Wertebreich.
|
|||||||
uint8 & 8 bit & $0$ bis $255$ & Digitalisierte Imaging Daten. \\ \hline
|
uint8 & 8 bit & $0$ bis $255$ & Digitalisierte Imaging Daten. \\ \hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
\end{table}
|
\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
|
Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit
|
||||||
den Datentypen auseinanderzusetzen. Ein Szenario, dass in der
|
den Datentypen auseinanderzusetzen. Ein Szenario, dass in der
|
||||||
@ -164,18 +161,15 @@ ben\"otigen.
|
|||||||
|
|
||||||
\section{Vektoren und Matrizen}
|
\section{Vektoren und Matrizen}
|
||||||
|
|
||||||
% \begin{definition}[Vektoren und Matrizen]
|
|
||||||
Vektoren und Matrizen sind die wichtigsten Datenstrukturen in
|
Vektoren und Matrizen sind die wichtigsten Datenstrukturen in
|
||||||
\matlab. In anderen Programmiersprachen heissen sie ein-
|
\matlab{}. In anderen Programmiersprachen heissen sie ein-
|
||||||
bzw. mehrdimensionalen Felder. Felder sind Datenstrukturen, die
|
bzw. mehrdimensionalen Felder. Felder sind Datenstrukturen, die
|
||||||
mehrere Werte des geleichen Datentyps in einer Variablen vereinen. Da
|
mehrere Werte des geleichen Datentyps in einer Variablen vereinen. Da
|
||||||
Matalb seinen Ursprung in der Verarbeitung von mathematischen Vektoren
|
\matlab{} seinen Ursprung in der Verarbeitung von mathematischen
|
||||||
und Matrizen hat, werden sie hier auch so genannt.
|
Vektoren und Matrizen hat, werden sie hier auch so genannt. \matlab{}
|
||||||
|
macht keinen Unterschied zwischen Vektoren und Matrizen. Vektoren
|
||||||
\matlab{} macht keinen Unterschied zwischen Vektoren und Matrizen.
|
sind 2--dimensionale Matrizen bei denen eine Dimension die Gr\"o{\ss}e
|
||||||
Vektoren sind 2-dimensionale Matrizen bei denen eine Dimension die
|
1 hat.
|
||||||
Gr\"o{\ss}e 1 hat.
|
|
||||||
% \end{definition}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Vektoren}
|
\subsection{Vektoren}
|
||||||
@ -210,7 +204,6 @@ k\"onnen.
|
|||||||
c =
|
c =
|
||||||
0 2 4 6 8 10
|
0 2 4 6 8 10
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Die L\"ange eines Vektors, d.h. die Anzahl der Elemente des Vektors,
|
Die L\"ange eines Vektors, d.h. die Anzahl der Elemente des Vektors,
|
||||||
kann mithilfe der Funktion \code{length()} bestimmt werden. \"Ahnliche
|
kann mithilfe der Funktion \code{length()} bestimmt werden. \"Ahnliche
|
||||||
Information kann \"uber die Funktion \code{size()} erhalten werden. Im
|
Information kann \"uber die Funktion \code{size()} erhalten werden. Im
|
||||||
@ -307,9 +300,9 @@ Element gleichzeitig zuzugreifen.
|
|||||||
\subsubsection{Operationen auf Vektoren}
|
\subsubsection{Operationen auf Vektoren}
|
||||||
|
|
||||||
Mit Vektoren kann sehr einfach gerechnet werden. Listing
|
Mit Vektoren kann sehr einfach gerechnet werden. Listing
|
||||||
\ref{arrayListing5} zeigt Rechnungen mit Vektoren.
|
\ref{arrayListing6} zeigt Rechnungen mit Vektoren.
|
||||||
|
|
||||||
\begin{lstlisting}[caption={Rechnen mit Vektoren.},label=arrayListing5]
|
\begin{lstlisting}[caption={Rechnen mit Vektoren.},label=arrayListing6]
|
||||||
>> a = (0:2:8);
|
>> a = (0:2:8);
|
||||||
>> a + 5 % addiere einen Skalar
|
>> a + 5 % addiere einen Skalar
|
||||||
ans =
|
ans =
|
||||||
@ -347,7 +340,7 @@ entsprechenden Matrixoperationen aus der linearen Algebrar belegt
|
|||||||
(s.u.).
|
(s.u.).
|
||||||
|
|
||||||
Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von
|
Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von
|
||||||
Listing \ref{arrayListing5}. Wenn zwei Vektoren (elementweise)
|
Listing \ref{arrayListing6}. Wenn zwei Vektoren (elementweise)
|
||||||
miteinander verrechnet werden sollen, muss nicht nur die Anzahl der Elemente
|
miteinander verrechnet werden sollen, muss nicht nur die Anzahl der Elemente
|
||||||
übereinstimmen, sondern es muss auch das Layout (Zeilen- oder
|
übereinstimmen, sondern es muss auch das Layout (Zeilen- oder
|
||||||
Spaltenvektoren) \"ubereinstimmen.
|
Spaltenvektoren) \"ubereinstimmen.
|
||||||
@ -356,7 +349,7 @@ Spaltenvektoren) \"ubereinstimmen.
|
|||||||
Will man Elemente aus einem Vektor entfernen, dann weist man den
|
Will man Elemente aus einem Vektor entfernen, dann weist man den
|
||||||
entsprechenden Zellen einen leeren Wert (\code{[]}) zu.
|
entsprechenden Zellen einen leeren Wert (\code{[]}) zu.
|
||||||
|
|
||||||
\begin{lstlisting}[label=arrayListing6, caption={L\"oschen von Elementen aus einem Vektor.}]
|
\begin{lstlisting}[label=arrayListing7, caption={L\"oschen von Elementen aus einem Vektor.}]
|
||||||
>> a = (0:2:8);
|
>> a = (0:2:8);
|
||||||
>> length(a)
|
>> length(a)
|
||||||
ans =
|
ans =
|
||||||
@ -375,13 +368,13 @@ entsprechenden Zellen einen leeren Wert (\code{[]}) zu.
|
|||||||
|
|
||||||
Neben dem L\"oschen von Vektorinhalten k\"onnen Vektoren auch
|
Neben dem L\"oschen von Vektorinhalten k\"onnen Vektoren auch
|
||||||
erweitert oder zusammengesetzt werden. Auch hier muss das Layout der Vektoren
|
erweitert oder zusammengesetzt werden. Auch hier muss das Layout der Vektoren
|
||||||
\"ubereinstimmen (Listing \ref{arrayListing7}, Zeile 12). Will man
|
\"ubereinstimmen (Listing \ref{arrayListing8}, Zeile 12). Will man
|
||||||
einen Vektor erweitern, kann man \"uber das Ende hinaus
|
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
|
das Layout geachtet werden. Zudem ist dieser Vorgang
|
||||||
``rechenintensiv'' und sollte soweit m\"oglich vermieden werden.
|
``rechenintensiv'' und sollte soweit m\"oglich vermieden werden.
|
||||||
|
|
||||||
\begin{lstlisting}[caption={Zusammenf\"ugen und Erweitern von Vektoren.}, label=arrayListing7]
|
\begin{lstlisting}[caption={Zusammenf\"ugen und Erweitern von Vektoren.}, label=arrayListing8]
|
||||||
>> a = (0:2:8);
|
>> a = (0:2:8);
|
||||||
>> b = (10:2:19);
|
>> b = (10:2:19);
|
||||||
>> c = [a b] % erstelle einen Vektor aus einer Liste von Vektoren
|
>> c = [a b] % erstelle einen Vektor aus einer Liste von Vektoren
|
||||||
@ -577,7 +570,7 @@ Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
|
|||||||
\emph{relationalen Operatoren} (\code{>}, \code{<}, \code{==},
|
\emph{relationalen Operatoren} (\code{>}, \code{<}, \code{==},
|
||||||
\code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht)
|
\code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht)
|
||||||
eingesetzt. Mehrere Ausdr\"ucke werden mittels der \textit{logischen
|
eingesetzt. Mehrere Ausdr\"ucke werden mittels der \textit{logischen
|
||||||
Operatoren} (\code{\&}, \code{|}}, UND, ODER ) verkn\"upft. Sie sind f\"ur
|
Operatoren} (\code{\&}, \code{|}, UND, ODER ) verkn\"upft. Sie sind f\"ur
|
||||||
uns nicht nur wichtig um Codeabschnitte bedingt auszuf\"uhren
|
uns nicht nur wichtig um Codeabschnitte bedingt auszuf\"uhren
|
||||||
(Verzweigungen, \ref{controlstructsec}) sondern auch um aus Vektoren
|
(Verzweigungen, \ref{controlstructsec}) sondern auch um aus Vektoren
|
||||||
und Matrizen bequem Elemente auszuw\"ahlen (logisches Indizieren,
|
und Matrizen bequem Elemente auszuw\"ahlen (logisches Indizieren,
|
||||||
@ -933,18 +926,18 @@ bestimmten Bedingungen ausgef\"uhrt wird.
|
|||||||
Am h\"aufigsten genutzter Vertreter ist die \code{if} -
|
Am h\"aufigsten genutzter Vertreter ist die \code{if} -
|
||||||
Anweisung. Sie Wird genutzt um Programmcode nur unter bestimmten
|
Anweisung. Sie Wird genutzt um Programmcode nur unter bestimmten
|
||||||
Bedingungen auszuf\"uhren.
|
Bedingungen auszuf\"uhren.
|
||||||
\begin{definition}
|
|
||||||
Der Kopf der if - Anweisung beginnt mit dem Schl\"usselwort
|
Der Kopf der if - Anweisung beginnt mit dem Schl\"usselwort \code{if}
|
||||||
\code{if} welches von einem \underline{Booleschen Ausdruck}
|
welches von einem \underline{Booleschen Ausdruck} gefolgt wird. Wenn
|
||||||
gefolgt wird. Wenn dieser zu \code{true} ausgewertet werden kann,
|
dieser zu \code{true} ausgewertet werden kann, wird der Code im
|
||||||
wird der Code im K\"orper der Anweisung ausgef\"uhrt. Optional
|
K\"orper der Anweisung ausgef\"uhrt. Optional k\"onnen weitere
|
||||||
k\"onnen weitere Bedingungen mit dem Schl\"usselwort \code{elseif}
|
Bedingungen mit dem Schl\"usselwort \code{elseif} folgen. Ebenfalls
|
||||||
folgen. Ebenfalls optional ist die Verwendung eines finalen
|
optional ist die Verwendung eines finalen \code{else} Falls. Dieser
|
||||||
\code{else} Falls. Dieser wird immer dann ausgef\"uhrt wenn alle
|
wird immer dann ausgef\"uhrt wenn alle vorherigen Bedingungen nicht
|
||||||
vorherigen Bedingungen nicht erf\"ullt werden. Die \code{if}
|
erf\"ullt werden. Die \code{if} Anweisung wird mit \code{end}
|
||||||
Anweisung wird mit \code{end} beendet. Listing \ref{ifelselisting}
|
beendet. Listing \ref{ifelselisting} zeigt den Aufbau einer
|
||||||
zeigt den Aufbau einer if-Anweisung.
|
if-Anweisung.
|
||||||
\end{definition}
|
|
||||||
|
|
||||||
\begin{lstlisting}[label=ifelselisting, caption={Grundger\"ust einer \code{if} Anweisung.}]
|
\begin{lstlisting}[label=ifelselisting, caption={Grundger\"ust einer \code{if} Anweisung.}]
|
||||||
if x < y
|
if x < y
|
||||||
@ -957,33 +950,30 @@ end
|
|||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
\begin{exercise}{ifelse.m}{}
|
\begin{exercise}{ifelse.m}{}
|
||||||
Ziehe eine Zufallszahl und \"uberpr\"ufe mit einer geegnet \ciode{if} Anweisung, ob sie:
|
Ziehe eine Zufallszahl und \"uberpr\"ufe mit einer geegneten \code{if} Anweisung, ob sie:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item ... kleiner als 0.5 ist.
|
\item ... kleiner als 0.5 ist.
|
||||||
\item ... kleiner oder gr\"o{\ss}er-gleich 0.5 ist.
|
\item ... kleiner oder gr\"o{\ss}er-gleich 0.5 ist.
|
||||||
\item ... kleiner als 0.5, gr\"o{\ss}er oder gleich 0.5 aber kleiner
|
\item ... kleiner als 0.5, gr\"o{\ss}er oder gleich 0.5 aber kleiner
|
||||||
als 0.75 ist oder gr\"o{\ss}er oder gleich 0.75 ist.
|
als 0.75 ist oder gr\"o{\ss}er oder gleich 0.75 ist.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
\end{execise}
|
\end{exercise}
|
||||||
|
|
||||||
\subsubsection{Die \code{switch} -- Verzweigung}
|
\subsubsection{Die \code{switch} -- Verzweigung}
|
||||||
|
|
||||||
Die \code{switch} Verzweigung Wird eingesetzt wenn mehrere F\"alle
|
Die \code{switch} Verzweigung Wird eingesetzt wenn mehrere F\"alle
|
||||||
auftreten k\"onnen, die einer unterschiedlichen Behandlung bed\"urfen.
|
auftreten k\"onnen, die einer unterschiedlichen Behandlung bed\"urfen.
|
||||||
|
|
||||||
\begin{definition}
|
Wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von der
|
||||||
Wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von
|
\textit{switch Anweisung} (Zahl oder String). Jeder Fall auf den die
|
||||||
der \textit{switch Anweisung} (Zahl oder String). Jeder Fall auf den
|
Anweisung \"uberpr\"ft werden soll wird mit dem Schl\"usselwort
|
||||||
die Anweisung \"uberpr\"ft werden soll wird mit dem Schl\"usselwort
|
\code{case} eingeleitet. Diese wird gefolgt von der \textit{case
|
||||||
\code{case} eingeleitet. Diese wird gefolgt von der \textit{case
|
|
||||||
Anweisung} welche definiert gegen welchen Fall auf
|
Anweisung} welche definiert gegen welchen Fall auf
|
||||||
\underline{Gleichheit} getestet wird. F\"ur jeden Fall wird der
|
\underline{Gleichheit} getestet wird. F\"ur jeden Fall wird der
|
||||||
Programmcode angegeben, der ausgef\"uhrt werden soll Optional
|
Programmcode angegeben, der ausgef\"uhrt werden soll Optional k\"onnen
|
||||||
k\"onnen mit dem Schl\"usselwort \code{otherwise} alle nicht
|
mit dem Schl\"usselwort \code{otherwise} alle nicht explizit genannten
|
||||||
explizit genannten F\"alle behandelt werden. Die \code{switch}
|
F\"alle behandelt werden. Die \code{switch} Anweisung wird mit
|
||||||
Anweisung wird mit \code{end} beendet (z.B. in Listing
|
\code{end} beendet (z.B. in Listing \ref{switchlisting}).
|
||||||
\ref{switchlisting}).
|
|
||||||
\end{definition}
|
|
||||||
|
|
||||||
|
|
||||||
\begin{lstlisting}[label=switchlisting, caption={Grundger\"ust einer \code{switch} Anweisung.}]
|
\begin{lstlisting}[label=switchlisting, caption={Grundger\"ust einer \code{switch} Anweisung.}]
|
||||||
@ -1022,7 +1012,7 @@ werden, werden die Schl\"usselworte \code{break} und
|
|||||||
\code{continue} eingesetzt (Listing \ref{breakcontinuelisting}
|
\code{continue} eingesetzt (Listing \ref{breakcontinuelisting}
|
||||||
zeigt, wie sie eingesetzt werden k\"onnen).
|
zeigt, wie sie eingesetzt werden k\"onnen).
|
||||||
|
|
||||||
\begin{lstlisting}[caption={Ensatz der \code{continue} und \code{break} Schl\"usselworte um die Ausf\"uhrung von Abschnitte in Schleife zu \"uberspringen oder abzubrechen.}, label=breakcontinuelisting]
|
\begin{lstlisting}[caption={Ensatz der \code{continue} und \code{break} Schl\"usselworte um die Ausf\"uhrung von Code-Abschnitten in Schleifen zu \"uberspringen oder abzubrechen.}, label=breakcontinuelisting]
|
||||||
for x = 1:10
|
for x = 1:10
|
||||||
if(x > 2 & x < 5)
|
if(x > 2 & x < 5)
|
||||||
continue;
|
continue;
|
||||||
@ -1051,7 +1041,7 @@ end
|
|||||||
die zwischen \code{tic} und \code{toc} vergangene Zeit.
|
die zwischen \code{tic} und \code{toc} vergangene Zeit.
|
||||||
|
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
\item Benutze eine \code{for} Schleife um die Element auszuw\"ahlen.
|
\item Benutze eine \code{for} Schleife um die Elemente auszuw\"ahlen.
|
||||||
\item Benutze logisches Indizieren.
|
\item Benutze logisches Indizieren.
|
||||||
\end{enumerate}
|
\end{enumerate}
|
||||||
\end{exercise}
|
\end{exercise}
|
||||||
@ -1076,7 +1066,7 @@ end
|
|||||||
|
|
||||||
Ein Programm ist eine Sammlung von Anweisungen, die in einer Datei auf
|
Ein Programm ist eine Sammlung von Anweisungen, die in einer Datei auf
|
||||||
dem Rechner abgelegt sind. Wenn es durch den Aufruf zum Leben erweckt
|
dem Rechner abgelegt sind. Wenn es durch den Aufruf zum Leben erweckt
|
||||||
wird, dann wird es Zeile f\"r Zeile von oben nach unten ausgef\"uhrt.
|
wird, dann wird es Zeile f\"Ur Zeile von oben nach unten ausgef\"uhrt.
|
||||||
|
|
||||||
\matlab{} kennt drei Arten von Programmen:
|
\matlab{} kennt drei Arten von Programmen:
|
||||||
\begin{enumerate}
|
\begin{enumerate}
|
||||||
|
@ -1,164 +0,0 @@
|
|||||||
\section{Variablen und Datentypen}
|
|
||||||
|
|
||||||
\subsection{Variablen}
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
|
||||||
Bedeutung. Wir werden uns dennoch sp\"ater etwas genauer mit ihnen
|
|
||||||
befassen.
|
|
||||||
|
|
||||||
\begin{figure}
|
|
||||||
\centering
|
|
||||||
\begin{subfigure}{.5\textwidth}
|
|
||||||
\includegraphics[width=0.8\textwidth]{images/variable}
|
|
||||||
\label{variable:a}
|
|
||||||
\end{subfigure}%
|
|
||||||
\begin{subfigure}{.5\textwidth}
|
|
||||||
\includegraphics[width=.8\textwidth]{images/variableB}
|
|
||||||
\label{variable:b}
|
|
||||||
\end{subfigure}
|
|
||||||
\caption{\textbf{Variablen.} Variablen sind Zeiger auf eine Adresse
|
|
||||||
im Speicher, die einen Namen und einen Datentypen beinhalten. Im
|
|
||||||
Speicher ist der Wert der Variable bin\"ar gespeichert. Abh\"angig
|
|
||||||
vom Datentyp wird dieses Bitmuster unterschiedlich
|
|
||||||
interpretiert.}\label{variablefig}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Erzeugen von Variablen}
|
|
||||||
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 =
|
|
||||||
[]
|
|
||||||
>>
|
|
||||||
>> x = 38
|
|
||||||
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
|
|
||||||
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
|
|
||||||
Kleinschreibung achtet und ein Variablennane mit einem alphabethischen
|
|
||||||
Zeichen beginnen muss. Des Weiteren sind Umlaute, Sonder- und
|
|
||||||
Leerzeichen in Variablennamen nicht erlaubt.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Arbeiten mit Variablen}
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
\footnotesize
|
|
||||||
\begin{lstlisting}[label=varListing3, caption={Rechnen mit Variablen.}]
|
|
||||||
>> x = 1;
|
|
||||||
>> x + 10
|
|
||||||
ans =
|
|
||||||
11
|
|
||||||
>>
|
|
||||||
>> x % x wurde nicht veraendert
|
|
||||||
ans =
|
|
||||||
1
|
|
||||||
>>
|
|
||||||
>> y = 2;
|
|
||||||
>>
|
|
||||||
>> x + y
|
|
||||||
ans =
|
|
||||||
3
|
|
||||||
>>
|
|
||||||
>> z = x + y
|
|
||||||
z =
|
|
||||||
3
|
|
||||||
>>
|
|
||||||
>> z = z * 5;
|
|
||||||
>> z
|
|
||||||
z =
|
|
||||||
15
|
|
||||||
>>
|
|
||||||
>> 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 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.
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Datentypen}
|
|
||||||
|
|
||||||
Der Datentyp bestimmt, wie die im Speicher abgelegten Bitmuster
|
|
||||||
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.
|
|
||||||
\item \textit{complex} - Komplexe Zahlen.
|
|
||||||
\item \textit{logical} - Boolesche Werte, die als wahr
|
|
||||||
(\textit{true}) oder falsch (\textit{false}) interpretiert werden.
|
|
||||||
\item \textit{char} - ASCII Zeichen
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
Unter den numerischen Datentypen gibt es verschiedene Arten mit
|
|
||||||
unterschiedlichem Speicherbedarf und Wertebreich.
|
|
||||||
|
|
||||||
\begin{table}[]
|
|
||||||
\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 & $-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}
|
|
||||||
\end{tabular}
|
|
||||||
\end{table}
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
|
||||||
Spannungsbereich in $2^{16}$ Schritte aufgeteilt ist. Um Speicherplatz
|
|
||||||
zu sparen ist 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.
|
|
@ -1,56 +0,0 @@
|
|||||||
\section{Vektoren und Matrizen}
|
|
||||||
|
|
||||||
\begin{definition}[Vektoren und Matrizen]
|
|
||||||
Vektoren und Matrizen sind die wichtigsten Datenstrukturen in
|
|
||||||
Matlab. In andern 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.\\
|
|
||||||
|
|
||||||
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
|
|
||||||
hat.
|
|
||||||
\end{definition}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Vektoren}
|
|
||||||
|
|
||||||
Im Gegensatz zu den 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]{programming/lectures/images/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
|
|
||||||
(columnvector).}\label{vectorfig}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
|
|
||||||
\footnotesize
|
|
||||||
\begin{lstlisting}[label=arrayListing1]
|
|
||||||
>> a = [0 1 2 3 4 5 6 7 8 9] % Erstellen eines Zeilenvektors
|
|
||||||
a =
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
>>
|
|
||||||
>> b = (0:9) % etwas bequemer
|
|
||||||
b =
|
|
||||||
0 1 2 3 4 5 6 7 8 9
|
|
||||||
>>
|
|
||||||
>> c = (0:2:10)
|
|
||||||
c =
|
|
||||||
0 2 4 6 8 10
|
|
||||||
\end{lstlisting}
|
|
||||||
\normalsize
|
|
||||||
|
|
||||||
\subsection{Unterscheidung Zeilen- und Spaltenvektoren}
|
|
||||||
|
|
||||||
|
|
||||||
\subsection{Matrizen}
|
|
Reference in New Issue
Block a user