summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex')
-rw-r--r--Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex155
1 files changed, 116 insertions, 39 deletions
diff --git a/Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex b/Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex
index 61c566ce3b7..b5c1a3903a7 100644
--- a/Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex
+++ b/Master/texmf-dist/doc/latex/hagenberg-thesis/examples/HgbThesisTutorial/chapters/mathematik.tex
@@ -85,7 +85,9 @@ Dieselbe Gleichung \emph{ohne} Nummerierung kann übrigens mit der \texttt{equat
\setlength{\fboxsep}{2mm}
\fbox{%
\begin{minipage}{0.9\textwidth}
-Man beachte, dass \textbf{Gleichungen} inhaltlich ein \textbf{Teil des Texts} sind und daher neben der sprachliche \textbf{Überleitung} auch die \textbf{Interpunktion} (wie in Gl.\ \ref{eq:MyFirstEquation} gezeigt) beachtet werden muss. Bei Unsicherheiten sollte man sich passende Beispiele in einem guten Mathematik\-buch ansehen.
+Man beachte, dass \textbf{Gleichungen} inhaltlich ein \textbf{Teil des Texts} sind und daher neben der sprachlichen
+\textbf{Überleitung} auch die \textbf{Interpunktion} (wie in Gl.\ \ref{eq:MyFirstEquation} gezeigt) beachtet werden muss.
+Bei Unsicherheiten sollte man sich passende Beispiele in einem guten Mathematik\-buch ansehen.
\end{minipage}}
\end{center}
%
@@ -355,92 +357,167 @@ manueller Nacharbeit) in das eigene \latex-Dokument übernommen werden.
\section{Algorithmen}
-Für die Beschreibung von Algorithmen in mathematischer Form oder auch für
+Die algorithmische Darstellung ist ein wichtiges Mittel zur präzisen Beschreibung von
+Berechnungsabläufen. Durch die Verwendung von \emph{mathematischer Notation} (Symbolen und Operatoren)
+einerseits und den aus der Programmierung gewohnten \emph{Ablaufstrukturen} (Entscheidungen, Schleifen,
+Prozeduren \etc) sind Algorithmen ein bewährtes Bindeglied zwischen der mathematischen Formulierung
+und dem zugehörigen Programmcode.
+
+Ein wesentlicher Aspekt der algorithmischen Beschreibung -- die idealerweise der Implementierung
+zumindest strukturell möglichst ähnlich sein sollte -- ist die weitgehende
+\emph{Unabhängigkeit} von einer spezifischen Programmiersprache.
+Dadurch ergibt sich eine bessere Lesbarkeit, breitere Anwendbarkeit und erhöhte Nachhaltigkeit
+(möglicherweise über die Lebensdauer einer Programmiersprache hinaus).
+Bei der Formulierung von Algorithmen sollte man \ua\ folgendes beachten:%
+\footnote{Siehe auch \url{http://mirror.easyname.at/ctan/macros/latex/contrib/algorithms/algorithms.pdf}
+(Abschnitt~7).}
+%%
+\begin{itemize}
+\item
+Verwende in Algorithmen die gleichen kurze Symbole (wie $a, i, x, S, \alpha \ldots$), wie man sie auch in mathematischen Definitionen und Gleichungen verwendet.
+\item
+Verwende nach Möglichkeit mathematische Operatoren, wie \zB\
+$=$ (\verb!$=$!) statt \texttt{==},
+$\leq$ (\verb!$\leq$!) statt \texttt{<=},
+$\cdot$ (\verb!$\cdot$!) statt \texttt{*},
+$\wedge$ (\verb!$\wedge$!) statt \texttt{\&\&},
+\usw
+\item
+Verwende keine Elemente oder Syntax einer spezifischen Programmiersprache
+(\zB\ ist ein "`\texttt{;}"' am Ende einer Anweisung unnötig).
+\item
+Wenn ein Algorithmus für eine Seite zu lang wird, überlege, wie man ihn
+sinnvoll auf kleinere Module aufteilen kann (meist ist dann auch die zugehörige
+Programmstruktur nicht optimal).
+\end{itemize}
+
+
+Für die Notation von Algorithmen in mathematischer Form oder auch für
Pseudo\-code ist in \latex selbst keine spezielle Unterstützung vorgesehen.
-Dazu gibt es jedoch eine Reihe von \latex-Paketen (\zB\ \texttt{algorithms},
-\texttt{algorithmicx}, \texttt{algorithm2e}).
+Dazu gibt es jedoch eine Reihe von \latex-Paketen, \zB\ \texttt{algorithms},
+\texttt{algorithm2e} und \texttt{algorithmicx}.
+Letzteres wird wegen seiner einfachen Syntax auch in dieser Vorlage verwendet,
+allerdings mit einigen Erweiterungen.%
+\footnote{Die Datei \nolinkurl{hgbalgo.sty} des Hagenberg-Pakets erweitert die Pakete
+\texttt{algorithmicx} und \texttt{algpseudocode} (s.\ \url{https://ctan.org/pkg/algorithmicx})
+durch verbesserte Einrückung, Farben \etc Weitere Details finden sich in
+\url{http://mirrors.ctan.org/macros/latex/contrib/hagenberg-thesis/doc/hagenberg-thesis.pdf}.}
Das Beispiel in Alg.~\ref{alg:Example} wurde mit der Float-Umgebung \texttt{algorithm}
-und dem \texttt{algorithmicx}-Paket ausgeführt
-(Quellcode in Prog.~\ref{prog:AlgExample}).
-
+und dem \texttt{algpseudocode}-Paket ausgeführt (s.\ Quellcode in Prog.\ \ref{prog:AlgExample}).
+Umfangreichere Beispiele für Algorithmen mit einem ähnlichen Setup finden sich \zB\ in
+\cite{BurgerBurge2015}.
%%--------------------------------------------------------------------
-\begin{algorithm}[tbp]
-\caption{Bikubische Interpolation in 2D.
- $w_{\mathrm{cub}}()$ in Zeile \ref{alg:wcub} bezeichnet die
- eindimensionale kubische Interpolationsfunktion.}
+\begin{algorithm}
+\caption{Beispiel für einen mit \texttt{algorithmicx} (\texttt{algpseudocode} + \texttt{hgbalgo})
+gesetzten Algorithmus zur bikubischen Interpolation in 2D. Die in den Zeilen \ref{alg:wcub1} und
+\ref{alg:wcub2} verwendete Funktion $\Call{Cubic1D}{x}$ berechnet die Gewichtung
+des Werts für die eindimensionale Position $x$.}
\label{alg:Example}
\begin{algorithmic}[1] % [1] = all lines are numbered
-\Procedure{BicubicInterpolation}{$I, x, y$} \Comment{$x,y \in \R$}
- \Statex Returns the interpolated value of the image $I$
- at the continuous position $(x, y)$.
+\Procedure{BicubicInterpolation}{$I, x, y$} \Comment{two-dimensional interpolation}
+ \Input{$I$, original image; $x,y \in \R$, continuous position; $a$, control para\-meter.}
+ \Returns{the interpolated pixel value at the continuous position $(x,y)$.}
+ \smallskip
\State $\mathit{val} \gets 0$
\For{$j \gets 0, \ldots, 3$} \Comment{iterate over 4 lines}
\State $v \gets \lfloor y \rfloor - 1 + j$
\State $p \gets 0$
-
\For{$i \gets 0, \ldots, 3$} \Comment{iterate over 4 columns}
\State $u \gets \lfloor x \rfloor - 1 + i$
- \State $p \gets p + I(u,v) \cdot w_{\mathrm{cub}}(x - u )$
- \label{alg:wcub}
- \EndFor
+ \State $p \gets p + I(u,v) \cdot \Call{Cubic1D}{x - u}$ % w_{\mathrm{cub}}(x - u )$
+ \label{alg:wcub1}
+ \EndFor
+ \StateNN[2]{Sometimes it is useful to insert a longer, \emph{unnumbered} explanation extending
+ over multiple lines with proper indentation. This can be done with the (non-standard) command
+ \texttt{{\bs}StateNN[]\{..\}}. There is also a \texttt{{\bs}StateL\{..\}} command for long
+ \emph{numbered} (multi-line) statements.}
- \State $\mathit{val} \gets \mathit{val} + p \cdot w_{\mathrm{cub}}(y - v)$
+ \State $\mathit{val} \gets \mathit{val} + p \cdot \Call{Cubic1D}{y - v}$
+ \label{alg:wcub2}
\EndFor
-
\State\Return $\mathit{val}$
-
\EndProcedure
+
+\medskip
+\hrule
+\medskip
+
+\Function{Cubic1D}{$x$} \Comment{piecewise cubic polynomial (1D)}
+ \State $z \gets 0$
+ \If{$|x| < 1$}
+ \State $z \gets |x|^3 - 2 \cdot |x|^2 + 1$
+ \ElsIf{$|x| < 2$}
+ \State $z \gets -|x|^3 + 5 \cdot |x|^2 - 8 \cdot |x| + 4$
+ \EndIf
+ \State\Return{$z$}
+\EndFunction
+
\end{algorithmic}
\end{algorithm}
%%--------------------------------------------------------------------
-Weitere Details finden sich im Quelltext und natürlich in der Dokumentation der verwendeten Pakete.
-Umfangreichere Beispiele für Algorithmen mit diesem Setup finden sich \ua\ in \cite{BurgerBurge2015}.
-
\begin{program}
-\caption{Quellcode zu Algorithmus \ref{alg:Example} (mit \texttt{algorithmicx}).
+\caption{Quellcode zu Algorithmus \ref{alg:Example}.
Wie ersichtlich, können hier auch beliebig Leerzeilen verwendet werden, was die
Lesbarkeit deutlich verbessert.}
\label{prog:AlgExample}
\begin{LaTeXCode}[numbers=none]
\begin{algorithm}
-\caption{Bikubische Interpolation in 2D.
- $w_{\mathrm{cub}}()$ in Zeile \ref{alg:wcub} bezeichnet die
- eindimensionale kubische Interpolationsfunktion.}
+\caption{Beispiel für einen mit \texttt{algorithmicx} ... }
\label{alg:Example}
\begin{algorithmic}[1] % [1] = all lines are numbered
-\Procedure{BicubicInterpolation}{$I, x, y$} \Comment{$x,y \in \R$}
- \Statex Returns the interpolated value of the image $I$
- at the continuous position $(x, y)$.
+\Procedure{BicubicInterpolation}{$I, x, y$}
+ \Comment{two-dimensional interpolation}
+ \Input{$I$, original image; $x,y \in \R$, continuous position;
+ $a$, control para\-meter.}
+ \Returns{the interpolated pixel value at the continuous position $(x,y)$.}
+ \smallskip
\State $\mathit{val} \gets 0$
-
\For{$j \gets 0, \ldots, 3$} \Comment{iterate over 4 lines}
\State $v \gets \lfloor y \rfloor - 1 + j$
\State $p \gets 0$
-
\For{$i \gets 0, \ldots, 3$} \Comment{iterate over 4 columns}
\State $u \gets \lfloor x \rfloor - 1 + i$
- \State $p \gets p + I(u,v) \cdot w_{\mathrm{cub}}(x - u )$
- \label{alg:wcub}
+ \State $p \gets p + I(u,v) \cdot \Call{Cubic1D}{x - u}$
+ \label{alg:wcub1}
\EndFor
- \State $\mathit{val} \gets
- \mathit{val} + p \cdot w_{\mathrm{cub}}(y - v)$
+ \StateNN[2]{Sometimes it is useful to insert a longer, ...}
+
+ \State $\mathit{val} \gets \mathit{val} + p \cdot \Call{Cubic1D}{y - v}$
+ \label{alg:wcub2}
\EndFor
-
\State\Return $\mathit{val}$
-
\EndProcedure
+
+\medskip\hrule\medskip
+
+\Function{Cubic1D}{$x$} \Comment{piecewise cubic polynomial (1D)}
+ \State $z \gets 0$
+ \If{$|x| < 1$}
+ \State $z \gets |x|^3 - 2 \cdot |x|^2 + 1$
+ \ElsIf{$|x| < 2$}
+ \State $z \gets -|x|^3 + 5 \cdot |x|^2 - 8 \cdot |x| + 4$
+ \EndIf
+ \State\Return{$z$}
+\EndFunction
+
\end{algorithmic}
\end{algorithm}
\end{LaTeXCode}
\end{program}
+%%--------------------------------------------------------------------
+
+
+
+
+