Merge branch 'master' of raven.am28.uni-tuebingen.de:scientificComputing

This commit is contained in:
Jan Grewe 2015-11-23 17:03:19 +01:00
commit 59a3dff8ce
2 changed files with 68 additions and 45 deletions

View File

@ -196,6 +196,9 @@
\newcommand{\codeterm}[2][]{\textit{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[term]{#2}}{\protect\sindex[term]{#1}}} \newcommand{\codeterm}[2][]{\textit{#2}\ifthenelse{\equal{#1}{}}{\protect\sindex[term]{#2}}{\protect\sindex[term]{#1}}}
\newcommand{\file}[1]{\texttt{#1}} \newcommand{\file}[1]{\texttt{#1}}
% for escaping special characters into the index:
\newcommand{\scor}{"|}
%%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% key-shortcuts %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{tikz} \usepackage{tikz}
\usetikzlibrary{shapes} \usetikzlibrary{shapes}

View File

@ -75,10 +75,14 @@ Variablen diesen Datentyp.
\subsection{Arbeiten mit Variablen} \subsection{Arbeiten mit Variablen}
Nat\"urlich kann mit den Variablen auch gearbeitet, bzw. gerechnet Nat\"urlich kann mit den Variablen auch gearbeitet, bzw. gerechnet
werden. \matlab{} kennt alle normalen arithmetischen Operatoren wie werden. \matlab{} kennt alle normalen
\code{+}, \code{-}, \code{*} und \code{/}. Die Potenz wird \"uber das \codeterm[Operator!arithmetischer]{arithmetischen Operatoren} wie
Dachsymbol \code{\^{}} dargestellt. Listing \ref{varListing3} zeigt, wie sie \code[Operator!arithmetischer!1add@+]{+},
benutzt werden. \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.
\begin{lstlisting}[label=varListing3, caption={Rechnen mit Variablen.}] \begin{lstlisting}[label=varListing3, caption={Rechnen mit Variablen.}]
>> x = 1; >> x = 1;
@ -112,8 +116,9 @@ Beachtenswert ist z.B. in Zeilen 3 und 6, dass mit dem Inhalt einer
Variablen gerechnet werden kann, ohne dass dadurch ihr Wert Variablen gerechnet werden kann, ohne dass dadurch ihr Wert
ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden ver\"andert wird. Wenn der Wert einer Variablen ver\"andert werden
soll, dann muss der Variable der neue Wert explizit zugewiesen werden soll, dann muss der Variable der neue Wert explizit zugewiesen werden
(mit dem \code{=} Zuweisungsoperator, z.B. Zeilen 16, 20). Zeile 25 (mit dem \code[Operator!Zuweisung!=]{=} Zuweisungsoperator,
zeigt wie eine einzelne Variable gel\"oscht wird. z.B. Zeilen 16, 20). Zeile 25 zeigt wie eine einzelne Variable
gel\"oscht wird.
\subsection{Datentypen} \subsection{Datentypen}
@ -244,7 +249,7 @@ erhalten werden (Listing \ref{arrayListing2}). Im Falle des Vektors
Diese Ausgabe zeigt, dass Vektoren im Grunde 2-dimensional sind. Bei Diese Ausgabe zeigt, dass Vektoren im Grunde 2-dimensional sind. Bei
einem Zeilenvektor hat die erste Dimension die Gr\"o{\ss}e einem Zeilenvektor hat die erste Dimension die Gr\"o{\ss}e
1. \code[length()]{length(a)} gibt die l\"angste Ausdehnung an. Der \code{'}- 1. \code[length()]{length(a)} gibt die l\"angste Ausdehnung an. Der \code[Operator!Matrix!']{'}-
Operator transponiert den Spaltenvektor zu einem Zeilenvektor (Zeilen 14 ff.). Operator transponiert den Spaltenvektor zu einem Zeilenvektor (Zeilen 14 ff.).
@ -304,7 +309,7 @@ mit Indexen auf die Inhalte eines Vektors zugegriffen werden kann.
\end{lstlisting} \end{lstlisting}
Hierbei kann auf einzelne Werte zugegriffen werden oder, analog zur Hierbei kann auf einzelne Werte zugegriffen werden oder, analog zur
Erzeugung von Vektoren, die \code{:} Notation verwendet werden, um auf mehrere Erzeugung von Vektoren, die \code[Operator!Matrix!:]{:} Notation verwendet werden, um auf mehrere
Element gleichzeitig zuzugreifen. Element gleichzeitig zuzugreifen.
\begin{lstlisting}[caption={Zugriff auf den Inhalt von Vektoren I}, label=arrayListing5] \begin{lstlisting}[caption={Zugriff auf den Inhalt von Vektoren I}, label=arrayListing5]
@ -365,10 +370,14 @@ problemlos m\"oglich. Bei der Multiplikation (Zeile 10), der Division
(Zeile 14) und auch der Potenzierung mu{\ss} mit vorangestellem '.' (Zeile 14) und auch der Potenzierung mu{\ss} mit vorangestellem '.'
klar gemacht werden, dass es sich um eine \emph{elementweise} klar gemacht werden, dass es sich um eine \emph{elementweise}
Verarbeitung handeln soll. F\"ur diese elementweisen Operationen kennt Verarbeitung handeln soll. F\"ur diese elementweisen Operationen kennt
\matlab{} die Operatoren \code{.*}, \code{./} und \code{.\^{}}. Die \matlab{} die Operatoren \code[Operator!arithmetischer!3mule@.*]{.*},
einfachen Operatoren \code{*}, \code{/} und \code{\^{}} sind mit den \code[Operator!arithmetischer!4dive@./]{./} und
entsprechenden Matrixoperationen aus der linearen Algebrar belegt \code[Operator!arithmetischer!5powe@.\^{}]{.\^{}}. Die einfachen Operatoren
(Box \ref{matrixmultiplication}). \code[Operator!arithmetischer!3mul@*]{*},
\code[Operator!arithmetischer!4div@/]{/} und
\code[Operator!arithmetischer!5pow@\^{}]{\^{}} sind mit den entsprechenden
Matrixoperationen aus der linearen Algebrar belegt (Box
\ref{matrixmultiplication}).
Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von Zu Beachten ist des Weiteren noch die Fehlermeldung am Schluss von
Listing \ref{arrayListing6}. Wenn zwei Vektoren (elementweise) Listing \ref{arrayListing6}. Wenn zwei Vektoren (elementweise)
@ -378,7 +387,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[Operator!Matrix!{[]}]{[]}) zu.
\begin{lstlisting}[label=arrayListing7, 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);
@ -443,8 +452,9 @@ bis 3-d Matrizen (Abbildung \ref{matrixfig} A,B).
Erzeugt werden Matrizen sehr \"ahnlich zu den Vektoren (Listing Erzeugt werden Matrizen sehr \"ahnlich zu den Vektoren (Listing
\ref{matrixListing}). Die Definition einer Matrize wird, wie beim \ref{matrixListing}). Die Definition einer Matrize wird, wie beim
Vektor, durch \code{[]} eingeschlossen. Das \code{;} trennt die Vektor, durch \code[Operator!Matrix!{[]}]{[]} eingeschlossen. Das
einzelnen Zeilen der Matrize. \code[Operator!Matrix!;]{;} trennt die einzelnen Zeilen der
Matrize.
\begin{lstlisting}[label=matrixListing, caption={Erzeugen von Matrizen.}] \begin{lstlisting}[label=matrixListing, caption={Erzeugen von Matrizen.}]
>> a = [1 2 3; 4 5 6; 7 8 9] >> a = [1 2 3; 4 5 6; 7 8 9]
@ -561,10 +571,12 @@ verrechnet werden, wie die Dimensionalit\"aten
\"ubereinstimmen. Besondere Vorsicht sollte man immer dann walten \"ubereinstimmen. Besondere Vorsicht sollte man immer dann walten
lassen, wenn man Matrizen miteinander multiplizieren, dividieren oder lassen, wenn man Matrizen miteinander multiplizieren, dividieren oder
potenzieren will. Hier ist es wichtig sich klarzumachen was man will: potenzieren will. Hier ist es wichtig sich klarzumachen was man will:
Eine elementweise Multiplikation (\code{.*} Operator, Listing Eine elementweise Multiplikation
(\code[Operator!arithmetischer!3mule@.*]{.*} Operator, Listing
\ref{matrixOperations} Zeile 18) oder ob eine Matrixmultiplikation \ref{matrixOperations} Zeile 18) oder ob eine Matrixmultiplikation
(\code{*} Operator, Listing \ref{matrixOperations} Zeile 12, Box (\code[Operator!arithmetischer!3mul@*]{*} Operator, Listing
\ref{matrixmultiplication}) durchgef\"uhrt werden soll. \ref{matrixOperations} Zeile 12, Box \ref{matrixmultiplication})
durchgef\"uhrt werden soll.
\begin{lstlisting}[label=matrixOperations, caption={Zwei Arten von Multiplikationen auf Matrizen.}] \begin{lstlisting}[label=matrixOperations, caption={Zwei Arten von Multiplikationen auf Matrizen.}]
>> A = randi(10, [3, 3]) % 2-D Matrix >> A = randi(10, [3, 3]) % 2-D Matrix
@ -637,19 +649,23 @@ Boolesche Ausdr\"ucke sind Anweisungen, die zu \codeterm{wahr} oder
\codeterm{falsch} ausgewertet werden. Man kennt sie z.B. aus der \codeterm{falsch} ausgewertet werden. Man kennt sie z.B. aus der
Mengenlehre. In der Programmierung werden sie eingesetzt, um z.B. die Mengenlehre. In der Programmierung werden sie eingesetzt, um z.B. die
Beziehung zwischen Entit\"aten zu testen. Hierzu werden die Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
\codeterm{relationalen Operatoren} (\code{>}, \code{<}, \code{==}, \codeterm{relationalen Operatoren} (\code[Operator!relationaler!>]{>},
\code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht) \code[Operator!relationaler!<]{<},
eingesetzt. Mehrere Ausdr\"ucke werden mittels der \codeterm{logischen \code[Operator!relationaler!==]{==},
Operatoren} (\code{\&}, \code{|}, UND, ODER ) verkn\"upft. Sie sind f\"ur \code[Operator!relationaler!"!]{!}, gr\"o{\ss}er als, kleiner als,
uns nicht nur wichtig um Codeabschnitte bedingt auszuf\"uhren gleich und nicht) eingesetzt. Mehrere Ausdr\"ucke werden mittels der
(Verzweigungen, \ref{controlstructsec}) sondern auch um aus Vektoren \codeterm[Operator!logischer]{logischen Operatoren}
und Matrizen bequem Elemente auszuw\"ahlen (logisches Indizieren, (\code[Operator!logischer!and1@\&]{\&}, \code[Operator!logischer!or1@{"|} {}]{|},
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,
\ref{logicalindexingsec}). Die Tabellen \ref{logicalandor} zeigen die \ref{logicalindexingsec}). Die Tabellen \ref{logicalandor} zeigen die
Wahrheitstabellen f\"ur das logische UND (Tabelle \ref{logicalandor}, links) Wahrheitstabellen f\"ur das logische UND (Tabelle \ref{logicalandor},
und das logische ODER (Tabelle \ref{logicalandor}, rechts). Es werden die links) und das logische ODER (Tabelle \ref{logicalandor}, rechts). Es
Aussagen A und B mit dem Operator verkn\"upft. Beim logischen UND ist werden die Aussagen A und B mit dem Operator verkn\"upft. Beim
der gesamte Ausdruck nur dann wahr, wenn beide Ausdr\"ucke sich zu logischen UND ist der gesamte Ausdruck nur dann wahr, wenn beide
wahr auswerten lassen. Ausdr\"ucke sich zu wahr auswerten lassen.
\begin{table}[tp] \begin{table}[tp]
\titlecaption{Wahrheitstabellen logisches UND (links) und logisches ODER (rechts).}{}\label{logicalandor} \titlecaption{Wahrheitstabellen logisches UND (links) und logisches ODER (rechts).}{}\label{logicalandor}
@ -675,14 +691,16 @@ Anders ist das beim logischen ODER. Hier ist der gesamte Ausdruck
wahr, wenn sich der eine \emph{oder} der andere Ausdruck zu wahr wahr, wenn sich der eine \emph{oder} der andere Ausdruck zu wahr
auswerten l\"a{\ss}t. Tabelle \ref{logicaloperators} zeigt die auswerten l\"a{\ss}t. Tabelle \ref{logicaloperators} zeigt die
logischen Operatoren, die in \matlab{} definiert sind. Zu bemerken logischen Operatoren, die in \matlab{} definiert sind. Zu bemerken
sind hier noch die \code{\&\&} und \code{||} Operatoren. Man kann sind hier noch die \code[Operator!logischer!and2@\&\&]{\&\&} und
beliebige Ausdr\"ucke verkn\"upfen und h\"aufig kann schon anhand des \code[Operator!logischer!or2@{"|}{"|} {}]{||} Operatoren. Man kann beliebige
ersten Ausdrucks entschieden werden, ob der gesamte Boolesche Ausdruck Ausdr\"ucke verkn\"upfen und h\"aufig kann schon anhand des ersten
zu wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit Ausdrucks entschieden werden, ob der gesamte Boolesche Ausdruck zu
einem UND verkn\"upft werden und der erste zu falsch ausgewertet wird, wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit einem
muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der UND verkn\"upft werden und der erste zu falsch ausgewertet wird, muss
``short-circuit'' Versionen spart Rechenzeit. Das auschlie{\ss}ende ODER der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der
(XOR) ist in \matlab{} nur als Funktion \code[xor()]{xor(A, B)} verf\"ugbar. \enterm{short-circuit} Versionen spart Rechenzeit. Das auschlie{\ss}ende
ODER (XOR) ist in \matlab{} nur als Funktion \code[xor()]{xor(A, B)}
verf\"ugbar.
\begin{table}[th] \begin{table}[th]
\titlecaption{\label{logicaloperators} \titlecaption{\label{logicaloperators}
@ -701,10 +719,11 @@ muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der
\end{center} \end{center}
\end{table} \end{table}
Um Werte miteinander zu vergleichen gibt es die \codeterm{relationalen Um Werte miteinander zu vergleichen gibt es die
Operatoren} (Tabelle \ref{relationaloperators}). Mit ihnen kann man \codeterm[Operator!relationaler]{relationalen Operatoren} (Tabelle
auf Dinge wie Gleichheit (\code{==}) gr\"o{\ss}er oder kleiner als \ref{relationaloperators}). Mit ihnen kann man auf Dinge wie
(\code{>}, \code{<}) testen. Gleichheit (\varcode{==}) gr\"o{\ss}er oder kleiner als (\varcode{>},
\varcode{<}) testen.
\begin{table}[th] \begin{table}[th]
\titlecaption{\label{relationaloperators} \titlecaption{\label{relationaloperators}
@ -734,9 +753,10 @@ Beispiele. \matlab{} kennt die Schl\"usselworte \code{true} und
\code{logical} Werte 1 und 0. \code{logical} Werte 1 und 0.
\begin{important}[Zuweisungs- und Gleichheitsoperator] \begin{important}[Zuweisungs- und Gleichheitsoperator]
Der Zuweisungsoperator \code{=} und der logische Operator \code{==} Der Zuweisungsoperator \code[Operator!Zuweisung!=]{=} und der
sind zwei grundverschiedene Dinge. Da sie umgangsprachlich gleich logische Operator \code[Operator!logischer!==]{==} sind zwei
sind k\"onnen sie leider leicht verwechselt werden. grundverschiedene Dinge. Da sie umgangsprachlich gleich sind
k\"onnen sie leider leicht verwechselt werden.
\end{important} \end{important}
\begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions] \begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]