From 30e37ba4be6876ad79fda30cd0614d2b16d80455 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sat, 8 Oct 2016 16:51:21 +0200 Subject: [PATCH] [translation] add german version file --- programming/lecture/programming_de.tex | 210 +++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 programming/lecture/programming_de.tex diff --git a/programming/lecture/programming_de.tex b/programming/lecture/programming_de.tex new file mode 100644 index 0000000..d11183a --- /dev/null +++ b/programming/lecture/programming_de.tex @@ -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} +