From e1f5d6267540ea8dc758696fb08cb7540362cf8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20M=C3=BCller?= Date: Mon, 18 Jul 2022 17:34:37 +0200 Subject: First complete draft of Laguerre chapter --- buch/papers/laguerre/Makefile | 2 +- buch/papers/laguerre/definition.tex | 6 +- buch/papers/laguerre/gamma.tex | 242 ++++++++++++++------- buch/papers/laguerre/images/estimates.pdf | Bin 13780 -> 13780 bytes buch/papers/laguerre/images/gammaplot.pdf | Bin 23297 -> 23297 bytes buch/papers/laguerre/images/integrand.pdf | Bin 16109 -> 16109 bytes buch/papers/laguerre/images/integrand_exp.pdf | Bin 16951 -> 16951 bytes buch/papers/laguerre/images/laguerre_poly.pdf | Bin 19815 -> 19815 bytes buch/papers/laguerre/images/rel_error_complex.pdf | Bin 198151 -> 195590 bytes buch/papers/laguerre/images/rel_error_mirror.pdf | Bin 26866 -> 26866 bytes buch/papers/laguerre/images/rel_error_range.pdf | Bin 25704 -> 25105 bytes buch/papers/laguerre/images/rel_error_shifted.pdf | Bin 16231 -> 16317 bytes buch/papers/laguerre/images/rel_error_simple.pdf | Bin 23353 -> 23353 bytes buch/papers/laguerre/images/targets.pdf | Bin 14757 -> 14462 bytes buch/papers/laguerre/main.tex | 2 +- .../presentation/sections/gamma_approx.tex | 24 +- .../laguerre/presentation/sections/laguerre.tex | 3 +- buch/papers/laguerre/quadratur.tex | 14 +- buch/papers/laguerre/references.bib | 18 +- buch/papers/laguerre/scripts/gamma_approx.py | 1 + buch/papers/laguerre/scripts/rel_error_complex.py | 4 +- buch/papers/laguerre/scripts/rel_error_range.py | 2 +- buch/papers/laguerre/scripts/rel_error_shifted.py | 2 +- buch/papers/laguerre/scripts/targets.py | 4 +- 24 files changed, 211 insertions(+), 113 deletions(-) (limited to 'buch/papers/laguerre') diff --git a/buch/papers/laguerre/Makefile b/buch/papers/laguerre/Makefile index 48f8066..85a1b83 100644 --- a/buch/papers/laguerre/Makefile +++ b/buch/papers/laguerre/Makefile @@ -28,7 +28,7 @@ images: $(FIGURES) .PHONY: presentation presentation: $(PRESFOLDER)/presentation.pdf -images/%.pdf images/%.pgf: scripts/%.py +images/%.pdf images/%.pgf: scripts/%.py scripts/gamma_approx.py python3 $< images/gammaplot.pdf: images/gammaplot.tex images/gammapaths.tex diff --git a/buch/papers/laguerre/definition.tex b/buch/papers/laguerre/definition.tex index 9ebc288..42cd6f6 100644 --- a/buch/papers/laguerre/definition.tex +++ b/buch/papers/laguerre/definition.tex @@ -125,10 +125,8 @@ Die Laguerre-Polynome von Grad $0$ bis $7$ sind in Abbildung~\ref{laguerre:fig:polyeval} dargestellt. \begin{figure} \centering -\scalebox{0.8}{\input{papers/laguerre/images/laguerre_poly.pgf}} -% \includegraphics[width=0.7\textwidth]{% -% papers/laguerre/images/laguerre_polynomes.eps% -% } +% \scalebox{0.8}{\input{papers/laguerre/images/laguerre_poly.pgf}} +\includegraphics[width=0.9\textwidth]{papers/laguerre/images/laguerre_poly.pdf} \caption{Laguerre-Polynome vom Grad $0$ bis $7$} \label{laguerre:fig:polyeval} \end{figure} diff --git a/buch/papers/laguerre/gamma.tex b/buch/papers/laguerre/gamma.tex index a28c180..eb64fa2 100644 --- a/buch/papers/laguerre/gamma.tex +++ b/buch/papers/laguerre/gamma.tex @@ -23,8 +23,8 @@ Integral der Form , \quad \text{wobei Realteil von $z$ grösser als $0$} -, \label{laguerre:gamma} +. \end{align} Der Term $e^{-t}$ ist genau die Gewichtsfunktion der Laguerre-Integration und der Definitionsbereich passt ebenfalls genau für dieses Verfahren. @@ -72,7 +72,7 @@ allerdings müssten die Gewichte und Nullstellen für jedes $z$ neu berechnet werden, da sie per Definition von $z$ abhängen. Dazu kommt, -dass die Berechnung der Gewichte $A_i$ nach \cite{Cassity1965AbcissasCA} +dass die Berechnung der Gewichte $A_i$ nach \cite{laguerre:Cassity1965AbcissasCA} \begin{align*} A_i = @@ -85,7 +85,7 @@ A_i } \end{align*} Evaluationen der Gamma-Funktion benötigen. -Somit scheint diese Methode nicht geeignet für unser Vorhaben. +Somit ist diese Methode eindeutig nicht geeignet für unser Vorhaben. Bei der zweiten Variante benötigen wir keine Neuberechung der Gewichte und Nullstellen für unterschiedliche $z$. @@ -95,10 +95,10 @@ Auch die Nullstellen können vorgängig, mittels eines geeigneten Verfahrens aus den Polynomen bestimmt werden. Als problematisch könnte sich höchstens die zu integrierende Funktion $f(x)=x^{z-1}$ für $|z| \gg 0$ erweisen. -Somit entscheiden wir uns auf Grund der vorherigen Punkte, +Somit entscheiden wir uns aufgrund der vorherigen Punkte, die zweite Variante weiterzuverfolgen. -\subsubsection{Naiver Ansatz} +\subsubsection{Direkter Ansatz} Wenden wir also die Gauss-Laguerre-Quadratur aus \eqref{laguerre:laguerrequadratur} auf die Gamma-Funktion \eqref{laguerre:gamma} an ergibt sich @@ -111,15 +111,16 @@ Wenden wir also die Gauss-Laguerre-Quadratur aus \begin{figure} \centering -\input{papers/laguerre/images/rel_error_simple.pgf} -\vspace{-12pt} -\caption{Relativer Fehler des naiven Ansatzes +% \input{papers/laguerre/images/rel_error_simple.pgf} +\includegraphics{papers/laguerre/images/rel_error_simple.pdf} +%\vspace{-12pt} +\caption{Relativer Fehler des direkten Ansatzes für verschiedene reele Werte von $z$ und Grade $n$ der Laguerre-Polynome} \label{laguerre:fig:rel_error_simple} \end{figure} Bevor wir die Gauss-Laguerre-Quadratur anwenden, -möchten wir als erstes eine Fehlerabschätzung durchführen. +möchten wir als ersten Schritt eine Fehlerabschätzung durchführen. Für den Fehlerterm \eqref{laguerre:lag_error} wird die $2n$-te Ableitung der zu integrierenden Funktion $f(\xi)$ benötigt. Für das Integral der Gamma-Funktion ergibt sich also @@ -130,6 +131,7 @@ Für das Integral der Gamma-Funktion ergibt sich also \\ & = (z - 2n)_{2n} \xi^{z - 2n - 1} +. \end{align*} Eingesetzt im Fehlerterm \eqref{laguerre:lag_error} resultiert \begin{align} @@ -147,17 +149,19 @@ und für $z > 2n - 1$ bei $\xi \rightarrow \infty$ divergiert. Nur für den unwahrscheinlichen Fall $ z = 2n - 1$ wäre eine Fehlerabschätzung plausibel. -Wenden wir nun also naiv die Gauss-Laguerre-Quadratur auf die Gammafunktion an. +Wenden wir nun also direkt die Gauss-Laguerre-Quadratur auf die Gamma-Funktion +an. Dazu benötigen wir die Gewichte nach \eqref{laguerre:quadratur_gewichte} und als Stützstellen die Nullstellen des Laguerre-Polynomes $L_n$. Evaluieren wir den relativen Fehler unserer Approximation zeigt sich ein Bild wie in Abbildung~\ref{laguerre:fig:rel_error_simple}. Man kann sehen, -wie der relative Fehler Nullstellen aufweist für ganzzahlige $z < 2n$, +wie der relative Fehler Nullstellen aufweist für ganzzahlige $z \leq 2n$, was laut der Theorie der Gauss-Quadratur auch zu erwarten ist, denn die Approximation via Gauss-Quadratur -ist exakt für zu integrierende Polynome mit Grad $< 2n-1$. +ist exakt für zu integrierende Polynome mit Grad $\leq 2n-1$ +und von $z$ auch noch $1$ abgezogen wird im Exponenten. Es ist ersichtlich, dass sich für den Polynomgrad $n$ ein Interval gibt, in dem der relative Fehler minimal ist. @@ -168,9 +172,10 @@ könnten wir die Reflektionsformel der Gamma-Funktion ausnutzen. \begin{figure} \centering -\input{papers/laguerre/images/rel_error_mirror.pgf} -\vspace{-12pt} -\caption{Relativer Fehler des naiven Ansatz mit Spiegelung negativer Realwerte +% \input{papers/laguerre/images/rel_error_mirror.pgf} +\includegraphics{papers/laguerre/images/rel_error_mirror.pdf} +%\vspace{-12pt} +\caption{Relativer Fehler des Ansatzes mit Spiegelung negativer Realwerte für verschiedene reele Werte von $z$ und Grade $n$ der Laguerre-Polynome} \label{laguerre:fig:rel_error_mirror} \end{figure} @@ -202,8 +207,9 @@ dadurch geeignete Gegenmassnahmen zu entwickeln. % und Abbildung~\ref{laguerre:fig:integrand_exp} grafisch dargestellt werden. \begin{figure} \centering -\input{papers/laguerre/images/integrand.pgf} -\vspace{-12pt} +% \input{papers/laguerre/images/integrand.pgf} +\includegraphics{papers/laguerre/images/integrand.pdf} +%\vspace{-12pt} \caption{Integrand $x^z$ mit unterschiedlichen Werten für $z$} \label{laguerre:fig:integrand} \end{figure} @@ -211,7 +217,7 @@ dadurch geeignete Gegenmassnahmen zu entwickeln. In Abbildung~\ref{laguerre:fig:integrand} ist der Integrand $x^z$ für unterschiedliche Werte von $z$ dargestellt. Dies entspricht der zu integrierenden Funktion $f(x)$ -der Gauss-Laguerre-Quadratur für die Gamma-Funktion- +der Gauss-Laguerre-Quadratur für die Gamma-Funktion. Man erkennt, dass für kleine $z$ sich ein singulärer Integrand ergibt und auch für grosse $z$ wächst der Integrand sehr schnell an. @@ -223,8 +229,9 @@ dass kleine Exponenten um $0$ genauere Resultate liefern sollten. \begin{figure} \centering -\input{papers/laguerre/images/integrand_exp.pgf} -\vspace{-12pt} +% \input{papers/laguerre/images/integrand_exp.pgf} +\includegraphics{papers/laguerre/images/integrand_exp.pdf} +%\vspace{-12pt} \caption{Integrand $x^z e^{-x}$ mit unterschiedlichen Werten für $z$} \label{laguerre:fig:integrand_exp} \end{figure} @@ -246,9 +253,9 @@ Damit formulieren wir die Vermutung, dass $a(n)$, welches das Intervall $[a(n), a(n) + 1]$ definiert, in dem der relative Fehler minimal ist, -grösser als $0$ ist. +grösser als $0$ und kleiner als $2n-1$ ist. -\subsubsection{Finden der optimalen Berechnungsstelle} +\subsubsection{Ansatz mit Verschiebungsterm} % Mittels der Funktionalgleichung \eqref{laguerre:gamma_funktional} % kann der Wert von $\Gamma(z)$ im Interval $z \in [a,a+1]$, % in dem der relative Fehler minimal ist, @@ -287,12 +294,13 @@ s(z, m) = \begin{cases} \displaystyle -\frac{1}{(z - m)_m} & \text{wenn } m \geq 0 \\ -(z + m)_{-m} & \text{wenn } m < 0 +\frac{1}{(z)_m} & \text{wenn } m \geq 0 \\ +(z + m)_{-m} & \text{wenn } m < 0 \end{cases} . \end{align*} +\subsubsection{Finden der optimalen Berechnungsstelle} Um die optimale Stelle $z^*(n) \in \left[a(n), a(n) + 1\right]$, $z^*(n) \in \mathbb{R}$, zu finden, @@ -305,9 +313,17 @@ s(z, m) \cdot (z - 2n)_{2n} \frac{(n!)^2}{(2n)!} \xi^{z + m - 2n - 1} ,\quad \text{für } \xi \in (0, \infty) -. \label{laguerre:gamma_err_shifted} +. \end{align} + +\begin{figure} +\centering +\includegraphics{papers/laguerre/images/targets.pdf} +% %\vspace{-12pt} +\caption{$a$ in Abhängigkeit von $z$ und $n$} +\label{laguerre:fig:targets} +\end{figure} % wobei ist % mit $z^*(n) \in \mathbb{R}$ wollen wir finden, % in dem wir den Fehlerterm \eqref{laguerre:lag_error} anpassen @@ -329,21 +345,14 @@ m^* \operatorname*{argmin}_m \max_\xi R_{n,m}(\xi) . \end{align*} -Allerdings ist die Funktion $R_{n,m}(\xi)$ unbeschränkt. +Allerdings ist die Funktion $R_{n,m}(\xi)$ unbeschränkt und +hat die gleichen Probleme wie die Fehlerabschätzung des direkten Ansatzes. Dazu müssten wir $\xi$ versuchen unter Kontrolle zu bringen, was ein äussersts schwieriges Unterfangen zu sein scheint. -Da die Gauss-Quadratur aber sowieso nur wirklich Sinn macht für kleine $n$, +Da die Gauss-Quadratur aber sowieso +nur wirklich praktisch sinnvoll für kleine $n$ ist, können die Intervalle $[a(n), a(n)+1]$ empirisch gesucht werden. -\begin{figure} -\centering -% \includegraphics{papers/laguerre/images/targets.pdf} -\input{papers/laguerre/images/targets.pgf} -\vspace{-12pt} -\caption{$a$ in Abhängigkeit von $z$ und $n$} -\label{laguerre:fig:targets} -\end{figure} - Wir bestimmen nun die optimalen Verschiebungsterme empirisch für $n = 2,\ldots, 12$ im Intervall $z \in (0, 1)$, da $z$ sowieso um den Term $m$ verschoben wird, @@ -369,11 +378,20 @@ Den linearen Regressor machen wir nur abhängig von $n$ in dem wir den Mittelwert $\overline{m}$ von $m^*$ über $z$ berechnen. +\begin{figure} +\centering +% \input{papers/laguerre/images/estimates.pgf} +\includegraphics{papers/laguerre/images/estimates.pdf} +%\vspace{-12pt} +\caption{Schätzung Mittelwert von $m$ und Fehler} +\label{laguerre:fig:schaetzung} +\end{figure} + In Abbildung~\ref{laguerre:fig:schaetzung} sind die Resultate der linearen Regression aufgezeigt mit $\alpha = 1.34094$ und $\beta = 0.854093$. Die lineare Beziehung ist ganz klar ersichtlich und der Fit scheint zu genügen. -Der optimalen Verschiebungsterm +Der optimalen Verschiebungsterm kann nun mit \begin{align*} m^* \approx @@ -381,61 +399,127 @@ m^* = \lceil \alpha n + \beta - z \rceil \end{align*} -kann nun mit dem linearen Regressor und $z$ gefunden werden. - -\begin{figure} -\centering -\input{papers/laguerre/images/estimates.pgf} -\vspace{-12pt} -\caption{Schätzung Mittelwert von $m$ und Fehler} -\label{laguerre:fig:schaetzung} -\end{figure} - -\subsection{Resultate} - -\subsubsection{Relativer Fehler} +% kann nun mit dem linearen Regressor und $z$ +gefunden werden. +\subsubsection{Evaluation des Schätzers} +In einem ersten Schritt möchten wir analysieren, +wie gut die Abschätzung des optimalen Verschiebungsterms ist. +Dazu bestimmen wir den relativen Fehler für verschiedene Verschiebungsterme $m$ +rund um $m^*$ bei gegebenem Polynomgrad $n = 8$ für $z \in (0, 1)$. +Abbildung~\ref{laguerre:fig:rel_error_shifted} sind die relativen Fehler +der Approximation dargestellt. +Man kann deutlich sehen, +dass der relative Fehler anwächst, +je weiter der Verschiebungsterm vom idealen Wert abweicht. +Zudem scheint der Schätzer den optimalen Verschiebungsterm gut zu bestimmen, +da der Schätzer zuerst der grünen Linie folgt und +dann beim Übergang auf die orange Linie wechselt. \begin{figure} \centering -\input{papers/laguerre/images/rel_error_shifted.pgf} -\vspace{-12pt} +% \input{papers/laguerre/images/rel_error_shifted.pgf} +\includegraphics{papers/laguerre/images/rel_error_shifted.pdf} +%\vspace{-12pt} \caption{Relativer Fehler des Ansatzes mit Verschiebungsterm für verschiedene reele Werte von $z$ und Verschiebungsterme $m$. Das verwendete Laguerre-Polynom besitzt den Grad $n = 8$. $m^*$ bezeichnet hier den optimalen Verschiebungsterm} \label{laguerre:fig:rel_error_shifted} \end{figure} - + +\subsubsection{Resultate} +Das Verfahren scheint für den Grad $n=8$ und $z \in (0,1)$ gut zu funktioneren. +Es stellt sich nun die Frage, +wie der relative Fehler sich für verschiedene $z$ und $n$ verhält. +In Abbildung~\ref{laguerre:fig:rel_error_range} sind die relativen Fehler für +unterschiedliche $n$ dargestellt. +Der relative Fehler scheint immer noch Nullstellen aufzuweisen, +bei für ganzzahlige $z$. +Durch das Verschieben ergibt sich jetzt aber, +wie zu erwarten war, +ein periodischer relativer Fehler mit einer Periodendauer von $1$. +Zudem lässt sich erkennen, +dass der Fehler abhängig von der Ordnung $n$ +des verwendeten Laguerre-Polynoms ist. +Wenn der Grad $n$ um $1$ erhöht wird, +verbessert sich die Genauigkeit des Resultats um etwa eine signifikante Stelle. + +In Abbildung~\ref{laguerre:fig:rel_error_complex} +ist der Betrag des relativen Fehlers in der komplexen Ebene dargestellt. +Je stärker der Imaginäranteil von $z$ von $0$ abweicht, +umso schlechter wird die Genauigkeit der Approximation. +Das erstaunt nicht weiter, +da die Gauss-Quadratur eigentlich nur für reelle Zahlen definiert ist. +Wenn der Imaginäranteil von $z$ ungefähr $0$ ist, +lässt sich das gleiche Bild beobachten wie in +Abbildung~\ref{laguerre:fig:rel_error_range}. + \begin{figure} \centering -\input{papers/laguerre/images/rel_error_range.pgf} -\vspace{-12pt} +% \input{papers/laguerre/images/rel_error_range.pgf} +\includegraphics{papers/laguerre/images/rel_error_range.pdf} +%\vspace{-12pt} \caption{Relativer Fehler des Ansatzes mit optimalen Verschiebungsterm -für verschiedene reele Werte von $z$ und Grade $n$ der Laguerre-Polynome} +für verschiedene reele Werte von $z$ und Laguerre-Polynome vom Grad $n$} \label{laguerre:fig:rel_error_range} \end{figure} -\subsubsection{Vergleich mit Lanczos-Methode} -{\color{red} -$ $\newline -$n = 7$:\newline -Lanczos Polynomgrad auf 13 Stellen.\newline -Unsere Methode auf 7 Stellen -} - -% 2. Die Fehlerabschätzung ist problematisch, -% weil die Funktion R_n(\xi) unbeschränkt ist. -% Daher kann man nicht einfach nach dem Maximum von R_n(\xi) suchen. -% Man muss zunächst irgendwie das \xi unter Kontrolle bringen. -% Das scheint mir äusserst schwierig zu sein. +\begin{figure} +\centering +\includegraphics{papers/laguerre/images/rel_error_complex.pdf} +%\vspace{-12pt} +\caption{Absolutwert des relativen Fehlers in der komplexen Ebene} +\label{laguerre:fig:rel_error_complex} +\end{figure} -% Ich möchte daher folgendes anregen: -% Im Sinne der Formulierung des Problems, -% wie im Punkt 1 oben könnten Sie für verschiedene n -% nach den optimalen Intervallen [a(n),a(n)+1] suchen, -% und versuchen, einen empirischen Zusammenhang (Faustregel) -% zwischen n und a(n) zu formulieren. -% Das ist etwa gleich gut, -% da ja der Witz der Gauss-Integration ist, -% dass man eben nur sehr kleine n überhaupt in Betracht zieht, -% d.h. man braucht keine exakte Gesetzmässigkeit für a(n). +\subsubsection{Vergleich mit Lanczos-Methode} +Nun stellt sich die Frage, +wie das in diesem Abschnitt beschriebene Approximationsverfahren +der Gamma-Funktion sich gegenüber den üblichen Approximationsverfahren schlägt. +Eine häufig verwendete Methode ist die Lanczos-Approximation, +welche gegeben ist durch +\begin{align} +\Gamma(z + 1) +\approx +\sqrt{2\pi} \left( z + \sigma + \frac{1}{2} \right)^{z + 1/2} +e^{-(z + \sigma + 1/2)} \sum_{k=0}^n g_k H_k(z) +, +\end{align} +wobei +\begin{align*} +g_k = \frac{e^\sigma \varepsilon_k (-1)^k}{\sqrt{2\pi}} +\sum_{r=0}^k (-1)^r \, \binom{k}{r} \, (k)_r +\left( \frac{e}{r + \sigma + \frac{1}{2}}\right)^{r + 1/2} +, +\end{align*} +\begin{align*} +\varepsilon_k += +\begin{cases} +1 & \text{für } k = 0 \\ +2 & \text{sonst} +\end{cases} +\quad \text{und}\quad +H_k(z) += +\frac{(-1)^k (-z)_k}{(z+1)_k} +\end{align*} +mit $H_0 = 1$ und $\sum_0^n g_k = 1$ (siehe \cite{laguerre:lanczos}). +Diese Methode wurde zum Beispiel in +{\em GNU Scientific Library}, {\em Boost}, {\em CPython} und +{\em musl} implementiert. +Diese Methode erreicht für $n = 7$ typischerweise Genauigkeit von $13$ +korrekten, signifikanten Stellen für reele Argumente. +Zum Vergleich: die vorgestellte Methode erreicht für $n = 7$ +eine minimale Genauigkeit von $6$-$7$ korrekten, signifikanten Stellen +für reele Argumente. +Das Resultat ist etwas enttäuschend, +aber nicht unerwartet, +da die Lanczos-Methode spezifisch auf dieses Problem zugeschnitten ist und +unsere Methode eine erweiterte allgemeine Methode ist. +Was die Komplexität der Berechnungen im Betrieb angeht, +ist die Gauss-Laguerre-Quadratur wesentlich ressourcensparender, +weil sie nur aus $n$ Funktionasevaluationen, +wenigen Multiplikationen und Additionen besteht. +Also könnte diese Methode z.B. Anwendung in Systemen mit wenig Rechenleistung +und/oder knappen Energieressourcen finden. \ No newline at end of file diff --git a/buch/papers/laguerre/images/estimates.pdf b/buch/papers/laguerre/images/estimates.pdf index c93a4f0..bd995de 100644 Binary files a/buch/papers/laguerre/images/estimates.pdf and b/buch/papers/laguerre/images/estimates.pdf differ diff --git a/buch/papers/laguerre/images/gammaplot.pdf b/buch/papers/laguerre/images/gammaplot.pdf index b65cf1b..7c195f2 100644 Binary files a/buch/papers/laguerre/images/gammaplot.pdf and b/buch/papers/laguerre/images/gammaplot.pdf differ diff --git a/buch/papers/laguerre/images/integrand.pdf b/buch/papers/laguerre/images/integrand.pdf index 676ac98..76be412 100644 Binary files a/buch/papers/laguerre/images/integrand.pdf and b/buch/papers/laguerre/images/integrand.pdf differ diff --git a/buch/papers/laguerre/images/integrand_exp.pdf b/buch/papers/laguerre/images/integrand_exp.pdf index 5e021d5..5fe7a7b 100644 Binary files a/buch/papers/laguerre/images/integrand_exp.pdf and b/buch/papers/laguerre/images/integrand_exp.pdf differ diff --git a/buch/papers/laguerre/images/laguerre_poly.pdf b/buch/papers/laguerre/images/laguerre_poly.pdf index d74f652..21278f5 100644 Binary files a/buch/papers/laguerre/images/laguerre_poly.pdf and b/buch/papers/laguerre/images/laguerre_poly.pdf differ diff --git a/buch/papers/laguerre/images/rel_error_complex.pdf b/buch/papers/laguerre/images/rel_error_complex.pdf index d23ebd1..c7bb37a 100644 Binary files a/buch/papers/laguerre/images/rel_error_complex.pdf and b/buch/papers/laguerre/images/rel_error_complex.pdf differ diff --git a/buch/papers/laguerre/images/rel_error_mirror.pdf b/buch/papers/laguerre/images/rel_error_mirror.pdf index e51dd83..8a27d41 100644 Binary files a/buch/papers/laguerre/images/rel_error_mirror.pdf and b/buch/papers/laguerre/images/rel_error_mirror.pdf differ diff --git a/buch/papers/laguerre/images/rel_error_range.pdf b/buch/papers/laguerre/images/rel_error_range.pdf index fca4019..bb8a2d7 100644 Binary files a/buch/papers/laguerre/images/rel_error_range.pdf and b/buch/papers/laguerre/images/rel_error_range.pdf differ diff --git a/buch/papers/laguerre/images/rel_error_shifted.pdf b/buch/papers/laguerre/images/rel_error_shifted.pdf index d0c2ae0..b7e72dc 100644 Binary files a/buch/papers/laguerre/images/rel_error_shifted.pdf and b/buch/papers/laguerre/images/rel_error_shifted.pdf differ diff --git a/buch/papers/laguerre/images/rel_error_simple.pdf b/buch/papers/laguerre/images/rel_error_simple.pdf index 24e11b6..3212e42 100644 Binary files a/buch/papers/laguerre/images/rel_error_simple.pdf and b/buch/papers/laguerre/images/rel_error_simple.pdf differ diff --git a/buch/papers/laguerre/images/targets.pdf b/buch/papers/laguerre/images/targets.pdf index e1ec07c..9514a6d 100644 Binary files a/buch/papers/laguerre/images/targets.pdf and b/buch/papers/laguerre/images/targets.pdf differ diff --git a/buch/papers/laguerre/main.tex b/buch/papers/laguerre/main.tex index f4263de..d69fbed 100644 --- a/buch/papers/laguerre/main.tex +++ b/buch/papers/laguerre/main.tex @@ -13,7 +13,7 @@ benannt nach Edmond Laguerre (1834 - 1886), sind Lösungen der ebenfalls nach Laguerre benannten Differentialgleichung. Laguerre entdeckte diese Polynome als er Approximationsmethoden für das Integral $\int_0^\infty \exp(-x) / x \, dx$ suchte. -Darum möchten wir in diesem Kapitel uns, +Darum möchten wir uns in diesem Kapitel, ganz im Sinne des Entdeckers, den Laguerre-Polynomen für Approximationen von Integralen mit exponentiell-abfallenden Funktionen widmen. diff --git a/buch/papers/laguerre/presentation/sections/gamma_approx.tex b/buch/papers/laguerre/presentation/sections/gamma_approx.tex index 3d32aae..ecd02ab 100644 --- a/buch/papers/laguerre/presentation/sections/gamma_approx.tex +++ b/buch/papers/laguerre/presentation/sections/gamma_approx.tex @@ -49,7 +49,8 @@ R_n(\xi) \begin{figure}[h] \centering % \scalebox{0.91}{\input{../images/rel_error_simple.pgf}} -\resizebox{!}{0.72\textheight}{\input{../images/rel_error_simple.pgf}} +% \resizebox{!}{0.72\textheight}{\input{../images/rel_error_simple.pgf}} +\includegraphics[width=0.77\textwidth]{../images/rel_error_simple.pdf} \caption{Relativer Fehler des einfachen Ansatzes für verschiedene reele Werte von $z$ und Grade $n$ der Laguerre-Polynome} \end{figure} @@ -81,7 +82,8 @@ von $z$ und Grade $n$ der Laguerre-Polynome} \begin{frame}{$f(x) = x^z$} \begin{figure}[h] \centering -\scalebox{0.91}{\input{../images/integrand.pgf}} +% \scalebox{0.91}{\input{../images/integrand.pgf}} +\includegraphics[width=0.8\textwidth]{../images/integrand.pdf} % \caption{Integrand $x^z$ mit unterschiedlichen Werten für $z$} \end{figure} \end{frame} @@ -89,7 +91,8 @@ von $z$ und Grade $n$ der Laguerre-Polynome} \begin{frame}{Integrand $x^z e^{-x}$} \begin{figure}[h] \centering -\scalebox{0.91}{\input{../images/integrand_exp.pgf}} +% \scalebox{0.91}{\input{../images/integrand_exp.pgf}} +\includegraphics[width=0.8\textwidth]{../images/integrand_exp.pdf} % \caption{Integrand $x^z$ mit unterschiedlichen Werten für $z$} \end{figure} \end{frame} @@ -144,15 +147,16 @@ da Gauss-Quadratur nur für kleine $n$ praktischen Nutzen hat} \begin{frame}{Schätzen von $m^*$} \begin{columns} -\begin{column}{0.6\textwidth} +\begin{column}{0.65\textwidth} \begin{figure} \centering -\vspace{-24pt} -\scalebox{0.7}{\input{../images/estimates.pgf}} +\vspace{-12pt} +% \scalebox{0.7}{\input{../images/estimates.pgf}} +\includegraphics[width=1.0\textwidth]{../images/estimates.pdf} % \caption{Integrand $x^z$ mit unterschiedlichen Werten für $z$} \end{figure} \end{column} -\begin{column}{0.39\textwidth} +\begin{column}{0.34\textwidth} \begin{align*} \hat{m} &= @@ -173,7 +177,8 @@ m^* \begin{frame}{} \begin{figure}[h] \centering -\scalebox{0.6}{\input{../images/rel_error_shifted.pgf}} +% \scalebox{0.6}{\input{../images/rel_error_shifted.pgf}} +\includegraphics{../images/rel_error_shifted.pdf} \caption{Relativer Fehler mit $n=8$, unterschiedlichen Verschiebungstermen $m$ und $z\in(0, 1)$} \end{figure} \end{frame} @@ -181,7 +186,8 @@ m^* \begin{frame}{} \begin{figure}[h] \centering -\scalebox{0.6}{\input{../images/rel_error_range.pgf}} +% \scalebox{0.6}{\input{../images/rel_error_range.pgf}} +\includegraphics{../images/rel_error_range.pdf} \caption{Relativer Fehler mit $n=8$, Verschiebungsterm $m^*$ und $z\in(-5, 5)$} \end{figure} \end{frame} diff --git a/buch/papers/laguerre/presentation/sections/laguerre.tex b/buch/papers/laguerre/presentation/sections/laguerre.tex index ed29387..f99214e 100644 --- a/buch/papers/laguerre/presentation/sections/laguerre.tex +++ b/buch/papers/laguerre/presentation/sections/laguerre.tex @@ -55,7 +55,8 @@ L_n(x) \begin{frame} \begin{figure}[h] \centering -\resizebox{0.74\textwidth}{!}{\input{../images/laguerre_poly.pgf}} +% \resizebox{0.74\textwidth}{!}{\input{../images/laguerre_poly.pgf}} +\includegraphics[width=0.7\textwidth]{../images/laguerre_poly.pdf} \caption{Laguerre-Polynome vom Grad $0$ bis $7$} \end{figure} \end{frame} diff --git a/buch/papers/laguerre/quadratur.tex b/buch/papers/laguerre/quadratur.tex index 7cbae48..4ca6913 100644 --- a/buch/papers/laguerre/quadratur.tex +++ b/buch/papers/laguerre/quadratur.tex @@ -48,13 +48,13 @@ darum müssen wir sie mit einer Funktion multiplizieren, die schneller als jedes Polynom gegen $0$ geht, damit das Integral immer noch konvergiert. Die Laguerre-Polynome $L_n$ bieten hier Abhilfe, -da ihre Gewichtsfunktion $e^{-x}$ schneller +da ihre Gewichtsfunktion $w(x) = e^{-x}$ schneller gegen $0$ konvergiert als jedes Polynom. % 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:gaussquadratur} lässt sich wie folgt +Die Gleichung~\eqref{laguerre:gaussquadratur} lässt sich wie folgt umformulieren: \begin{align} \int_{0}^{\infty} f(x) e^{-x} dx @@ -81,7 +81,7 @@ l_i(x_j) % . \end{align*} die Lagrangschen Interpolationspolynome. -Laut \cite{hildebrand2013introduction} können die Gewicht mit +Laut \cite{laguerre:hildebrand2013introduction} können die Gewichte mit \begin{align*} A_i & = @@ -97,7 +97,7 @@ des orthogonalen Polynoms $\phi_n(x)$, $\forall i =0,\ldots,n$ und \end{align*} dem Normalisierungsfaktor. Wir setzen nun $\phi_n(x) = L_n(x)$ und -nutzen den Vorzeichenwechsel der Laguerrekoeffizienten aus, +nutzen den Vorzeichenwechsel der Laguerre-Koeffizienten aus, damit erhalten wir \begin{align*} A_i @@ -135,7 +135,7 @@ n L_n(x) - n L_{n-1}(x) &= (x - n - 1) L_n(x) + (n + 1) L_{n+1}(x) \end{align*} umgeformt werden und da $x_i$ die Nullstellen von $L_n(x)$ sind, -folgt +vereinfacht sich der Term zu \begin{align*} x_i L'_n(x_i) &= @@ -145,7 +145,7 @@ x_i L'_n(x_i) (n + 1) L_{n+1}(x_i) . \end{align*} -Setzen wir das nun in \eqref{laguerre:gewichte_lag_temp} ein ergibt sicht +Setzen wir das nun in \eqref{laguerre:gewichte_lag_temp} ein ergibt sich \begin{align} \nonumber A_i @@ -168,7 +168,7 @@ Der Fehlerterm $R_n$ folgt direkt aus der Approximation = \sum_{i=1}^n f(x_i) A_i + R_n \end{align*} -und \cite{abramowitz+stegun} gibt ihn als +und \cite{laguerre:abramowitz+stegun} gibt ihn als \begin{align} R_n & = diff --git a/buch/papers/laguerre/references.bib b/buch/papers/laguerre/references.bib index 2371922..d21009b 100644 --- a/buch/papers/laguerre/references.bib +++ b/buch/papers/laguerre/references.bib @@ -3,19 +3,17 @@ % % (c) 2020 Autor, Hochschule Rapperswil % - -@book{hildebrand2013introduction, +@book{laguerre:hildebrand2013introduction, title={Introduction to Numerical Analysis: Second Edition}, author={Hildebrand, F.B.}, isbn={9780486318554}, series={Dover Books on Mathematics}, - url={https://books.google.ch/books?id=ic2jAQAAQBAJ}, year={2013}, publisher={Dover Publications}, pages = {389} } -@book{abramowitz+stegun, +@book{laguerre:abramowitz+stegun, added-at = {2008-06-25T06:25:58.000+0200}, address = {New York}, author = {Abramowitz, Milton and Stegun, Irene A.}, @@ -32,11 +30,21 @@ year = 1972 } -@article{Cassity1965AbcissasCA, +@article{laguerre:Cassity1965AbcissasCA, title={Abcissas, coefficients, and error term for the generalized Gauss-Laguerre quadrature formula using the zero ordinate}, author={C. Ronald Cassity}, journal={Mathematics of Computation}, year={1965}, volume={19}, pages={287-296} +} + +@online{laguerre:lanczos, + title = {Lanczos Approximation}, + author={Eric W. Weisstein}, + url = {https://mathworld.wolfram.com/LanczosApproximation.html}, + date = {2022-07-18}, + year = {2022}, + month = {7}, + day = {18} } \ No newline at end of file diff --git a/buch/papers/laguerre/scripts/gamma_approx.py b/buch/papers/laguerre/scripts/gamma_approx.py index 9f9dae7..5b09e59 100644 --- a/buch/papers/laguerre/scripts/gamma_approx.py +++ b/buch/papers/laguerre/scripts/gamma_approx.py @@ -7,6 +7,7 @@ EPSILON = 1e-7 root = str(Path(__file__).parent) img_path = f"{root}/../images" fontsize = "medium" +cmap = "plasma" def _prep_zeros_and_weights(x, w, n): diff --git a/buch/papers/laguerre/scripts/rel_error_complex.py b/buch/papers/laguerre/scripts/rel_error_complex.py index 5be79be..4a714fa 100644 --- a/buch/papers/laguerre/scripts/rel_error_complex.py +++ b/buch/papers/laguerre/scripts/rel_error_complex.py @@ -24,9 +24,9 @@ if __name__ == "__main__": lag = ga.eval_laguerre_gamma(input, n=8, func="optimal_shifted").reshape(mesh.shape) rel_error = np.abs(ga.calc_rel_error(lanczos, lag)) - fig, ax = plt.subplots(clear=True, constrained_layout=True, figsize=(4, 2.4)) + fig, ax = plt.subplots(clear=True, constrained_layout=True, figsize=(3.5, 2.1)) _c = ax.pcolormesh( - x, y, rel_error, shading="gouraud", cmap="inferno", norm=mpl.colors.LogNorm() + x, y, rel_error, shading="gouraud", cmap=ga.cmap, norm=mpl.colors.LogNorm() ) cbr = fig.colorbar(_c, ax=ax) cbr.minorticks_off() diff --git a/buch/papers/laguerre/scripts/rel_error_range.py b/buch/papers/laguerre/scripts/rel_error_range.py index 43b5450..ece3b6d 100644 --- a/buch/papers/laguerre/scripts/rel_error_range.py +++ b/buch/papers/laguerre/scripts/rel_error_range.py @@ -21,7 +21,7 @@ if __name__ == "__main__": x = np.linspace(xmin + ga.EPSILON, xmax - ga.EPSILON, N) gamma = scipy.special.gamma(x) - fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(5, 2.5)) + fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(5, 2)) for n in ns: gamma_lag = ga.eval_laguerre_gamma(x, n=n, func="optimal_shifted") rel_err = ga.calc_rel_error(gamma, gamma_lag) diff --git a/buch/papers/laguerre/scripts/rel_error_shifted.py b/buch/papers/laguerre/scripts/rel_error_shifted.py index dc9d177..f53c89b 100644 --- a/buch/papers/laguerre/scripts/rel_error_shifted.py +++ b/buch/papers/laguerre/scripts/rel_error_shifted.py @@ -20,7 +20,7 @@ if __name__ == "__main__": x = np.linspace(step, 1 - step, N + 1) targets = np.arange(10, 14) gamma = scipy.special.gamma(x) - fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(5, 2.5)) + fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(5, 2.1)) for target in targets: gamma_lag = ga.eval_laguerre_gamma(x, target=target, n=n, func="shifted") rel_error = np.abs(ga.calc_rel_error(gamma, gamma_lag)) diff --git a/buch/papers/laguerre/scripts/targets.py b/buch/papers/laguerre/scripts/targets.py index 206b3a1..3bc7f52 100644 --- a/buch/papers/laguerre/scripts/targets.py +++ b/buch/papers/laguerre/scripts/targets.py @@ -42,8 +42,8 @@ if __name__ == "__main__": bests = find_best_loc(N, ns=ns) - fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(4, 2.4)) - v = ax.imshow(bests, cmap="inferno", aspect="auto", interpolation="nearest") + fig, ax = plt.subplots(num=1, clear=True, constrained_layout=True, figsize=(3.5, 2.1)) + v = ax.imshow(bests, cmap=ga.cmap, aspect="auto", interpolation="nearest") plt.colorbar(v, ax=ax, label=r"$m^*$") ticks = np.arange(0, N + 1, N // 5) ax.set_xlim(0, 1) -- cgit v1.2.1