diff options
-rw-r--r-- | buch/papers/0f1/references.bib | 95 | ||||
-rw-r--r-- | buch/papers/0f1/teil0.tex | 2 | ||||
-rw-r--r-- | buch/papers/0f1/teil1.tex | 82 | ||||
-rw-r--r-- | buch/papers/0f1/teil2.tex | 155 | ||||
-rw-r--r-- | buch/papers/0f1/teil3.tex | 9 |
5 files changed, 254 insertions, 89 deletions
diff --git a/buch/papers/0f1/references.bib b/buch/papers/0f1/references.bib index fb9cd8b..ce9b8da 100644 --- a/buch/papers/0f1/references.bib +++ b/buch/papers/0f1/references.bib @@ -4,32 +4,73 @@ % (c) 2020 Autor, Hochschule Rapperswil % -@online{0f1:bibtex, - title = {BibTeX}, - url = {https://de.wikipedia.org/wiki/BibTeX}, - date = {2020-02-06}, - year = {2020}, - month = {2}, - day = {6} -} - -@book{0f1: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{0f1: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} +@online{0f1:library-gsl, + title = {GNU Scientific Library}, + url ={https://www.gnu.org/software/gsl/}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {19} } +@online{0f1:wiki-airyFunktion, + title = {Airy-Funktion}, + url ={https://de.wikipedia.org/wiki/Airy-Funktion}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {25} +} + +@online{0f1:wiki-kettenbruch, + title = {Kettenbruch}, + url ={https://de.wikipedia.org/wiki/Kettenbruch}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {25} +} + +@online{0f1:double, + title = {C - Data Types}, + url ={https://www.tutorialspoint.com/cprogramming/c_data_types.htm}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {25} +} + +@online{0f1:wolfram-0f1, + title = {Hypergeometric 0F1}, + url ={https://functions.wolfram.com/webMathematica/FunctionEvaluation.jsp?name=Hypergeometric0F1}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {25} +} + +@online{0f1:wiki-fraction, + title = {Gauss continued fraction}, + url ={https://en.wikipedia.org/wiki/Gauss%27s_continued_fraction}, + date = {2022-07-07}, + year = {2022}, + month = {7}, + day = {25} +} + +@book{0f1:SeminarNumerik, + title = {Mathematisches Seminar Numerik}, + author = {Andreas Müller et al}, + publisher = {Andreas Müller}, + year = {2022}, +} + +@article{0f1:kettenbrueche, + author = { Benjamin Bouhafs-Keller }, + title = { Kettenbrüche }, + journal = { Mathematisches Seminar Numerik }, + year = 2020, + volume = 13, + pages = {363--376}, + url = {https://github.com/AndreasFMueller/SeminarNumerik} +} diff --git a/buch/papers/0f1/teil0.tex b/buch/papers/0f1/teil0.tex index bfc265f..780d432 100644 --- a/buch/papers/0f1/teil0.tex +++ b/buch/papers/0f1/teil0.tex @@ -7,7 +7,7 @@ \rhead{Ausgangslage} Die Hypergeometrische Funktion $\mathstrut_0F_1$ wird in vielen Funktionen als Basisfunktion benutzt, zum Beispiel um die Airy Funktion zu berechnen. -In der GNU Scientific Library \cite{library-gsl} +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. Bei genauerer Untersuchung hat sich gezeigt, dass die Funktion je nach Betriebssystem funktioniert oder eben nicht. diff --git a/buch/papers/0f1/teil1.tex b/buch/papers/0f1/teil1.tex index 910e8bb..2a60737 100644 --- a/buch/papers/0f1/teil1.tex +++ b/buch/papers/0f1/teil1.tex @@ -6,16 +6,40 @@ \section{Mathematischer Hintergrund \label{0f1:section:mathHintergrund}} \rhead{Mathematischer Hintergrund} +Basierend auf den Herleitungen des vorhergehenden Kapitels \ref{buch:rekursion:section:hypergeometrische-funktion} +und dem Seminarbuch Numerik \cite{0f1:kettenbrueche}, werden im nachfolgenden Abschnitt nochmals die Resultate +beschrieben. + +\subsection{Hypergeometrische Funktion +\label{0f1:subsection:hypergeometrisch}} +Als Grundlage der umgesetzten Algorithmen dient die Hypergeometrische Funktion $\mathstrut_0F_1$. Diese ist eine Unterfunktion der allgemein definierten Funktion $\mathstrut_pF_q$. -\subsection{Hypergeometrische Funktion $\mathstrut_0F_1$ -\label{0f1:subsection:0f1}} -Wie in Kapitel \ref{buch:rekursion:section:hypergeometrische-funktion} beschrieben, -wird die Funktion $\mathstrut_0F_1$ folgendermassen definiert. \begin{definition} - \label{0f1:rekursion:hypergeometrisch:def} - Die hypergeometrische Funktion - $\mathstrut_0F_1$ ist definiert durch die Reihe - \[ + \label{0f1:math:qFp:def} + Die hypergeometrische Funktion + $\mathstrut_pF_q$ ist definiert durch die Reihe + \[ + \mathstrut_pF_q + \biggl( + \begin{matrix} + a_1,\dots,a_p\\ + b_1,\dots,b_q + \end{matrix} + ; + x + \biggr) + = + \mathstrut_pF_q(a_1,\dots,a_p;b_1,\dots,b_q;x) + = + \sum_{k=0}^\infty + \frac{(a_1)_k\cdots(a_p)_k}{(b_1)_k\cdots(b_q)_k}\frac{x^k}{k!}. + \] +\end{definition} + +Angewendet auf die Funktion $\mathstrut_pF_q$ ergibt sich für $\mathstrut_0F_1$: + +\begin{equation} + \label{0f1:math:0f1:eq} \mathstrut_0F_1 \biggl( \begin{matrix} @@ -29,26 +53,29 @@ wird die Funktion $\mathstrut_0F_1$ folgendermassen definiert. \mathstrut_0F_1(;b_1;x) = \sum_{k=0}^\infty - \frac{1}{(b_1)_k}\frac{x^k}{k!}. - \] -\end{definition} + \frac{x^k}{(b_1)_k \cdot k!}. +\end{equation} + + \subsection{Airy Funktion \label{0f1:subsection:airy}} -Wie in \ref{buch:differentialgleichungen:section:hypergeometrisch} dargestellt, ist die Airy-Differentialgleichung -folgendermassen definiert. +Die Airy-Funktion $Ai(x)$ und die verwandte Funktion $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} + \begin{definition} - y'' - xy = 0 - \label{0f1:airy:eq:differentialgleichung} + \label{0f1:airy:differentialgleichung:def} + Die Differentialgleichung + $y'' - xy = 0$ + heisst die {\em Airy-Differentialgleichung}. \cite{0f1:wiki-airyFunktion} \end{definition} -Daraus ergibt sich wie in Aufgabe~\ref{503} gefundenen Lösungen der -Airy-Differentialgleichung als hypergeometrische Funktionen. +Die Airy Funktion lässt sich auf verschiedene Arten darstellen. \cite{0f1:wiki-airyFunktion} +Als hypergeometrische Funktion berechnet, ergibt sich wie in Kapitel \ref{buch:differentialgleichungen:section:hypergeometrisch} hergeleitet, folgende Lösungen der Airy-Differentialgleichung zu den Anfangsbedingungen $A(0)=1$ und $A'(0)=0$, sowie $B(0)=0$ und $B'(0)=0$. - -\begin{align*} -y_1(x) +\begin{align} +\label{0f1:airy:hypergeometrisch:eq} +Ai(x) = \sum_{k=0}^\infty \frac{1}{(\frac23)_k} \frac{1}{k!}\biggl(\frac{x^3}{9}\biggr)^k @@ -57,7 +84,7 @@ y_1(x) \begin{matrix}\text{---}\\\frac23\end{matrix};\frac{x^3}{9} \biggr). \\ -y_2(x) +Bi(x) = \sum_{k=0}^\infty \frac{1}{(\frac43)_k} \frac{1}{k!}\biggl(\frac{x^3}{9}\biggr)^k @@ -67,14 +94,9 @@ x\cdot\mathstrut_0F_1\biggl( \frac{x^3}{9} \biggr). \qedhere -\end{align*} +\end{align} + +In diesem speziellem Fall wird die Airy Funktion $Ai(x)$ \eqref{0f1:airy:hypergeometrisch:eq} +benutzt, um die Stabilität der Algorithmen zu $\mathstrut_0F_1$ zu überprüfen. -\begin{figure} - \centering - \includegraphics{papers/0f1/images/airy.pdf} - \caption{Plot der Lösungen der Airy-Differentialgleichung $y''-xy=0$ - zu den Anfangsbedingungen $y(0)=1$ und $y'(0)=0$ in {\color{red}rot} - und $y(0)=0$ und $y'(0)=1$ in {\color{blue}blau}. - \label{0f1:airy:plot:vorgabe}} -\end{figure}
\ No newline at end of file diff --git a/buch/papers/0f1/teil2.tex b/buch/papers/0f1/teil2.tex index 07e17c0..446bc93 100644 --- a/buch/papers/0f1/teil2.tex +++ b/buch/papers/0f1/teil2.tex @@ -6,56 +6,158 @@ \section{Umsetzung \label{0f1:section:teil2}} \rhead{Umsetzung} -Zur Umsetzung wurden drei Ansätze gewählt und -Die Unterprogramme wurde jeweils, wie die GNU Scientific Library, in C geschrieben. +Zur Umsetzung wurden drei verschiedene Ansätze gewählt. Dabei wurde der Schwerpunkt auf die Funktionalität und eine gute Lesbarkeit des Codes gelegt. +Die Unterprogramme wurde jeweils, wie die GNU Scientific Library, in C geschrieben. Die Zwischenresultate wurden vom Hauptprogramm in einem CSV-File gespeichert. Anschliessen wurde mit der Matplot-Libray in Python die Resultate geplottet. \subsection{Potenzreihe \label{0f1:subsection:potenzreihe}} -Die naheliegendste Lösung ist die Programmierung der Potenzreihe. +Die naheliegendste Lösung ist die Programmierung der Potenzreihe. Allerdings ist ein Problem dieser Umsetzung \ref{0f1:listing:potenzreihe}, dass die Fakultät im Nenner schnell grosse Werte annimmt und so der Bruch gegen Null strebt. Spätesten ab $k=167$ stösst diese Umsetzung \eqref{0f1:umsetzung:0f1:eq} an ihre Grenzen, da die Fakultät von $168$ eine Bereichsüberschreitung des \textit{double} Bereiches darstellt. \cite{0f1:double} -\begin{equation} - \label{0f1:rekursion:hypergeometrisch:eq} +\begin{align} + \label{0f1:umsetzung:0f1:eq} \mathstrut_0F_1(;b;z) - = + &= \sum_{k=0}^\infty \frac{z^k}{(b)_k \cdot k!} -\end{equation} + &= + \frac{1}{b} + +\frac{z^1}{(1+b) \cdot 1} + + \cdots + + \frac{z^{20}}{(20+b) \cdot 2.4 \cdot 10^{18}} +\end{align} -\lstinputlisting[style=C,float,caption={Rekursivformel für Kettenbruch.},label={0f1:listing:potenzreihe}]{papers/0f1/listings/potenzreihe.c} +\lstinputlisting[style=C,float,caption={Potenzreihe.},label={0f1:listing:potenzreihe}]{papers/0f1/listings/potenzreihe.c} \subsection{Kettenbruch \label{0f1:subsection:kettenbruch}} Ein endlicher 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}}} +\end{equation*} +in welchem $a_0, a_1,\dots,a_n$ und $b_1,b_2,\dots,b_n$ ganze Zahlen darstellen. + +Die Kurzschreibweise für einen allgemeinen Kettenbruch ist +\begin{equation*} + a_0 + \frac{a_1|}{|b_1} + \frac{a_2|}{|b_2} + \frac{a_3|}{|b_3} + \cdots +\end{equation*} +und ist somit verknüpfbar mit der Potenzreihe. +\cite{0f1:wiki-kettenbruch} + +Angewendet auf die Funktion $\mathstrut_0F_1$ bedeutet dies: +\begin{equation*} + \mathstrut_0F_1(;b;z) = 1 + \frac{z}{a1!} + \frac{z^2}{a(a+1)2!} + \frac{z^3}{a(a+1)(a+2)3!} + \cdots +\end{equation*} +\cite{0f1:wiki-fraction} + +Nach allen Umformungen ergibt sich folgender, irregulärer Kettenbruch \eqref{0f1:math:kettenbruch:0f1:eq} \begin{equation} -a_0 + \cfrac{b_1}{a_1+\cfrac{b_2}{a_2+\cfrac{\cdots}{\cdots+\cfrac{b_{n-1}}{a_{n-1} + \cfrac{b_n}{a_n}}}}} + \label{0f1:math:kettenbruch:0f1:eq} + \mathstrut_0F_1(;b;z) = 1 + \cfrac{\cfrac{z}{b}}{1+\cfrac{-\cfrac{z}{2(1+b)}}{1+\cfrac{z}{2(1+b)}+\cfrac{-\cfrac{z}{3(2+b)}}{1+\cfrac{z}{5(4+b)} + \cdots}}}, \end{equation} -in welchem $a_0, a_1,\dots,a_n$ und $b_1,b_2,\dots,b_n$ ganze Zahlen -darstellen. +der als Code \ref{0f1:listing:kettenbruchIterativ} umgesetzt wurde. +\cite{0f1:wolfram-0f1} -{\color{red}TODO: Bessere Beschreibung mit Verknüpfung zur Potenzreihe} +\lstinputlisting[style=C,float,caption={Rekursionsformel für Kettenbruch.},label={0f1:listing:kettenbruchIterativ}]{papers/0f1/listings/kettenbruchIterativ.c} -%Gauss hat durch - -\lstinputlisting[style=C,float,caption={Rekursivformel für Kettenbruch.},label={0f1:listing:kettenbruchIterativ}]{papers/0f1/listings/kettenbruchIterativ.c} \subsection{Rekursionsformel \label{0f1:subsection:rekursionsformel}} -Wesentlich effizienter zur Berechnung eines Kettenbruches ist die Rekursionsformel. +Wesentlich stabiler zur Berechnung eines Kettenbruches ist die Rekursionsformel. Nachfolgend wird die verkürzte Herleitung vom Kettenbruch zur Rekursionsformel aufgezeigt. Eine vollständige Schritt für Schritt Herleitung ist im Seminarbuch Numerik, im Kapitel Kettenbrüche zu finden. \cite{0f1:kettenbrueche}) + +\subsubsection{Verkürzte Herleitung} +Ein Näherungsbruch in der Form +\begin{align*} + \cfrac{A_k}{B_k} = a_k + \cfrac{b_{k + 1}}{a_{k + 1} + \cfrac{p}{q}} +\end{align*} +lässt sich zu +\begin{align*} + \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: +\begin{equation*} + \begin{pmatrix} + A_k\\ + B_k + \end{pmatrix} + = \begin{pmatrix} + b_{k+1} \cdot q\\ + a_{k+1} \cdot q + p + \end{pmatrix} + =\begin{pmatrix} + 0& b_{k+1}\\ + 1& a_{k+1} + \end{pmatrix} + \begin{pmatrix} + p \\ + q + \end{pmatrix}. + %\label{0f1:math:rekursionsformel:herleitung} +\end{equation*} + +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}}}}} +\end{equation*} +an, ergibt sich folgende Matrixdarstellungen: \begin{align*} -\frac{A_n}{B_n} -= -a_0 + \cfrac{b_1}{a_1+\cfrac{b_2}{a_2+\cfrac{\cdots}{\cdots+\cfrac{b_{n-1}}{a_{n-1} + \cfrac{b_n}{a_n}}}}} + \begin{pmatrix} + A_k\\ + B_k + \end{pmatrix} + &= + \begin{pmatrix} + 1& a_0\\ + 0& 1 + \end{pmatrix} + \begin{pmatrix} + 0& b_1\\ + 1& a_1 + \end{pmatrix} + \cdots + \begin{pmatrix} + 0& b_{k-1}\\ + 1& a_{k-1} + \end{pmatrix} + \begin{pmatrix} + b_k\\ + a_k + \end{pmatrix} \end{align*} -Die Berechnung von $A_n, B_n$ kann man auch ohne die Matrizenschreibweise -aufschreiben: +Nach vollständiger Induktion ergibt sich für den Schritt $k$, die Matrix +\begin{equation} + \label{0f1:math:matrix:ende:eq} + \begin{pmatrix} + A_{k}\\ + B_{k} + \end{pmatrix} + = + \begin{pmatrix} + A_{k-2}& A_{k-1}\\ + B_{k-2}& B_{k-1} + \end{pmatrix} + \begin{pmatrix} + b_k\\ + a_k + \end{pmatrix}. +\end{equation} + +Und Schlussendlich kann der Näherungsbruch +\[ +\frac{Ak}{Bk} +\] +berechnet werden. + + +\subsubsection{Lösung} +Die Berechnung von $A_k, B_k$ \eqref{0f1:math:matrix:ende:eq} kann man auch ohne die Matrizenschreibweise aufschreiben: \cite{0f1:wiki-fraction} \begin{itemize} -\item Start: +\item Startbedingungen: \begin{align*} A_{-1} &= 0 & A_0 &= a_0 \\ B_{-1} &= 1 & B_0 &= 1 \end{align*} -$\rightarrow$ 0-te Näherung: $\displaystyle\frac{A_0}{B_0} = a_0$ \item Schritt $k\to k+1$: \[ \begin{aligned} @@ -67,9 +169,10 @@ B_{k+1} &= B_{k-1} \cdot b_k + B_k \cdot a_k \end{aligned} \] \item -Näherungsbruch $n$: \qquad$\displaystyle\frac{A_n}{B_n}$ +Näherungsbruch: \qquad$\displaystyle\frac{A_k}{B_k}$ \end{itemize} -{\color{red}TODO: Verweis Numerik} +Ein grosser Vorteil dieser Umsetzung \ref{0f1:listing:kettenbruchRekursion} ist, dass im Vergleich zum Code \ref{0f1:listing:kettenbruchIterativ} eine Division gespart werden kann und somit weniger Folgefehler entstehen können. -\lstinputlisting[style=C,float,caption={Rekursivformel für Kettenbruch.},label={0f1:listing:kettenbruchRekursion}]{papers/0f1/listings/kettenbruchRekursion.c}
\ No newline at end of file +%Code +\lstinputlisting[style=C,float,caption={Iterativ umgesetzter Kettenbruch.},label={0f1:listing:kettenbruchRekursion}]{papers/0f1/listings/kettenbruchRekursion.c}
\ No newline at end of file diff --git a/buch/papers/0f1/teil3.tex b/buch/papers/0f1/teil3.tex index 44a4600..76d6e32 100644 --- a/buch/papers/0f1/teil3.tex +++ b/buch/papers/0f1/teil3.tex @@ -10,15 +10,14 @@ Im Verlauf des Seminares hat sich gezeigt, das ein einfacher mathematischer Algorithmus zu implementieren gar nicht so einfach ist. So haben alle drei umgesetzten Ansätze Probleme mit grossen negativen x in der Funktion $\mathstrut_0F_1(;b;x)$. Ebenso wird, je grösser der Wert x wird $\mathstrut_0F_1(;b;x)$, desto mehr weichen die berechneten Resultate -von den erwarteten ab. -{\color{red}TODO cite wolfram alpha rechner} +von den Erwarteten ab. \cite{0f1:wolfram-0f1} \subsection{Auswertung \label{0f1:subsection:auswertung}} \begin{figure} \centering \includegraphics[width=0.8\textwidth]{papers/0f1/images/konvergenzAiry.pdf} - \caption{Konvergenz nach drei Iterationen, dargestellt anhand der Airy Funktion. + \caption{Konvergenz nach drei Iterationen, dargestellt anhand der Airy Funktion zu den Anfangsbedingungen $y(0)=1$ und $y'(0)=0$. \label{0f1:ausblick:plot:airy:konvergenz}} \end{figure} @@ -52,6 +51,6 @@ von den erwarteten ab. \subsection{Ausblick \label{0f1:subsection:ausblick}} - - +Eine mögliche Lösung zum Problem ist \cite{0f1:SeminarNumerik} +{\color{red} TODO beschreiben Lösung} |