diff options
author | Fabian <@> | 2022-08-16 18:25:31 +0200 |
---|---|---|
committer | Fabian <@> | 2022-08-16 18:25:31 +0200 |
commit | 10a72bf8d66de28f3f1b5598c37c32d29a306893 (patch) | |
tree | 78e9cf1b795544413f1513e1ec9570d691167305 /buch | |
parent | Merge branch 'master' into master (diff) | |
download | SeminarSpezielleFunktionen-10a72bf8d66de28f3f1b5598c37c32d29a306893.tar.gz SeminarSpezielleFunktionen-10a72bf8d66de28f3f1b5598c37c32d29a306893.zip |
3. Ueberarbeitung, Verbesserungen
Diffstat (limited to 'buch')
-rw-r--r-- | buch/papers/0f1/teil0.tex | 4 | ||||
-rw-r--r-- | buch/papers/0f1/teil1.tex | 12 | ||||
-rw-r--r-- | buch/papers/0f1/teil2.tex | 20 | ||||
-rw-r--r-- | buch/papers/0f1/teil3.tex | 12 |
4 files changed, 25 insertions, 23 deletions
diff --git a/buch/papers/0f1/teil0.tex b/buch/papers/0f1/teil0.tex index 9aca368..335cf92 100644 --- a/buch/papers/0f1/teil0.tex +++ b/buch/papers/0f1/teil0.tex @@ -6,10 +6,10 @@ \section{Ausgangslage\label{0f1:section:ausgangslage}}
\rhead{Ausgangslage}
Die hypergeometrische Funktion $\mathstrut_0F_1$ wird in vielen Funktionen als Basisfunktion benutzt,
-zum Beispiel um die Airy Funktion zu berechnen.
+zum Beispiel um die Airy-Funktion zu berechnen.
In der GNU Scientific Library \cite{0f1:library-gsl}
ist die Funktion $\mathstrut_0F_1$ vorhanden.
-Allerdings wirft die Funktion bei negativen Übergabenwerten wie zum Beispiel \verb+gsl_sf_hyperg_0F1(1, -1)+ eine Exception.
+Allerdings wirft die Funktion bei negativen Übergabewerten wie zum Beispiel \verb+gsl_sf_hyperg_0F1(1, -1)+ eine Exception.
Bei genauerer Untersuchung hat sich gezeigt, dass die Funktion je nach Betriebssystem funktioniert oder eben nicht.
So kann die Funktion unter Windows fehlerfrei aufgerufen werden, beim Mac OS und Linux sind negative Übergabeparameter im Moment nicht möglich.
Ziel dieser Arbeit war es zu evaluieren, ob es mit einfachen mathematischen Operationen möglich ist, die hypergeometrische Funktion $\mathstrut_0F_1$ zu implementieren.
diff --git a/buch/papers/0f1/teil1.tex b/buch/papers/0f1/teil1.tex index c0f857d..8d00f95 100644 --- a/buch/papers/0f1/teil1.tex +++ b/buch/papers/0f1/teil1.tex @@ -6,8 +6,7 @@ \section{Mathematischer Hintergrund
\label{0f1:section:mathHintergrund}}
\rhead{Mathematischer Hintergrund}
-Basierend auf den Herleitungen des Abschnittes \ref{buch:rekursion:section:hypergeometrische-funktion}, werden im nachfolgenden Abschnitt nochmals die Resultate
-beschrieben.
+Basierend auf den Herleitungen des Abschnittes \ref{buch:rekursion:section:hypergeometrische-funktion} werden im nachfolgenden Abschnitt nochmals die Resultate beschrieben.
\subsection{Hypergeometrische Funktion
\label{0f1:subsection:hypergeometrisch}}
@@ -59,7 +58,7 @@ Angewendet auf die Funktion $\mathstrut_pF_q$ ergibt sich für $\mathstrut_0F_1$ -\subsection{Airy Funktion
+\subsection{Airy-Funktion
\label{0f1:subsection:airy}}
Die Funktion $\operatorname{Ai}(x)$ und die verwandte Funktion $\operatorname{Bi}(x)$ werden als Airy-Funktion bezeichnet. Sie werden zur Lösung verschiedener physikalischer Probleme benutzt, wie zum Beispiel zur Lösung der Schrödinger-Gleichung \cite{0f1:wiki-airyFunktion}.
@@ -70,8 +69,8 @@ Die Funktion $\operatorname{Ai}(x)$ und die verwandte Funktion $\operatorname{Bi heisst die {\em Airy-Differentialgleichung}.
\end{definition}
-Die Airy Funktion lässt sich auf verschiedene Arten darstellen.
-Als hypergeometrische Funktion berechnet, ergibt sich wie in Abschnitt \ref{buch:differentialgleichungen:section:hypergeometrisch} hergeleitet, folgende Lösungen der Airy-Differentialgleichung zu den Anfangsbedingungen $\operatorname{Ai}(0)=1$ und $\operatorname{Ai}'(0)=0$, sowie $\operatorname{Bi}(0)=0$ und $\operatorname{Bi}'(0)=1$.
+Die Airy-Funktion lässt sich auf verschiedene Arten darstellen.
+Als hypergeometrische Funktion berechnet, ergeben sich wie in Abschnitt \ref{buch:differentialgleichungen:section:hypergeometrisch} hergeleitet, folgende Lösungen der Airy-Differentialgleichung zu den Anfangsbedingungen $\operatorname{Ai}(0)=1$ und $\operatorname{Ai}'(0)=0$, sowie $\operatorname{Bi}(0)=0$ und $\operatorname{Bi}'(0)=1$:
\begin{align}
\label{0f1:airy:hypergeometrisch:eq}
@@ -96,7 +95,6 @@ x\cdot\mathstrut_0F_1\biggl( \qedhere
\end{align}
-Um die Stabilität der Algorithmen zu $\mathstrut_0F_1$ zu überprüfen, wird in dieser Arbeit die Airy Funktion $\operatorname{Ai}(x)$ \eqref{0f1:airy:hypergeometrisch:eq}
-benutzt.
+Um die Stabilität der Algorithmen zu $\mathstrut_0F_1$ zu überprüfen, wird in dieser Arbeit die Airy Funktion $\operatorname{Ai}(x)$ benutzt.
diff --git a/buch/papers/0f1/teil2.tex b/buch/papers/0f1/teil2.tex index ef9f55e..9b3a586 100644 --- a/buch/papers/0f1/teil2.tex +++ b/buch/papers/0f1/teil2.tex @@ -11,7 +11,7 @@ Die Unterprogramme wurde jeweils, wie die GNU Scientific Library, in C geschrieb \subsection{Potenzreihe
\label{0f1:subsection:potenzreihe}}
-Die naheliegendste Lösung ist die Programmierung der Potenzreihe \eqref{0f1:umsetzung:0f1:eq}.
+Die naheliegendste Lösung ist die Programmierung der Potenzreihe
\begin{align}
\label{0f1:umsetzung:0f1:eq}
@@ -23,7 +23,7 @@ Die naheliegendste Lösung ist die Programmierung der Potenzreihe \eqref{0f1:ums \frac{1}{c}
+\frac{z^1}{(c+1) \cdot 1}
+ \cdots
- + \frac{z^{20}}{c(c+1)(c+2)\cdots(c+19) \cdot 2.4 \cdot 10^{18}}
+ + \frac{z^{20}}{c(c+1)(c+2)\cdots(c+19) \cdot 2.4 \cdot 10^{18}}.
\end{align}
\lstinputlisting[style=C,float,caption={Potenzreihe.},label={0f1:listing:potenzreihe}, firstline=59]{papers/0f1/listings/potenzreihe.c}
@@ -31,15 +31,17 @@ Die naheliegendste Lösung ist die Programmierung der Potenzreihe \eqref{0f1:ums \subsection{Kettenbruch
\label{0f1:subsection:kettenbruch}}
Eine weitere Variante zur Berechnung von $\mathstrut_0F_1(;c;z)$ ist die Umsetzung als Kettenbruch.
-Der Vorteil einer Umsetzung als Kettenbruch gegenüber der Potenzreihe, ist die schnellere Konvergenz.
+Der Vorteil einer Umsetzung als Kettenbruch gegenüber der Potenzreihe ist die schnellere Konvergenz.
+\subsubsection{Grundlage}
Ein endlicher Kettenbruch \cite{0f1:wiki-kettenbruch} ist ein Bruch der Form
\begin{equation*}
-a_0 + \cfrac{b_1}{a_1+\cfrac{b_2}{a_2+\cfrac{b_3}{a_3+\cdots}}}
+a_0 + \cfrac{b_1}{a_1+\cfrac{b_2}{a_2+\cfrac{b_3}{a_3+\cdots}}},
\end{equation*}
in welchem $a_0, a_1,\dots,a_n$ und $b_1,b_2,\dots,b_n$ ganze Zahlen sind.
-Nimmt man nun folgenden Gleichung \cite{0f1:wiki-fraction}:
+\subsubsection{Rekursionsbeziehungen und Kettenbrüche}
+Nimmt man nun folgende Gleichung \cite{0f1:wiki-fraction}:
\begin{equation*}
f_{i-1} - f_i = k_i z f_{i+1},
\end{equation*}
@@ -48,7 +50,7 @@ Ergibt sich folgender Zusammenhang: \begin{equation*}
\cfrac{f_i}{f_{i-1}} = \cfrac{1}{1+k_iz\cfrac{f_{i+1}}{f_i}}
\end{equation*}
-
+\subsubsection{Rekursion für $\mathstrut_0F_1$}
Angewendet auf die Funktion $\mathstrut_0F_1$ bedeutet dies:
\begin{equation}
\label{0f1:math:potenzreihe:0f1:eq}
@@ -68,6 +70,7 @@ erhält man: \cfrac{\mathstrut_0F_1(;c+1;z)}{\mathstrut_0F_1(;c;z)} = \cfrac{1}{1+\cfrac{\cfrac{z}{c(c+1)}}{1+\cfrac{\cfrac{z}{(c+1)(c+2)}}{1+\cfrac{\cfrac{z}{(c+2)(c+3)}}{\cdots}}}}.
\end{equation*}
+\subsubsection{Algorithmus}
Mit weiteren Relationen ergibt sich nach Wolfram Alpha \cite{0f1:wolfram-0f1} folgender Kettenbruch
\begin{equation}
\label{0f1:math:kettenbruch:0f1:eq}
@@ -92,7 +95,7 @@ lässt sich zu \cfrac{A_k}{B_k} = \cfrac{b_{k+1}}{a_{k+1} + \cfrac{p}{q}} = \frac{b_{k+1} \cdot q}{a_{k+1} \cdot q + p}
\end{align*}
umformen.
-Dies lässt sich auch durch die folgende Matrizenschreibweise ausdrücken:
+Dies lässt sich auch durch die folgende Matrizenschreibweise
\begin{equation*}
\begin{pmatrix}
A_k\\
@@ -112,6 +115,7 @@ Dies lässt sich auch durch die folgende Matrizenschreibweise ausdrücken: \end{pmatrix}.
%\label{0f1:math:rekursionsformel:herleitung}
\end{equation*}
+ausdrücken.
Wendet man dies nun auf den Kettenbruch in der Form
\begin{equation*}
\frac{A_k}{B_k} = a_0 + \cfrac{b_1}{a_1+\cfrac{b_2}{a_2+\cfrac{\cdots}{\cdots+\cfrac{b_{k-1}}{a_{k-1} + \cfrac{b_k}{a_k}}}}}
@@ -166,7 +170,7 @@ Und schlussendlich kann der Näherungsbruch berechnet werden.
-\subsubsection{Lösung}
+\subsubsection{Algorithmus}
Die Berechnung von $A_k, B_k$ gemäss \eqref{0f1:math:matrix:ende:eq} kann man auch ohne die Matrizenschreibweise \cite{0f1:kettenbrueche} aufschreiben:
\begin{itemize}
\item Startbedingungen:
diff --git a/buch/papers/0f1/teil3.tex b/buch/papers/0f1/teil3.tex index b283b07..d7cdfe8 100644 --- a/buch/papers/0f1/teil3.tex +++ b/buch/papers/0f1/teil3.tex @@ -13,9 +13,9 @@ Ebenso kann festgestellt werden, dass je grösser der Wert $z$ in $\mathstrut_0F \subsection{Konvergenz
\label{0f1:subsection:konvergenz}}
-Es zeigt sich in Abbildung \ref{0f1:ausblick:plot:airy:konvergenz}, dass nach drei Iterationen ($k = 3$) die Funktionen genaue Resultate im Bereich von $-2$ bis $2$ liefert. Ebenso kann festgestellt werden, dass der Kettenbruch schneller konvergiert und im positiven Bereich sogar mit der Referenzfunktion $\operatorname{Ai}(x)$ übereinstimmt. Da die Rekursionsformel eine Abwandlung des Kettenbruches ist, verhalten sich die Funktionen in diesem Fall gleich.
+Es zeigt sich in Abbildung \ref{0f1:ausblick:plot:airy:konvergenz}, dass nach drei Iterationen ($k = 3$) die Funktionen genaue Resultate im Bereich von $-2$ bis $2$ liefert. Ebenso kann festgestellt werden, dass der Kettenbruch schneller konvergiert und im positiven Bereich mit der Referenzfunktion $\operatorname{Ai}(x)$ übereinstimmt. Da die Rekursionsformel eine Abwandlung des Kettenbruches ist, verhalten sich die Funktionen in diesem Fall gleich.
-Erst wenn mehrerer Iterationen gemacht werden, um die Genauigkeit zu verbessern, ist der Kettenbruch den anderen zwei Algorithmen bezüglich Konvergenz überlegen.
+Erst wenn mehrerer Iterationen gerechnet werden, um die Genauigkeit zu verbessern, ist der Kettenbruch den anderen zwei Algorithmen bezüglich Konvergenz überlegen.
Interessant ist auch, dass die Rekursionsformel nahezu gleich schnell wie die Potenzreihe konvergiert, aber sich danach, wie in Abbildung \ref{0f1:ausblick:plot:konvergenz:positiv} zu beobachten ist, einschwingt. Dieses Verhalten ist auch bei grösseren $z$ zu beobachten, allerdings ist dann die Differenz zwischen dem ersten lokalen Minimum von $k$ bis zum Abbruch kleiner.
Dieses Phänomen ist auf die Lösung der Rekursionsformel \eqref{0f1:math:matrix:ende:eq} zurück zu führen. Da im Gegensatz die ganz kleinen Werte nicht zu einer Konvergenz wie beim Kettenbruch führen, sondern sich noch eine Zeit lang durch die Multiplikation aufschwingen.
@@ -29,7 +29,7 @@ Verändert sich der Wert von $z$ in $\mathstrut_0F_1(;c;z)$ gegen grössere posi Wohingegen die Potenzreihe (Listing \ref{0f1:listing:potenzreihe}) das Problem hat, dass je mehr Terme berechnet werden, desto schneller wächst die Fakultät im Nenner. Dies führt zu einer Bereichsüberschreitung des \verb+double+ Bereiches \cite{0f1:double}, der spätesten ab $k=167$ eintritt. Schlussendlich gibt das Unterprogramm das Resultat \verb+-nan(ind)+ zurück.
Die Rekursionformel \eqref{0f1:listing:kettenbruchRekursion} liefert für sehr grosse positive Werte die genausten Ergebnisse, verglichen mit der GNU Scientific Library. Wie schon vermutet ist die Rekursionsformel, im positivem Bereich, der stabilste Algorithmus. Um die Konvergenz zu gewährleisten, muss wie in Abbildung \ref{0f1:ausblick:plot:konvergenz:positiv} dargestellt, die Iterationstiefe $k$ genug gross gewählt werden.
-Im negativem Bereich sind alle gewählten und umgesetzten Ansätze instabil. Grund dafür ist die Potenz von $z$, was zum Phänomen der Auslöschung \cite{0f1:SeminarNumerik} führt. Schön zu beobachten ist dies in der Abbildung \ref{0f1:ausblick:plot:airy:stabilitaet} mit der Airy-Funktion als Test. So sind sowohl die Potenzreihe, der Kettenbruch, als auch die Rekursionsformel bis ungefähr $\frac{-15^3}{9}$ stabil. Dies macht auch Sinn, da alle Algorithmen auf der gleichen mathematischen Grundlage basieren. Danach verhält sich allerdings die Instabilität unterschiedlich. Diese programmiertechnischen Unterschiede sind auch in Abbildung \ref{0f1:ausblick:plot:konvergenz:positiv} und \ref{0f1:ausblick:plot:konvergenz:negativ} festzustellen.
+Im negativem Bereich sind alle gewählten und umgesetzten Ansätze instabil. Grund dafür ist die Potenz von $z$, was zum Phänomen der Auslöschung \cite{0f1:SeminarNumerik} führt. Schön zu beobachten ist dies in der Abbildung \ref{0f1:ausblick:plot:airy:stabilitaet} mit der Airy-Funktion als Test. So sind nach Abbildung \ref{0f1:ausblick:plot:airy:stabilitaet} die Potenzreihe, der Kettenbruch, als auch die Rekursionsformel, bis ungefähr $\frac{-15^3}{9}$ stabil. Dies macht auch Sinn, da alle Algorithmen auf der gleichen mathematischen Grundlage basieren. Danach verhält sich allerdings die Instabilität unterschiedlich. Diese programmiertechnischen Unterschiede sind auch in Abbildung \ref{0f1:ausblick:plot:konvergenz:positiv} und \ref{0f1:ausblick:plot:konvergenz:negativ} festzustellen.
\begin{figure}
\centering
@@ -41,21 +41,21 @@ Im negativem Bereich sind alle gewählten und umgesetzten Ansätze instabil. Gru \begin{figure}
\centering
\includegraphics[width=0.8\textwidth]{papers/0f1/images/konvergenzPositiv.pdf}
- \caption{Konvergenz mit positivem z; Logarithmisch, vorzeichenlose dargestellte Differenz vom erwarteten Endresultat.
+ \caption{Konvergenz mit positivem $z$; Logarithmisch, vorzeichenlose dargestellte Differenz vom erwarteten Endresultat.
\label{0f1:ausblick:plot:konvergenz:positiv}}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=0.8\textwidth]{papers/0f1/images/konvergenzNegativ.pdf}
- \caption{Konvergenz mit negativem z; Logarithmisch, vorzeichenlose dargestellte Differenz vom erwarteten Endresultat.
+ \caption{Konvergenz mit negativem $z$; Logarithmisch, vorzeichenlose dargestellte Differenz vom erwarteten Endresultat.
\label{0f1:ausblick:plot:konvergenz:negativ}}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=1\textwidth]{papers/0f1/images/stabilitaet.pdf}
- \caption{Stabilität der 3 Algorithmen verglichen mit der Referenz Funktion $\operatorname{Ai}(x)$.
+ \caption{Stabilität der drei Algorithmen verglichen mit der Referenz Funktion $\operatorname{Ai}(x)$.
\label{0f1:ausblick:plot:airy:stabilitaet}}
\end{figure}
|