[translation] add german version file
This commit is contained in:
parent
99801c5344
commit
30e37ba4be
210
programming/lecture/programming_de.tex
Normal file
210
programming/lecture/programming_de.tex
Normal file
@ -0,0 +1,210 @@
|
||||
\chapter{Programmierung in \matlab}
|
||||
|
||||
\section{Variablen und Datentypen}
|
||||
|
||||
\subsection{Variablen}
|
||||
|
||||
Eine \determ{Variable} ist ein Zeiger auf eine Stelle im
|
||||
Speicher. Dieser Zeiger hat einen Namen, den Variablennamen, und einen
|
||||
\determ{Datentyp} (Abbildung \ref{variablefig}). Im Speicher wird der
|
||||
Wert der Variablen bin\"ar als eine Folge von \determ[Bit]{Bits} (0
|
||||
oder 1) 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]{variable}
|
||||
\label{variable:a}
|
||||
\end{subfigure}%
|
||||
\begin{subfigure}{.5\textwidth}
|
||||
\includegraphics[width=.8\textwidth]{variableB}
|
||||
\label{variable:b}
|
||||
\end{subfigure}
|
||||
\titlecaption{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 erzeugt werden. Listing
|
||||
\ref{varListing1} zeigt drei Beispiele:
|
||||
\begin{lstlisting}[label=varListing1, caption={Erzeugen von Variablen.}]
|
||||
>> x = 38
|
||||
x =
|
||||
38
|
||||
|
||||
>> y = []
|
||||
y =
|
||||
[]
|
||||
|
||||
>> z = 'A'
|
||||
z =
|
||||
A
|
||||
\end{lstlisting}
|
||||
|
||||
Die Zeile 1 kann etwa so gelesen werden:''Erzeuge eine Variable mit
|
||||
dem Namen \varcode{x} und weise ihr den Wert 38 zu''. Das
|
||||
Gleichheitszeichen ist der sogenannte
|
||||
\codeterm{Zuweisungsoperator}. Zeile 5 definiert eine Variable \varcode{y}, der
|
||||
ein leerer Wert zugewiesen wird. Da \matlab{}, wenn nicht anders
|
||||
angegeben, immer den \codeterm{double} Datentypen benutzt, haben beide
|
||||
Variablen diesen Datentyp. In Zeile 9 wird der Variablen \varcode{z} der Buchstabe
|
||||
``A'' zugewiesen. \varcode{z} ist nicht ein Flie{\ss}kommazahl von Typ \codeterm{double},
|
||||
sondern ein \codeterm{character} (Zeichen).
|
||||
|
||||
Der Datentyp einer Variable kann mit \code{class()} abgefragt werden.
|
||||
Eine Liste aller definierten Variablen gibt \code{who}
|
||||
zur\"uck. Detailliertere Informationen \"uber Variablen zeigt
|
||||
\code{whos} an.
|
||||
|
||||
\begin{lstlisting}[label=varListing2, caption={Erfragen des Datentyps einer Variable, Listen aller definierten Variablen.}]
|
||||
>>class(x)
|
||||
ans =
|
||||
double
|
||||
|
||||
>> who
|
||||
Your variables are:
|
||||
|
||||
x y z
|
||||
|
||||
>> whos
|
||||
Name Size Bytes Class Attributes
|
||||
|
||||
x 1x1 8 double
|
||||
y 0x0 0 double
|
||||
z 1x1 2 char
|
||||
\end{lstlisting}
|
||||
|
||||
\begin{important}[Namen von Variablen]
|
||||
Bei der Namensgebung ist zu beachten, dass \matlab{} auf Gro{\ss}-
|
||||
und Kleinschreibung achtet und ein Variablenname mit einem
|
||||
alphabetischen Zeichen beginnen muss. Umlaute, Sonder- und
|
||||
Leerzeichen sind in Variablennamen nicht erlaubt.
|
||||
\end{important}
|
||||
|
||||
\subsection{Arbeiten mit Variablen}
|
||||
|
||||
Nat\"urlich kann mit den Variablen auch gearbeitet, bzw. gerechnet
|
||||
werden. \matlab{} kennt alle normalen
|
||||
\codeterm[Operator!arithmetischer]{arithmetischen Operatoren} wie
|
||||
\code[Operator!arithmetischer!1add@+]{+},
|
||||
\code[Operator!arithmetischer!2sub@-]{-},
|
||||
\code[Operator!arithmetischer!3mul@*]{*} und
|
||||
\code[Operator!arithmetischer!4div@/]{/}. Die Potenz wird \"uber das
|
||||
Dachsymbol \code[Operator!arithmetischer!5pow@\^{}]{\^{}}
|
||||
dargestellt. Listing \ref{varListing3} zeigt, wie sie benutzt werden.
|
||||
|
||||
\pagebreak[4]
|
||||
\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 % loesche die Variable z
|
||||
\end{lstlisting}
|
||||
|
||||
Beachtenswert ist in Zeilen 2 und 6, dass mit dem Inhalt einer
|
||||
Variablen gerechnet werden kann, ohne dass dadurch ihr Wert
|
||||
ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden
|
||||
soll, dann muss der neue Wert explizit einer Variablen zugewiesen werden
|
||||
(mit dem \code[Operator!Zuweisung!=]{=} Zuweisungsoperator,
|
||||
z.B. Zeilen 14 und 18). Zeile 23 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:
|
||||
\begin{itemize}
|
||||
\item \codeterm{integer}: Ganze Zahlen. Hier gibt es mehrere
|
||||
Unterarten, die wir in \matlab{} (meist) ignorieren k\"onnen.
|
||||
\item \codeterm{double}: Flie{\ss}kommazahlen. Im Gegensatz zu den reelen Zahlen, die durch diesen Datentyp dargestellt werden, sind sie abz\"ahlbar.
|
||||
\item \codeterm{complex}: Komplexe Zahlen.
|
||||
\item \codeterm{logical}: Boolesche Werte, die als wahr
|
||||
(\code{true}) oder falsch (\code{false}) interpretiert werden.
|
||||
\item \codeterm{char}: ASCII Zeichen
|
||||
\end{itemize}
|
||||
Unter den numerischen Datentypen gibt es verschiedene Arten mit
|
||||
unterschiedlichem Speicherbedarf und Wertebreich (siehe
|
||||
Tabelle~\ref{dtypestab}).
|
||||
|
||||
\begin{table}[t]
|
||||
\centering
|
||||
\titlecaption{Grundlegende numerische Datentypen und ihr Wertebereich.}{}
|
||||
\label{dtypestab}
|
||||
\begin{tabular}{llcl}\hline
|
||||
Datentyp & Speicherbedarf & Wertebereich & Beispiel \erh \\ \hline
|
||||
\code{double} & 64 bit & $\approx -10^{308}$ bis $\approx 10^{308} $& Flie{\ss}kommazahlen.\erb\\
|
||||
\code{int} & 64 bit & $-2^{31}$ bis $2^{31}-1$ & Ganzzahlige Werte \\
|
||||
\code{int16} & 16 bit & $-2^{15}$ bis $2^{15}-1$ & Digitalisierte Spannungen. \\
|
||||
\code{uint8} & 8 bit & $0$ bis $255$ & Digitalisierte Imaging Daten. \\ \hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
\matlab{} arbeitet meist mit dem \codeterm{double} Datentyp wenn numerische
|
||||
Daten gespeichert werden. Dennoch lohnt es sich, sich ein wenig mit
|
||||
den Datentypen auseinanderzusetzen (Box \ref{daqbox}).
|
||||
|
||||
\begin{ibox}[t]{\label{daqbox}Digitalisierung von Messdaten}
|
||||
Szenario: Die elektrische Aktivit\"at (z.B. die Membranspannung)
|
||||
einer Nervenzelle wird gemessen. Die gemessene Spannung wird mittels
|
||||
Messkarte digitalisiert und auf dem Computer f\"ur weitere Analysen
|
||||
gespeichert. Typischerweise k\"onnen mit solchen Messkarten
|
||||
Spannungen im Bereich $\pm 10$\,V gemessen werden. Die Aufl\"osung
|
||||
der Analog-Digitalwandler betr\"agt heutzutage meistens 16 bit. Das
|
||||
heisst, dass der gesamte Spannungsbereich in $2^{16}$ Schritte
|
||||
eingeteilt ist. Die gemessenene Spannung wird auf digitalisierte
|
||||
Werte abgebildet.\vspace{0.25cm}
|
||||
|
||||
\begin{minipage}{0.5\textwidth}
|
||||
\includegraphics[width=0.9\columnwidth]{data_acquisition}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\textwidth}
|
||||
Um die Spannung auf den \code{int16} Datentyp abzubilden:
|
||||
\[ y = x \cdot 2^{16}/20\] mit $x$ der gemessenen Spannung und $y$
|
||||
dem digitalisierten Wert bei einem Spannungsbereich von
|
||||
$\pm10$\,V. Das ergibt ganzzahlige Werte zwischen $-2^{15}=-32768$
|
||||
und $2^{15}-1 = 32767$.
|
||||
|
||||
Durch Umkehrung kann der digitalisierte Wert wieder
|
||||
in eine Spannung zur\"uckgewandelt werden:
|
||||
\[ x = y \cdot 20/2^{16} \]
|
||||
\end{minipage}\vspace{0.25cm}
|
||||
|
||||
Um Speicherplatz zu sparen ist es sinnvoll, die gemessenen Daten als
|
||||
\code{int16} anstelle der \code{double} Werte im Rechner abzulegen. Die
|
||||
Daten als Spannungswerte, also als Flie{\ss}kommawerte,
|
||||
abzulegen ben\"otigt den 4-fachen Speicherplatz (8 statt 2 Bytes)
|
||||
und bietet keine zus\"atzliche Information.
|
||||
\end{ibox}
|
||||
|
Reference in New Issue
Block a user