aboutsummaryrefslogtreecommitdiffstats
path: root/buch/papers
diff options
context:
space:
mode:
Diffstat (limited to 'buch/papers')
-rw-r--r--buch/papers/common/addpapers.tex1
-rw-r--r--buch/papers/common/paperlist1
-rw-r--r--buch/papers/fm/anim/Makefile12
-rw-r--r--buch/papers/fm/anim/animation.tex85
-rw-r--r--buch/papers/fm/anim/fm.m98
-rw-r--r--buch/papers/fresnel/Makefile15
-rw-r--r--buch/papers/fresnel/eulerspirale.m61
-rw-r--r--buch/papers/fresnel/eulerspirale.pdfbin0 -> 22592 bytes
-rw-r--r--buch/papers/fresnel/eulerspirale.tex41
-rw-r--r--buch/papers/fresnel/fresnelgraph.pdfbin0 -> 30018 bytes
-rw-r--r--buch/papers/fresnel/fresnelgraph.tex46
-rw-r--r--buch/papers/fresnel/main.tex24
-rw-r--r--buch/papers/fresnel/pfad.pdfbin0 -> 19126 bytes
-rw-r--r--buch/papers/fresnel/pfad.tex34
-rw-r--r--buch/papers/fresnel/references.bib11
-rw-r--r--buch/papers/fresnel/teil0.tex109
-rw-r--r--buch/papers/fresnel/teil1.tex239
-rw-r--r--buch/papers/fresnel/teil2.tex48
-rw-r--r--buch/papers/fresnel/teil3.tex136
-rw-r--r--buch/papers/laguerre/Makefile6
-rw-r--r--buch/papers/laguerre/Makefile.inc5
-rw-r--r--buch/papers/laguerre/definition.tex177
-rw-r--r--buch/papers/laguerre/eigenschaften.tex115
-rw-r--r--buch/papers/laguerre/gamma.tex76
-rw-r--r--buch/papers/laguerre/images/laguerre_polynomes.pdfbin0 -> 16239 bytes
-rw-r--r--buch/papers/laguerre/main.tex7
-rw-r--r--buch/papers/laguerre/packages.tex1
-rw-r--r--buch/papers/laguerre/quadratur.tex78
-rw-r--r--buch/papers/laguerre/references.bib45
-rw-r--r--buch/papers/laguerre/scripts/gamma_approx.ipynb395
-rw-r--r--buch/papers/laguerre/scripts/laguerre_plot.py100
-rw-r--r--buch/papers/laguerre/transformation.tex31
-rw-r--r--buch/papers/laguerre/wasserstoff.tex29
-rw-r--r--buch/papers/nav/images/Makefile108
-rw-r--r--buch/papers/nav/images/common.inc149
-rw-r--r--buch/papers/nav/images/dreieck.tex68
-rw-r--r--buch/papers/nav/images/dreieck1.pdfbin0 -> 11578 bytes
-rw-r--r--buch/papers/nav/images/dreieck1.tex59
-rw-r--r--buch/papers/nav/images/dreieck2.pdfbin0 -> 8812 bytes
-rw-r--r--buch/papers/nav/images/dreieck2.tex59
-rw-r--r--buch/papers/nav/images/dreieck3.pdfbin0 -> 10636 bytes
-rw-r--r--buch/papers/nav/images/dreieck3.tex59
-rw-r--r--buch/papers/nav/images/dreieck3d1.pov58
-rw-r--r--buch/papers/nav/images/dreieck3d1.tex53
-rw-r--r--buch/papers/nav/images/dreieck3d2.pov26
-rw-r--r--buch/papers/nav/images/dreieck3d2.tex53
-rw-r--r--buch/papers/nav/images/dreieck3d3.pov37
-rw-r--r--buch/papers/nav/images/dreieck3d3.tex53
-rw-r--r--buch/papers/nav/images/dreieck3d4.pov37
-rw-r--r--buch/papers/nav/images/dreieck3d4.tex54
-rw-r--r--buch/papers/nav/images/dreieck3d5.pov26
-rw-r--r--buch/papers/nav/images/dreieck3d5.tex53
-rw-r--r--buch/papers/nav/images/dreieck3d6.pov37
-rw-r--r--buch/papers/nav/images/dreieck3d6.tex55
-rw-r--r--buch/papers/nav/images/dreieck3d7.pov39
-rw-r--r--buch/papers/nav/images/dreieck3d7.tex55
-rw-r--r--buch/papers/nav/images/dreieck4.pdfbin0 -> 13231 bytes
-rw-r--r--buch/papers/nav/images/dreieck4.tex64
-rw-r--r--buch/papers/nav/images/dreieck5.pdfbin0 -> 8721 bytes
-rw-r--r--buch/papers/nav/images/dreieck5.tex64
-rw-r--r--buch/papers/nav/images/dreieck6.pdfbin0 -> 10699 bytes
-rw-r--r--buch/papers/nav/images/dreieck6.tex64
-rw-r--r--buch/papers/nav/images/dreieck7.pdfbin0 -> 11079 bytes
-rw-r--r--buch/papers/nav/images/dreieck7.tex64
-rw-r--r--buch/papers/nav/images/dreieckdata.tex16
-rw-r--r--buch/papers/nav/images/macros.tex54
-rw-r--r--buch/papers/nav/images/pk.m55
67 files changed, 3248 insertions, 297 deletions
diff --git a/buch/papers/common/addpapers.tex b/buch/papers/common/addpapers.tex
index dd2b07a..eb353d7 100644
--- a/buch/papers/common/addpapers.tex
+++ b/buch/papers/common/addpapers.tex
@@ -3,7 +3,6 @@
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\input{papers/000template/main.tex}
\input{papers/lambertw/main.tex}
\input{papers/fm/main.tex}
\input{papers/parzyl/main.tex}
diff --git a/buch/papers/common/paperlist b/buch/papers/common/paperlist
index d4e5c20..f607279 100644
--- a/buch/papers/common/paperlist
+++ b/buch/papers/common/paperlist
@@ -1,4 +1,3 @@
-000template
lambertw
fm
parzyl
diff --git a/buch/papers/fm/anim/Makefile b/buch/papers/fm/anim/Makefile
new file mode 100644
index 0000000..f4c7850
--- /dev/null
+++ b/buch/papers/fm/anim/Makefile
@@ -0,0 +1,12 @@
+#
+# Makefile
+#
+# (c) 2022 Prof Dr Andreas Müller
+#
+all: animation.pdf
+
+parts.tex: fm.m
+ octave fm.m
+
+animation.pdf: animation.tex parts.tex
+ pdflatex animation.tex
diff --git a/buch/papers/fm/anim/animation.tex b/buch/papers/fm/anim/animation.tex
new file mode 100644
index 0000000..4a6f428
--- /dev/null
+++ b/buch/papers/fm/anim/animation.tex
@@ -0,0 +1,85 @@
+%
+% animation.tex
+%
+% (c) 2022 Prof Dr Andreas Müller,
+%
+\documentclass[aspectratio=169]{beamer}
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{epic}
+\usepackage{color}
+\usepackage{array}
+\usepackage{ifthen}
+\usepackage{lmodern}
+\usepackage{amsmath}
+\usepackage{amssymb}
+\usepackage{nccmath}
+\usepackage{mathtools}
+\usepackage{adjustbox}
+\usepackage{multimedia}
+\usepackage{verbatim}
+\usepackage{wasysym}
+\usepackage{stmaryrd}
+\usepackage{tikz}
+\usetikzlibrary{shapes.geometric}
+\usetikzlibrary{decorations.pathreplacing}
+\usetikzlibrary{calc}
+\usetikzlibrary{arrows}
+\usetikzlibrary{3d}
+\usetikzlibrary{arrows,shapes,math,decorations.text,automata}
+\usepackage{pifont}
+\usepackage[all]{xy}
+\usepackage[many]{tcolorbox}
+\mode<beamer>{%
+\usetheme[hideothersubsections,hidetitle]{Hannover}
+}
+\beamertemplatenavigationsymbolsempty
+\begin{document}
+
+\def\spektrum#1#2{
+\only<#1>{
+ \begin{scope}
+ \color{red}
+ \input{#2}
+ \end{scope}
+}
+}
+
+\begin{frame}
+\begin{center}
+\begin{tikzpicture}[>=latex,thick]
+\def\df{0.37}
+\def\da{1}
+
+\draw[->,color=gray] (0,-0.1) -- (0,6.3) [right] coordinate[label={right:$a$}];
+
+\foreach \a in {1,...,5}{
+ \draw[color=gray!50] (-6,{(6-\a)*\da}) -- (6,{(6-\a)*\da});
+}
+\draw[color=gray!50] (-6,{6*\da}) -- (6,{6*\da});
+\foreach \f in {-15,-10,-5,5,10,15}{
+ \draw[color=gray!50] ({\f*\df},0) -- ({\f*\df},{6*\da});
+}
+
+\input{parts.tex}
+
+\draw[->] (-6.1,0) -- (6.9,0) coordinate[label={$f$}];
+\foreach \f in {-16,...,16}{
+ \draw ({\f*\df},-0.05) -- ({\f*\df},0.05);
+}
+\foreach \f in {-15,-10,-5,5,10,15}{
+ \node at ({\f*\df},-0.1) [below] {$\f f_m$};
+ \draw ({\f*\df},-0.1) -- ({\f*\df},0.1);
+}
+\node at (0,-0.1) [below] {$0$};
+
+\foreach \a in {1,...,5}{
+ \node at (6,{(6-\a)*\da}) [right] {$-\a$};
+}
+\node at (6,{6*\da}) [right] {$\phantom{-}0$};
+
+\end{tikzpicture}
+\end{center}
+\end{frame}
+
+\end{document}
diff --git a/buch/papers/fm/anim/fm.m b/buch/papers/fm/anim/fm.m
new file mode 100644
index 0000000..9062818
--- /dev/null
+++ b/buch/papers/fm/anim/fm.m
@@ -0,0 +1,98 @@
+#
+# fm.m -- animation frequenzspektrum
+#
+# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+global fc;
+fc = 1e6;
+global width;
+width = 16;
+global fm;
+fm = 1000;
+global gamma;
+gamma = 2;
+global resolution;
+resolution = 300;
+
+function retval = spektrum(beta, fm)
+ global width;
+ global fc;
+ retval = zeros(2 * width + 1, 2);
+ center = width + 1;
+ for k = (0:width)
+ retval(center - k, 1) = fc - k * fm;
+ retval(center + k, 1) = fc + k * fm;
+ a = besselj(k, beta);
+ retval(center - k, 2) = a;
+ retval(center + k, 2) = a;
+ endfor
+endfunction
+
+function drawspectrum(fn, spectrum, foffset, fscale, beta)
+ n = size(spectrum)(1,1);
+ for i = (1:n)
+ f = (spectrum(i, 1) - foffset)/fscale;
+ a = log10(spectrum(i, 2)) + 6;
+ if (a < 0)
+ a = 0;
+ end
+ fprintf(fn, "\\draw[line width=3.5pt] ");
+ fprintf(fn, "({%.2f*\\df},0) -- ({%.2f*\\df},{%.5f*\\da});\n",
+ f, f, abs(a));
+ fprintf(fn, "\\node at ({-15*\\df},5.5) [right] {$\\beta = %.3f$};", beta);
+ endfor
+endfunction
+
+function drawhull(fn, beta)
+ global resolution;
+ fprintf(fn, "\\begin{scope}\n");
+ fprintf(fn, "\\clip ({-16.5*\\df},0) rectangle ({16.5*\\df},{6*\\da});\n");
+ p = zeros(resolution, 2);
+ for k = (1:resolution)
+ nu = 16.5 * (k - 1) / resolution;
+ p(k,1) = nu;
+ y = log10(abs(besselj(nu, beta))) + 6;
+ p(k,2) = y;
+ end
+ fprintf(fn, "\\draw[color=blue] ({%.4f*\\df},{%.5f*\\da})",
+ p(1,1), p(1,2));
+ for k = (2:resolution)
+ fprintf(fn, "\n -- ({%.4f*\\df},{%.5f*\\da})",
+ p(k,1), p(k,2));
+ endfor
+ fprintf(fn, ";\n\n");
+ fprintf(fn, "\\draw[color=blue] ({%.4f*\\df},{%.5f*\\da})",
+ p(1,1), p(1,2));
+ for k = (2:resolution)
+ fprintf(fn, "\n -- ({%.4f*\\df},{%.5f*\\da})",
+ -p(k,1), p(k,2));
+ endfor
+ fprintf(fn, ";\n\n");
+ fprintf(fn, "\\end{scope}\n");
+endfunction
+
+function animation(betamin, betamax, steps)
+ global fm;
+ global fc;
+ global gamma;
+ fa = fopen("parts.tex", "w");
+ for k = (1:steps)
+ % add entry to parts.tex
+ fprintf(fa, "\\spektrum{%d}{texfiles/a%04d.tex}\n", k, k);
+ % compute beta
+ x = (k - 1) / (steps - 1);
+ beta = betamin + (betamax - betamin) * (x ^ gamma);
+ % create a new file
+ name = sprintf("texfiles/a%04d.tex", k);
+ fn = fopen(name, "w");
+ % write the hull
+ drawhull(fn, beta);
+ % compute and write the spectrum
+ spectrum = spektrum(beta, fm);
+ drawspectrum(fn, spectrum, fc, fm, beta);
+ fclose(fn);
+ endfor
+ fclose(fa);
+endfunction
+
+animation(0.001,10.1,200)
diff --git a/buch/papers/fresnel/Makefile b/buch/papers/fresnel/Makefile
index c8aa073..11af3a7 100644
--- a/buch/papers/fresnel/Makefile
+++ b/buch/papers/fresnel/Makefile
@@ -1,9 +1,22 @@
#
# Makefile -- make file for the paper fresnel
#
-# (c) 2020 Prof Dr Andreas Mueller
+# (c) 2022 Prof Dr Andreas Mueller
#
+all: fresnelgraph.pdf eulerspirale.pdf pfad.pdf
images:
@echo "no images to be created in fresnel"
+eulerpath.tex: eulerspirale.m
+ octave eulerspirale.m
+
+fresnelgraph.pdf: fresnelgraph.tex eulerpath.tex
+ pdflatex fresnelgraph.tex
+
+eulerspirale.pdf: eulerspirale.tex eulerpath.tex
+ pdflatex eulerspirale.tex
+
+pfad.pdf: pfad.tex
+ pdflatex pfad.tex
+
diff --git a/buch/papers/fresnel/eulerspirale.m b/buch/papers/fresnel/eulerspirale.m
new file mode 100644
index 0000000..84e3696
--- /dev/null
+++ b/buch/papers/fresnel/eulerspirale.m
@@ -0,0 +1,61 @@
+#
+# eulerspirale.m
+#
+# (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschlue
+#
+global n;
+n = 1000;
+global tmax;
+tmax = 10;
+global N;
+N = round(n*5/tmax);
+
+function retval = f(x, t)
+ x = pi * t^2 / 2;
+ retval = [ cos(x); sin(x) ];
+endfunction
+
+x0 = [ 0; 0 ];
+t = tmax * (0:n) / n;
+
+c = lsode(@f, x0, t);
+
+fn = fopen("eulerpath.tex", "w");
+
+fprintf(fn, "\\def\\fresnela{ (0,0)");
+for i = (2:n)
+ fprintf(fn, "\n\t-- (%.4f,%.4f)", c(i,1), c(i,2));
+end
+fprintf(fn, "\n}\n\n");
+
+fprintf(fn, "\\def\\fresnelb{ (0,0)");
+for i = (2:n)
+ fprintf(fn, "\n\t-- (%.4f,%.4f)", -c(i,1), -c(i,2));
+end
+fprintf(fn, "\n}\n\n");
+
+fprintf(fn, "\\def\\Cplotright{ (0,0)");
+for i = (2:N)
+ fprintf(fn, "\n\t-- ({%.4f*\\dx},{%.4f*\\dy})", t(i), c(i,1));
+end
+fprintf(fn, "\n}\n\n");
+
+fprintf(fn, "\\def\\Cplotleft{ (0,0)");
+for i = (2:N)
+ fprintf(fn, "\n\t-- ({%.4f*\\dx},{%.4f*\\dy})", -t(i), -c(i,1));
+end
+fprintf(fn, "\n}\n\n");
+
+fprintf(fn, "\\def\\Splotright{ (0,0)");
+for i = (2:N)
+ fprintf(fn, "\n\t-- ({%.4f*\\dx},{%.4f*\\dy})", t(i), c(i,2));
+end
+fprintf(fn, "\n}\n\n");
+
+fprintf(fn, "\\def\\Splotleft{ (0,0)");
+for i = (2:N)
+ fprintf(fn, "\n\t-- ({%.4f*\\dx},{%.4f*\\dy})", -t(i), -c(i,2));
+end
+fprintf(fn, "\n}\n\n");
+
+fclose(fn);
diff --git a/buch/papers/fresnel/eulerspirale.pdf b/buch/papers/fresnel/eulerspirale.pdf
new file mode 100644
index 0000000..4a85a50
--- /dev/null
+++ b/buch/papers/fresnel/eulerspirale.pdf
Binary files differ
diff --git a/buch/papers/fresnel/eulerspirale.tex b/buch/papers/fresnel/eulerspirale.tex
new file mode 100644
index 0000000..38ef756
--- /dev/null
+++ b/buch/papers/fresnel/eulerspirale.tex
@@ -0,0 +1,41 @@
+%
+% eulerspirale.tex -- Darstellung der Eulerspirale
+%
+% (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\def\skala{1}
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{eulerpath.tex}
+
+\def\s{8}
+
+\begin{scope}[scale=\s]
+\draw[color=blue] (-0.5,-0.5) rectangle (0.5,0.5);
+\draw[color=darkgreen,line width=1.4pt] \fresnela;
+\draw[color=darkgreen,line width=1.4pt] \fresnelb;
+\fill[color=blue] (0.5,0.5) circle[radius={0.1/\s}];
+\fill[color=blue] (-0.5,-0.5) circle[radius={0.1/\s}];
+\draw (-0.5,{-0.05/\s}) -- (-0.5,{0.05/\s});
+\draw (0.5,{-0.05/\s}) -- (0.5,{-0.05/\s});
+\node at (-0.5,0) [above left] {$\frac12$};
+\node at (0.5,0) [below right] {$\frac12$};
+\node at (0,-0.5) [below right] {$\frac12$};
+\node at (0,0.5) [above left] {$\frac12$};
+\end{scope}
+
+\draw[->] (-6.7,0) -- (6.9,0) coordinate[label={$C(x)$}];;
+\draw[->] (0,-5.8) -- (0,6.1) coordinate[label={left:$S(x)$}];;
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/fresnel/fresnelgraph.pdf b/buch/papers/fresnel/fresnelgraph.pdf
new file mode 100644
index 0000000..9ccad56
--- /dev/null
+++ b/buch/papers/fresnel/fresnelgraph.pdf
Binary files differ
diff --git a/buch/papers/fresnel/fresnelgraph.tex b/buch/papers/fresnel/fresnelgraph.tex
new file mode 100644
index 0000000..20df951
--- /dev/null
+++ b/buch/papers/fresnel/fresnelgraph.tex
@@ -0,0 +1,46 @@
+%
+% fresnelgraph.tex -- Graphs of the fresnel functions
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\def\skala{1}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{eulerpath.tex}
+\def\dx{1.3}
+\def\dy{2.6}
+
+\draw[color=gray] (0,{0.5*\dy}) -- ({5*\dx},{0.5*\dy});
+\draw[color=gray] (0,{-0.5*\dy}) -- ({-5*\dx},{-0.5*\dy});
+
+\draw[color=blue,line width=1.4pt] \Splotright;
+\draw[color=blue,line width=1.4pt] \Splotleft;
+
+\draw[color=red,line width=1.4pt] \Cplotright;
+\draw[color=red,line width=1.4pt] \Cplotleft;
+
+\draw[->] (-6.7,0) -- (6.9,0) coordinate[label={$x$}];
+\draw[->] (0,-2.3) -- (0,2.3) coordinate[label={$y$}];
+
+\foreach \x in {1,2,3,4,5}{
+ \draw ({\x*\dx},-0.05) -- ({\x*\dx},0.05);
+ \draw ({-\x*\dx},-0.05) -- ({-\x*\dx},0.05);
+ \node at ({\x*\dx},-0.05) [below] {$\x$};
+ \node at ({-\x*\dx},0.05) [above] {$-\x$};
+}
+\draw (-0.05,{0.5*\dy}) -- (0.05,{0.5*\dy});
+\node at (-0.05,{0.5*\dy}) [left] {$\frac12$};
+\draw (-0.05,{-0.5*\dy}) -- (0.05,{-0.5*\dy});
+\node at (0.05,{-0.5*\dy}) [right] {$-\frac12$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/fresnel/main.tex b/buch/papers/fresnel/main.tex
index bbaf7e6..e6ee3b5 100644
--- a/buch/papers/fresnel/main.tex
+++ b/buch/papers/fresnel/main.tex
@@ -3,29 +3,11 @@
%
% (c) 2020 Hochschule Rapperswil
%
-\chapter{Thema\label{chapter:fresnel}}
-\lhead{Thema}
+\chapter{Fresnel-Integrale\label{chapter:fresnel}}
+\lhead{Fresnel-Integrale}
\begin{refsection}
-\chapterauthor{Hans Muster}
+\chapterauthor{Andreas Müller}
-Ein paar Hinweise für die korrekte Formatierung des Textes
-\begin{itemize}
-\item
-Absätze werden gebildet, indem man eine Leerzeile einfügt.
-Die Verwendung von \verb+\\+ ist nur in Tabellen und Arrays gestattet.
-\item
-Die explizite Platzierung von Bildern ist nicht erlaubt, entsprechende
-Optionen werden gelöscht.
-Verwenden Sie Labels und Verweise, um auf Bilder hinzuweisen.
-\item
-Beginnen Sie jeden Satz auf einer neuen Zeile.
-Damit ermöglichen Sie dem Versionsverwaltungssysteme, Änderungen
-in verschiedenen Sätzen von verschiedenen Autoren ohne Konflikt
-anzuwenden.
-\item
-Bilden Sie auch für Formeln kurze Zeilen, einerseits der besseren
-Übersicht wegen, aber auch um GIT die Arbeit zu erleichtern.
-\end{itemize}
\input{papers/fresnel/teil0.tex}
\input{papers/fresnel/teil1.tex}
diff --git a/buch/papers/fresnel/pfad.pdf b/buch/papers/fresnel/pfad.pdf
new file mode 100644
index 0000000..ff514cc
--- /dev/null
+++ b/buch/papers/fresnel/pfad.pdf
Binary files differ
diff --git a/buch/papers/fresnel/pfad.tex b/buch/papers/fresnel/pfad.tex
new file mode 100644
index 0000000..5439a71
--- /dev/null
+++ b/buch/papers/fresnel/pfad.tex
@@ -0,0 +1,34 @@
+%
+% pfad.tex -- template for standalon tikz images
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math}
+\begin{document}
+\def\skala{1}
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\draw[->] (-1,0) -- (9,0) coordinate[label={$\operatorname{Re}$}];
+\draw[->] (0,-1) -- (0,6) coordinate[label={left:$\operatorname{Im}$}];
+
+\draw[->,color=red,line width=1.4pt] (0,0) -- (7,0);
+\draw[->,color=blue,line width=1.4pt] (7,0) arc (0:45:7);
+\draw[->,color=darkgreen,line width=1.4pt] (45:7) -- (0,0);
+
+\node[color=red] at (3.5,0) [below] {$\gamma_1(t) = tR$};
+\node[color=blue] at (25:7) [right] {$\gamma_2(t) = Re^{it}$};
+\node[color=darkgreen] at (45:3.5) [above left] {$\gamma_3(t) = te^{i\pi/4}$};
+
+\node at (7,0) [below] {$R$};
+\node at (45:7) [above] {$Re^{i\pi/4}$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/fresnel/references.bib b/buch/papers/fresnel/references.bib
index 84cd3bc..58e9242 100644
--- a/buch/papers/fresnel/references.bib
+++ b/buch/papers/fresnel/references.bib
@@ -33,3 +33,14 @@
url = {https://doi.org/10.1016/j.acha.2017.11.004}
}
+@online{fresnel:fresnelC,
+ url = { https://functions.wolfram.com/GammaBetaErf/FresnelC/introductions/FresnelIntegrals/ShowAll.html },
+ title = { FresnelC },
+ date = { 2022-05-13 }
+}
+
+@online{fresnel:wikipedia,
+ url = { https://en.wikipedia.org/wiki/Fresnel_integral },
+ title = { Fresnel Integral },
+ date = { 2022-05-13 }
+}
diff --git a/buch/papers/fresnel/teil0.tex b/buch/papers/fresnel/teil0.tex
index 5e9fdaf..253e2f3 100644
--- a/buch/papers/fresnel/teil0.tex
+++ b/buch/papers/fresnel/teil0.tex
@@ -1,22 +1,101 @@
%
-% einleitung.tex -- Beispiel-File für die Einleitung
+% teil0.tex -- Definition
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Teil 0\label{fresnel:section:teil0}}
-\rhead{Teil 0}
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-erat, sed diam voluptua \cite{fresnel:bibtex}.
-At vero eos et accusam et justo duo dolores et ea rebum.
-Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum
-dolor sit amet.
+\section{Definition\label{fresnel:section:teil0}}
+\rhead{Definition}
+Die Funktion $e^{x^2}$ hat bekanntermassen keine elementare Stammfunktion,
+weshalb die Fehlerfunktion als Stammfunktion definiert wurde.
+Die Funktionen $\cos x^2$ und $\sin x^2$ sind eng mit $e^{x^2}$
+verwandt, es ist daher nicht überraschend, dass sie ebenfalls
+keine elementare Stammfunktionen haben.
+Dies rechtfertigt die Definition der Fresnel-Integrale als neue spezielle
+Funktionen.
-Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
-nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam
-erat, sed diam voluptua.
-At vero eos et accusam et justo duo dolores et ea rebum. Stet clita
-kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
-amet.
+\begin{definition}
+Die Funktionen
+\begin{align*}
+C(x) &= \int_0^x \cos\biggl(\frac{\pi}2 t^2\biggr)\,dt
+\\
+S(x) &= \int_0^x \sin\biggl(\frac{\pi}2 t^2\biggr)\,dt
+\end{align*}
+heissen die Fesnel-Integrale.
+\end{definition}
+Der Faktor $\frac{\pi}2$ ist einigermassen willkürlich, man könnte
+daher noch allgemeiner die Funktionen
+\begin{align*}
+C_a(x) &= \int_0^x \cos(at^2)\,dt
+\\
+S_a(x) &= \int_0^x \sin(at^2)\,dt
+\end{align*}
+definieren, so dass die Funktionen $C(x)$ und $S(x)$ der Fall
+$a=\frac{\pi}2$ werden, also
+\[
+\begin{aligned}
+C(x) &= C_{\frac{\pi}2}(x),
+&
+S(x) &= S_{\frac{\pi}2}(x).
+\end{aligned}
+\]
+Durch eine Substution $t=bs$ erhält man
+\begin{align*}
+C_a(x)
+&=
+\int_0^x \cos(at^2)\,dt
+=
+b
+\int_0^{\frac{x}b} \cos(ab^2s^2)\,ds
+=
+b
+C_{ab^2}\biggl(\frac{x}b\biggr)
+\\
+S_a(x)
+&=
+\int_0^x \sin(at^2)\,dt
+=
+b
+\int_0^{\frac{x}b} \sin(ab^2s^2)\,ds
+=
+b
+S_{ab^2}\biggl(\frac{x}b\biggr).
+\end{align*}
+Indem man $ab^2=\frac{\pi}2$ setzt, also
+\[
+b
+=
+\sqrt{\frac{\pi}{2a}}
+,
+\]
+kann man die Funktionen $C_a(x)$ und $S_a(x)$ durch $C(x)$ und $S(x)$
+ausdrücken:
+\begin{align}
+C_a(x)
+&=
+\sqrt{\frac{\pi}{2a}}
+C\biggl(x
+\sqrt{\frac{2a}{\pi}}
+\biggr)
+&&\text{und}&
+S_a(x)
+&=
+\sqrt{\frac{\pi}{2a}}
+S\biggl(x
+\sqrt{\frac{2a}{\pi}}
+\biggr).
+\label{fresnel:equation:arg}
+\end{align}
+Im Folgenden werden wir meistens nur den Fall $a=1$, also die Funktionen
+$C_1(x)$ und $S_1(x)$ betrachten, da in diesem Fall die Formeln einfacher
+werden.
+\begin{figure}
+\centering
+\includegraphics{papers/fresnel/fresnelgraph.pdf}
+\caption{Graph der Funktionen $C(x)$ ({\color{red}rot})
+und $S(x)$ ({\color{blue}blau})
+\label{fresnel:figure:plot}}
+\end{figure}
+Die Abbildung~\ref{fresnel:figure:plot} zeigt die Graphen der
+Funktion $C(x)$ und $S(x)$.
diff --git a/buch/papers/fresnel/teil1.tex b/buch/papers/fresnel/teil1.tex
index a2df138..a41ddb7 100644
--- a/buch/papers/fresnel/teil1.tex
+++ b/buch/papers/fresnel/teil1.tex
@@ -1,55 +1,202 @@
%
-% teil1.tex -- Beispiel-File für das Paper
+% teil1.tex -- Euler-Spirale
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Teil 1
-\label{fresnel:section:teil1}}
-\rhead{Problemstellung}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo.
-Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit
-aut fugit, sed quia consequuntur magni dolores eos qui ratione
-voluptatem sequi nesciunt
-\begin{equation}
-\int_a^b x^2\, dx
-=
-\left[ \frac13 x^3 \right]_a^b
-=
-\frac{b^3-a^3}3.
-\label{fresnel:equation1}
-\end{equation}
-Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet,
-consectetur, adipisci velit, sed quia non numquam eius modi tempora
-incidunt ut labore et dolore magnam aliquam quaerat voluptatem.
+\section{Euler-Spirale
+\label{fresnel:section:eulerspirale}}
+\rhead{Euler-Spirale}
+\begin{figure}
+\centering
+\includegraphics{papers/fresnel/eulerspirale.pdf}
+\caption{Die Eulerspirale ist die Kurve mit der Parameterdarstellung
+$x\mapsto (C(x),S(x))$, sie ist rot dargestellt.
+Sie windet sich unendlich oft um die beiden Punkte $(\pm\frac12,\pm\frac12)$.
+\label{fresnel:figure:eulerspirale}}
+\end{figure}
+Ein besseres Verständnis für die beiden Funktionen $C(x)$ und $S(x)$
+als die Darstellung~\ref{fresnel:figure:plot} ermöglicht die
+Abbildung~\ref{fresnel:figure:eulerspirale}, die die beiden Funktionen
+als die $x$- und $y$-Koordinaten der Parameterdarstellung einer Kurve
+zeigt.
+Sie heisst die {\em Euler-Spirale}.
+Die Spirale scheint sich für $x\to\pm\infty$ um die Punkte
+$(\pm\frac12,\pm\frac12)$ zu winden.
-Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis
-suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur?
-Quis autem vel eum iure reprehenderit qui in ea voluptate velit
-esse quam nihil molestiae consequatur, vel illum qui dolorem eum
-fugiat quo voluptas nulla pariatur?
+\begin{figure}
+\centering
+\includegraphics{papers/fresnel/pfad.pdf}
+\caption{Pfad zur Berechnung der Grenzwerte $C_1(\infty)$ und
+$S_1(\infty)$ mit Hilfe des Cauchy-Integralsatzes
+\label{fresnel:figure:pfad}}
+\end{figure}
-\subsection{De finibus bonorum et malorum
-\label{fresnel:subsection:finibus}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga \eqref{000tempmlate:equation1}.
-Et harum quidem rerum facilis est et expedita distinctio
-\ref{fresnel:section:loesung}.
-Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil
-impedit quo minus id quod maxime placeat facere possimus, omnis
-voluptas assumenda est, omnis dolor repellendus
-\ref{fresnel:section:folgerung}.
-Temporibus autem quibusdam et aut officiis debitis aut rerum
-necessitatibus saepe eveniet ut et voluptates repudiandae sint et
-molestiae non recusandae.
-Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis
-voluptatibus maiores alias consequatur aut perferendis doloribus
-asperiores repellat.
+\begin{satz}
+Die Grenzwerte der Fresnel-Integrale für $x\to\pm\infty$ sind
+\[
+\lim_{x\to\pm\infty} C(x)
+=
+\lim_{x\to\pm\infty} S(x)
+=
+\frac12.
+\]
+\end{satz}
+\begin{proof}[Beweis]
+Die komplexe Funktion
+\(
+f(z) = e^{-z^2}
+\)
+ist eine ganze Funktion, das Integral über einen geschlossenen
+Pfad in der komplexen Ebene verschwindet daher.
+Wir verwenden den Pfad in Abbildung~\ref{fresnel:figure:pfad}
+bestehend aus den drei Segmenten $\gamma_1$ entlang der reellen
+Achse von $0$ bis $R$, dem Kreisbogen $\gamma_2$ um $0$ mit Radius $R$
+und $\gamma_3$ mit der Parametrisierung $t\mapsto te^{i\pi/4}$.
+
+Das Teilintegral über $\gamma_1$ ist
+\[
+\lim_{R\to\infty}
+\int_{\gamma_1} e^{-z^2}\,dz
+=
+\int_0^\infty e^{-t^2}\,dt
+=
+\frac{\sqrt{\pi}}2.
+\]
+Das Integral über $\gamma_3$ ist
+\begin{align*}
+\lim_{R\to\infty}
+\int_{\gamma_3}
+e^{-z^2}\,dz
+&=
+-\int_0^\infty \exp(-t^2 e^{i\pi/2}) e^{i\pi/4}\,dt
+=
+-
+\int_0^\infty e^{-it^2}\,dt\,
+e^{i\pi/4}
+\\
+&=
+-e^{i\pi/4}\int_0^\infty \cos t^2 - i \sin t^2\,dt
+\\
+&=
+-\frac{1}{\sqrt{2}}(1+i)
+\bigl(
+C_1(\infty)
+-i
+S_1(\infty)
+\bigr)
+\\
+&=
+-\frac{1}{\sqrt{2}}
+\bigl(
+C_1(\infty)+S_1(\infty)
++
+i(C_1(\infty)-S_1(\infty))
+\bigr),
+\end{align*}
+wobei wir
+\[
+C_1(\infty) = \lim_{R\to\infty} C_1(R)
+\qquad\text{und}\qquad
+S_1(\infty) = \lim_{R\to\infty} S_1(R)
+\]
+abgekürzt haben.
+Das Integral über das Segment $\gamma_2$ lässt sich
+mit der Parametrisierung
+\(
+\gamma_2(t)
+=
+Re^{it}
+=
+R(\cos t + i\sin t)
+\)
+wie folgt
+abschätzen:
+\begin{align*}
+\biggl|\int_{\gamma_2} e^{-z^2} \,dz\biggr|
+&=
+\biggl|
+\int_0^{\frac{\pi}4}
+\exp(-R^2(\cos 2t + i\sin 2t)) iR e^{it}\,dt
+\biggr|
+\\
+&\le
+R
+\int_0^{\frac{\pi}4}
+e^{-R^2\cos 2t}
+\,dt
+\le
+R
+\int_0^{\frac{\pi}4}
+e^{-R^2(1-\frac{4}{\pi}t)}
+\,dt.
+\intertext{Dabei haben wir $\cos 2t\ge 1-\frac{4}\pi t$ verwendet.
+Mit dieser Vereinfachung kann das Integral ausgewertet werden und
+ergibt}
+&=
+Re^{-R^2}
+\int_0^{\frac{\pi}4}
+e^{R^2\frac{\pi}4t}
+\,dt
+=
+Re^{-R^2}
+\biggl[
+\frac{4}{\pi R^2}
+e^{R^2\frac{\pi}4t}
+\biggr]_0^{\frac{\pi}4}
+=
+\frac{4}{\pi R}
+e^{-R^2}(e^{R^2}-1)
+=
+\frac{4}{\pi R}
+(1-e^{-R^2})
+\to 0
+\end{align*}
+für $R\to \infty$.
+Im Grenzwert $R\to \infty$ kann der Teil $\gamma_2$ des Pfades
+vernachlässigt werden.
+
+Das Integral über den geschlossenen Pfad $\gamma$ verschwindet.
+Da der Teil $\gamma_2$ keine Rolle spielt, müssen sich die
+Integrale über $\gamma_1$ und $\gamma_3$ wegheben, also
+\begin{align*}
+0
+=
+\int_\gamma e^{-z^2}\,dz
+&=
+\int_{\gamma_1} e^{-z^2}\,dz
++
+\int_{\gamma_2} e^{-z^2}\,dz
++
+\int_{\gamma_3} e^{-z^2}\,dz
+\\
+&\to
+\frac{\sqrt{\pi}}2
+-\frac{1}{\sqrt{2}}(C_1(\infty)+S_1(\infty))
+-\frac{i}{\sqrt{2}}(C_1(\infty)-S_1(\infty)).
+\end{align*}
+Der Imaginärteil ist $C_1(\infty)-S_1(\infty)$, da er verschwinden
+muss, folgt $C_1(\infty)=S_1(\infty)$.
+Nach Multlikation mit $\sqrt{2}$ folgt aus der Tatsache, dass auch
+der Realteil verschwinden muss
+\[
+\frac{\sqrt{\pi}}{\sqrt{2}} = C_1(\infty)+S_1(\infty)
+\qquad
+\Rightarrow
+\qquad
+C_1(\infty)
+=
+S_1(\infty)
+=
+\frac{\sqrt{\pi}}{2\sqrt{2}}.
+\]
+Aus
+\eqref{fresnel:equation:arg}
+erhält man dann auch die Grenzwerte
+\[
+C(\infty)=S(\infty)=\frac12.
+\qedhere
+\]
+\end{proof}
diff --git a/buch/papers/fresnel/teil2.tex b/buch/papers/fresnel/teil2.tex
index 701c3ee..22d2a89 100644
--- a/buch/papers/fresnel/teil2.tex
+++ b/buch/papers/fresnel/teil2.tex
@@ -3,38 +3,22 @@
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Teil 2
-\label{fresnel:section:teil2}}
-\rhead{Teil 2}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
-aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
-eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
-est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
-velit, sed quia non numquam eius modi tempora incidunt ut labore
-et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
-veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
-nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
-reprehenderit qui in ea voluptate velit esse quam nihil molestiae
-consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
-pariatur?
+\section{Klothoide
+\label{fresnel:section:klothoide}}
+\rhead{Klothoide}
+In diesem Abschnitt soll gezeigt werden, dass die Krümmung der
+Euler-Spirale proportional zur vom Nullpunkt aus gemessenen Bogenlänge
+ist.
-\subsection{De finibus bonorum et malorum
-\label{fresnel:subsection:bonorum}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
-est et expedita distinctio. Nam libero tempore, cum soluta nobis
-est eligendi optio cumque nihil impedit quo minus id quod maxime
-placeat facere possimus, omnis voluptas assumenda est, omnis dolor
-repellendus. Temporibus autem quibusdam et aut officiis debitis aut
-rerum necessitatibus saepe eveniet ut et voluptates repudiandae
-sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
-sapiente delectus, ut aut reiciendis voluptatibus maiores alias
-consequatur aut perferendis doloribus asperiores repellat.
+\begin{definition}
+Eine ebene Kurve, deren Krümmung proportionale zur Kurvenlänge ist,
+heisst {\em Klothoide}.
+\end{definition}
+Die Klothoide wird zum Beispiel im Strassenbau bei Autobahnkurven
+angewendet.
+Fährt man mit konstanter Geschwindigkeit mit entlang einer Klothoide,
+muss man die Krümmung mit konstaner Geschwindigkeit ändern,
+also das Lenkrad mit konstanter Geschwindigkeit drehen.
+Dies ermöglicht eine ruhige Fahrweise.
diff --git a/buch/papers/fresnel/teil3.tex b/buch/papers/fresnel/teil3.tex
index d4f15f6..37e6bee 100644
--- a/buch/papers/fresnel/teil3.tex
+++ b/buch/papers/fresnel/teil3.tex
@@ -3,38 +3,110 @@
%
% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil
%
-\section{Teil 3
-\label{fresnel:section:teil3}}
-\rhead{Teil 3}
-Sed ut perspiciatis unde omnis iste natus error sit voluptatem
-accusantium doloremque laudantium, totam rem aperiam, eaque ipsa
-quae ab illo inventore veritatis et quasi architecto beatae vitae
-dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit
-aspernatur aut odit aut fugit, sed quia consequuntur magni dolores
-eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam
-est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci
-velit, sed quia non numquam eius modi tempora incidunt ut labore
-et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima
-veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam,
-nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure
-reprehenderit qui in ea voluptate velit esse quam nihil molestiae
-consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla
-pariatur?
+\section{Numerische Berechnung der Fresnel-Integrale
+\label{fresnel:section:numerik}}
+\rhead{Numerische Berechnung}
+Die Fresnel-Integrale können mit verschiedenen Methoden effizient berechnet
+werden.
-\subsection{De finibus bonorum et malorum
-\label{fresnel:subsection:malorum}}
-At vero eos et accusamus et iusto odio dignissimos ducimus qui
-blanditiis praesentium voluptatum deleniti atque corrupti quos
-dolores et quas molestias excepturi sint occaecati cupiditate non
-provident, similique sunt in culpa qui officia deserunt mollitia
-animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis
-est et expedita distinctio. Nam libero tempore, cum soluta nobis
-est eligendi optio cumque nihil impedit quo minus id quod maxime
-placeat facere possimus, omnis voluptas assumenda est, omnis dolor
-repellendus. Temporibus autem quibusdam et aut officiis debitis aut
-rerum necessitatibus saepe eveniet ut et voluptates repudiandae
-sint et molestiae non recusandae. Itaque earum rerum hic tenetur a
-sapiente delectus, ut aut reiciendis voluptatibus maiores alias
-consequatur aut perferendis doloribus asperiores repellat.
+\subsection{Komplexe Fehlerfunktionen}
+Es wurde schon darauf hingewiesen, dass der Integrand der Fresnel-Integrale
+mit $e^{t^2}$ verwandt ist.
+Tatsächlich kann gezeigt werden dass sich die Fresnel-Integrale mit
+Hilfe der komplexen Fehlerfunktion als
+\[
+\left.
+\begin{matrix}
+S_1(z)
+\\
+C_1(z)
+\end{matrix}
+\;
+\right\}
+=
+\frac{1\pm i}4\biggl(
+\operatorname{erf}\biggl(\frac{1+i}2\sqrt{\pi}z\biggr)
+\mp
+\operatorname{erf}\biggl(\frac{1-i}2\sqrt{\pi}z\biggr)
+\biggr)
+\]
+ausdrücken lassen \cite{fresnel:fresnelC}.
+Diese Darstellung ist jedoch für die numerische Berechnung nur
+beschränkt nützlich, weil die meisten Bibliotheken für die Fehlerfunktion
+diese nur für reelle Argument auszuwerten gestatten.
+
+\subsection{Als Lösung einer Differentialgleichung}
+Da die Fresnel-Integrale die sehr einfachen Differentialgleichungen
+\[
+C'(x) = \cos \biggl(\frac{\pi}2 x^2\biggr)
+\qquad\text{und}\qquad
+S'(x) = \sin \biggl(\frac{\pi}2 x^2\biggr)
+\]
+erfüllen, kann man eine Methode zur Lösung von Differentialgleichung
+verwenden.
+Die Abbildungen~\ref{fresnel:figure:plot} und \ref{fresnel:figure:eulerspirale}
+wurden auf diese Weise erzeugt.
+
+\subsection{Taylor-Reihe integrieren}
+Die Taylorreihen
+\begin{align*}
+\cos x
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k)!} x^{2k}
+&&\text{und}&
+\sin x
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k+1)!} x^{2k+1}
+\intertext{%
+der trigonometrischen Funktionen werden durch Einsetzen von $x=t^2$
+zu}
+\cos t^2
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k)!} t^{4k}
+&&\text{und}&
+\sin t^2
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k+1)!} t^{4k+2}.
+\intertext{%
+Die Fresnel-Integrale $C_1(x)$ und $S_1(x)$ können daher durch
+termweise Integration mit Hilfe der Reihen}
+C_1(x)
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k)!} \frac{x^{4k+1}}{4k+1}
+&&\text{und}&
+S_1(x)
+&=
+\sum_{k=0}^\infty \frac{(-1)^k}{(2k+1)!} \frac{x^{4k+3}}{4k+3}
+\end{align*}
+berechnet werden.
+Diese Reihen sind insbesondere für kleine Werte von $x$ sehr
+schnell konvergent.
+
+\subsection{Hypergeometrische Reihen}
+Aus der Reihenentwicklung kann jetzt auch eine Darstellung der
+Fresnel-Integrale durch hypergeometrische Reihen gefunden werden
+\cite{fresnel:fresnelC}.
+Es ergibt sich
+\begin{align*}
+S(z)
+&=
+\frac{\pi z^3}{6}
+\cdot
+\mathstrut_1F_2\biggl(
+\begin{matrix}\frac34\\\frac32,\frac74\end{matrix}
+;
+-\frac{\pi^2z^4}{16}
+\biggr)
+\\
+C(z)
+&=
+z
+\cdot
+\mathstrut_1F_2\biggl(
+\begin{matrix}\frac14\\\frac12,\frac54\end{matrix}
+;
+-\frac{\pi^2z^4}{16}
+\biggr).
+\end{align*}
diff --git a/buch/papers/laguerre/Makefile b/buch/papers/laguerre/Makefile
index 606d7e1..0f0985a 100644
--- a/buch/papers/laguerre/Makefile
+++ b/buch/papers/laguerre/Makefile
@@ -4,6 +4,8 @@
# (c) 2020 Prof Dr Andreas Mueller
#
-images:
- @echo "no images to be created in laguerre"
+images: images/laguerre_polynomes.pdf
+
+images/laguerre_polynomes.pdf: scripts/laguerre_plot.py
+ python3 scripts/laguerre_plot.py
diff --git a/buch/papers/laguerre/Makefile.inc b/buch/papers/laguerre/Makefile.inc
index 1eb5034..12b0935 100644
--- a/buch/papers/laguerre/Makefile.inc
+++ b/buch/papers/laguerre/Makefile.inc
@@ -9,8 +9,7 @@ dependencies-laguerre = \
papers/laguerre/references.bib \
papers/laguerre/definition.tex \
papers/laguerre/eigenschaften.tex \
- papers/laguerre/quadratur.tex \
- papers/laguerre/transformation.tex \
- papers/laguerre/wasserstoff.tex
+ papers/laguerre/quadratur.tex \
+ papers/laguerre/gamma.tex
diff --git a/buch/papers/laguerre/definition.tex b/buch/papers/laguerre/definition.tex
index 5f6d8bd..d111f6f 100644
--- a/buch/papers/laguerre/definition.tex
+++ b/buch/papers/laguerre/definition.tex
@@ -4,45 +4,154 @@
% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
%
\section{Definition
-\label{laguerre:section:definition}}
+ \label{laguerre:section:definition}}
\rhead{Definition}
-
+Die verallgemeinerte Laguerre-Differentialgleichung ist gegeben durch
\begin{align}
- x y''(x) + (1 - x) y'(x) + n y(x)
- =
- 0
- \label{laguerre:dgl}
+x y''(x) + (\nu + 1 - x) y'(x) + n y(x)
+=
+0
+, \quad
+n \in \mathbb{N}_0
+, \quad
+x \in \mathbb{R}
+.
+\label{laguerre:dgl}
\end{align}
-
+Die klassische Laguerre-Diffentialgleichung erhält man, wenn $\nu = 0$.
+Hier wird die verallgemeinerte Laguerre-Differentialgleichung verwendet,
+weil die Lösung mit der selben Methode berechnet werden kann,
+aber man zusätzlich die Lösung für den allgmeinen Fall erhält.
+Zur Lösung der Gleichung \eqref{laguerre:dgl} verwenden wir einen
+Potenzreihenansatz.
+Da wir bereits wissen, dass die Lösung orthogonale Polynome sind,
+erscheint dieser Ansatz sinnvoll.
+Setzt man nun den Ansatz
+\begin{align*}
+y(x)
+ & =
+\sum_{k=0}^\infty a_k x^k
+\\
+y'(x)
+ & =
+\sum_{k=1}^\infty k a_k x^{k-1}
+=
+\sum_{k=0}^\infty (k+1) a_{k+1} x^k
+\\
+y''(x)
+ & =
+\sum_{k=2}^\infty k (k-1) a_k x^{k-2}
+=
+\sum_{k=1}^\infty (k+1) k a_{k+1} x^{k-1}
+\end{align*}
+in die Differentialgleichung ein, erhält man:
+\begin{align*}
+\sum_{k=1}^\infty (k+1) k a_{k+1} x^k
++
+(\nu + 1)\sum_{k=0}^\infty (k+1) a_{k+1} x^k
+-
+\sum_{k=0}^\infty k a_k x^k
++
+n \sum_{k=0}^\infty a_k x^k
+ & =
+0 \\
+\sum_{k=1}^\infty
+\left[ (k+1) k a_{k+1} + (\nu + 1)(k+1) a_{k+1} - k a_k + n a_k \right] x^k
+ & =
+0.
+\end{align*}
+Daraus lässt sich die Rekursionsbeziehung
+\begin{align*}
+a_{k+1}
+ & =
+\frac{k-n}{(k+1) (k + \nu + 1)} a_k
+\end{align*}
+ableiten.
+Für ein konstantes $n$ erhalten wir als Potenzreihenlösung ein Polynom vom Grad
+$n$,
+denn für $k=n$ wird $a_{n+1} = 0$ und damit auch $a_{n+2}=a_{n+3}=\ldots=0$.
+Aus der Rekursionsbeziehung ist zudem ersichtlich,
+dass $a_0 \neq 0$ beliebig gewählt werden kann.
+Wählen wir nun $a_0 = 1$, dann folgt für die Koeffizienten $a_1, a_2, a_3$
+\begin{align*}
+a_1
+=
+-\frac{n}{1 \cdot (\nu + 1)}
+, & &
+a_2
+=
+\frac{(n-1)n}{1 \cdot 2 \cdot (\nu + 1)(\nu + 2)}
+, & &
+a_3
+=
+-\frac{(n-2)(n-1)n}{1 \cdot 2 \cdot 3 \cdot (\nu + 1)(\nu + 2)(\nu + 3)}
+\end{align*}
+und allgemein
+\begin{align*}
+k
+ & \leq
+n:
+ &
+a_k
+ & =
+(-1)^k \frac{n!}{(n-k)!} \frac{1}{k!(\nu + 1)_k}
+=
+\frac{(-1)^k}{(\nu + 1)_k} \binom{n}{k}
+\\
+k & >n:
+ &
+a_k
+ & =
+0.
+\end{align*}
+Somit erhalten wir für $\nu = 0$ die Laguerre-Polynome
\begin{align}
- L_n(x)
- =
- \sum_{k=0}^{n}
- \frac{(-1)^k}{k!}
- \begin{pmatrix}
- n \\
- k
- \end{pmatrix}
- x^k
- \label{laguerre:polynom}
+L_n(x)
+=
+\sum_{k=0}^{n} \frac{(-1)^k}{k!} \binom{n}{k} x^k
+\label{laguerre:polynom}
\end{align}
-
+und mit $\nu \in \mathbb{R}$ die verallgemeinerten Laguerre-Polynome
\begin{align}
- x y''(x) + (\alpha + 1 - x) y'(x) + n y(x)
- =
- 0
- \label{laguerre:generell_dgl}
+L_n^\nu(x)
+=
+\sum_{k=0}^{n} \frac{(-1)^k}{(\nu + 1)_k} \binom{n}{k} x^k.
+\label{laguerre:allg_polynom}
\end{align}
-\begin{align}
- L_n^\alpha (x)
- =
- \sum_{k=0}^{n}
- \frac{(-1)^k}{k!}
- \begin{pmatrix}
- n + \alpha \\
- n - k
- \end{pmatrix}
- x^k
- \label{laguerre:polynom}
-\end{align}
+\subsection{Analytische Fortsetzung}
+Durch die analytische Fortsetzung erhalten wir zudem noch die zweite Lösung der
+Differentialgleichung mit der Form
+\begin{align*}
+\Xi_n(x)
+=
+L_n(x) \ln(x) + \sum_{k=1}^\infty d_k x^k
+\end{align*}
+Nach einigen mühsamen Rechnungen,
+die den Rahmen dieses Kapitel sprengen würden,
+erhalten wir
+\begin{align*}
+\Xi_n
+=
+L_n(x) \ln(x)
++
+\sum_{k=1}^n \frac{(-1)^k}{k!} \binom{n}{k}
+(\alpha_{n-k} - \alpha_n - 2 \alpha_k)x^k
++
+(-1)^n \sum_{k=1}^\infty \frac{(k-1)!n!}{((n+k)!)^2} x^{n+k},
+\end{align*}
+wobei $\alpha_0 = 0$ und $\alpha_k =\sum_{i=1}^k i^{-1}$,
+$\forall k \in \mathbb{N}$.
+Die Laguerre-Polynome von Grad $0$ bis $7$ sind in
+Abbildung~\ref{laguerre:fig:polyeval} dargestellt.
+\begin{figure}
+\centering
+\includegraphics[width=0.7\textwidth]{%
+ papers/laguerre/images/laguerre_polynomes.pdf%
+}
+\caption{Laguerre-Polynome vom Grad $0$ bis $7$}
+\label{laguerre:fig:polyeval}
+\end{figure}
+
+% https://www.math.kit.edu/iana1/lehre/hm3phys2012w/media/laguerre.pdf
+% http://www.physics.okayama-u.ac.jp/jeschke_homepage/E4/kapitel4.pdf
diff --git a/buch/papers/laguerre/eigenschaften.tex b/buch/papers/laguerre/eigenschaften.tex
index b7597e5..b0cc3a3 100644
--- a/buch/papers/laguerre/eigenschaften.tex
+++ b/buch/papers/laguerre/eigenschaften.tex
@@ -4,5 +4,116 @@
% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
%
\section{Eigenschaften
-\label{laguerre:section:eigenschaften}}
-\rhead{Eigenschaften} \ No newline at end of file
+ \label{laguerre:section:eigenschaften}}
+{
+\large \color{red}
+TODO:
+Evtl. nur Orthogonalität hier behandeln, da nur diese für die Gauss-Quadratur
+benötigt wird.
+}
+
+Die Laguerre-Polynome besitzen einige interessante Eigenschaften
+\rhead{Eigenschaften}
+
+\subsection{Orthogonalität
+ \label{laguerre:subsection:orthogonal}}
+Im Abschnitt~\ref{laguerre:section:definition} haben wir behauptet,
+dass die Laguerre-Polynome orthogonale Polynome sind.
+Zu dieser Behauptung möchten wir nun einen Beweis liefern.
+Wenn wir die Laguerre\--Differentialgleichung in ein
+Sturm\--Liouville\--Problem umwandeln können, haben wir bewiesen, dass es sich
+bei
+den Laguerre\--Polynomen um orthogonale Polynome handelt (siehe
+Abschnitt~\ref{buch:integrale:subsection:sturm-liouville-problem}).
+Der Sturm-Liouville-Operator hat die Form
+\begin{align}
+S
+=
+\frac{1}{w(x)} \left(-\frac{d}{dx}p(x) \frac{d}{dx} + q(x) \right).
+\label{laguerre:slop}
+\end{align}
+Aus der Beziehung
+\begin{align}
+S
+ & =
+\Lambda
+\nonumber
+\\
+\frac{1}{w(x)} \left(-\frac{d}{dx}p(x) \frac{d}{dx} + q(x) \right)
+ & =
+x \frac{d^2}{dx^2} + (\nu + 1 - x) \frac{d}{dx}
+\label{laguerre:sl-lag}
+\end{align}
+lässt sich sofort erkennen, dass $q(x) = 0$.
+Ausserdem ist ersichtlich, dass $p(x)$ die Differentialgleichung
+\begin{align*}
+x \frac{dp}{dx}
+=
+-(\nu + 1 - x) p,
+\end{align*}
+erfüllen muss.
+Durch Separation erhalten wir dann
+\begin{align*}
+\int \frac{dp}{p}
+ & =
+-\int \frac{\nu + 1 - x}{x}dx
+\\
+\log p
+ & =
+-\log \nu + 1 - x + C
+\\
+p(x)
+ & =
+-C x^{\nu + 1} e^{-x}
+\end{align*}
+Eingefügt in Gleichung~\eqref{laguerre:sl-lag} erhalten wir
+\begin{align*}
+\frac{C}{w(x)}
+\left(
+x^{\nu+1} e^{-x} \frac{d^2}{dx^2} +
+(\nu + 1 - x) x^{\nu} e^{-x} \frac{d}{dx}
+\right)
+=
+x \frac{d^2}{dx^2} + (\nu + 1 - x) \frac{d}{dx}.
+\end{align*}
+Mittels Koeffizientenvergleich kann nun abgelesen werden, dass $w(x) = x^\nu
+e^{-x}$ und $C=1$ mit $\nu > -1$.
+Die Gewichtsfunktion $w(x)$ wächst für $x\rightarrow-\infty$ sehr schnell an,
+deshalb ist die Laguerre-Gewichtsfunktion nur geeignet für den
+Definitionsbereich $(0, \infty)$.
+Bleibt nur noch sicherzustellen, dass die Randbedingungen,
+\begin{align}
+k_0 y(0) + h_0 p(0)y'(0)
+ & =
+0
+\label{laguerre:sllag_randa}
+\\
+k_\infty y(\infty) + h_\infty p(\infty) y'(\infty)
+ & =
+0
+\label{laguerre:sllag_randb}
+\end{align}
+mit $|k_i|^2 + |h_i|^2 \neq 0,\,\forall i \in \{0, \infty\}$, erfüllt sind.
+Am linken Rand (Gleichung~\eqref{laguerre:sllag_randa}) kann $y(0) = 1$, $k_0 =
+0$ und $h_0 = 1$ verwendet werden,
+was auch die Laguerre-Polynome ergeben haben.
+Für den rechten Rand ist die Bedingung (Gleichung~\eqref{laguerre:sllag_randb})
+\begin{align*}
+\lim_{x \rightarrow \infty} p(x) y'(x)
+ & =
+\lim_{x \rightarrow \infty} -x^{\nu + 1} e^{-x} y'(x)
+=
+0
+\end{align*}
+für beliebige Polynomlösungen erfüllt für $k_\infty=0$ und $h_\infty=1$.
+Damit können wir schlussfolgern, dass die Laguerre-Polynome orthogonal
+bezüglich des Skalarproduktes auf dem Intervall $(0, \infty)$ mit der Laguerre\--Gewichtsfunktion
+$w(x)=x^\nu e^{-x}$ sind.
+
+
+\subsection{Rodrigues-Formel}
+
+\subsection{Drei-Terme Rekursion}
+
+\subsection{Beziehung mit der Hypergeometrischen Funktion}
+
diff --git a/buch/papers/laguerre/gamma.tex b/buch/papers/laguerre/gamma.tex
new file mode 100644
index 0000000..e3838b0
--- /dev/null
+++ b/buch/papers/laguerre/gamma.tex
@@ -0,0 +1,76 @@
+%
+% gamma.tex
+%
+% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
+%
+\section{Anwendung: Berechnung der Gamma-Funktion
+ \label{laguerre:section:quad-gamma}}
+Die Gauss-Laguerre-Quadratur kann nun verwendet werden,
+um exponentiell abfallende Funktionen im Definitionsbereich $(0, \infty)$ zu
+berechnen.
+Dabei bietet sich z.B. die Gamma-Funkion bestens an, wie wir in den folgenden
+Abschnitten sehen werden.
+
+\subsection{Gamma-Funktion}
+Die Gamma-Funktion ist eine Erweiterung der Fakultät auf die reale und komplexe
+Zahlenmenge.
+Die Definition~\ref{buch:rekursion:def:gamma} beschreibt die Gamma-Funktion als
+Integral der Form
+\begin{align}
+\Gamma(z)
+ & =
+\int_0^\infty t^{z-1} e^{-t} dt
+,
+\quad
+\text{wobei Realteil von $z$ grösser als $0$}
+,
+\label{laguerre:gamma}
+\end{align}
+welches alle Eigenschaften erfüllt, um mit der Gauss-Laguerre-Quadratur
+berechnet zu werden.
+
+\subsubsection{Funktionalgleichung}
+Die Funktionalgleichung besagt
+\begin{align}
+z \Gamma(z) = \Gamma(z+1).
+\label{laguerre:gamma_funktional}
+\end{align}
+Mittels dieser Gleichung kann der Wert an einer bestimmten,
+geeigneten Stelle evaluiert werden und dann zurückverschoben werden,
+um das gewünschte Resultat zu erhalten.
+
+\subsection{Berechnung mittels Gauss-Laguerre-Quadratur}
+
+Fehlerterm:
+\begin{align*}
+R_n
+=
+(z - 2n)_{2n} \frac{(n!)^2}{(2n)!} \xi^{z-2n-1}
+\end{align*}
+
+\subsubsection{Finden der optimalen Berechnungsstelle}
+Nun stellt sich die Frage,
+ob die Approximation mittels Gauss-Laguerre-Quadratur verbessert werden kann,
+wenn man das Problem an einer geeigneten Stelle evaluiert und
+dann zurückverschiebt mit der Funktionalgleichung.
+Dazu wollen wir den Fehlerterm in
+Gleichung~\eqref{laguerre:lagurre:lag_error} anpassen und dann minimieren.
+Zunächst wollen wir dies nur für $z\in \mathbb{R}$ und $0<z<1$ definieren.
+Zudem nehmen wir an, dass die optimale Stelle $x^* \in \mathbb{R}$, $z < x^*$
+ist.
+Dann fügen wir einen Verschiebungsterm um $m$ Stellen ein, daraus folgt
+\begin{align*}
+R_n
+=
+\frac{(z - 2n)_{2n}}{(z - m)_m} \frac{(n!)^2}{(2n)!} \xi^{z + m - 2n - 1}
+.
+\end{align*}
+
+{
+\large \color{red}
+TODO:
+Geeignete Minimierung für Fehler finden, so dass sie mit den emprisich
+bestimmen optimalen Punkten übereinstimmen.
+}
+
+\subsection{Resultate}
diff --git a/buch/papers/laguerre/images/laguerre_polynomes.pdf b/buch/papers/laguerre/images/laguerre_polynomes.pdf
new file mode 100644
index 0000000..3976bc7
--- /dev/null
+++ b/buch/papers/laguerre/images/laguerre_polynomes.pdf
Binary files differ
diff --git a/buch/papers/laguerre/main.tex b/buch/papers/laguerre/main.tex
index 1fe0f8b..00e3b43 100644
--- a/buch/papers/laguerre/main.tex
+++ b/buch/papers/laguerre/main.tex
@@ -8,13 +8,14 @@
\begin{refsection}
\chapterauthor{Patrik Müller}
-Hier kommt eine Einleitung.
+{\large \color{red} TODO: Einleitung}
\input{papers/laguerre/definition}
\input{papers/laguerre/eigenschaften}
\input{papers/laguerre/quadratur}
-\input{papers/laguerre/transformation}
-\input{papers/laguerre/wasserstoff}
+\input{papers/laguerre/gamma}
+% \input{papers/laguerre/transformation}
+% \input{papers/laguerre/wasserstoff}
\printbibliography[heading=subbibliography]
\end{refsection}
diff --git a/buch/papers/laguerre/packages.tex b/buch/papers/laguerre/packages.tex
index ab55228..4ebc172 100644
--- a/buch/papers/laguerre/packages.tex
+++ b/buch/papers/laguerre/packages.tex
@@ -7,4 +7,3 @@
% if your paper needs special packages, add package commands as in the
% following example
\usepackage{derivative}
-
diff --git a/buch/papers/laguerre/quadratur.tex b/buch/papers/laguerre/quadratur.tex
index 8ab1af5..60fad7f 100644
--- a/buch/papers/laguerre/quadratur.tex
+++ b/buch/papers/laguerre/quadratur.tex
@@ -3,27 +3,77 @@
%
% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
%
-\section{Gauss-Laguerre Quadratur
-\label{laguerre:section:quadratur}}
+\section{Gauss-Quadratur
+ \label{laguerre:section:quadratur}}
+ {\large \color{red} TODO: Einleitung und kurze Beschreibung Gauss-Quadratur}
+\begin{align}
+\int_a^b f(x) w(x)
+\approx
+\sum_{i=1}^N f(x_i) A_i
+\label{laguerre:gaussquadratur}
+\end{align}
+\subsection{Gauss-Laguerre-Quadratur
+\label{laguerre:subsection:gausslag-quadratur}}
+Die Gauss-Quadratur kann auch auf Skalarprodukte mit Gewichtsfunktionen
+ausgeweitet werden.
+In unserem Falle möchten wir die Gauss Quadratur auf die Laguerre-Polynome
+$L_n$ ausweiten.
+Diese sind orthogonal im Intervall $(0, \infty)$ bezüglich
+der Gewichtsfunktion $e^{-x}$.
+Gleichung~\eqref{laguerre:laguerrequadratur} lässt sich wiefolgt umformulieren:
\begin{align}
- \int_a^b f(x) w(x)
- \approx
- \sum_{i=1}^N f(x_i) A_i
- \label{laguerre:gaussquadratur}
+\int_{0}^{\infty} f(x) e^{-x} dx
+\approx
+\sum_{i=1}^{N} f(x_i) A_i
+\label{laguerre:laguerrequadratur}
\end{align}
+\subsubsection{Stützstellen und Gewichte}
+Nach der Definition der Gauss-Quadratur müssen als Stützstellen die Nullstellen
+des verwendeten Polynoms genommen werden.
+Das heisst für das Laguerre-Polynom $L_n$ müssen dessen Nullstellen $x_i$ und
+als Gewichte $A_i$ werden die Integrale $l_i(x)e^{-x}$ verwendet werden.
+Dabei sind
+\begin{align*}
+l_i(x_j)
+=
+\delta_{ij}
+=
+\begin{cases}
+1 & i=j \\
+0 & \text{sonst.}
+\end{cases}
+\end{align*}
+Laut \cite{abramowitz+stegun} sind die Gewichte also
\begin{align}
- \int_{0}^{\infty} f(x) e^{-x} dx
- \approx
- \sum_{i=1}^{N} f(x_i) A_i
- \label{laguerre:laguerrequadratur}
+A_i
+=
+\frac{x_i}{(n + 1)^2 \left[ L_{n + 1}(x_i)\right]^2}
+.
+\label{laguerre:quadratur_gewichte}
\end{align}
+\subsubsection{Fehlerterm}
+Der Fehlerterm $R_n$ folgt direkt aus der Approximation
+\begin{align*}
+\int_0^{\infty} f(x) e^{-x} dx
+=
+\sum_{i=1}^n f(x_i) A_i + R_n
+\end{align*}
+un \cite{abramowitz+stegun} gibt in als
\begin{align}
- A_i
- =
- \frac{x_i}{(n + 1)^2 \left[ L_{n + 1}(x_i)\right]^2}
- \label{laguerre:quadratur_gewichte}
+R_n
+=
+\frac{(n!)^2}{(2n)!} f^{(2n)}(\xi)
+,\quad
+0 < \xi < \infty
+\label{lagurre:lag_error}
\end{align}
+an.
+{
+\large \color{red}
+TODO:
+Noch mehr Text / bessere Beschreibungen in allen Abschnitten
+}
diff --git a/buch/papers/laguerre/references.bib b/buch/papers/laguerre/references.bib
index caf270f..6956ade 100644
--- a/buch/papers/laguerre/references.bib
+++ b/buch/papers/laguerre/references.bib
@@ -4,32 +4,19 @@
% (c) 2020 Autor, Hochschule Rapperswil
%
-@online{laguerre:bibtex,
- title = {BibTeX},
- url = {https://de.wikipedia.org/wiki/BibTeX},
- date = {2020-02-06},
- year = {2020},
- month = {2},
- day = {6}
-}
-
-@book{laguerre:numerical-analysis,
- title = {Numerical Analysis},
- author = {David Kincaid and Ward Cheney},
- publisher = {American Mathematical Society},
- year = {2002},
- isbn = {978-8-8218-4788-6},
- inseries = {Pure and applied undegraduate texts},
- volume = {2}
-}
-
-@article{laguerre:mendezmueller,
- author = { Tabea Méndez and Andreas Müller },
- title = { Noncommutative harmonic analysis and image registration },
- journal = { Appl. Comput. Harmon. Anal.},
- year = 2019,
- volume = 47,
- pages = {607--627},
- url = {https://doi.org/10.1016/j.acha.2017.11.004}
-}
-
+@book{abramowitz+stegun,
+ added-at = {2008-06-25T06:25:58.000+0200},
+ address = {New York},
+ author = {Abramowitz, Milton and Stegun, Irene A.},
+ biburl = {https://www.bibsonomy.org/bibtex/223ec744709b3a776a1af0a3fd65cd09f/a_olympia},
+ description = {BibTeX - Wikipedia, the free encyclopedia},
+ edition = {ninth Dover printing, tenth GPO printing},
+ interhash = {d4914a420f489f7c5129ed01ec3cf80c},
+ intrahash = {23ec744709b3a776a1af0a3fd65cd09f},
+ keywords = {Handbook},
+ publisher = {Dover},
+ pages = {890},
+ timestamp = {2008-06-25T06:25:58.000+0200},
+ title = {Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables},
+ year = 1972
+} \ No newline at end of file
diff --git a/buch/papers/laguerre/scripts/gamma_approx.ipynb b/buch/papers/laguerre/scripts/gamma_approx.ipynb
new file mode 100644
index 0000000..44f3abd
--- /dev/null
+++ b/buch/papers/laguerre/scripts/gamma_approx.ipynb
@@ -0,0 +1,395 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Gauss-Laguerre Quadratur für die Gamma-Funktion\n",
+ "\n",
+ "$$\n",
+ " \\Gamma(z)\n",
+ " = \n",
+ " \\int_0^\\infty t^{z-1}e^{-t}dt\n",
+ "$$\n",
+ "\n",
+ "$$\n",
+ " \\int_0^\\infty f(x) e^{-x} dx \n",
+ " \\approx \n",
+ " \\sum_{i=1}^{N} f(x_i) w_i\n",
+ " \\qquad\\text{ wobei }\n",
+ " w_i = \\frac{x_i}{(n+1)^2 [L_{n+1}(x_i)]^2}\n",
+ "$$\n",
+ "und $x_i$ sind Nullstellen des Laguerre Polynoms $L_n(x)$\n",
+ "\n",
+ "Der Fehler ist gegeben als\n",
+ "\n",
+ "$$\n",
+ " E \n",
+ " =\n",
+ " \\frac{(n!)^2}{(2n)!} f^{(2n)}(\\xi) \n",
+ " = \n",
+ " \\frac{(-2n + z)_{2n}}{(z-m)_m} \\frac{(n!)^2}{(2n)!} \\xi^{z + m - 2n - 1}\n",
+ "$$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "from cmath import exp, pi, sin, sqrt\n",
+ "import scipy.special\n",
+ "\n",
+ "EPSILON = 1e-07\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "lanczos_p = [\n",
+ " 676.5203681218851,\n",
+ " -1259.1392167224028,\n",
+ " 771.32342877765313,\n",
+ " -176.61502916214059,\n",
+ " 12.507343278686905,\n",
+ " -0.13857109526572012,\n",
+ " 9.9843695780195716e-6,\n",
+ " 1.5056327351493116e-7,\n",
+ "]\n",
+ "\n",
+ "\n",
+ "def drop_imag(z):\n",
+ " if abs(z.imag) <= EPSILON:\n",
+ " z = z.real\n",
+ " return z\n",
+ "\n",
+ "\n",
+ "def lanczos_gamma(z):\n",
+ " z = complex(z)\n",
+ " if z.real < 0.5:\n",
+ " y = pi / (sin(pi * z) * lanczos_gamma(1 - z)) # Reflection formula\n",
+ " else:\n",
+ " z -= 1\n",
+ " x = 0.99999999999980993\n",
+ " for (i, pval) in enumerate(lanczos_p):\n",
+ " x += pval / (z + i + 1)\n",
+ " t = z + len(lanczos_p) - 0.5\n",
+ " y = sqrt(2 * pi) * t ** (z + 0.5) * exp(-t) * x\n",
+ " return drop_imag(y)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "zeros, weights = np.polynomial.laguerre.laggauss(8)\n",
+ "# zeros = np.array(\n",
+ "# [\n",
+ "# 1.70279632305101000e-1,\n",
+ "# 9.03701776799379912e-1,\n",
+ "# 2.25108662986613069e0,\n",
+ "# 4.26670017028765879e0,\n",
+ "# 7.04590540239346570e0,\n",
+ "# 1.07585160101809952e1,\n",
+ "# 1.57406786412780046e1,\n",
+ "# 2.28631317368892641e1,\n",
+ "# ]\n",
+ "# )\n",
+ "\n",
+ "# weights = np.array(\n",
+ "# [\n",
+ "# 3.69188589341637530e-1,\n",
+ "# 4.18786780814342956e-1,\n",
+ "# 1.75794986637171806e-1,\n",
+ "# 3.33434922612156515e-2,\n",
+ "# 2.79453623522567252e-3,\n",
+ "# 9.07650877335821310e-5,\n",
+ "# 8.48574671627253154e-7,\n",
+ "# 1.04800117487151038e-9,\n",
+ "# ]\n",
+ "# )\n",
+ "\n",
+ "\n",
+ "def pochhammer(z, n):\n",
+ " return np.prod(z + np.arange(n))\n",
+ "\n",
+ "\n",
+ "def find_shift(z, target):\n",
+ " factor = 1.0\n",
+ " steps = int(np.floor(target - np.real(z)))\n",
+ " zs = z + steps\n",
+ " if steps > 0:\n",
+ " factor = 1 / pochhammer(z, steps)\n",
+ " elif steps < 0:\n",
+ " factor = pochhammer(zs, -steps)\n",
+ " return zs, factor\n",
+ "\n",
+ "\n",
+ "def laguerre_gamma(z, x, w, target=11):\n",
+ " # res = 0.0\n",
+ " z = complex(z)\n",
+ " if z.real < 1e-3:\n",
+ " res = pi / (\n",
+ " sin(pi * z) * laguerre_gamma(1 - z, x, w, target)\n",
+ " ) # Reflection formula\n",
+ " else:\n",
+ " z_shifted, correction_factor = find_shift(z, target)\n",
+ " res = np.sum(x ** (z_shifted - 1) * w)\n",
+ " res *= correction_factor\n",
+ " res = drop_imag(res)\n",
+ " return res\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def eval_laguerre(x, target=12):\n",
+ " return np.array([laguerre_gamma(xi, zeros, weights, target) for xi in x])\n",
+ "\n",
+ "\n",
+ "def eval_lanczos(x):\n",
+ " return np.array([lanczos_gamma(xi) for xi in x])\n",
+ "\n",
+ "\n",
+ "def eval_mean_laguerre(x, targets):\n",
+ " return np.mean([eval_laguerre(x, target) for target in targets], 0)\n",
+ "\n",
+ "\n",
+ "def calc_rel_error(x, y):\n",
+ " return (y - x) / x\n",
+ "\n",
+ "\n",
+ "def evaluate(x, target=12):\n",
+ " lanczos_gammas = eval_lanczos(x)\n",
+ " laguerre_gammas = eval_laguerre(x, target)\n",
+ " rel_error = calc_rel_error(lanczos_gammas, laguerre_gammas)\n",
+ " return rel_error\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Test with real values"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Empirische Tests zeigen:\n",
+ "- $n=4 \\Rightarrow m=6$\n",
+ "- $n=5 \\Rightarrow m=7$ oder $m=8$\n",
+ "- $n=6 \\Rightarrow m=9$\n",
+ "- $n=7 \\Rightarrow m=10$\n",
+ "- $n=8 \\Rightarrow m=11$ oder $m=12$\n",
+ "- $n=9 \\Rightarrow m=13$\n",
+ "- $n=10 \\Rightarrow m=14$\n",
+ "- $n=11 \\Rightarrow m=15$ oder $m=16$\n",
+ "- $n=12 \\Rightarrow m=17$\n",
+ "- $n=13 \\Rightarrow m=18 \\Rightarrow $ Beginnt numerisch instabil zu werden \n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "zeros, weights = np.polynomial.laguerre.laggauss(12)\n",
+ "targets = np.arange(16, 21)\n",
+ "mean_targets = ((16, 17),)\n",
+ "x = np.linspace(EPSILON, 1 - EPSILON, 101)\n",
+ "_, axs = plt.subplots(\n",
+ " 2, sharex=True, clear=True, constrained_layout=True, figsize=(12, 12)\n",
+ ")\n",
+ "\n",
+ "lanczos = eval_lanczos(x)\n",
+ "for mean_target in mean_targets:\n",
+ " vals = eval_mean_laguerre(x, mean_target)\n",
+ " rel_error_mean = calc_rel_error(lanczos, vals)\n",
+ " axs[0].plot(x, rel_error_mean, label=mean_target)\n",
+ " axs[1].semilogy(x, np.abs(rel_error_mean), label=mean_target)\n",
+ "\n",
+ "mins = []\n",
+ "maxs = []\n",
+ "for target in targets:\n",
+ " rel_error = evaluate(x, target)\n",
+ " mins.append(np.min(np.abs(rel_error[(0.1 <= x) & (x <= 0.9)])))\n",
+ " maxs.append(np.max(np.abs(rel_error)))\n",
+ " axs[0].plot(x, rel_error, label=target)\n",
+ " axs[1].semilogy(x, np.abs(rel_error), label=target)\n",
+ "# axs[0].set_ylim(*(np.array([-1, 1]) * 3.5e-8))\n",
+ "\n",
+ "axs[0].set_xlim(x[0], x[-1])\n",
+ "axs[1].set_ylim(np.min(mins), 1.04*np.max(maxs))\n",
+ "for ax in axs:\n",
+ " ax.legend()\n",
+ " ax.grid(which=\"both\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "targets = (16, 17)\n",
+ "xmax = 15\n",
+ "x = np.linspace(-xmax + EPSILON, xmax - EPSILON, 1000)\n",
+ "\n",
+ "mean_lag = eval_mean_laguerre(x, targets)\n",
+ "lanczos = eval_lanczos(x)\n",
+ "rel_error = calc_rel_error(lanczos, mean_lag)\n",
+ "rel_error_simple = evaluate(x, targets[-1])\n",
+ "# rel_error = evaluate(x, target)\n",
+ "\n",
+ "_, axs = plt.subplots(\n",
+ " 2, sharex=True, clear=True, constrained_layout=True, figsize=(12, 12)\n",
+ ")\n",
+ "axs[0].plot(x, rel_error, label=targets)\n",
+ "axs[1].semilogy(x, np.abs(rel_error), label=targets)\n",
+ "axs[0].plot(x, rel_error_simple, label=targets[-1])\n",
+ "axs[1].semilogy(x, np.abs(rel_error_simple), label=targets[-1])\n",
+ "axs[0].set_xlim(x[0], x[-1])\n",
+ "# axs[0].set_ylim(*(np.array([-1, 1]) * 4.2e-8))\n",
+ "# axs[1].set_ylim(1e-10, 5e-8)\n",
+ "for ax in axs:\n",
+ " ax.legend()\n",
+ "\n",
+ "x2 = np.linspace(-5 + EPSILON, 5, 4001)\n",
+ "_, ax = plt.subplots(constrained_layout=True, figsize=(8, 6))\n",
+ "ax.plot(x2, eval_mean_laguerre(x2, targets))\n",
+ "ax.set_xlim(x2[0], x2[-1])\n",
+ "ax.set_ylim(-7.5, 25)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Test with complex values"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "targets = (16, 17)\n",
+ "vals = np.linspace(-5 + EPSILON, 5, 100)\n",
+ "x, y = np.meshgrid(vals, vals)\n",
+ "mesh = x + 1j * y\n",
+ "input = mesh.flatten()\n",
+ "\n",
+ "mean_lag = eval_mean_laguerre(input, targets).reshape(mesh.shape)\n",
+ "lanczos = eval_lanczos(input).reshape(mesh.shape)\n",
+ "rel_error = np.abs(calc_rel_error(lanczos, mean_lag))\n",
+ "\n",
+ "lag = eval_laguerre(input, targets[-1]).reshape(mesh.shape)\n",
+ "rel_error_simple = np.abs(calc_rel_error(lanczos, lag))\n",
+ "# rel_error = evaluate(x, target)\n",
+ "\n",
+ "fig, axs = plt.subplots(\n",
+ " 2,\n",
+ " 2,\n",
+ " sharex=True,\n",
+ " sharey=True,\n",
+ " clear=True,\n",
+ " constrained_layout=True,\n",
+ " figsize=(12, 10),\n",
+ ")\n",
+ "_c = axs[0, 1].pcolormesh(x, y, np.log10(np.abs(lanczos - mean_lag)), shading=\"gouraud\")\n",
+ "_c = axs[0, 0].pcolormesh(x, y, np.log10(np.abs(lanczos - lag)), shading=\"gouraud\")\n",
+ "fig.colorbar(_c, ax=axs[0, :])\n",
+ "_c = axs[1, 1].pcolormesh(x, y, np.log10(rel_error), shading=\"gouraud\")\n",
+ "_c = axs[1, 0].pcolormesh(x, y, np.log10(rel_error_simple), shading=\"gouraud\")\n",
+ "fig.colorbar(_c, ax=axs[1, :])\n",
+ "_ = axs[0, 0].set_title(\"Absolute Error\")\n",
+ "_ = axs[1, 0].set_title(\"Relative Error\")\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "z = 0.5\n",
+ "ns = [4, 5, 5, 6, 7, 8, 8, 9, 10, 11, 11, 12] # np.arange(4, 13)\n",
+ "ms = np.arange(6, 18)\n",
+ "xi = np.logspace(0, 2, 201)[:, None]\n",
+ "lanczos = eval_lanczos([z])[0]\n",
+ "\n",
+ "_, ax = plt.subplots(clear=True, constrained_layout=True, figsize=(12, 8))\n",
+ "ax.grid(1)\n",
+ "for n, m in zip(ns, ms):\n",
+ " zeros, weights = np.polynomial.laguerre.laggauss(n)\n",
+ " c = scipy.special.factorial(n) ** 2 / scipy.special.factorial(2 * n)\n",
+ " e = np.abs(\n",
+ " scipy.special.poch(z - 2 * n, 2 * n)\n",
+ " / scipy.special.poch(z - m, m)\n",
+ " * c\n",
+ " * xi ** (z - 2 * n + m - 1)\n",
+ " )\n",
+ " ez = np.sum(\n",
+ " scipy.special.poch(z - 2 * n, 2 * n)\n",
+ " / scipy.special.poch(z - m, m)\n",
+ " * c\n",
+ " * zeros[:, None] ** (z - 2 * n + m - 1),\n",
+ " 0,\n",
+ " )\n",
+ " lag = eval_laguerre([z], m)[0]\n",
+ " err = np.abs(lanczos - lag)\n",
+ " # print(m+z,ez)\n",
+ " # for zi,ezi in zip(z[0], ez):\n",
+ " # print(f\"{m+zi}: {ezi}\")\n",
+ " # ax.semilogy(xi, e, color=color)\n",
+ " lines = ax.loglog(xi, e, label=str(n))\n",
+ " ax.axhline(err, color=lines[0].get_color())\n",
+ " # ax.set_xticks(np.arange(xi[-1] + 1))\n",
+ " # ax.set_ylim(1e-8, 1e5)\n",
+ "_ = ax.legend()\n",
+ "# _ = ax.legend([f\"z={zi}\" for zi in z[0]])\n",
+ "# _ = [ax.axvline(x) for x in zeros]\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "interpreter": {
+ "hash": "767d51c1340bd893661ea55ea3124f6de3c7a262a8b4abca0554b478b1e2ff90"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.8.10 64-bit",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.10"
+ },
+ "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/buch/papers/laguerre/scripts/laguerre_plot.py b/buch/papers/laguerre/scripts/laguerre_plot.py
new file mode 100644
index 0000000..b9088d0
--- /dev/null
+++ b/buch/papers/laguerre/scripts/laguerre_plot.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python3
+# -*- coding:utf-8 -*-
+"""Some plots for Laguerre Polynomials."""
+
+import os
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+import scipy.special as ss
+
+
+def get_ticks(start, end, step=1):
+ ticks = np.arange(start, end, step)
+ return ticks[ticks != 0]
+
+
+N = 1000
+step = 5
+t = np.linspace(-1.05, 10.5, N)[:, None]
+root = str(Path(__file__).parent)
+img_path = f"{root}/../images"
+os.makedirs(img_path, exist_ok=True)
+
+
+# fig = plt.figure(num=1, clear=True, tight_layout=True, figsize=(5.5, 3.7))
+# ax = fig.add_subplot(axes_class=AxesZero)
+fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(6, 4))
+for n in np.arange(0, 8):
+ k = np.arange(0, n + 1)[None]
+ L = np.sum((-1) ** k * ss.binom(n, k) / ss.factorial(k) * t ** k, -1)
+ ax.plot(t, L, label=f"n={n}")
+
+ax.set_xticks(get_ticks(int(t[0]), t[-1]), minor=True)
+ax.set_xticks(get_ticks(0, t[-1], step))
+ax.set_xlim(t[0], t[-1] + 0.1 * (t[1] - t[0]))
+ax.set_xlabel(r"$x$", x=1.0, labelpad=-10, rotation=0, fontsize="large")
+
+ylim = 13
+ax.set_yticks(np.arange(-ylim, ylim), minor=True)
+ax.set_yticks(np.arange(-step * (ylim // step), ylim, step))
+ax.set_ylim(-ylim, ylim)
+ax.set_ylabel(r"$y$", y=0.95, labelpad=-18, rotation=0, fontsize="large")
+
+ax.legend(ncol=2, loc=(0.125, 0.01), fontsize="large")
+
+# set the x-spine
+ax.spines[["left", "bottom"]].set_position("zero")
+ax.spines[["right", "top"]].set_visible(False)
+ax.xaxis.set_ticks_position("bottom")
+hlx = 0.4
+dx = t[-1, 0] - t[0, 0]
+dy = 2 * ylim
+hly = dy / dx * hlx
+dps = fig.dpi_scale_trans.inverted()
+bbox = ax.get_window_extent().transformed(dps)
+width, height = bbox.width, bbox.height
+
+# manual arrowhead width and length
+hw = 1.0 / 60.0 * dy
+hl = 1.0 / 30.0 * dx
+lw = 0.5 # axis line width
+ohg = 0.0 # arrow overhang
+
+# compute matching arrowhead length and width
+yhw = hw / dy * dx * height / width
+yhl = hl / dx * dy * width / height
+
+# draw x and y axis
+ax.arrow(
+ t[-1, 0] - hl,
+ 0,
+ hl,
+ 0.0,
+ fc="k",
+ ec="k",
+ lw=lw,
+ head_width=hw,
+ head_length=hl,
+ overhang=ohg,
+ length_includes_head=True,
+ clip_on=False,
+)
+
+ax.arrow(
+ 0,
+ ylim - yhl,
+ 0.0,
+ yhl,
+ fc="k",
+ ec="k",
+ lw=lw,
+ head_width=yhw,
+ head_length=yhl,
+ overhang=ohg,
+ length_includes_head=True,
+ clip_on=False,
+)
+
+fig.savefig(f"{img_path}/laguerre_polynomes.pdf")
diff --git a/buch/papers/laguerre/transformation.tex b/buch/papers/laguerre/transformation.tex
deleted file mode 100644
index 4de86b6..0000000
--- a/buch/papers/laguerre/transformation.tex
+++ /dev/null
@@ -1,31 +0,0 @@
-%
-% transformation.tex
-%
-% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
-%
-\section{Laguerre Transformation
-\label{laguerre:section:transformation}}
-\begin{align}
- L \left\{ f(x) \right\}
- =
- \tilde{f}_\alpha(n)
- =
- \int_0^\infty e^{-x} x^\alpha L_n^\alpha(x) f(x) dx
- \label{laguerre:transformation}
-\end{align}
-
-\begin{align}
- L^{-1} \left\{ \tilde{f}_\alpha(n) \right\}
- =
- f(x)
- =
- \sum_{n=0}^{\infty}
- \begin{pmatrix}
- n + \alpha \\
- n
- \end{pmatrix}^{-1}
- \frac{1}{\Gamma(\alpha + 1)}
- \tilde{f}_\alpha(n)
- L_n^\alpha(x)
- \label{laguerre:inverse_transformation}
-\end{align} \ No newline at end of file
diff --git a/buch/papers/laguerre/wasserstoff.tex b/buch/papers/laguerre/wasserstoff.tex
deleted file mode 100644
index caaa6af..0000000
--- a/buch/papers/laguerre/wasserstoff.tex
+++ /dev/null
@@ -1,29 +0,0 @@
-%
-% wasserstoff.tex
-%
-% (c) 2022 Patrik Müller, Ostschweizer Fachhochschule
-%
-\section{Radialer Schwingungsanteil eines Wasserstoffatoms
-\label{laguerre:section:radial_h_atom}}
-
-\begin{align}
- \nonumber
- - \frac{\hbar^2}{2m}
- &
- \left(
- \frac{1}{r^2} \pdv{}{r}
- \left( r^2 \pdv{}{r} \right)
- +
- \frac{1}{r^2 \sin \vartheta} \pdv{}{\vartheta}
- \left( \sin \vartheta \pdv{}{\vartheta} \right)
- +
- \frac{1}{r^2 \sin^2 \vartheta} \pdv[2]{}{\varphi}
- \right)
- u(r, \vartheta, \varphi)
- \\
- & -
- \frac{e^2}{4 \pi \epsilon_0 r} u(r, \vartheta, \varphi)
- =
- E u(r, \vartheta, \varphi)
- \label{laguerre:pdg_h_atom}
-\end{align}
diff --git a/buch/papers/nav/images/Makefile b/buch/papers/nav/images/Makefile
new file mode 100644
index 0000000..c9dcacc
--- /dev/null
+++ b/buch/papers/nav/images/Makefile
@@ -0,0 +1,108 @@
+#
+# Makefile to build images
+#
+# (c) 2022
+#
+all: dreiecke3d
+
+dreieck.pdf: dreieck.tex dreieckdata.tex macros.tex
+ pdflatex dreieck.tex
+
+dreieckdata.tex: pk.m
+ octave pk.m
+
+DREIECKE = \
+ dreieck1.pdf \
+ dreieck2.pdf \
+ dreieck3.pdf \
+ dreieck4.pdf \
+ dreieck5.pdf \
+ dreieck6.pdf \
+ dreieck7.pdf
+
+dreiecke: $(DREIECKE)
+
+dreieck1.pdf: dreieck1.tex dreieckdata.tex macros.tex
+ pdflatex dreieck1.tex
+
+dreieck2.pdf: dreieck2.tex dreieckdata.tex macros.tex
+ pdflatex dreieck2.tex
+
+dreieck3.pdf: dreieck3.tex dreieckdata.tex macros.tex
+ pdflatex dreieck3.tex
+
+dreieck4.pdf: dreieck4.tex dreieckdata.tex macros.tex
+ pdflatex dreieck4.tex
+
+dreieck5.pdf: dreieck5.tex dreieckdata.tex macros.tex
+ pdflatex dreieck5.tex
+
+dreieck6.pdf: dreieck6.tex dreieckdata.tex macros.tex
+ pdflatex dreieck6.tex
+
+dreieck7.pdf: dreieck7.tex dreieckdata.tex macros.tex
+ pdflatex dreieck7.tex
+
+DREIECKE3D = \
+ dreieck3d1.pdf \
+ dreieck3d2.pdf \
+ dreieck3d3.pdf \
+ dreieck3d4.pdf \
+ dreieck3d5.pdf \
+ dreieck3d6.pdf \
+ dreieck3d7.pdf
+
+dreiecke3d: $(DREIECKE3D)
+
+POVRAYOPTIONS = -W1080 -H1080
+#POVRAYOPTIONS = -W480 -H480
+
+dreieck3d1.png: dreieck3d1.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d1.png dreieck3d1.pov
+dreieck3d1.jpg: dreieck3d1.png
+ convert dreieck3d1.png -density 300 -units PixelsPerInch dreieck3d1.jpg
+dreieck3d1.pdf: dreieck3d1.tex dreieck3d1.jpg
+ pdflatex dreieck3d1.tex
+
+dreieck3d2.png: dreieck3d2.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d2.png dreieck3d2.pov
+dreieck3d2.jpg: dreieck3d2.png
+ convert dreieck3d2.png -density 300 -units PixelsPerInch dreieck3d2.jpg
+dreieck3d2.pdf: dreieck3d2.tex dreieck3d2.jpg
+ pdflatex dreieck3d2.tex
+
+dreieck3d3.png: dreieck3d3.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d3.png dreieck3d3.pov
+dreieck3d3.jpg: dreieck3d3.png
+ convert dreieck3d3.png -density 300 -units PixelsPerInch dreieck3d3.jpg
+dreieck3d3.pdf: dreieck3d3.tex dreieck3d3.jpg
+ pdflatex dreieck3d3.tex
+
+dreieck3d4.png: dreieck3d4.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d4.png dreieck3d4.pov
+dreieck3d4.jpg: dreieck3d4.png
+ convert dreieck3d4.png -density 300 -units PixelsPerInch dreieck3d4.jpg
+dreieck3d4.pdf: dreieck3d4.tex dreieck3d4.jpg
+ pdflatex dreieck3d4.tex
+
+dreieck3d5.png: dreieck3d5.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d5.png dreieck3d5.pov
+dreieck3d5.jpg: dreieck3d5.png
+ convert dreieck3d5.png -density 300 -units PixelsPerInch dreieck3d5.jpg
+dreieck3d5.pdf: dreieck3d5.tex dreieck3d5.jpg
+ pdflatex dreieck3d5.tex
+
+dreieck3d6.png: dreieck3d6.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d6.png dreieck3d6.pov
+dreieck3d6.jpg: dreieck3d6.png
+ convert dreieck3d6.png -density 300 -units PixelsPerInch dreieck3d6.jpg
+dreieck3d6.pdf: dreieck3d6.tex dreieck3d6.jpg
+ pdflatex dreieck3d6.tex
+
+dreieck3d7.png: dreieck3d7.pov common.inc
+ povray +A0.1 $(POVRAYOPTIONS) -Odreieck3d7.png dreieck3d7.pov
+dreieck3d7.jpg: dreieck3d7.png
+ convert dreieck3d7.png -density 300 -units PixelsPerInch dreieck3d7.jpg
+dreieck3d7.pdf: dreieck3d7.tex dreieck3d7.jpg
+ pdflatex dreieck3d7.tex
+
diff --git a/buch/papers/nav/images/common.inc b/buch/papers/nav/images/common.inc
new file mode 100644
index 0000000..33d9384
--- /dev/null
+++ b/buch/papers/nav/images/common.inc
@@ -0,0 +1,149 @@
+//
+// common.inc -- 3d Darstellung
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#version 3.7;
+#include "colors.inc"
+
+global_settings {
+ assumed_gamma 1
+}
+
+#declare imagescale = 0.034;
+
+#declare A = vnormalize(< 0, 1, 0>);
+#declare B = vnormalize(< 1, 2, -8>);
+#declare C = vnormalize(< 5, 1, 0>);
+#declare P = vnormalize(< 5, -1, -7>);
+
+camera {
+ location <40, 20, -20>
+ look_at <0, 0.24, -0.20>
+ right x * imagescale
+ up y * imagescale
+}
+
+light_source {
+ <10, 10, -40> color White
+ area_light <1,0,0> <0,0,1>, 10, 10
+ adaptive 1
+ jitter
+}
+
+sky_sphere {
+ pigment {
+ color rgb<1,1,1>
+ }
+}
+
+//
+// draw an arrow from <from> to <to> with thickness <arrowthickness> with
+// color <c>
+//
+#macro arrow(from, to, arrowthickness, c)
+#declare arrowdirection = vnormalize(to - from);
+#declare arrowlength = vlength(to - from);
+union {
+ sphere {
+ from, 1.1 * arrowthickness
+ }
+ cylinder {
+ from,
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ arrowthickness
+ }
+ cone {
+ from + (arrowlength - 5 * arrowthickness) * arrowdirection,
+ 2 * arrowthickness,
+ to,
+ 0
+ }
+ pigment {
+ color c
+ }
+ finish {
+ specular 0.9
+ metallic
+ }
+}
+#end
+
+#macro grosskreis(normale, staerke)
+union {
+ #declare v1 = vcross(normale, <normale.x, normale.z, normale.y>);
+ #declare v1 = vnormalize(v1);
+ #declare v2 = vnormalize(vcross(v1, normale));
+ #declare phisteps = 100;
+ #declare phistep = pi / phisteps;
+ #declare phi = 0;
+ #declare p1 = v1;
+ #while (phi < 2 * pi - phistep/2)
+ sphere { p1, staerke }
+ #declare phi = phi + phistep;
+ #declare p2 = v1 * cos(phi) + v2 * sin(phi);
+ cylinder { p1, p2, staerke }
+ #declare p1 = p2;
+ #end
+}
+#end
+
+#macro seite(p, q, staerke)
+ #declare n = vcross(p, q);
+ intersection {
+ grosskreis(n, staerke)
+ plane { -vcross(n, q) * vdot(vcross(n, q), p), 0 }
+ plane { -vcross(n, p) * vdot(vcross(n, p), q), 0 }
+ }
+#end
+
+#macro winkel(w, p, q, staerke)
+ #declare n = vnormalize(w);
+ #declare pp = vnormalize(p - vdot(n, p) * n);
+ #declare qq = vnormalize(q - vdot(n, q) * n);
+ intersection {
+ sphere { <0, 0, 0>, 1 + staerke }
+ cone { <0, 0, 0>, 0, 1.2 * vnormalize(w), 0.4 }
+ plane { -vcross(n, qq) * vdot(vcross(n, qq), pp), 0 }
+ plane { -vcross(n, pp) * vdot(vcross(n, pp), qq), 0 }
+ }
+#end
+
+#macro punkt(p, staerke)
+ sphere { p, 1.5 * staerke }
+#end
+
+#declare fett = 0.015;
+#declare fine = 0.010;
+
+#declare dreieckfarbe = rgb<0.6,0.6,0.6>;
+#declare rot = rgb<0.8,0.2,0.2>;
+#declare gruen = rgb<0,0.6,0>;
+#declare blau = rgb<0.2,0.2,0.8>;
+
+sphere {
+ <0, 0, 0>, 1
+ pigment {
+ color rgb<0.8,0.8,0.8>
+ }
+}
+
+//union {
+// sphere { A, 0.02 }
+// sphere { B, 0.02 }
+// sphere { C, 0.02 }
+// sphere { P, 0.02 }
+// pigment {
+// color Red
+// }
+//}
+
+//union {
+// winkel(A, B, C)
+// winkel(B, P, C)
+// seite(B, C, 0.01)
+// seite(B, P, 0.01)
+// pigment {
+// color rgb<0,0.6,0>
+// }
+//}
diff --git a/buch/papers/nav/images/dreieck.tex b/buch/papers/nav/images/dreieck.tex
new file mode 100644
index 0000000..55f6a81
--- /dev/null
+++ b/buch/papers/nav/images/dreieck.tex
@@ -0,0 +1,68 @@
+%
+% dreieck.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+\def\punktbeschriftung{
+ \node at (A) [above] {$A$};
+ \node at (B) [left] {$B$};
+ \node at (C) [right] {$C$};
+ \node at (P) [below] {$P$};
+}
+
+\winkelKappa{gray}
+
+\winkelAlpha{red}
+\winkelGamma{blue}
+\winkelBeta{darkgreen}
+
+\winkelOmega{gray}
+\winkelBetaEins{brown}
+
+\seiteC{black}
+\seiteB{black}
+\seiteA{black}
+
+\seiteL{gray}
+\seitePB{gray}
+\seitePC{gray}
+
+\draw[line width=1.4pt] \kanteAB;
+\draw[line width=1.4pt] \kanteAC;
+\draw[color=gray] \kanteAP;
+\draw[line width=1.4pt] \kanteBC;
+\draw[color=gray] \kanteBP;
+\draw[color=gray] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{gray};
+
+\punktbeschriftung
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck1.pdf b/buch/papers/nav/images/dreieck1.pdf
new file mode 100644
index 0000000..5bdf23d
--- /dev/null
+++ b/buch/papers/nav/images/dreieck1.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck1.tex b/buch/papers/nav/images/dreieck1.tex
new file mode 100644
index 0000000..436314c
--- /dev/null
+++ b/buch/papers/nav/images/dreieck1.tex
@@ -0,0 +1,59 @@
+%
+% dreieck.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+\winkelAlpha{red}
+\winkelGamma{blue}
+\winkelBeta{darkgreen}
+
+\seiteC{black}
+\seiteB{black}
+\seiteA{black}
+
+%\seiteL{gray}
+\seitePB{gray}
+\seitePC{gray}
+
+\draw[line width=1.4pt] \kanteAB;
+\draw[line width=1.4pt] \kanteAC;
+%\draw[color=gray] \kanteAP;
+\draw[line width=1.4pt] \kanteBC;
+\draw[color=gray] \kanteBP;
+\draw[color=gray] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{gray};
+
+\node at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node[color=gray] at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck2.pdf b/buch/papers/nav/images/dreieck2.pdf
new file mode 100644
index 0000000..a872b25
--- /dev/null
+++ b/buch/papers/nav/images/dreieck2.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck2.tex b/buch/papers/nav/images/dreieck2.tex
new file mode 100644
index 0000000..99aabb7
--- /dev/null
+++ b/buch/papers/nav/images/dreieck2.tex
@@ -0,0 +1,59 @@
+%
+% dreieck2.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+%\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+\seiteC{black}
+\seiteB{black}
+%\seiteA{black}
+
+%\seiteL{gray}
+\seitePB{gray}
+\seitePC{gray}
+
+\draw[line width=1.4pt] \kanteAB;
+\draw[line width=1.4pt] \kanteAC;
+%\draw[color=gray] \kanteAP;
+\draw[line width=1.4pt] \kanteBC;
+\draw[color=gray] \kanteBP;
+\draw[color=gray] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{gray};
+
+\node at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node[color=gray] at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3.pdf b/buch/papers/nav/images/dreieck3.pdf
new file mode 100644
index 0000000..65070c6
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck3.tex b/buch/papers/nav/images/dreieck3.tex
new file mode 100644
index 0000000..0cf5363
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3.tex
@@ -0,0 +1,59 @@
+%
+% dreieck.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+\seiteC{black}
+\seiteB{black}
+%\seiteA{black}
+
+%\seiteL{gray}
+\seitePB{gray}
+\seitePC{gray}
+
+\draw[line width=1.4pt] \kanteAB;
+\draw[line width=1.4pt] \kanteAC;
+%\draw[color=gray] \kanteAP;
+\draw[line width=1.4pt] \kanteBC;
+\draw[color=gray] \kanteBP;
+\draw[color=gray] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{gray};
+
+\node at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node[color=gray] at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d1.pov b/buch/papers/nav/images/dreieck3d1.pov
new file mode 100644
index 0000000..8afe60e
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d1.pov
@@ -0,0 +1,58 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fett)
+ seite(B, C, fett)
+ seite(A, C, fett)
+ punkt(A, fett)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fine)
+ seite(B, P, fine)
+ seite(C, P, fine)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(A, B, C, fine)
+ pigment {
+ color rot
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(B, C, A, fine)
+ pigment {
+ color gruen
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(C, A, B, fine)
+ pigment {
+ color blau
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
diff --git a/buch/papers/nav/images/dreieck3d1.tex b/buch/papers/nav/images/dreieck3d1.tex
new file mode 100644
index 0000000..799b21a
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d1.tex
@@ -0,0 +1,53 @@
+%
+% dreieck3d1.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d1.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+\node at (-1.9,2.1) {$c$};
+\node at (-0.2,-1.2) {$a$};
+\node at (2.6,1.5) {$b$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+\node at (0.7,3) {$\alpha$};
+\node at (-2.5,-0.5) {$\beta$};
+\node at (2.3,-1.2) {$\gamma$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d2.pov b/buch/papers/nav/images/dreieck3d2.pov
new file mode 100644
index 0000000..c23a54c
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d2.pov
@@ -0,0 +1,26 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fett)
+ seite(B, C, fett)
+ seite(A, C, fett)
+ punkt(A, fett)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fine)
+ seite(B, P, fine)
+ seite(C, P, fine)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d2.tex b/buch/papers/nav/images/dreieck3d2.tex
new file mode 100644
index 0000000..0f6e10c
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d2.tex
@@ -0,0 +1,53 @@
+%
+% dreieck3d2.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d2.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+\node at (-1.9,2.1) {$c$};
+%\node at (-0.2,-1.2) {$a$};
+\node at (2.6,1.5) {$b$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+%\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d3.pov b/buch/papers/nav/images/dreieck3d3.pov
new file mode 100644
index 0000000..f2496b5
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d3.pov
@@ -0,0 +1,37 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fett)
+ seite(B, C, fett)
+ seite(A, C, fett)
+ punkt(A, fett)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fine)
+ seite(B, P, fine)
+ seite(C, P, fine)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(A, B, C, fine)
+ pigment {
+ color rot
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d3.tex b/buch/papers/nav/images/dreieck3d3.tex
new file mode 100644
index 0000000..a047b1b
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d3.tex
@@ -0,0 +1,53 @@
+%
+% dreieck3d3.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d3.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+\node at (-1.9,2.1) {$c$};
+%\node at (-0.2,-1.2) {$a$};
+\node at (2.6,1.5) {$b$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d4.pov b/buch/papers/nav/images/dreieck3d4.pov
new file mode 100644
index 0000000..bddcf7c
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d4.pov
@@ -0,0 +1,37 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fine)
+ seite(A, C, fine)
+ punkt(A, fine)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fett)
+ seite(B, C, fett)
+ seite(B, P, fett)
+ seite(C, P, fett)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(B, C, P, fine)
+ pigment {
+ color rgb<0.6,0.4,0.2>
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d4.tex b/buch/papers/nav/images/dreieck3d4.tex
new file mode 100644
index 0000000..d49fb66
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d4.tex
@@ -0,0 +1,54 @@
+%
+% dreieck3d4.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d4.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+%\node at (-1.9,2.1) {$c$};
+\node at (-0.2,-1.2) {$a$};
+%\node at (2.6,1.5) {$b$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+%\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+\node at (-2.3,-1.5) {$\beta_1$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d5.pov b/buch/papers/nav/images/dreieck3d5.pov
new file mode 100644
index 0000000..32fc9e6
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d5.pov
@@ -0,0 +1,26 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fine)
+ seite(A, C, fine)
+ punkt(A, fine)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fett)
+ seite(B, C, fett)
+ seite(B, P, fett)
+ seite(C, P, fett)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d5.tex b/buch/papers/nav/images/dreieck3d5.tex
new file mode 100644
index 0000000..8011b37
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d5.tex
@@ -0,0 +1,53 @@
+%
+% dreieck3d5.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d5.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+%\node at (-1.9,2.1) {$c$};
+%\node at (-0.2,-1.2) {$a$};
+%\node at (2.6,1.5) {$b$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+%\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d6.pov b/buch/papers/nav/images/dreieck3d6.pov
new file mode 100644
index 0000000..7611950
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d6.pov
@@ -0,0 +1,37 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, B, fett)
+ seite(A, C, fett)
+ seite(B, P, fett)
+ seite(C, P, fett)
+ seite(A, P, fett)
+ punkt(A, fett)
+ punkt(B, fett)
+ punkt(C, fett)
+ punkt(P, fett)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(B, A, P, fine)
+ pigment {
+ color rgb<0.6,0.2,0.6>
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d6.tex b/buch/papers/nav/images/dreieck3d6.tex
new file mode 100644
index 0000000..bbca2ca
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d6.tex
@@ -0,0 +1,55 @@
+%
+% dreieck3d6.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d6.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+\node at (-1.9,2.1) {$c$};
+%\node at (-0.2,-1.2) {$a$};
+\node at (2.6,1.5) {$b$};
+\node at (-0.7,0.3) {$l$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+%\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+\node at (-2.4,-0.6) {$\kappa$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck3d7.pov b/buch/papers/nav/images/dreieck3d7.pov
new file mode 100644
index 0000000..fa48f5b
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d7.pov
@@ -0,0 +1,39 @@
+//
+// dreiecke3d.pov
+//
+// (c) 2022 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+//
+#include "common.inc"
+
+union {
+ seite(A, C, fett)
+ seite(A, P, fett)
+ seite(C, P, fett)
+
+ seite(A, B, fine)
+ seite(B, C, fine)
+ seite(B, P, fine)
+ punkt(A, fett)
+ punkt(C, fett)
+ punkt(P, fett)
+ punkt(B, fine)
+ pigment {
+ color dreieckfarbe
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
+object {
+ winkel(A, P, C, fine)
+ pigment {
+ color rgb<0.4,0.4,1>
+ }
+ finish {
+ specular 0.95
+ metallic
+ }
+}
+
diff --git a/buch/papers/nav/images/dreieck3d7.tex b/buch/papers/nav/images/dreieck3d7.tex
new file mode 100644
index 0000000..4027a8b
--- /dev/null
+++ b/buch/papers/nav/images/dreieck3d7.tex
@@ -0,0 +1,55 @@
+%
+% dreieck3d7.tex
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{times}
+\usepackage{amsmath}
+\usepackage{txfonts}
+\usepackage[utf8]{inputenc}
+\usepackage{graphics}
+\usetikzlibrary{arrows,intersections,math}
+\usepackage{ifthen}
+\begin{document}
+
+\newboolean{showgrid}
+\setboolean{showgrid}{false}
+\def\breite{4}
+\def\hoehe{4}
+
+\begin{tikzpicture}[>=latex,thick]
+
+% Povray Bild
+\node at (0,0) {\includegraphics[width=8cm]{dreieck3d7.jpg}};
+
+% Gitter
+\ifthenelse{\boolean{showgrid}}{
+\draw[step=0.1,line width=0.1pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw[step=0.5,line width=0.4pt] (-\breite,-\hoehe) grid (\breite, \hoehe);
+\draw (-\breite,-\hoehe) grid (\breite, \hoehe);
+\fill (0,0) circle[radius=0.05];
+}{}
+
+\node at (0.7,3.8) {$A$};
+\node at (-3.4,-0.8) {$B$};
+\node at (3.3,-2.1) {$C$};
+\node at (-1.4,-3.5) {$P$};
+
+\node at (-1.9,2.1) {$c$};
+\node at (-0.2,-1.2) {$a$};
+\node at (2.6,1.5) {$b$};
+\node at (-0.7,0.3) {$l$};
+
+\node at (-2.6,-2.2) {$p_b$};
+\node at (1,-2.9) {$p_c$};
+
+%\node at (0.7,3) {$\alpha$};
+%\node at (-2.5,-0.5) {$\beta$};
+%\node at (2.3,-1.2) {$\gamma$};
+\node at (0.8,3.1) {$\omega$};
+
+\end{tikzpicture}
+
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck4.pdf b/buch/papers/nav/images/dreieck4.pdf
new file mode 100644
index 0000000..4871a1e
--- /dev/null
+++ b/buch/papers/nav/images/dreieck4.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck4.tex b/buch/papers/nav/images/dreieck4.tex
new file mode 100644
index 0000000..19a7d12
--- /dev/null
+++ b/buch/papers/nav/images/dreieck4.tex
@@ -0,0 +1,64 @@
+%
+% dreieck4.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+%\winkelKappa{gray}
+
+%\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+%\winkelOmega{gray}
+\winkelBetaEins{brown}
+
+%\seiteC{gray}
+%\seiteB{gray}
+%\seiteL{gray}
+
+\seiteA{black}
+\seitePB{black}
+\seitePC{black}
+
+\draw[color=gray] \kanteAB;
+\draw[color=gray] \kanteAC;
+%\draw[color=gray] \kanteAP;
+\draw[color=black,line width=1.4pt] \kanteBC;
+\draw[color=black,line width=1.4pt] \kanteBP;
+\draw[color=black,line width=1.4pt] \kanteCP;
+
+\punkt{(A)}{gray};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{black};
+
+\node[color=gray] at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck5.pdf b/buch/papers/nav/images/dreieck5.pdf
new file mode 100644
index 0000000..cf686e0
--- /dev/null
+++ b/buch/papers/nav/images/dreieck5.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck5.tex b/buch/papers/nav/images/dreieck5.tex
new file mode 100644
index 0000000..d1117d1
--- /dev/null
+++ b/buch/papers/nav/images/dreieck5.tex
@@ -0,0 +1,64 @@
+%
+% dreieck4.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+%\winkelKappa{gray}
+
+%\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+%\winkelOmega{gray}
+%\winkelBetaEins{brown}
+
+%\seiteC{gray}
+%\seiteB{gray}
+%\seiteL{gray}
+
+%\seiteA{black}
+\seitePB{black}
+\seitePC{black}
+
+\draw[color=gray] \kanteAB;
+\draw[color=gray] \kanteAC;
+%\draw[color=gray] \kanteAP;
+\draw[color=black,line width=1.4pt] \kanteBC;
+\draw[color=black,line width=1.4pt] \kanteBP;
+\draw[color=black,line width=1.4pt] \kanteCP;
+
+\punkt{(A)}{gray};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{black};
+
+\node[color=gray] at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck6.pdf b/buch/papers/nav/images/dreieck6.pdf
new file mode 100644
index 0000000..7efd673
--- /dev/null
+++ b/buch/papers/nav/images/dreieck6.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck6.tex b/buch/papers/nav/images/dreieck6.tex
new file mode 100644
index 0000000..87db1c2
--- /dev/null
+++ b/buch/papers/nav/images/dreieck6.tex
@@ -0,0 +1,64 @@
+%
+% dreieck6.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+\winkelKappa{gray}
+
+%\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+%\winkelOmega{gray}
+%\winkelBetaEins{brown}
+
+\seiteC{black}
+\seiteB{black}
+%\seiteA{gray}
+
+\seiteL{black}
+\seitePB{black}
+\seitePC{black}
+
+\draw[color=black,line width=1.4pt] \kanteAB;
+\draw[color=black,line width=1.4pt] \kanteAC;
+\draw[color=black,line width=1.4pt] \kanteAP;
+%\draw[color=gray] \kanteBC;
+\draw[color=black,line width=1.4pt] \kanteBP;
+\draw[color=black,line width=1.4pt] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{black};
+\punkt{(C)}{black};
+\punkt{(P)}{black};
+
+\node at (A) [above] {$A$};
+\node at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieck7.pdf b/buch/papers/nav/images/dreieck7.pdf
new file mode 100644
index 0000000..aa83e28
--- /dev/null
+++ b/buch/papers/nav/images/dreieck7.pdf
Binary files differ
diff --git a/buch/papers/nav/images/dreieck7.tex b/buch/papers/nav/images/dreieck7.tex
new file mode 100644
index 0000000..f084708
--- /dev/null
+++ b/buch/papers/nav/images/dreieck7.tex
@@ -0,0 +1,64 @@
+%
+% dreieck.tex -- sphärische Dreiecke für Positionsbestimmung
+%
+% (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+%
+\documentclass[tikz]{standalone}
+\usepackage{amsmath}
+\usepackage{times}
+\usepackage{txfonts}
+\usepackage{pgfplots}
+\usepackage{csvsimple}
+\usetikzlibrary{arrows,intersections,math,calc}
+\begin{document}
+
+\definecolor{darkgreen}{rgb}{0,0.6,0}
+
+\def\skala{1}
+
+\def\punkt#1#2{
+ \fill[color=#2] #1 circle[radius=0.08];
+}
+
+\begin{tikzpicture}[>=latex,thick,scale=\skala]
+
+\input{dreieckdata.tex}
+\input{macros.tex}
+
+%\winkelKappa{gray}
+
+%\winkelAlpha{red}
+%\winkelGamma{blue}
+%\winkelBeta{darkgreen}
+
+\winkelOmega{gray}
+%\winkelBetaEins{brown}
+
+\seiteC{black}
+\seiteB{black}
+\seiteA{gray}
+
+\seiteL{black}
+\seitePB{gray}
+\seitePC{black}
+
+\draw[color=gray] \kanteAB;
+\draw[color=black,line width=1.4pt] \kanteAC;
+\draw[color=black,line width=1.4pt] \kanteAP;
+\draw[color=gray] \kanteBC;
+\draw[color=gray] \kanteBP;
+\draw[line width=1.4pt] \kanteCP;
+
+\punkt{(A)}{black};
+\punkt{(B)}{gray};
+\punkt{(C)}{black};
+\punkt{(P)}{black};
+
+\node at (A) [above] {$A$};
+\node[color=gray] at (B) [left] {$B$};
+\node at (C) [right] {$C$};
+\node at (P) [below] {$P$};
+
+\end{tikzpicture}
+\end{document}
+
diff --git a/buch/papers/nav/images/dreieckdata.tex b/buch/papers/nav/images/dreieckdata.tex
new file mode 100644
index 0000000..c0fb720
--- /dev/null
+++ b/buch/papers/nav/images/dreieckdata.tex
@@ -0,0 +1,16 @@
+\coordinate (P) at (0.0000,0.0000);
+\coordinate (A) at (1.0000,8.0000);
+\coordinate (B) at (-3.0000,3.0000);
+\coordinate (C) at (4.0000,4.0000);
+\def\kanteAB{(1.0000,8.0000) arc (114.77514:167.90524:7.1589)}
+\def\kanteBA{(-3.0000,3.0000) arc (167.90524:114.77514:7.1589)}
+\def\kanteAC{(1.0000,8.0000) arc (63.43495:10.30485:5.5902)}
+\def\kanteCA{(4.0000,4.0000) arc (10.30485:63.43495:5.5902)}
+\def\kanteAP{(1.0000,8.0000) arc (146.30993:199.44003:9.0139)}
+\def\kantePA{(0.0000,0.0000) arc (199.44003:146.30993:9.0139)}
+\def\kanteBC{(-3.0000,3.0000) arc (-95.90614:-67.83365:14.5774)}
+\def\kanteCB{(4.0000,4.0000) arc (-67.83365:-95.90614:14.5774)}
+\def\kanteBP{(-3.0000,3.0000) arc (-161.56505:-108.43495:4.7434)}
+\def\kantePB{(0.0000,0.0000) arc (-108.43495:-161.56505:4.7434)}
+\def\kanteCP{(4.0000,4.0000) arc (-30.96376:-59.03624:11.6619)}
+\def\kantePC{(0.0000,0.0000) arc (-59.03624:-30.96376:11.6619)}
diff --git a/buch/papers/nav/images/macros.tex b/buch/papers/nav/images/macros.tex
new file mode 100644
index 0000000..69a620d
--- /dev/null
+++ b/buch/papers/nav/images/macros.tex
@@ -0,0 +1,54 @@
+\def\winkelAlpha#1{
+ \begin{scope}
+ \clip (A) circle[radius=1.1];
+ \fill[color=#1!20] \kanteAB -- \kanteCA -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(A)+(222:0.82)$) {$\alpha$};
+}
+
+\def\winkelOmega#1{
+ \begin{scope}
+ \clip (A) circle[radius=0.7];
+ \fill[color=#1!20] \kanteAP -- \kanteCA -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(A)+(285:0.50)$) {$\omega$};
+}
+
+\def\winkelGamma#1{
+ \begin{scope}
+ \clip (C) circle[radius=1.0];
+ \fill[color=#1!20] \kanteCA -- \kanteBC -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(C)+(155:0.60)$) {$\gamma$};
+}
+
+\def\winkelKappa#1{
+ \begin{scope}
+ \clip (B) circle[radius=1.2];
+ \fill[color=#1!20] \kanteBP -- \kanteAB -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(B)+(15:1.00)$) {$\kappa$};
+}
+
+\def\winkelBeta#1{
+ \begin{scope}
+ \clip (B) circle[radius=0.8];
+ \fill[color=#1!20] \kanteBC -- \kanteAB -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(B)+(35:0.40)$) {$\beta$};
+}
+
+\def\winkelBetaEins#1{
+ \begin{scope}
+ \clip (B) circle[radius=0.8];
+ \fill[color=#1!20] \kanteBP -- \kanteCB -- cycle;
+ \end{scope}
+ \node[color=#1] at ($(B)+(330:0.60)$) {$\beta_1$};
+}
+
+\def\seiteC#1{ \node[color=#1] at (-1.9,5.9) {$c$}; }
+\def\seiteB#1{ \node[color=#1] at (3.2,6.5) {$b$}; }
+\def\seiteL#1{ \node[color=#1] at (-0.2,4.5) {$l$}; }
+\def\seiteA#1{ \node[color=#1] at (2,3) {$a$}; }
+\def\seitePB#1{ \node[color=#1] at (-2.1,1) {$p_b$}; }
+\def\seitePC#1{ \node[color=#1] at (2.5,1.5) {$p_c$}; }
diff --git a/buch/papers/nav/images/pk.m b/buch/papers/nav/images/pk.m
new file mode 100644
index 0000000..6e89e9a
--- /dev/null
+++ b/buch/papers/nav/images/pk.m
@@ -0,0 +1,55 @@
+#
+# pk.m -- Punkte und Kanten für sphärisches Dreieck
+#
+# (c) 2021 Prof Dr Andreas Müller, OST Ostschweizer Fachhochschule
+#
+
+A = [ 1, 8 ];
+B = [ -3, 3 ];
+C = [ 4, 4 ];
+P = [ 0, 0 ];
+
+global fn;
+fn = fopen("dreieckdata.tex", "w");
+
+fprintf(fn, "\\coordinate (P) at (%.4f,%.4f);\n", P(1,1), P(1,2));
+fprintf(fn, "\\coordinate (A) at (%.4f,%.4f);\n", A(1,1), A(1,2));
+fprintf(fn, "\\coordinate (B) at (%.4f,%.4f);\n", B(1,1), B(1,2));
+fprintf(fn, "\\coordinate (C) at (%.4f,%.4f);\n", C(1,1), C(1,2));
+
+function retval = seite(A, B, l, nameA, nameB)
+ global fn;
+ d = fliplr(B - A);
+ d(1, 2) = -d(1, 2);
+ # Zentrum
+ C = 0.5 * (A + B) + l * d;
+ # Radius:
+ r = hypot(C(1,1)-A(1,1), C(1,2)-A(1,2))
+ # Winkel von
+ winkelvon = atan2(A(1,2)-C(1,2),A(1,1)-C(1,1));
+ # Winkel bis
+ winkelbis = atan2(B(1,2)-C(1,2),B(1,1)-C(1,1));
+ if (abs(winkelvon - winkelbis) > pi)
+ if (winkelbis < winkelvon)
+ winkelbis = winkelbis + 2 * pi
+ else
+ winkelvon = winkelvon + 2 * pi
+ end
+ end
+ # Kurve
+ fprintf(fn, "\\def\\kante%s%s{(%.4f,%.4f) arc (%.5f:%.5f:%.4f)}\n",
+ nameA, nameB,
+ A(1,1), A(1,2), winkelvon * 180 / pi, winkelbis * 180 / pi, r);
+ fprintf(fn, "\\def\\kante%s%s{(%.4f,%.4f) arc (%.5f:%.5f:%.4f)}\n",
+ nameB, nameA,
+ B(1,1), B(1,2), winkelbis * 180 / pi, winkelvon * 180 / pi, r);
+endfunction
+
+seite(A, B, -1, "A", "B");
+seite(A, C, 1, "A", "C");
+seite(A, P, -1, "A", "P");
+seite(B, C, -2, "B", "C");
+seite(B, P, -1, "B", "P");
+seite(C, P, 2, "C", "P");
+
+fclose(fn);