diff options
Diffstat (limited to 'buch/papers')
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 Binary files differnew file mode 100644 index 0000000..4a85a50 --- /dev/null +++ b/buch/papers/fresnel/eulerspirale.pdf 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 Binary files differnew file mode 100644 index 0000000..9ccad56 --- /dev/null +++ b/buch/papers/fresnel/fresnelgraph.pdf 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 Binary files differnew file mode 100644 index 0000000..ff514cc --- /dev/null +++ b/buch/papers/fresnel/pfad.pdf 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 Binary files differnew file mode 100644 index 0000000..3976bc7 --- /dev/null +++ b/buch/papers/laguerre/images/laguerre_polynomes.pdf 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 Binary files differnew file mode 100644 index 0000000..5bdf23d --- /dev/null +++ b/buch/papers/nav/images/dreieck1.pdf 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 Binary files differnew file mode 100644 index 0000000..a872b25 --- /dev/null +++ b/buch/papers/nav/images/dreieck2.pdf 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 Binary files differnew file mode 100644 index 0000000..65070c6 --- /dev/null +++ b/buch/papers/nav/images/dreieck3.pdf 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 Binary files differnew file mode 100644 index 0000000..4871a1e --- /dev/null +++ b/buch/papers/nav/images/dreieck4.pdf 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 Binary files differnew file mode 100644 index 0000000..cf686e0 --- /dev/null +++ b/buch/papers/nav/images/dreieck5.pdf 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 Binary files differnew file mode 100644 index 0000000..7efd673 --- /dev/null +++ b/buch/papers/nav/images/dreieck6.pdf 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 Binary files differnew file mode 100644 index 0000000..aa83e28 --- /dev/null +++ b/buch/papers/nav/images/dreieck7.pdf 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); |