diff --git a/plotting/lecture/images/plot_editor.png b/plotting/lecture/images/plot_editor.png new file mode 100644 index 0000000..252f8b8 Binary files /dev/null and b/plotting/lecture/images/plot_editor.png differ diff --git a/plotting/lecture/images/property_editor.png b/plotting/lecture/images/property_editor.png new file mode 100644 index 0000000..06774a6 Binary files /dev/null and b/plotting/lecture/images/property_editor.png differ diff --git a/plotting/lecture/plotting.tex b/plotting/lecture/plotting.tex index 1f4df06..ac5d989 100644 --- a/plotting/lecture/plotting.tex +++ b/plotting/lecture/plotting.tex @@ -1,6 +1,6 @@ \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 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 \ref{misleadingpiefig}) oder auch gezielte Achsenskalierungen (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 vorgehen um Unterschiede nicht zu \"uberproportional zu verzerren (Abbildung \ref{misleadingsymbolsfig}). @@ -119,4 +119,134 @@ vorgehen um Unterschiede nicht zu \"uberproportional zu verzerren \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} + diff --git a/pointprocesses/lecture/pointprocesses.tex b/pointprocesses/lecture/pointprocesses.tex index 79fe905..945f3b3 100644 --- a/pointprocesses/lecture/pointprocesses.tex +++ b/pointprocesses/lecture/pointprocesses.tex @@ -17,11 +17,11 @@ Nervensystemen. Dabei ist in erster Linie nur der Zeitpunkt des Auftretens eines Aktionspotentials von Bedeutung. Die genaue Form 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 ``Spiketrains''. Diese Messungen k\"onnen wiederholt werden und es ergeben sich mehrere ``trials'' von Spiketrains -(\figref{rasterexamples}). +(\figref{rasterexamplesfig}). Spiketrains sind Zeitpunkte von Ereignissen --- den Aktionspotentialen --- und deren Analyse f\"allt daher in das Gebiet der Statistik von diff --git a/programming/lectures/control_structures.tex b/programming/lectures/control_structures.tex deleted file mode 100644 index f3d8ca1..0000000 --- a/programming/lectures/control_structures.tex +++ /dev/null @@ -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} diff --git a/programming/lectures/programming.tex b/programming/lectures/programming.tex index cbb4f62..b245c3d 100644 --- a/programming/lectures/programming.tex +++ b/programming/lectures/programming.tex @@ -128,7 +128,6 @@ interpretiert werden. Die wichtigsten Datentpyen sind folgende: (\code{true}) oder falsch (\code{false}) interpretiert werden. \item \textit{char} - ASCII Zeichen \end{itemize} - Unter den numerischen Datentypen gibt es verschiedene Arten mit unterschiedlichem Speicherbedarf und Wertebreich. @@ -144,8 +143,6 @@ unterschiedlichem Speicherbedarf und Wertebreich. uint8 & 8 bit & $0$ bis $255$ & Digitalisierte Imaging Daten. \\ \hline \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 @@ -164,18 +161,15 @@ ben\"otigen. \section{Vektoren und Matrizen} -% \begin{definition}[Vektoren und Matrizen] 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 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. - -\matlab{} macht keinen Unterschied zwischen Vektoren und Matrizen. -Vektoren sind 2-dimensionale Matrizen bei denen eine Dimension die -Gr\"o{\ss}e 1 hat. -% \end{definition} +\matlab{} seinen Ursprung in der Verarbeitung von mathematischen +Vektoren und Matrizen hat, werden sie hier auch so genannt. \matlab{} +macht keinen Unterschied zwischen Vektoren und Matrizen. Vektoren +sind 2--dimensionale Matrizen bei denen eine Dimension die Gr\"o{\ss}e +1 hat. \subsection{Vektoren} @@ -210,7 +204,6 @@ k\"onnen. c = 0 2 4 6 8 10 \end{lstlisting} - 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 @@ -307,9 +300,9 @@ Element gleichzeitig zuzugreifen. \subsubsection{Operationen auf Vektoren} 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 + 5 % addiere einen Skalar ans = @@ -347,7 +340,7 @@ 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) +Listing \ref{arrayListing6}. Wenn zwei Vektoren (elementweise) miteinander verrechnet werden sollen, muss nicht nur die Anzahl der Elemente übereinstimmen, sondern es muss auch das Layout (Zeilen- oder Spaltenvektoren) \"ubereinstimmen. @@ -356,7 +349,7 @@ Spaltenvektoren) \"ubereinstimmen. Will man Elemente aus einem Vektor entfernen, dann weist man den 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); >> length(a) ans = @@ -375,13 +368,13 @@ entsprechenden Zellen einen leeren Wert (\code{[]}) zu. 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 +\"ubereinstimmen (Listing \ref{arrayListing8}, Zeile 12). Will man einen Vektor erweitern, kann man \"uber das Ende hinaus zuweisen. \matlab{} erweitert dann die Variable. Auch hierbei muss auf das Layout geachtet werden. Zudem ist dieser Vorgang ``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); >> b = (10:2:19); >> 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{==}, \code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht) 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 (Verzweigungen, \ref{controlstructsec}) sondern auch um aus Vektoren 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} - Anweisung. Sie Wird genutzt um Programmcode nur unter bestimmten Bedingungen auszuf\"uhren. -\begin{definition} - Der Kopf der if - Anweisung beginnt mit dem Schl\"usselwort - \code{if} welches von einem \underline{Booleschen Ausdruck} - gefolgt wird. Wenn dieser zu \code{true} ausgewertet werden kann, - wird der Code im K\"orper der Anweisung ausgef\"uhrt. Optional - k\"onnen weitere Bedingungen mit dem Schl\"usselwort \code{elseif} - folgen. Ebenfalls optional ist die Verwendung eines finalen - \code{else} Falls. Dieser wird immer dann ausgef\"uhrt wenn alle - vorherigen Bedingungen nicht erf\"ullt werden. Die \code{if} - Anweisung wird mit \code{end} beendet. Listing \ref{ifelselisting} - zeigt den Aufbau einer if-Anweisung. -\end{definition} + +Der Kopf der if - Anweisung beginnt mit dem Schl\"usselwort \code{if} +welches von einem \underline{Booleschen Ausdruck} gefolgt wird. Wenn +dieser zu \code{true} ausgewertet werden kann, wird der Code im +K\"orper der Anweisung ausgef\"uhrt. Optional k\"onnen weitere +Bedingungen mit dem Schl\"usselwort \code{elseif} folgen. Ebenfalls +optional ist die Verwendung eines finalen \code{else} Falls. Dieser +wird immer dann ausgef\"uhrt wenn alle vorherigen Bedingungen nicht +erf\"ullt werden. Die \code{if} Anweisung wird mit \code{end} +beendet. Listing \ref{ifelselisting} zeigt den Aufbau einer +if-Anweisung. + \begin{lstlisting}[label=ifelselisting, caption={Grundger\"ust einer \code{if} Anweisung.}] if x < y @@ -957,33 +950,30 @@ end \end{lstlisting} \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} \item ... kleiner als 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 als 0.75 ist oder gr\"o{\ss}er oder gleich 0.75 ist. \end{enumerate} -\end{execise} +\end{exercise} \subsubsection{Die \code{switch} -- Verzweigung} Die \code{switch} Verzweigung Wird eingesetzt wenn mehrere F\"alle auftreten k\"onnen, die einer unterschiedlichen Behandlung bed\"urfen. -\begin{definition} - Wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von - der \textit{switch Anweisung} (Zahl oder String). Jeder Fall auf den - die Anweisung \"uberpr\"ft werden soll wird mit dem Schl\"usselwort - \code{case} eingeleitet. Diese wird gefolgt von der \textit{case - Anweisung} welche definiert gegen welchen Fall auf - \underline{Gleichheit} getestet wird. F\"ur jeden Fall wird der - Programmcode angegeben, der ausgef\"uhrt werden soll Optional - k\"onnen mit dem Schl\"usselwort \code{otherwise} alle nicht - explizit genannten F\"alle behandelt werden. Die \code{switch} - Anweisung wird mit \code{end} beendet (z.B. in Listing - \ref{switchlisting}). -\end{definition} +Wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von der +\textit{switch Anweisung} (Zahl oder String). Jeder Fall auf den die +Anweisung \"uberpr\"ft werden soll wird mit dem Schl\"usselwort +\code{case} eingeleitet. Diese wird gefolgt von der \textit{case + Anweisung} welche definiert gegen welchen Fall auf +\underline{Gleichheit} getestet wird. F\"ur jeden Fall wird der +Programmcode angegeben, der ausgef\"uhrt werden soll Optional k\"onnen +mit dem Schl\"usselwort \code{otherwise} alle nicht explizit genannten +F\"alle behandelt werden. Die \code{switch} Anweisung wird mit +\code{end} beendet (z.B. in Listing \ref{switchlisting}). \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} 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 if(x > 2 & x < 5) continue; @@ -1051,7 +1041,7 @@ end die zwischen \code{tic} und \code{toc} vergangene Zeit. \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. \end{enumerate} \end{exercise} @@ -1076,7 +1066,7 @@ end Ein Programm ist eine Sammlung von Anweisungen, die in einer Datei auf 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: \begin{enumerate} diff --git a/programming/lectures/variables_datatypes.tex b/programming/lectures/variables_datatypes.tex deleted file mode 100644 index 7e937ad..0000000 --- a/programming/lectures/variables_datatypes.tex +++ /dev/null @@ -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. diff --git a/programming/lectures/vectors_matrices.tex b/programming/lectures/vectors_matrices.tex deleted file mode 100644 index 20652a6..0000000 --- a/programming/lectures/vectors_matrices.tex +++ /dev/null @@ -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} \ No newline at end of file