diff options
Diffstat (limited to '')
75 files changed, 3791 insertions, 437 deletions
diff --git a/buch/chapters/070-orthogonalitaet/gaussquadratur.tex b/buch/chapters/070-orthogonalitaet/gaussquadratur.tex index a5af7d2..c7dfb31 100644 --- a/buch/chapters/070-orthogonalitaet/gaussquadratur.tex +++ b/buch/chapters/070-orthogonalitaet/gaussquadratur.tex @@ -20,7 +20,7 @@ Ein solches Polynom $p(x)$ hat $n+1$ Koeffizienten, die aus dem linearen Gleichungssystem der $n+1$ Gleichungen $p(x_i)=f(x_i)$ ermittelt werden können. -Das Interpolationspolynom $p(x)$ lässt sich abera uch direkt +Das Interpolationspolynom $p(x)$ lässt sich aber auch direkt angeben. Dazu konstruiert man zuerst die Polynome \[ diff --git a/buch/chapters/070-orthogonalitaet/orthogonal.tex b/buch/chapters/070-orthogonalitaet/orthogonal.tex index df04514..793b78d 100644 --- a/buch/chapters/070-orthogonalitaet/orthogonal.tex +++ b/buch/chapters/070-orthogonalitaet/orthogonal.tex @@ -641,6 +641,7 @@ H_w f\colon(a,b) \to \mathbb{R} \;\bigg|\; \int_a^b |f(x)|^2 w(x)\,dx +<\infty \biggr\}. \] Die Funktionen $f\in H_w$ haben folgende Eigenschaften diff --git a/buch/papers/0f1/images/konvergenzNegativ.pdf b/buch/papers/0f1/images/konvergenzNegativ.pdf Binary files differindex 03b2ba1..07d2a44 100644 --- a/buch/papers/0f1/images/konvergenzNegativ.pdf +++ b/buch/papers/0f1/images/konvergenzNegativ.pdf diff --git a/buch/papers/0f1/images/konvergenzPositiv.pdf b/buch/papers/0f1/images/konvergenzPositiv.pdf Binary files differindex 2e45129..8e1e7e4 100644 --- a/buch/papers/0f1/images/konvergenzPositiv.pdf +++ b/buch/papers/0f1/images/konvergenzPositiv.pdf 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..fdcb0fc 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,44 +31,64 @@ 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}
+Wenn es eine Relation analytischer Funktion $f_i(z)$ hat, dann gibt es einen Kettenbruch für das Verhältnis $\frac{f_i(z)}{f_{i-1}(z)}$ \cite{0f1:wiki-fraction}.
+Nimmt man die Gleichung
\begin{equation*}
f_{i-1} - f_i = k_i z f_{i+1},
\end{equation*}
wo $f_i$ analytische Funktionen sind und $i > 0$ ist, sowie $k_i$ konstant.
-Ergibt sich folgender Zusammenhang:
+Ergibt sich der Zusammenhang
\begin{equation*}
- \cfrac{f_i}{f_{i-1}} = \cfrac{1}{1+k_iz\cfrac{f_{i+1}}{f_i}}
+ \cfrac{f_i}{f_{i-1}} = \cfrac{1}{1+k_iz\cfrac{f_{i+1}}{f_i}}.
\end{equation*}
+Geht man einen Schritt weiter und nimmt für $g_i = \frac{f_i}{f_{i-1}}$ an, kommt man zur Formel
+\begin{equation*}
+ g_i = \cfrac{1}{1+k_izg_{i+1}}.
+\end{equation*}
+Setzt man dies nun für $g_1$ in den Bruch ein, ergibt sich
+\begin{equation*}
+ g_1 = \cfrac{f_1}{f_0} = \cfrac{1}{1+k_izg_2} = \cfrac{1}{1+\cfrac{k_1z}{1+k_2zg_3}} = \cdots
+\end{equation*}
+Repetiert man dies unendlich, erhält man einen Kettenbruch in der Form:
+\begin{equation}
+ \label{0f1:math:rekursion:eq}
+ \cfrac{f_1}{f_0} = \cfrac{1}{1+\cfrac{k_1z}{1+\cfrac{k_2z}{1+\cfrac{k_3z}{\cdots}}}}.
+\end{equation}
-Angewendet auf die Funktion $\mathstrut_0F_1$ bedeutet dies:
+\subsubsection{Rekursion für $\mathstrut_0F_1$}
+Angewendet auf die Potenzreihe
\begin{equation}
\label{0f1:math:potenzreihe:0f1:eq}
\mathstrut_0F_1(;c;z) = 1 + \frac{z}{c\cdot1!} + \frac{z^2}{c(c+1)\cdot2!} + \frac{z^3}{c(c+1)(c+2)\cdot3!} + \cdots
\end{equation}
-Durch Substitution kann bewiesen werden, dass die nachfolgende Formel eine Relation zur obigen Potenzreihe \eqref{0f1:math:potenzreihe:0f1:eq} ist:
+kann durch Substitution bewiesen werden, dass
\begin{equation*}
- \mathstrut_0F_1(;c-1;z) - \mathstrut_0F_1(;c;z) = \frac{z}{c(c-1)} \cdot \mathstrut_0F_1(;c+1;z).
+ \mathstrut_0F_1(;c-1;z) - \mathstrut_0F_1(;c;z) = \frac{z}{c(c-1)} \cdot \mathstrut_0F_1(;c+1;z)
\end{equation*}
-Wenn man für $f_i$ und $k_i$ folgende Annahme trifft:
+eine Relation dazu ist.
+Wenn man für $f_i$ und $k_i$ die Annahme
\begin{align*}
- f_i =& \mathstrut_0F_1(;c+1;z)\\
- k_i =& \frac{1}{(c+1)(c+i-1)}
+ f_i =& \mathstrut_0F_1(;c+i;z)\\
+ k_i =& \frac{1}{(c+i)(c+i-1)}
\end{align*}
-erhält man:
+trifft und in die Formel \eqref{0f1:math:rekursion:eq} einsetzt, erhält man:
\begin{equation*}
\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*}
-Mit weiteren Relationen ergibt sich nach Wolfram Alpha \cite{0f1:wolfram-0f1} folgender Kettenbruch
+\subsubsection{Algorithmus}
+Da mit obigen Formeln nur ein Verhältnis zwischen $ \frac{\mathstrut_0F_1(;c+1;z)}{\mathstrut_0F_1(;c;z)}$ berechnet wurde, braucht es weitere Relationen um $\mathstrut_0F_1(;c;z)$ zu erhalten.
+So ergeben ähnliche Relationen nach Wolfram Alpha \cite{0f1:wolfram-0f1} den Kettenbruch
\begin{equation}
\label{0f1:math:kettenbruch:0f1:eq}
\mathstrut_0F_1(;c;z) = 1 + \cfrac{\cfrac{z}{c}}{1+\cfrac{-\cfrac{z}{2(c+1)}}{1+\cfrac{z}{2(c+1)}+\cfrac{-\cfrac{z}{3(c+2)}}{1+\cfrac{z}{5(c+4)} + \cdots}}},
@@ -92,7 +112,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 Matrizenschreibweise
\begin{equation*}
\begin{pmatrix}
A_k\\
@@ -112,11 +132,12 @@ 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}}}}}
\end{equation*}
-an, ergibt sich folgende Matrixdarstellungen:
+an, ergibt sich die Matrixdarstellungen:
\begin{align*}
\begin{pmatrix}
@@ -166,7 +187,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..147668a 100644 --- a/buch/papers/0f1/teil3.tex +++ b/buch/papers/0f1/teil3.tex @@ -13,23 +13,21 @@ 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.
-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.
+Erst wenn mehrerer Iterationen gerechnet werden, ist wie in Abbildung \ref{0f1:ausblick:plot:konvergenz:positiv} dargestellt, der Kettenbruch den anderen zwei Algorithmen bezüglich Konvergenz überlegen. Bei der Rekursionsformel muss beachtet werden, dass sie zwar erst nach 35 Approximationen gänzlich konvergiert, allerdings nach 27 Iterationen sich nicht mehr gross verändert.
+
+Ist $z$ negativ, wie in Abbildung \ref{0f1:ausblick:plot:konvergenz:negativ}, führt dies aufgrund des Vorzeichens zu alternierenden Termen. So steigt bei allen Algorithmen zuerst die Differenz zum erwarteten Endwert. Erst nach genügend Iterationen sind die Terme so klein, dass sie das Endresultat nicht mehr signifikant beeinflussen. Während die Potenzreihe zusammen mit dem Kettenbruch nach 34 Approximationen konvergiert, braucht die Rekursionsformel noch zwei Iterationen mehr.
-Ist $z$ negativ wie in Abbildung \ref{0f1:ausblick:plot:konvergenz:negativ}, führt dies zu aufgrund des Vorzeichens zu alternierenden Termen. So steigt bei allen Algorithmen zuerst die Differenz zum erwarteten Endwert. Erst nach genügend Iterationen sind die Terme genügend klein, so dass sie das Endresultat nicht mehr signifikant beeinflussen.
-Auch hier konvergiert der Kettenbruch am schnellsten von allen Algorithmen. Ebenso bricht die Rekursionsformel nahezu gleichzeitig mit der Potenzreihe ab.
\subsection{Stabilität
\label{0f1:subsection:Stabilitaet}}
-Verändert sich der Wert von $z$ in $\mathstrut_0F_1(;c;z)$ gegen grössere positive Werte, wie zum Beispiel $c = 800$ liefert die Kettenbruch-Funktion (Listing \ref{0f1:listing:kettenbruchIterativ}) \verb+inf+ zurück. Dies könnte durch ein Abbruchkriterien abgefangen werden. Allerdings würde das, bei grossen Werten zulasten der Genauigkeit gehen. Trotzdem könnte, je nach Anwendung, auf ein paar Nachkommastellen verzichtet werden.
+Verändert sich der Wert von $z$ in $\mathstrut_0F_1(;c;z)$ gegen grössere positive Werte, wie zum Beispiel $c = 800$ liefert die Kettenbruch-Funktion (Listing \ref{0f1:listing:kettenbruchIterativ}) \verb+inf+ zurück. Dies könnte durch ein Abbruchkriterien abgefangen werden. Allerdings würde das bei grossen Werten zulasten der Genauigkeit gehen. Trotzdem könnte, je nach Anwendung, auf ein paar Nachkommastellen verzichtet werden.
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 +39,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 dargestellter absoluter Fehler.
\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 dargestellter absoluter Fehler.
\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}
diff --git a/buch/papers/fm/00_modulation.tex b/buch/papers/fm/00_modulation.tex index e2ba39f..982d63c 100644 --- a/buch/papers/fm/00_modulation.tex +++ b/buch/papers/fm/00_modulation.tex @@ -3,11 +3,22 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % + +Durch die Modulation wird ein Nachrichtensignal \(m(t)\) auf ein Trägersignal (z.B. ein Sinus- oder Rechtecksignal) abgebildet (kombiniert). +Durch dieses Auftragen vom Nachrichtensignal \(m(t)\) kann das modulierte Signal in einem gewünschten Frequenzbereich übertragen werden. +Der ursprünglich Frequenzbereich des Nachrichtensignal \(m(t)\) erstreckt sich typischerweise von 0 Hz bis zur Bandbreite \(B_m\). +Beim Empfänger wird dann durch Demodulation das ursprüngliche Nachrichtensignal \(m(t)\) so originalgetreu wie möglich zurückgewonnen. +Beim Trägersignal \(x_c(t)\) handelt es sich um ein informationsloses Hilfssignal. +Durch die Modulation mit dem Nachrichtensignal \(m(t)\) wird es zum modulierten zu übertragenden Signal. +Für alle Erklärungen wird ein sinusförmiges Trägersignal benutzt, jedoch kann auch ein Rechtecksignal, +welches Digital einfach umzusetzten ist, +genauso als Trägersignal genutzt werden kann.\cite{fm:NAT} + \subsection{Modulationsarten\label{fm:section:modulation}} Das sinusförmige Trägersignal hat die übliche Form: \(x_c(t) = A_c \cdot \cos(\omega_c(t)+\varphi)\). -Wobei die konstanten Amplitude \(A_c\) und Phase \(\varphi\) vom Nachrichtensignal \(m(t)\) verändert wird. +Wobei die konstanten Amplitude \(A_c\) und Phase \(\varphi\) vom Nachrichtensignal \(m(t)\) verändert werden können. Der Parameter \(\omega_c\), die Trägerkreisfrequenz bzw. die Trägerfrequenz \(f_c = \frac{\omega_c}{2\pi}\), steht nicht für die modulation zur verfügung, statt dessen kann durch ihn die Frequenzachse frei gewählt werden. \newblockpunct @@ -25,6 +36,8 @@ die Phasenmodulation \(\varphi\) und dann noch die Momentankreisfrequenz \(\omeg \item PM \item FM \end{itemize} +Um modulation zu Verstehen ist es am Anschaulichst mit der AM Amplitudenmodulation, +da Phasenmodulation und Frequenzmodulation den gleichen Parameter verändert vernachlässige ich die Phasenmodulation ganz. To do: Bilder jeder Modulationsart diff --git a/buch/papers/fm/01_AM.tex b/buch/papers/fm/01_AM.tex index 21927f5..714b9a0 100644 --- a/buch/papers/fm/01_AM.tex +++ b/buch/papers/fm/01_AM.tex @@ -11,19 +11,61 @@ Nun zur Amplitudenmodulation verwenden wir das bevorzugte Trägersignal \[ x_c(t) = A_c \cdot \cos(\omega_ct). \] -Dies bringt den grossen Vorteil das, dass modulierend Signal sämtliche Anteile im Frequenzspektrum inanspruch nimmt -und das Trägersignal nur zwei komplexe Schwingungen besitzt. +Dies bringt den grossen Vorteil das, dass modulierend Signal sämtliche Anteile im Frequenzspektrum in Anspruch nimmt +und das Trägersignal nur zwei komplexe Schwingungen besitzt. Dies sieht man besonders in der Eulerischen Formel \[ x_c(t) = \frac{A_c}{2} \cdot e^{j\omega_ct}\;+\;\frac{A_c}{2} \cdot e^{-j\omega_ct}. + \label{fm:eq:AM:euler} \] Dabei ist die negative Frequenz der zweiten komplexen Schwingung zwingend erforderlich, damit in der Summe immer ein reellwertiges Trägersignal ergibt. Nun wird der Parameter \(A_c\) durch das Modulierende Signal \(m(t)\) ersetzt, wobei so \(m(t) \leqslant |1|\) normiert wurde. -\newline -\newline + +Dabei entseht wine Umhüllende kurve die unserem ursprünglichen signal \(m(t)\) entspricht. +\[ + x_c(t) = m(t) \cdot \cos(\omega_ct). +\] + +\begin{figure} + \centering + \input{papers/fm/Python animation/m_t.pgf} + \caption{modulierende Signal \(m(t)\)} + \label{fig:bessel} +\end{figure} +% TODO: +Bilder Hier beschrieib ich was AmplitudenModulation ist und mache dan den link zu Frequenzmodulation inkl Formel \[\cos( \cos x)\] so wird beschrieben das daraus eigentlich \(x_c(t) = A_c \cdot \cos(\omega_i)\) wird und somit \(x_c(t) = A_c \cdot \cos(\omega_c + \frac{d \varphi(t)}{dt})\). Da \(\sin \) abgeleitet \(\cos \) ergibt, so wird aus dem \(m(t)\) ein \( \frac{d \varphi(t)}{dt}\) in der momentan frequenz. \[ \Rightarrow \cos( \cos x) \] +\subsection{Frequenzspektrum} +Das Frequenzspektrum ist eine Darstellung von einem Signal im Frequenzbereich, das heisst man erkennt welche Frequenzen in einem Signal vorhanden sind. +Dafür muss man eine Fouriertransformation vornehmen. +Wird aus dieser Gleichung \eqref{fm:eq:AM:euler}die Fouriertransformation vorggenommen, so erhält man -\subsection{Frequenzspektrum}
\ No newline at end of file +% +%Ein Ziel der Modulation besteht darin, mehrere Nachrichtensignale von verschiedenen Sendern gleichzeitig +%in verschiedenen Frequenzbereichen über den gleichen Kanal zu senden. Um dieses Frequenzmultiplexing +%störungsfrei und mit eine Vielzahl von Teilnehmern durchführen zu können, muss die spektrale Beschaffen- +%heit der modulierten Signale möglichst gut bekannt sein. +%Dank des Modulationssatzes der Fouriertransformation lässt sich das Spektrum eines gewöhnlichen AM Si- +%gnals sofort bestimmen: +%A c μ +%F +%·(M n (ω−ω c ) + M n (ω+ω c )) (5.5) +%A c ·(1+μm n (t))·cos(ω c t) ❝ s A c π (δ(ω−ω c ) + δ(ω+ω c )) + +%2 +%Das zweiseitige Spektrum des Nachrichtensignals M (ω) wird mit dem Faktor A 2 c μ gewichtet und einmal +%nach +ω c und einmal nach −ω c verschoben. Dies führt im Vergleich zum Basisbandsignal zu einer Verdop- +%pelung der Bandbreite mit je einem Seitenband links und rechts der Trägerfrequenz. Weiter beinhaltet das +%Amplitudendichtespektrum je eine Deltafunktion mit Gewicht A c π an den Stellen ±ω c , d.h. ein fester, nicht- +%modulierter Amplitudenanteil bei der eigentlichen Trägerfrequenz. +%Das Amplitudendichtespektrum ist im nachfolgenden Graphen für A c = 1 und μ = 100% dargestellt.5.3. Gewöhnliche Amplitudenmodulation +%47 +%Abbildung 5.12: Amplitudendichtespektrum von gewöhnlicher AM +%Für das Nachrichtensignal wurde in diesem Graph mit einem Keil symbolhaft ein Amplitudendichtespektrum +%|M (ω)| gewählt, bei welchem der Anteil auf der positiven und jener auf der negativen Frequenzachse visuell +%gut auseinandergehalten werden können. Ein solch geformtes Spektrum wird aber in der Praxis kaum je +%auftreten: bei periodischen Testsignalen besteht das Nachrichtensignal aus einem Linienspektrum, bei einem +%Energiesignal mit zufälligem Verlauf aus einem kontinuierlichen Spektrum, welches jedoch nicht auf diese +%einfache Art geformt sein wird
\ No newline at end of file diff --git a/buch/papers/fm/02_FM.tex b/buch/papers/fm/02_FM.tex index fedfaaa..a01fb69 100644 --- a/buch/papers/fm/02_FM.tex +++ b/buch/papers/fm/02_FM.tex @@ -6,9 +6,65 @@ \section{FM \label{fm:section:teil1}} \rhead{FM} -\subsection{Frequenzspektrum} -TODO -Hier Beschreiben ich FM und FM im Frequenzspektrum. +\subsection{Frequenzmodulation} +(skript Nat ab Seite 60) +Als weiterer Parameter, um ein sinusförmiges Trägersignal \(x_c = A_c \cdot \cos(\omega_c t + \varphi)\) zu modulieren, +bietet sich neben der Amplitude \(A_c\) auch der Phasenwinkel \(\varphi\) oder die momentane Frequenzabweichung \(\frac{d\varphi}{dt}\) an. +Bei der Phasenmodulation (Englisch: phase modulation, PM) erzeugt das Nachrichtensignal \(m(t)\) eine Phasenabweichung \(\varphi(t)\) des modulierten Trägersignals im Vergleich zum nicht-modulierten Träger. Sie ist pro- +%portional zum Nachrichtensignal \(m(t)\) durch eine Skalierung mit der Phasenhubkonstanten (Englisch: phase deviation constant) +%k p [rad], +%welche die Amplitude des Nachrichtensignals auf die Phasenabweichung des +%modulierten Trägersignals abbildet: φ(t) = k p · m(t). Damit ergibt sich für das phasenmodulierte Trägersi- +%gnal: +%x PM (t) = A c · cos (ω c t + k p · m(t)) +%(5.16) +%Die modulierte Phase φ(t) verändert dabei auch die Momentanfrequenz (Englisch: instantaneous frequency) +%ω i +%, welche wie folgt berechnet wird: +%f i = 2π +%ω i (t) = ω c + +%d φ(t) +%dt +%(5.17) +%Bei der Frequenzmodulation (Englisch: frequency modulation, FM) ist die Abweichung der momentanen +%Kreisfrequenz ω i von der Trägerkreisfrequenz ω c proportional zum Nachrichtensignal m(t). Sie ergibt sich, +%indem m(t) mit der (Kreis-)Frequenzhubkonstanten (Englisch: frequency deviation constant) k f [rad/s] ska- +%liert wird: ω i (t) = ω c + k f · m(t). Diese sich zeitlich verändernde Abweichung von der Kreisfrequenz ω c +%verursacht gleichzeitig auch Schwankungen der Phase φ(t), welche wie folgt berechnet wird: +%φ(t) = +%Z t +%−∞ +%ω i (τ ) − ω c dτ = +%Somit ergibt sich für das frequenzmodulierte Trägersignal: +% +%Z t +%−∞ +%x FM (t) = A c · cos ω c t + k f +%k f · m(t) dτ +%Z t +%−∞ +% +%m(τ ) dτ +%(5.18) +%(5.19) +%Die Phase φ(t) hat dabei einen kontinuierlichen Verlauf, d.h. das FM-modulierte Signal x FM (t) weist keine +%Stellen auf, wo sich die Phase sprunghaft ändert. Aus diesem Grund spricht man bei frequenzmodulierten +%Signalen – speziell auch bei digitalen FM-Signalen – von einer Modulation mit kontinuierlicher Phase (Eng- +%lisch: continuous phase modulation). +%Wie aus diesen Ausführungen hervorgeht, sind Phasenmodulation und Frequenzmodulation äquivalente Mo- +%dulationsverfahren. Beide variieren sowohl die Phase φ wie auch die Momentanfrequenz ω i . Dadurch kann +%man leider nicht – wie vielleicht erhofft – je mit einem eigenen Nachrichtensignal ein gemeinsames Trägersi- +%gnal unabhängig PM- und FM-modulieren, ohne dass sich diese Modulationen für den Empfänger untrennbar +%vermischen würden. +% +%Um die mathematische Behandlung der nicht-linearen Winkelmodulation etwas zu verkürzen, ist es aufgrund +%dieser Äquivalenzen gerechtfertigt, dass PM und FM gemeinsam behandelt werden. Jeweils vor der Modu- +%lation bzw. nach der Demodulation kann dann noch eine Differentiation oder Integration durchgeführt wird, +%um von der einen Modulationsart zur anderen zu gelangen. +%\subsection{Frequenzbereich} +%Nun +%TODO +%Hier Beschreiben ich FM und FM im Frequenzspektrum. %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 diff --git a/buch/papers/fm/03_bessel.tex b/buch/papers/fm/03_bessel.tex index 5f85dc6..3c2cb71 100644 --- a/buch/papers/fm/03_bessel.tex +++ b/buch/papers/fm/03_bessel.tex @@ -67,7 +67,7 @@ Mit dem \eqref{fm:eq:addth1} wird aus dem modulierten Signal = \cos(\omega_c t + \beta\sin(\omega_mt)) = - \cos(\omega_c t)\cos(\beta\sin(\omega_m t))-\sin(\omega_ct)\sin(\beta\sin(\omega_m t)). + \cos(\omega_c t)\cos(\beta\sin(\omega_m t)) - \sin(\omega_ct)\sin(\beta\sin(\omega_m t)). \label{fm:eq:start} \] %----------------------------------------------------------------------------------------------------------- @@ -89,23 +89,34 @@ mit hilfe der Besselindentität \eqref{fm:eq:besselid1} zum \end{align*} %intertext{} Funktioniert nicht. wobei mit dem Additionstheorem \eqref{fm:eq:addth2} \(A = \omega_c t\) und \(B = 2k\omega_m t \) ersetzt wurden. +Nun kann die Summe in zwei Summen \begin{align*} c(t) &= - J_0(\beta) \cdot \cos(\omega_c t) + \sum_{k=1}^\infty J_{2k}(\beta) \{ \underbrace{\cos((\omega_c - 2k \omega_m) t)} \,+\, \cos((\omega_c + 2k \omega_m) t) \} + J_0(\beta) \cdot \cos(\omega_c t) + \sum_{k=1}^\infty J_{2k}(\beta) \cos((\omega_c - 2k \omega_m) t) \,+\, \cos((\omega_c + 2k \omega_m) t) \} \\ &= - \sum_{k=-\infty}^{-1} J_{2k}(\beta) \overbrace{\cos((\omega_c +2k \omega_m) t)} - \,+\,J_0(\beta)\cdot \cos(\omega_c t+ 2\cdot0 \omega_m) + \sum_{k=\infty}^{1} J_{2k}(\beta) \underbrace{\cos((\omega_c - 2k \omega_m) t)} + \,+\,J_0(\beta)\cdot \cos(\omega_c t) \,+\, \sum_{k=1}^\infty J_{2k}(\beta)\cos((\omega_c + 2k \omega_m) t) \end{align*} -wird. -Das Minus im Ersten Term wird zur negativen Summe \(\sum_{-\infty}^{-1}\) ersetzt. -Da \(2k\) immer gerade ist, wird es durch alle negativen und positiven Ganzzahlen \(n\) ersetzt: +aufgeteilt werden. +Wenn bei der ersten Summe noch \(k\) von \(-\infty \to -1\) läuft, wird diese summe zu \(\sum_{k=-1}^{-\infty} J_{-2k}(\beta) {\cos((\omega_c + 2k \omega_m) t)} \) +Zudem kann die Besselindentität \eqref{fm:eq:besselid3} gebraucht werden. \(n \) wird mit \(2k\) ersetzt, da dies immer gerade ist so gilt: \(J_{-n}(\beta) = J_n(\beta)\) +Somit bekommt man zwei gleiche Summen +\begin{align*} + c(t) + &= + \sum_{k=-\infty}^{-1} J_{2k}(\beta) \cos((\omega_c + 2k \omega_m) t) + \,+\,J_0(\beta)\cdot \cos(\omega_c t+ 2 \cdot 0 \omega_m) + \,+\, \sum_{k=1}^\infty J_{2k}(\beta)\cos((\omega_c + 2k \omega_m) t) +\end{align*} +Diese können wir vereinfachter schreiben, \begin{align*} \sum_{n\, \text{gerade}} J_{n}(\beta) \cos((\omega_c + n \omega_m) t), \label{fm:eq:gerade} \end{align*} +da \(2k\) für alle negativen, wie positiven geraden Zahlen zählt. %---------------------------------------------------------------------------------------------------------------- \subsubsection{Sin-Teil} Nun zum zweiten Teil des Term \eqref{fm:eq:start}, den Sin-Teil @@ -157,14 +168,14 @@ jedoch so \(-1 \cdot J_{-n}(\beta) = J_n(\beta)\) und daraus wird dann: \sum_{n=- \infty}^{-1} J_{n}(\beta) \cos((\omega_c + n \omega_m) t) \,+\, \sum_{n=1}^\infty J_{n}(\beta) \cos((\omega_c + n\omega_m) t) \end{align*} -Da \(n\) immer ungerade ist und \(0\) nicht zu den ungeraden zahlen zählt, kann man dies so vereinfacht +Da \(n\) immer ungerade ist und \(0\) nicht zu den ungeraden Zahlen zählt, kann man dies so vereinfacht \[ s(t) = - \sum_{n\, \text{ungerade}} -1 \cdot J_{n}(\beta) \cos((\omega_c + n\omega_m) t). + \sum_{n\, \text{ungerade}} J_{n}(\beta) \cos((\omega_c + n\omega_m) t). \label{fm:eq:ungerade} \] -schreiben. +, mit allen positiven und negativen Ganzzahlen schreiben. %------------------------------------------------------------------------------------------ \subsubsection{Summe Zusammenführen} Beide Teile \eqref{fm:eq:gerade} Gerade @@ -179,7 +190,7 @@ ergeben zusammen \[ \cos(\omega_ct+\beta\sin(\omega_mt)) = - \sum_{k= -\infty}^\infty J_{k}(\beta) \cos((\omega_c+k\omega_m)t). + \sum_{k= -\infty}^\infty J_{n}(\beta) \cos((\omega_c+ n\omega_m)t). \] Somit ist \eqref{fm:eq:proof} bewiesen. \newpage diff --git a/buch/papers/fm/Python animation/Bessel-FM.ipynb b/buch/papers/fm/Python animation/Bessel-FM.ipynb index 74f1011..4074765 100644 --- a/buch/papers/fm/Python animation/Bessel-FM.ipynb +++ b/buch/papers/fm/Python animation/Bessel-FM.ipynb @@ -11,11 +11,12 @@ "from scipy.fft import fft, ifft, fftfreq\n", "import scipy.special as sc\n", "import scipy.fftpack\n", + "import matplotlib.pyplot as plt\n", "import matplotlib as mpl\n", "# Use the pgf backend (must be set before pyplot imported)\n", - "mpl.use('pgf')\n", - "import matplotlib.pyplot as plt\n", - "from matplotlib.widgets import Slider\n", + "# mpl.use('pgf')\n", + "\n", + "\n", "def fm(beta):\n", " # Number of samplepoints\n", " N = 600\n", @@ -27,7 +28,7 @@ " #beta = 1.0\n", " y_old = np.sin(fc * 2.0*np.pi*x+beta*np.sin(fm * 2.0*np.pi*x))\n", " y = 0*x;\n", - " xf = fftfreq(N, 1 / 400)\n", + " xf = fftfreq(N, 1 / N)\n", " for k in range (-4, 4):\n", " y = sc.jv(k,beta)*np.sin((fc+k*fm) * 2.0*np.pi*x)\n", " yf = fft(y)/(fc*np.pi)\n", @@ -42,12 +43,24 @@ }, { "cell_type": "code", - "execution_count": 114, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", + "text/plain": [ + "<Figure size 432x288 with 1 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -62,17 +75,17 @@ "# Number of samplepoints\n", "N = 800\n", "# sample spacing\n", - "T = 1.0 / 1000.0\n", + "T = 1.0 / N\n", "x = np.linspace(0.01, N*T, N)\n", "\n", "y_old = np.sin(100* 2.0*np.pi*x+1*np.sin(15* 2.0*np.pi*x))\n", "yf_old = fft(y_old)/(100*np.pi)\n", - "xf = fftfreq(N, 1 / 1000)\n", + "xf = fftfreq(N, 1 / N)\n", "plt.plot(xf, np.abs(yf_old))\n", "#plt.xlim(-150, 150)\n", "plt.show()\n", "\n", - "fm(1)" + "fm(2)" ] }, { @@ -120,12 +133,12 @@ }, { "cell_type": "code", - "execution_count": 85, + "execution_count": 131, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -137,39 +150,21 @@ } ], "source": [ - "from scipy import special\n", - "\n", - "def drumhead_height(n, k, distance, angle, t):\n", - " kth_zero = special.jn_zeros(n, k)[-1]\n", - " return np.cos(t) * np.cos(n*angle) * special.jn(n, distance*kth_zero)\n", - "\n", - "theta = np.r_[0:2*np.pi:50j]\n", - "radius = np.r_[0:1:50j]\n", - "x = np.array([r * np.cos(theta) for r in radius])\n", - "y = np.array([r * np.sin(theta) for r in radius])\n", - "z = np.array([drumhead_height(1, 1, r, theta, 0.5) for r in radius])\n", - "\n", - "import matplotlib.pyplot as plt\n", - "fig = plt.figure()\n", - "ax = fig.add_axes(rect=(0, 0.05, 0.95, 0.95), projection='3d')\n", - "ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='RdBu_r', vmin=-0.5, vmax=0.5)\n", - "ax.set_xlabel('X')\n", - "ax.set_ylabel('Y')\n", - "ax.set_xticks(np.arange(-1, 1.1, 0.5))\n", - "ax.set_yticks(np.arange(-1, 1.1, 0.5))\n", - "ax.set_zlabel('Z')\n", "\n", + "x = np.linspace(0,0.1,2000)\n", + "y = np.sin(100 * 2.0*np.pi*x+1.5*np.sin(30 * 2.0*np.pi*x))\n", + "plt.plot(x, y, '-')\n", "plt.show()" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] @@ -181,11 +176,24 @@ } ], "source": [ + "ratio = 2\n", + "first = 1\n", + "(length,) = x.shape\n", + "slop = int(length/6)\n", + "second = ratio-first\n", + "odd = ratio % 2\n", "\n", - "x = np.linspace(0,0.1,1000)\n", - "y = np.sin(100 * 2.0*np.pi*x+1.5*np.sin(30 * 2.0*np.pi*x))\n", - "plt.plot(x, y, '-')\n", - "plt.show()" + "first = int(first * length/ratio) \n", + "second = int( second * length/ratio) + odd\n", + "slop = np.array(np.append(np.zeros(first-slop) , (np.arange(slop))/slop))\n", + "#steep = np.ones(int(first * length/ratio)+ odd) - np.exp(-np.arange(int(first * length/ratio) + odd)/200)\n", + "steep = (np.ones(first) + slop)*0.5\n", + "\n", + "step = np.append(steep, np.ones(second))\n", + "m = np.sin(5 * 2.0 * np.pi * x) * step \n", + "plt.plot(x, step, '-')\n", + "plt.plot(x, m, '-')\n", + "plt.savefig('m_t.pgf', format='pgf')" ] } ], diff --git a/buch/papers/fm/Python animation/Bessel-FM.py b/buch/papers/fm/Python animation/Bessel-FM.py index cf30e16..cb35ebd 100644 --- a/buch/papers/fm/Python animation/Bessel-FM.py +++ b/buch/papers/fm/Python animation/Bessel-FM.py @@ -4,39 +4,45 @@ from scipy.fft import fft, ifft, fftfreq import scipy.special as sc import scipy.fftpack import matplotlib.pyplot as plt -from matplotlib.widgets import Slider - -# Number of samplepoints -N = 600 -# sample spacing -T = 1.0 / 800.0 -x = np.linspace(0.01, N*T, N) -beta = 1.0 -y_old = np.sin(100.0 * 2.0*np.pi*x+beta*np.sin(50.0 * 2.0*np.pi*x)) -y = 0*x; -xf = fftfreq(N, 1 / 400) -for k in range (-5, 5): - y = sc.jv(k,beta)*np.sin((100.0+k*50) * 2.0*np.pi*x) - yf = fft(y) - plt.plot(xf, np.abs(yf)) - -axbeta =plt.axes([0.25, 0.1, 0.65, 0.03]) -beta_slider = Slider( -ax=axbeta, -label="Beta", -valmin=0.1, -valmax=3, -valinit=beta, -) - -def update(val): - line.set_ydata(fm(beta_slider.val)) - fig.canvas.draw_idle() +import matplotlib as mpl +# Use the pgf backend (must be set before pyplot imported) +mpl.use('pgf') +from matplotlib.widgets import Slider +def fm(beta): + # Number of samplepoints + N = 600 + # sample spacing + T = 1.0 / 1000.0 + fc = 100.0 + fm = 30.0 + x = np.linspace(0.01, N*T, N) + #beta = 1.0 + y_old = np.sin(fc * 2.0*np.pi*x+beta*np.sin(fm * 2.0*np.pi*x)) + y = 0*x; + xf = fftfreq(N, 1 / N) + for k in range (-4, 4): + y = sc.jv(k,beta)*np.sin((fc+k*fm) * 2.0*np.pi*x) + yf = fft(y)/(fc*np.pi) + plt.plot(xf, np.abs(yf)) + plt.xlim(-150, 150) + #plt.savefig('bessel.pgf', format='pgf') + plt.show() -beta_slider.on_changed(update) -plt.show() +fm(1) -yf_old = fft(y_old) -plt.plot(xf, np.abs(yf_old)) -plt.show()
\ No newline at end of file +# Bessel-Funktion +for n in range (-2,4): + x = np.linspace(-11,11,1000) + y = sc.jv(n,x) + plt.plot(x, y, '-',label='n='+str(n)) +#plt.plot([1,1],[sc.jv(0,1),sc.jv(-1,1)],) +plt.xlim(-10,10) +plt.grid(True) +plt.ylabel('Bessel $J_n(\\beta)$') +plt.xlabel(' $ \\beta $ ') +plt.plot(x, y) +plt.legend() +#plt.show() +plt.savefig('bessel.pgf', format='pgf') +print(sc.jv(0,1))
\ No newline at end of file diff --git a/buch/papers/fm/Python animation/m_t.pgf b/buch/papers/fm/Python animation/m_t.pgf new file mode 100644 index 0000000..edcfb33 --- /dev/null +++ b/buch/papers/fm/Python animation/m_t.pgf @@ -0,0 +1,746 @@ +%% Creator: Matplotlib, PGF backend +%% +%% To include the figure in your LaTeX document, write +%% \input{<filename>.pgf} +%% +%% Make sure the required packages are loaded in your preamble +%% \usepackage{pgf} +%% +%% Also ensure that all the required font packages are loaded; for instance, +%% the lmodern package is sometimes necessary when using math font. +%% \usepackage{lmodern} +%% +%% Figures using additional raster images can only be included by \input if +%% they are in the same directory as the main LaTeX file. For loading figures +%% from other directories you can use the `import` package +%% \usepackage{import} +%% +%% and then include the figures with +%% \import{<path to file>}{<filename>.pgf} +%% +%% Matplotlib used the following preamble +%% \usepackage{fontspec} +%% \setmainfont{DejaVuSerif.ttf}[Path=\detokenize{/home/joshua/.local/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/}] +%% \setsansfont{DejaVuSans.ttf}[Path=\detokenize{/home/joshua/.local/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/}] +%% \setmonofont{DejaVuSansMono.ttf}[Path=\detokenize{/home/joshua/.local/lib/python3.8/site-packages/matplotlib/mpl-data/fonts/ttf/}] +%% +\begingroup% +\makeatletter% +\begin{pgfpicture}% +\pgfpathrectangle{\pgfpointorigin}{\pgfqpoint{6.000000in}{4.000000in}}% +\pgfusepath{use as bounding box, clip}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetmiterjoin% +\pgfsetlinewidth{0.000000pt}% +\definecolor{currentstroke}{rgb}{1.000000,1.000000,1.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetstrokeopacity{0.000000}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{6.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{6.000000in}{4.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{4.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathclose% +\pgfusepath{}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetmiterjoin% +\definecolor{currentfill}{rgb}{1.000000,1.000000,1.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.000000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetstrokeopacity{0.000000}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.750000in}{0.500000in}}% +\pgfpathlineto{\pgfqpoint{5.400000in}{0.500000in}}% +\pgfpathlineto{\pgfqpoint{5.400000in}{3.520000in}}% +\pgfpathlineto{\pgfqpoint{0.750000in}{3.520000in}}% +\pgfpathlineto{\pgfqpoint{0.750000in}{0.500000in}}% +\pgfpathclose% +\pgfusepath{fill}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.918664in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.918664in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.0}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{1.772658in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=1.772658in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.2}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{2.626653in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=2.626653in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.4}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{3.480647in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=3.480647in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.6}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{4.334642in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=4.334642in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.8}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{0.000000in}{-0.048611in}}{\pgfqpoint{0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{0.000000in}{-0.048611in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{5.188636in}{0.500000in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=5.188636in,y=0.402778in,,top]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 1.0}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{0.637238in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.235508in, y=0.584477in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont \ensuremath{-}1.00}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{0.980424in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.235508in, y=0.927663in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont \ensuremath{-}0.75}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{1.323611in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.235508in, y=1.270849in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont \ensuremath{-}0.50}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{1.666797in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.235508in, y=1.614035in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont \ensuremath{-}0.25}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{2.009983in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.343533in, y=1.957221in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.00}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{2.353169in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.343533in, y=2.300407in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.25}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{2.696355in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.343533in, y=2.643594in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.50}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{3.039541in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.343533in, y=2.986780in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 0.75}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetbuttcap% +\pgfsetroundjoin% +\definecolor{currentfill}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetfillcolor{currentfill}% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfsys@defobject{currentmarker}{\pgfqpoint{-0.048611in}{0.000000in}}{\pgfqpoint{-0.000000in}{0.000000in}}{% +\pgfpathmoveto{\pgfqpoint{-0.000000in}{0.000000in}}% +\pgfpathlineto{\pgfqpoint{-0.048611in}{0.000000in}}% +\pgfusepath{stroke,fill}% +}% +\begin{pgfscope}% +\pgfsys@transformshift{0.750000in}{3.382727in}% +\pgfsys@useobject{currentmarker}{}% +\end{pgfscope}% +\end{pgfscope}% +\begin{pgfscope}% +\definecolor{textcolor}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{textcolor}% +\pgfsetfillcolor{textcolor}% +\pgftext[x=0.343533in, y=3.329966in, left, base]{\color{textcolor}\sffamily\fontsize{10.000000}{12.000000}\selectfont 1.00}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfpathrectangle{\pgfqpoint{0.750000in}{0.500000in}}{\pgfqpoint{4.650000in}{3.020000in}}% +\pgfusepath{clip}% +\pgfsetrectcap% +\pgfsetroundjoin% +\pgfsetlinewidth{1.505625pt}% +\definecolor{currentstroke}{rgb}{0.121569,0.466667,0.705882}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.961364in}{2.696355in}}% +\pgfpathlineto{\pgfqpoint{2.373982in}{2.696355in}}% +\pgfpathlineto{\pgfqpoint{3.077645in}{3.382727in}}% +\pgfpathlineto{\pgfqpoint{5.188636in}{3.382727in}}% +\pgfpathlineto{\pgfqpoint{5.188636in}{3.382727in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfpathrectangle{\pgfqpoint{0.750000in}{0.500000in}}{\pgfqpoint{4.650000in}{3.020000in}}% +\pgfusepath{clip}% +\pgfsetrectcap% +\pgfsetroundjoin% +\pgfsetlinewidth{1.505625pt}% +\definecolor{currentstroke}{rgb}{1.000000,0.498039,0.054902}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.961364in}{2.222083in}}% +\pgfpathlineto{\pgfqpoint{0.993108in}{2.367402in}}% +\pgfpathlineto{\pgfqpoint{1.019561in}{2.473982in}}% +\pgfpathlineto{\pgfqpoint{1.040724in}{2.546802in}}% +\pgfpathlineto{\pgfqpoint{1.056596in}{2.592979in}}% +\pgfpathlineto{\pgfqpoint{1.072468in}{2.631215in}}% +\pgfpathlineto{\pgfqpoint{1.088341in}{2.660988in}}% +\pgfpathlineto{\pgfqpoint{1.098922in}{2.675931in}}% +\pgfpathlineto{\pgfqpoint{1.109503in}{2.686839in}}% +\pgfpathlineto{\pgfqpoint{1.120085in}{2.693647in}}% +\pgfpathlineto{\pgfqpoint{1.130666in}{2.696313in}}% +\pgfpathlineto{\pgfqpoint{1.141248in}{2.694822in}}% +\pgfpathlineto{\pgfqpoint{1.151829in}{2.689182in}}% +\pgfpathlineto{\pgfqpoint{1.162410in}{2.679428in}}% +\pgfpathlineto{\pgfqpoint{1.172992in}{2.665619in}}% +\pgfpathlineto{\pgfqpoint{1.183573in}{2.647837in}}% +\pgfpathlineto{\pgfqpoint{1.199445in}{2.613960in}}% +\pgfpathlineto{\pgfqpoint{1.215317in}{2.571856in}}% +\pgfpathlineto{\pgfqpoint{1.231190in}{2.522098in}}% +\pgfpathlineto{\pgfqpoint{1.252352in}{2.445035in}}% +\pgfpathlineto{\pgfqpoint{1.278806in}{2.334146in}}% +\pgfpathlineto{\pgfqpoint{1.310550in}{2.185325in}}% +\pgfpathlineto{\pgfqpoint{1.421655in}{1.645905in}}% +\pgfpathlineto{\pgfqpoint{1.448108in}{1.540247in}}% +\pgfpathlineto{\pgfqpoint{1.469271in}{1.468321in}}% +\pgfpathlineto{\pgfqpoint{1.485143in}{1.422894in}}% +\pgfpathlineto{\pgfqpoint{1.501015in}{1.385464in}}% +\pgfpathlineto{\pgfqpoint{1.516888in}{1.356540in}}% +\pgfpathlineto{\pgfqpoint{1.527469in}{1.342183in}}% +\pgfpathlineto{\pgfqpoint{1.538050in}{1.331872in}}% +\pgfpathlineto{\pgfqpoint{1.548632in}{1.325669in}}% +\pgfpathlineto{\pgfqpoint{1.559213in}{1.323611in}}% +\pgfpathlineto{\pgfqpoint{1.569795in}{1.325711in}}% +\pgfpathlineto{\pgfqpoint{1.580376in}{1.331956in}}% +\pgfpathlineto{\pgfqpoint{1.590957in}{1.342308in}}% +\pgfpathlineto{\pgfqpoint{1.601539in}{1.356705in}}% +\pgfpathlineto{\pgfqpoint{1.617411in}{1.385688in}}% +\pgfpathlineto{\pgfqpoint{1.633283in}{1.423174in}}% +\pgfpathlineto{\pgfqpoint{1.649155in}{1.468653in}}% +\pgfpathlineto{\pgfqpoint{1.670318in}{1.540640in}}% +\pgfpathlineto{\pgfqpoint{1.691481in}{1.623984in}}% +\pgfpathlineto{\pgfqpoint{1.717934in}{1.741037in}}% +\pgfpathlineto{\pgfqpoint{1.754969in}{1.920906in}}% +\pgfpathlineto{\pgfqpoint{1.829039in}{2.286606in}}% +\pgfpathlineto{\pgfqpoint{1.855493in}{2.402871in}}% +\pgfpathlineto{\pgfqpoint{1.876655in}{2.485395in}}% +\pgfpathlineto{\pgfqpoint{1.897818in}{2.556416in}}% +\pgfpathlineto{\pgfqpoint{1.913690in}{2.601088in}}% +\pgfpathlineto{\pgfqpoint{1.929563in}{2.637708in}}% +\pgfpathlineto{\pgfqpoint{1.945435in}{2.665778in}}% +\pgfpathlineto{\pgfqpoint{1.956016in}{2.679547in}}% +\pgfpathlineto{\pgfqpoint{1.966597in}{2.689260in}}% +\pgfpathlineto{\pgfqpoint{1.977179in}{2.694858in}}% +\pgfpathlineto{\pgfqpoint{1.987760in}{2.696307in}}% +\pgfpathlineto{\pgfqpoint{1.998342in}{2.693599in}}% +\pgfpathlineto{\pgfqpoint{2.008923in}{2.686749in}}% +\pgfpathlineto{\pgfqpoint{2.019504in}{2.675800in}}% +\pgfpathlineto{\pgfqpoint{2.030086in}{2.660817in}}% +\pgfpathlineto{\pgfqpoint{2.045958in}{2.630985in}}% +\pgfpathlineto{\pgfqpoint{2.061830in}{2.592694in}}% +\pgfpathlineto{\pgfqpoint{2.077702in}{2.546466in}}% +\pgfpathlineto{\pgfqpoint{2.098865in}{2.473584in}}% +\pgfpathlineto{\pgfqpoint{2.120028in}{2.389486in}}% +\pgfpathlineto{\pgfqpoint{2.146481in}{2.271711in}}% +\pgfpathlineto{\pgfqpoint{2.183516in}{2.091294in}}% +\pgfpathlineto{\pgfqpoint{2.257586in}{1.726215in}}% +\pgfpathlineto{\pgfqpoint{2.284040in}{1.610703in}}% +\pgfpathlineto{\pgfqpoint{2.305203in}{1.528957in}}% +\pgfpathlineto{\pgfqpoint{2.326365in}{1.458849in}}% +\pgfpathlineto{\pgfqpoint{2.342237in}{1.414938in}}% +\pgfpathlineto{\pgfqpoint{2.358110in}{1.379133in}}% +\pgfpathlineto{\pgfqpoint{2.400435in}{1.300923in}}% +\pgfpathlineto{\pgfqpoint{2.411017in}{1.287575in}}% +\pgfpathlineto{\pgfqpoint{2.421598in}{1.278578in}}% +\pgfpathlineto{\pgfqpoint{2.432179in}{1.274111in}}% +\pgfpathlineto{\pgfqpoint{2.442761in}{1.274326in}}% +\pgfpathlineto{\pgfqpoint{2.453342in}{1.279345in}}% +\pgfpathlineto{\pgfqpoint{2.463924in}{1.289257in}}% +\pgfpathlineto{\pgfqpoint{2.474505in}{1.304122in}}% +\pgfpathlineto{\pgfqpoint{2.485086in}{1.323962in}}% +\pgfpathlineto{\pgfqpoint{2.500959in}{1.363022in}}% +\pgfpathlineto{\pgfqpoint{2.516831in}{1.413067in}}% +\pgfpathlineto{\pgfqpoint{2.532703in}{1.473735in}}% +\pgfpathlineto{\pgfqpoint{2.553866in}{1.570194in}}% +\pgfpathlineto{\pgfqpoint{2.575028in}{1.682799in}}% +\pgfpathlineto{\pgfqpoint{2.601482in}{1.842735in}}% +\pgfpathlineto{\pgfqpoint{2.633226in}{2.055389in}}% +\pgfpathlineto{\pgfqpoint{2.728459in}{2.712794in}}% +\pgfpathlineto{\pgfqpoint{2.754912in}{2.866609in}}% +\pgfpathlineto{\pgfqpoint{2.776075in}{2.970913in}}% +\pgfpathlineto{\pgfqpoint{2.791947in}{3.035961in}}% +\pgfpathlineto{\pgfqpoint{2.807819in}{3.088287in}}% +\pgfpathlineto{\pgfqpoint{2.818401in}{3.115544in}}% +\pgfpathlineto{\pgfqpoint{2.828982in}{3.136361in}}% +\pgfpathlineto{\pgfqpoint{2.839564in}{3.150485in}}% +\pgfpathlineto{\pgfqpoint{2.850145in}{3.157708in}}% +\pgfpathlineto{\pgfqpoint{2.855436in}{3.158677in}}% +\pgfpathlineto{\pgfqpoint{2.860726in}{3.157860in}}% +\pgfpathlineto{\pgfqpoint{2.866017in}{3.155244in}}% +\pgfpathlineto{\pgfqpoint{2.876599in}{3.144569in}}% +\pgfpathlineto{\pgfqpoint{2.887180in}{3.126596in}}% +\pgfpathlineto{\pgfqpoint{2.897761in}{3.101314in}}% +\pgfpathlineto{\pgfqpoint{2.908343in}{3.068761in}}% +\pgfpathlineto{\pgfqpoint{2.924215in}{3.006498in}}% +\pgfpathlineto{\pgfqpoint{2.940087in}{2.928568in}}% +\pgfpathlineto{\pgfqpoint{2.955959in}{2.835706in}}% +\pgfpathlineto{\pgfqpoint{2.977122in}{2.690371in}}% +\pgfpathlineto{\pgfqpoint{2.998285in}{2.523160in}}% +\pgfpathlineto{\pgfqpoint{3.024738in}{2.288895in}}% +\pgfpathlineto{\pgfqpoint{3.061773in}{1.928914in}}% +\pgfpathlineto{\pgfqpoint{3.109390in}{1.462671in}}% +\pgfpathlineto{\pgfqpoint{3.135843in}{1.229526in}}% +\pgfpathlineto{\pgfqpoint{3.157006in}{1.063841in}}% +\pgfpathlineto{\pgfqpoint{3.178169in}{0.921048in}}% +\pgfpathlineto{\pgfqpoint{3.194041in}{0.831078in}}% +\pgfpathlineto{\pgfqpoint{3.209913in}{0.757165in}}% +\pgfpathlineto{\pgfqpoint{3.225785in}{0.700319in}}% +\pgfpathlineto{\pgfqpoint{3.236366in}{0.672294in}}% +\pgfpathlineto{\pgfqpoint{3.246948in}{0.652372in}}% +\pgfpathlineto{\pgfqpoint{3.257529in}{0.640675in}}% +\pgfpathlineto{\pgfqpoint{3.262820in}{0.637934in}}% +\pgfpathlineto{\pgfqpoint{3.268111in}{0.637273in}}% +\pgfpathlineto{\pgfqpoint{3.273401in}{0.638691in}}% +\pgfpathlineto{\pgfqpoint{3.278692in}{0.642186in}}% +\pgfpathlineto{\pgfqpoint{3.289274in}{0.655385in}}% +\pgfpathlineto{\pgfqpoint{3.299855in}{0.676791in}}% +\pgfpathlineto{\pgfqpoint{3.310436in}{0.706272in}}% +\pgfpathlineto{\pgfqpoint{3.321018in}{0.743651in}}% +\pgfpathlineto{\pgfqpoint{3.336890in}{0.814020in}}% +\pgfpathlineto{\pgfqpoint{3.352762in}{0.900680in}}% +\pgfpathlineto{\pgfqpoint{3.368634in}{1.002450in}}% +\pgfpathlineto{\pgfqpoint{3.389797in}{1.159225in}}% +\pgfpathlineto{\pgfqpoint{3.416250in}{1.383646in}}% +\pgfpathlineto{\pgfqpoint{3.447995in}{1.683359in}}% +\pgfpathlineto{\pgfqpoint{3.553809in}{2.713731in}}% +\pgfpathlineto{\pgfqpoint{3.580262in}{2.928394in}}% +\pgfpathlineto{\pgfqpoint{3.601425in}{3.075502in}}% +\pgfpathlineto{\pgfqpoint{3.617297in}{3.169087in}}% +\pgfpathlineto{\pgfqpoint{3.633169in}{3.246883in}}% +\pgfpathlineto{\pgfqpoint{3.649041in}{3.307831in}}% +\pgfpathlineto{\pgfqpoint{3.659623in}{3.338682in}}% +\pgfpathlineto{\pgfqpoint{3.670204in}{3.361485in}}% +\pgfpathlineto{\pgfqpoint{3.680786in}{3.376101in}}% +\pgfpathlineto{\pgfqpoint{3.686076in}{3.380309in}}% +\pgfpathlineto{\pgfqpoint{3.691367in}{3.382440in}}% +\pgfpathlineto{\pgfqpoint{3.696658in}{3.382493in}}% +\pgfpathlineto{\pgfqpoint{3.701948in}{3.380466in}}% +\pgfpathlineto{\pgfqpoint{3.707239in}{3.376363in}}% +\pgfpathlineto{\pgfqpoint{3.717821in}{3.361955in}}% +\pgfpathlineto{\pgfqpoint{3.728402in}{3.339358in}}% +\pgfpathlineto{\pgfqpoint{3.738983in}{3.308708in}}% +\pgfpathlineto{\pgfqpoint{3.749565in}{3.270190in}}% +\pgfpathlineto{\pgfqpoint{3.765437in}{3.198184in}}% +\pgfpathlineto{\pgfqpoint{3.781309in}{3.109994in}}% +\pgfpathlineto{\pgfqpoint{3.802472in}{2.969336in}}% +\pgfpathlineto{\pgfqpoint{3.823635in}{2.805466in}}% +\pgfpathlineto{\pgfqpoint{3.850088in}{2.574075in}}% +\pgfpathlineto{\pgfqpoint{3.887123in}{2.216460in}}% +\pgfpathlineto{\pgfqpoint{3.966484in}{1.434106in}}% +\pgfpathlineto{\pgfqpoint{3.992937in}{1.203977in}}% +\pgfpathlineto{\pgfqpoint{4.014100in}{1.041407in}}% +\pgfpathlineto{\pgfqpoint{4.035263in}{0.902271in}}% +\pgfpathlineto{\pgfqpoint{4.051135in}{0.815347in}}% +\pgfpathlineto{\pgfqpoint{4.067007in}{0.744696in}}% +\pgfpathlineto{\pgfqpoint{4.082879in}{0.691279in}}% +\pgfpathlineto{\pgfqpoint{4.093461in}{0.665613in}}% +\pgfpathlineto{\pgfqpoint{4.104042in}{0.648090in}}% +\pgfpathlineto{\pgfqpoint{4.114623in}{0.638817in}}% +\pgfpathlineto{\pgfqpoint{4.119914in}{0.637294in}}% +\pgfpathlineto{\pgfqpoint{4.125205in}{0.637851in}}% +\pgfpathlineto{\pgfqpoint{4.130496in}{0.640487in}}% +\pgfpathlineto{\pgfqpoint{4.135786in}{0.645197in}}% +\pgfpathlineto{\pgfqpoint{4.146368in}{0.660811in}}% +\pgfpathlineto{\pgfqpoint{4.156949in}{0.684597in}}% +\pgfpathlineto{\pgfqpoint{4.167530in}{0.716413in}}% +\pgfpathlineto{\pgfqpoint{4.178112in}{0.756065in}}% +\pgfpathlineto{\pgfqpoint{4.193984in}{0.829697in}}% +\pgfpathlineto{\pgfqpoint{4.209856in}{0.919407in}}% +\pgfpathlineto{\pgfqpoint{4.231019in}{1.061888in}}% +\pgfpathlineto{\pgfqpoint{4.252182in}{1.227307in}}% +\pgfpathlineto{\pgfqpoint{4.278635in}{1.460197in}}% +\pgfpathlineto{\pgfqpoint{4.315670in}{1.818993in}}% +\pgfpathlineto{\pgfqpoint{4.395031in}{2.600031in}}% +\pgfpathlineto{\pgfqpoint{4.421484in}{2.828606in}}% +\pgfpathlineto{\pgfqpoint{4.442647in}{2.989587in}}% +\pgfpathlineto{\pgfqpoint{4.463810in}{3.126867in}}% +\pgfpathlineto{\pgfqpoint{4.479682in}{3.212251in}}% +\pgfpathlineto{\pgfqpoint{4.495554in}{3.281259in}}% +\pgfpathlineto{\pgfqpoint{4.506136in}{3.317692in}}% +\pgfpathlineto{\pgfqpoint{4.516717in}{3.346203in}}% +\pgfpathlineto{\pgfqpoint{4.527298in}{3.366619in}}% +\pgfpathlineto{\pgfqpoint{4.537880in}{3.378817in}}% +\pgfpathlineto{\pgfqpoint{4.543170in}{3.381810in}}% +\pgfpathlineto{\pgfqpoint{4.548461in}{3.382723in}}% +\pgfpathlineto{\pgfqpoint{4.553752in}{3.381558in}}% +\pgfpathlineto{\pgfqpoint{4.559043in}{3.378314in}}% +\pgfpathlineto{\pgfqpoint{4.569624in}{3.365615in}}% +\pgfpathlineto{\pgfqpoint{4.580205in}{3.344704in}}% +\pgfpathlineto{\pgfqpoint{4.590787in}{3.315707in}}% +\pgfpathlineto{\pgfqpoint{4.601368in}{3.278801in}}% +\pgfpathlineto{\pgfqpoint{4.617240in}{3.209112in}}% +\pgfpathlineto{\pgfqpoint{4.633112in}{3.123089in}}% +\pgfpathlineto{\pgfqpoint{4.648985in}{3.021904in}}% +\pgfpathlineto{\pgfqpoint{4.670147in}{2.865815in}}% +\pgfpathlineto{\pgfqpoint{4.696601in}{2.642076in}}% +\pgfpathlineto{\pgfqpoint{4.728345in}{2.342894in}}% +\pgfpathlineto{\pgfqpoint{4.834159in}{1.311803in}}% +\pgfpathlineto{\pgfqpoint{4.860613in}{1.096395in}}% +\pgfpathlineto{\pgfqpoint{4.881776in}{0.948559in}}% +\pgfpathlineto{\pgfqpoint{4.897648in}{0.854361in}}% +\pgfpathlineto{\pgfqpoint{4.913520in}{0.775905in}}% +\pgfpathlineto{\pgfqpoint{4.929392in}{0.714259in}}% +\pgfpathlineto{\pgfqpoint{4.939973in}{0.682925in}}% +\pgfpathlineto{\pgfqpoint{4.950555in}{0.659631in}}% +\pgfpathlineto{\pgfqpoint{4.961136in}{0.644516in}}% +\pgfpathlineto{\pgfqpoint{4.966427in}{0.640057in}}% +\pgfpathlineto{\pgfqpoint{4.971717in}{0.637673in}}% +\pgfpathlineto{\pgfqpoint{4.977008in}{0.637368in}}% +\pgfpathlineto{\pgfqpoint{4.982299in}{0.639143in}}% +\pgfpathlineto{\pgfqpoint{4.987590in}{0.642995in}}% +\pgfpathlineto{\pgfqpoint{4.998171in}{0.656903in}}% +\pgfpathlineto{\pgfqpoint{5.008752in}{0.679007in}}% +\pgfpathlineto{\pgfqpoint{5.019334in}{0.709174in}}% +\pgfpathlineto{\pgfqpoint{5.029915in}{0.747222in}}% +\pgfpathlineto{\pgfqpoint{5.045787in}{0.818551in}}% +\pgfpathlineto{\pgfqpoint{5.061659in}{0.906109in}}% +\pgfpathlineto{\pgfqpoint{5.082822in}{1.046008in}}% +\pgfpathlineto{\pgfqpoint{5.103985in}{1.209229in}}% +\pgfpathlineto{\pgfqpoint{5.130439in}{1.439992in}}% +\pgfpathlineto{\pgfqpoint{5.167474in}{1.797104in}}% +\pgfpathlineto{\pgfqpoint{5.188636in}{2.009983in}}% +\pgfpathlineto{\pgfqpoint{5.188636in}{2.009983in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetrectcap% +\pgfsetmiterjoin% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.750000in}{0.500000in}}% +\pgfpathlineto{\pgfqpoint{0.750000in}{3.520000in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetrectcap% +\pgfsetmiterjoin% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{5.400000in}{0.500000in}}% +\pgfpathlineto{\pgfqpoint{5.400000in}{3.520000in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetrectcap% +\pgfsetmiterjoin% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.750000in}{0.500000in}}% +\pgfpathlineto{\pgfqpoint{5.400000in}{0.500000in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\begin{pgfscope}% +\pgfsetrectcap% +\pgfsetmiterjoin% +\pgfsetlinewidth{0.803000pt}% +\definecolor{currentstroke}{rgb}{0.000000,0.000000,0.000000}% +\pgfsetstrokecolor{currentstroke}% +\pgfsetdash{}{0pt}% +\pgfpathmoveto{\pgfqpoint{0.750000in}{3.520000in}}% +\pgfpathlineto{\pgfqpoint{5.400000in}{3.520000in}}% +\pgfusepath{stroke}% +\end{pgfscope}% +\end{pgfpicture}% +\makeatother% +\endgroup% diff --git a/buch/papers/fm/Quellen/NaT_Skript_20210920.pdf b/buch/papers/fm/Quellen/NaT_Skript_20210920.pdf Binary files differnew file mode 100644 index 0000000..b9acc1f --- /dev/null +++ b/buch/papers/fm/Quellen/NaT_Skript_20210920.pdf diff --git a/buch/papers/fm/main.tex b/buch/papers/fm/main.tex index 731f56f..0c98427 100644 --- a/buch/papers/fm/main.tex +++ b/buch/papers/fm/main.tex @@ -14,20 +14,9 @@ Die Frequenzmodulation ist eine Modulation die man auch schon im alten Radio findet. Falls du dich an die Zeit erinnerst, konnte man zwischen \textit{FM-AM} Umschalten, dies bedeutete so viel wie: \textit{F}requenz-\textit{M}odulation und \textit{A}mplituden-\textit{M}odulation. -Durch die Modulation wird ein Nachrichtensignal \(m(t)\) auf ein Trägersignal (z.B. ein Sinus- oder Rechtecksignal) abgebildet (kombiniert). -Durch dieses Auftragen vom Nachrichtensignal \(m(t)\) kann das modulierte Signal in einem gewünschten Frequenzbereich übertragen werden. -Der ursprünglich Frequenzbereich des Nachrichtensignal \(m(t)\) erstreckt sich typischerweise von 0 Hz bis zur Bandbreite \(B_m\). -\newline -Beim Empfänger wird dann durch Demodulation das ursprüngliche Nachrichtensignal \(m(t)\) so originalgetreu wie möglich zurückgewonnen. -\newline -Beim Trägersignal \(x_c(t)\) handelt es sich um ein informationsloses Hilfssignal. -Durch die Modulation mit dem Nachrichtensignal \(m(t)\) wird es zum modulierten zu übertragenden Signal. -Für alle Erklärungen wird ein sinusförmiges Trägersignal benutzt, jedoch kann auch ein Rechtecksignal, -welches Digital einfach umzusetzten ist, -genauso als Trägersignal genutzt werden kann. -Zuerst wird erklärt was \textit{FM-AM} ist, danach wie sich diese im Frequenzspektrum verhalten. -Erst dann erklär ich dir wie die Besselfunktion mit der Frequenzmodulation( acro?) zusammenhängt. -Nun zur Modulation im nächsten Abschnitt.\cite{fm:NAT} +Um das Thema einwenig einzuschränken werde ich leider nichts über die Vertiefte, (Physikalische) zusammenhänge oder die Demodulation aufzeigen. +Dieses Kapitel soll nurdie Frequenzmodulation und ihren zusammenhang mit der Besselfunktion erklären. +Aber zuerst einmal zur Modulation selbst, wie funktioniert diese Mathematisch. \input{papers/fm/00_modulation.tex} diff --git a/buch/papers/kreismembran/Makefile b/buch/papers/kreismembran/Makefile index ce3c89f..a13f2cf 100644 --- a/buch/papers/kreismembran/Makefile +++ b/buch/papers/kreismembran/Makefile @@ -4,6 +4,6 @@ # (c) 2020 Prof Dr Andreas Mueller # -images: - @echo "no images to be created in kreismembran" +images/TikzSaite.pdf: images/TikzSaite.tex + cd images && pdflatex TikzSaite.tex diff --git a/buch/papers/kreismembran/images/TikzSaite.pdf b/buch/papers/kreismembran/images/TikzSaite.pdf Binary files differnew file mode 100644 index 0000000..f95ceb9 --- /dev/null +++ b/buch/papers/kreismembran/images/TikzSaite.pdf diff --git a/buch/papers/kreismembran/images/TikzSaite.tex b/buch/papers/kreismembran/images/TikzSaite.tex new file mode 100644 index 0000000..bf3d8f6 --- /dev/null +++ b/buch/papers/kreismembran/images/TikzSaite.tex @@ -0,0 +1,57 @@ +% vim: ts=2 sw=2 et : +\documentclass[tikz, border=2mm]{standalone} + +\usepackage{times} +\usepackage{txfonts} + +\begin{document} + \begin{tikzpicture}[ + axis/.style = {very thick, -latex}, + axis tick/.style = { + draw, draw = black, fill = black, rectangle, + inner sep = 0pt, + minimum height = 2mm, + minimum width = 1pt, + }, + string/.style = { + ultra thick, draw = black, + }, + string end/.style = { + string, circle, fill = gray, + inner sep = 0pt, minimum size = 1mm, + }, + force/.style = { + very thick, draw = gray, -latex, + }, + ] + + % axes + \draw[axis] (0, 0) -- (8cm, 0) node[right] {$x$}; + \draw[axis] (0, 0) -- (0, 5cm) node[above] {$u(x, t)$}; + + % axes ticks + \node[axis tick, label = {-90:$x_0$}] at (2cm, 0) {}; + \node[axis tick, label = {-90:$x_0 + dx$}] at (6cm, 0) {}; + + % string + \coordinate (A) at (2cm, 2cm); + \coordinate (B) at (6cm, 4cm); + + \draw[string] (A) to[out = 40, in = 200] (B); + + \draw[force] (A) -- ++(220:15mm) node[gray, below right] {$T_1$}; + \draw[force] (B) -- ++(20:15mm) node[gray, above left] {$T_2$}; + + \draw[dashed, gray, thick] (A) -- ++(-15mm, 0); + \draw[gray, thick] (A) ++ (-7mm,0) arc (180:220:7mm) + node[midway, left] {$\alpha$}; + + \draw[dashed, gray, thick] (B) -- ++(15mm, 0); + \draw[gray, thick] (B) ++ (7mm,0) arc (0:20:7mm) + node[pos = 0, below] {$\beta$}; + + \node[string end, label={110:$P_1$}] at (A) {}; + \node[string end, label={110:$P_2$}] at (B) {}; + + \end{tikzpicture} +\end{document} diff --git a/buch/papers/kreismembran/teil0.tex b/buch/papers/kreismembran/teil0.tex index 27c6f0f..e962aab 100644 --- a/buch/papers/kreismembran/teil0.tex +++ b/buch/papers/kreismembran/teil0.tex @@ -42,7 +42,8 @@ Die Verbindung zwischen Membran und Saite ist intuitiv ersichtlich, stellt man s \begin{figure} \begin{center} - \includegraphics[width=5cm,angle=-90]{papers/kreismembran/images/Saite.pdf} + % \includegraphics[width=5cm,angle=-90]{papers/kreismembran/images/Saite.pdf} + \includegraphics[]{papers/kreismembran/images/TikzSaite.pdf} \caption{Infinitesimales Stück einer Saite} \label{kreismembran:im:Saite} \end{center} diff --git a/buch/papers/kugel/Makefile b/buch/papers/kugel/Makefile index f798a55..995206b 100644 --- a/buch/papers/kugel/Makefile +++ b/buch/papers/kugel/Makefile @@ -5,5 +5,6 @@ # images: - @echo "no images to be created in kugel" + $(MAKE) -C ./figures/povray/ + $(MAKE) -C ./figures/tikz/ diff --git a/buch/papers/kugel/figures/flux.pdf b/buch/papers/kugel/figures/flux.pdf Binary files differnew file mode 100644 index 0000000..6a87288 --- /dev/null +++ b/buch/papers/kugel/figures/flux.pdf diff --git a/buch/papers/kugel/images/Makefile b/buch/papers/kugel/figures/povray/Makefile index 4226dab..4226dab 100644 --- a/buch/papers/kugel/images/Makefile +++ b/buch/papers/kugel/figures/povray/Makefile diff --git a/buch/papers/kugel/figures/povray/curvature.jpg b/buch/papers/kugel/figures/povray/curvature.jpg Binary files differnew file mode 100644 index 0000000..6448966 --- /dev/null +++ b/buch/papers/kugel/figures/povray/curvature.jpg diff --git a/buch/papers/kugel/images/curvature.maxima b/buch/papers/kugel/figures/povray/curvature.maxima index 6313642..6313642 100644 --- a/buch/papers/kugel/images/curvature.maxima +++ b/buch/papers/kugel/figures/povray/curvature.maxima diff --git a/buch/papers/kugel/figures/povray/curvature.png b/buch/papers/kugel/figures/povray/curvature.png Binary files differnew file mode 100644 index 0000000..20268f2 --- /dev/null +++ b/buch/papers/kugel/figures/povray/curvature.png diff --git a/buch/papers/kugel/images/curvature.pov b/buch/papers/kugel/figures/povray/curvature.pov index 3b15d77..3b15d77 100644 --- a/buch/papers/kugel/images/curvature.pov +++ b/buch/papers/kugel/figures/povray/curvature.pov diff --git a/buch/papers/kugel/images/curvgraph.m b/buch/papers/kugel/figures/povray/curvgraph.m index 75effd6..75effd6 100644 --- a/buch/papers/kugel/images/curvgraph.m +++ b/buch/papers/kugel/figures/povray/curvgraph.m diff --git a/buch/papers/kugel/images/spherecurve.cpp b/buch/papers/kugel/figures/povray/spherecurve.cpp index 8ddf5e5..8ddf5e5 100644 --- a/buch/papers/kugel/images/spherecurve.cpp +++ b/buch/papers/kugel/figures/povray/spherecurve.cpp diff --git a/buch/papers/kugel/figures/povray/spherecurve.jpg b/buch/papers/kugel/figures/povray/spherecurve.jpg Binary files differnew file mode 100644 index 0000000..cd2e7c8 --- /dev/null +++ b/buch/papers/kugel/figures/povray/spherecurve.jpg diff --git a/buch/papers/kugel/images/spherecurve.m b/buch/papers/kugel/figures/povray/spherecurve.m index 99d5c9a..99d5c9a 100644 --- a/buch/papers/kugel/images/spherecurve.m +++ b/buch/papers/kugel/figures/povray/spherecurve.m diff --git a/buch/papers/kugel/images/spherecurve.maxima b/buch/papers/kugel/figures/povray/spherecurve.maxima index 1e9077c..1e9077c 100644 --- a/buch/papers/kugel/images/spherecurve.maxima +++ b/buch/papers/kugel/figures/povray/spherecurve.maxima diff --git a/buch/papers/kugel/figures/povray/spherecurve.png b/buch/papers/kugel/figures/povray/spherecurve.png Binary files differnew file mode 100644 index 0000000..ff24371 --- /dev/null +++ b/buch/papers/kugel/figures/povray/spherecurve.png diff --git a/buch/papers/kugel/images/spherecurve.pov b/buch/papers/kugel/figures/povray/spherecurve.pov index b1bf4b8..b1bf4b8 100644 --- a/buch/papers/kugel/images/spherecurve.pov +++ b/buch/papers/kugel/figures/povray/spherecurve.pov diff --git a/buch/papers/kugel/figures/tikz/Makefile b/buch/papers/kugel/figures/tikz/Makefile new file mode 100644 index 0000000..4ec4e5a --- /dev/null +++ b/buch/papers/kugel/figures/tikz/Makefile @@ -0,0 +1,12 @@ +FIGURES := spherical-coordinates.pdf curvature-1d.pdf + +all: $(FIGURES) + +%.pdf: %.tex + pdflatex $< + +curvature-1d.pdf: curvature-1d.tex curvature-1d.dat + pdflatex curvature-1d.tex + +curvature-1d.dat: curvature-1d.py + python3 $< diff --git a/buch/papers/kugel/figures/tikz/curvature-1d.dat b/buch/papers/kugel/figures/tikz/curvature-1d.dat new file mode 100644 index 0000000..6622398 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/curvature-1d.dat @@ -0,0 +1,500 @@ +0.000000000000000000e+00 1.000000000000000000e+00 5.000007286987066095e+02 +2.004008016032064049e-02 1.025056790958151831e+00 4.899813296957295279e+02 +4.008016032064128098e-02 1.050121598724190752e+00 4.799659543969494848e+02 +6.012024048096192147e-02 1.075186379145250948e+00 4.699586248906784931e+02 +8.016032064128256196e-02 1.100243094530689136e+00 4.599633600341078932e+02 +1.002004008016031955e-01 1.125283716879951434e+00 4.499841738393695891e+02 +1.202404809619238429e-01 1.150300231106550664e+00 4.400250738615438877e+02 +1.402805611222444904e-01 1.175284638256853809e+00 4.300900595892592833e+02 +1.603206412825651239e-01 1.200228958722394657e+00 4.201831208385332275e+02 +1.803607214428857575e-01 1.225125235444413541e+00 4.103082361504954747e+02 +2.004008016032063910e-01 1.249965537109345881e+00 4.004693711936409954e+02 +2.204408817635270523e-01 1.274741961333968554e+00 3.906704771712513775e+02 +2.404809619238476859e-01 1.299446637838927776e+00 3.809154892346260795e+02 +2.605210420841683194e-01 1.324071731609375302e+00 3.712083249027585907e+02 +2.805611222444889807e-01 1.348609446041445725e+00 3.615528824890962483e+02 +3.006012024048095865e-01 1.373052026073301457e+00 3.519530395360096122e+02 +3.206412825651302478e-01 1.397391761299501045e+00 3.424126512576057166e+02 +3.406813627254509091e-01 1.421620989067430063e+00 3.329355489915074031e+02 +3.607214428857715149e-01 1.445732097554558448e+00 3.235255386602207750e+02 +3.807615230460921762e-01 1.469717528825280173e+00 3.141863992427096832e+02 +4.008016032064127820e-01 1.493569781866116220e+00 3.049218812567906411e+02 +4.208416833667334433e-01 1.517281415598057848e+00 2.957357052529569614e+02 +4.408817635270541047e-01 1.540845051864837556e+00 2.866315603202378384e+02 +4.609218436873747105e-01 1.564253378395934257e+00 2.776131026046919601e+02 +4.809619238476953718e-01 1.587499151743118286e+00 2.686839538411309150e+02 +5.010020040080159776e-01 1.610575200189357625e+00 2.598476998986618582e+02 +5.210420841683366389e-01 1.633474426628916509e+00 2.511078893406329655e+02 +5.410821643286573002e-01 1.656189811417493107e+00 2.424680319995614752e+02 +5.611222444889779615e-01 1.678714415191247422e+00 2.339315975676150003e+02 +5.811623246492986228e-01 1.701041381653590534e+00 2.255020142032130082e+02 +6.012024048096191731e-01 1.723163940328612753e+00 2.171826671543084046e+02 +6.212424849699398344e-01 1.745075409280051337e+00 2.089768973989005474e+02 +6.412825651302604957e-01 1.766769197794693991e+00 2.008880003033277433e+02 +6.613226452905811570e-01 1.788238809029157217e+00 1.929192242988764008e+02 +6.813627254509018183e-01 1.809477842618958832e+00 1.850737695772391760e+02 +7.014028056112223686e-01 1.830479997248850577e+00 1.773547868053454408e+02 +7.214428857715430299e-01 1.851239073183373218e+00 1.697653758600805816e+02 +7.414829659318636912e-01 1.871748974756613837e+00 1.623085845834024497e+02 +7.615230460921843525e-01 1.892003712820175432e+00 1.549874075583541639e+02 +7.815631262525050138e-01 1.911997407148365635e+00 1.478047849064652723e+02 +8.016032064128255641e-01 1.931724288799645972e+00 1.407636011070246695e+02 +8.216432865731462254e-01 1.951178702433387091e+00 1.338666838386980942e+02 +8.416833667334668867e-01 1.970355108581006931e+00 1.271168028439571600e+02 +8.617234468937875480e-01 1.989248085870571892e+00 1.205166688167746969e+02 +8.817635270541082093e-01 2.007852333203973494e+00 1.140689323140332476e+02 +9.018036072144288706e-01 2.026162671885804123e+00 1.077761826910842018e+02 +9.218436873747494209e-01 2.044174047703075203e+00 1.016409470618853419e+02 +9.418837675350700822e-01 2.061881532954947804e+00 9.566568928413349227e+01 +9.619238476953907435e-01 2.079280328431652780e+00 8.985280896980044929e+01 +9.819639278557114048e-01 2.096365765341811738e+00 8.420464052146976996e+01 +1.002004008016031955e+00 2.113133307187384347e+00 7.872345219486057033e+01 +1.022044088176352616e+00 2.129578551585488810e+00 7.341144518791566043e+01 +1.042084168336673278e+00 2.145697232036356539e+00 6.827075275681968947e+01 +1.062124248496993939e+00 2.161485219636723798e+00 6.330343935930140020e+01 +1.082164328657314600e+00 2.176938524737964453e+00 5.851149982556578522e+01 +1.102204408817635262e+00 2.192053298548298113e+00 5.389685855718687435e+01 +1.122244488977955923e+00 2.206825834678430187e+00 4.946136875428519630e+01 +1.142284569138276584e+00 2.221252570630007028e+00 4.520681167129833966e+01 +1.162324649298597246e+00 2.235330089226285288e+00 4.113489590164444110e+01 +1.182364729458917685e+00 2.249055119984439521e+00 3.724725669156617869e+01 +1.202404809619238346e+00 2.262424540428958686e+00 3.354545528342948302e+01 +1.222444889779559007e+00 2.275435377345608856e+00 3.003097828874255271e+01 +1.242484969939879669e+00 2.288084807975446999e+00 2.670523709114522859e+01 +1.262525050100200330e+00 2.300370161148418191e+00 2.356956727960955078e+01 +1.282565130260520991e+00 2.312288918356074419e+00 2.062522811207871243e+01 +1.302605210420841653e+00 2.323838714762985536e+00 1.787340200976009186e+01 +1.322645290581162314e+00 2.335017340156437360e+00 1.531519408227492640e+01 +1.342685370741482975e+00 2.345822739834032333e+00 1.295163168385587404e+01 +1.362725450901803637e+00 2.356253015428841913e+00 1.078366400077049292e+01 +1.382765531062124298e+00 2.366306425671775404e+00 8.812161670136093861e+00 +1.402805611222444737e+00 2.375981387090854824e+00 7.037916430279492097e+00 +1.422845691382765398e+00 2.385276474647127998e+00 5.461640802781636772e+00 +1.442885771543086060e+00 2.394190422306948562e+00 4.083967806335150996e+00 +1.462925851703406721e+00 2.402722123550405264e+00 2.905450702529595031e+00 +1.482965931863727382e+00 2.410870631815691834e+00 1.926562773666154138e+00 +1.503006012024048044e+00 2.418635160879236246e+00 1.147697132691613664e+00 +1.523046092184368705e+00 2.426015085171442820e+00 5.691665653277303560e-01 +1.543086172344689366e+00 2.433009940027915263e+00 1.912034044591185422e-01 +1.563126252505010028e+00 2.439619421876060734e+00 1.395943683027547552e-02 +1.583166332665330689e+00 2.445843388357002546e+00 3.750584208938356756e-02 +1.603206412825651128e+00 2.451681858382752210e+00 2.618331642032580286e-01 +1.623246492985971789e+00 2.457135012128611962e+00 6.868513152547650602e-01 +1.643286573146292451e+00 2.462203190960818411e+00 1.312389611621266550e+00 +1.663326653306613112e+00 2.466886897299453096e+00 2.138196842519770602e+00 +1.683366733466933773e+00 2.471186794416676769e+00 3.163941370891084848e+00 +1.703406813627254435e+00 2.475103706170361573e+00 4.389211266582178084e+00 +1.723446893787575096e+00 2.478638616673238371e+00 5.813514471774004377e+00 +1.743486973947895757e+00 2.481792669897687542e+00 7.436278998587575018e+00 +1.763527054108216419e+00 2.484567169216326032e+00 9.256853158789395408e+00 +1.783567134268537080e+00 2.486963576878586935e+00 1.127450582550371472e+01 +1.803607214428857741e+00 2.488983513423490557e+00 1.348842672682692978e+01 +1.823647294589178181e+00 2.490628757028852114e+00 1.589772677122579658e+01 +1.843687374749498842e+00 2.491901242797179172e+00 1.850143840458866151e+01 +1.863727454909819503e+00 2.492803061978552392e+00 2.129851599878729118e+01 +1.883767535070140164e+00 2.493336461130795989e+00 2.428783627159159408e+01 +1.903807615230460826e+00 2.493503841217282080e+00 2.746819873777046439e+01 +1.923847695390781487e+00 2.493307756642720641e+00 3.083832619119621654e+01 +1.943887775551102148e+00 2.492750914227336079e+00 3.439686521775931283e+01 +1.963927855711422810e+00 2.491836172119830994e+00 3.814238673888808506e+01 +1.983967935871743471e+00 2.490566538649576334e+00 4.207338658545420174e+01 +2.004008016032063910e+00 2.488945171118494670e+00 4.618828610183413019e+01 +2.024048096192384794e+00 2.486975374533113126e+00 5.048543277988349587e+01 +2.044088176352705233e+00 2.484660600277302400e+00 5.496310092257003532e+01 +2.064128256513026116e+00 2.482004444726231274e+00 5.961949233699898087e+01 +2.084168336673346555e+00 2.479010647802090794e+00 6.445273705655124274e+01 +2.104208416833667439e+00 2.475683091472176578e+00 6.946089409184656915e+01 +2.124248496993987878e+00 2.472025798189923851e+00 7.464195221022733051e+01 +2.144288577154308317e+00 2.468042929279522735e+00 7.999383074345310263e+01 +2.164328657314629201e+00 2.463738783264768806e+00 8.551438042327842481e+01 +2.184368737474949640e+00 2.459117794142811952e+00 9.120138424458035331e+01 +2.204408817635270523e+00 2.454184529603501197e+00 9.705255835568922862e+01 +2.224448897795590963e+00 2.448943689195040463e+00 1.030655529755629374e+02 +2.244488977955911846e+00 2.443400102436689814e+00 1.092379533374396345e+02 +2.264529058116232285e+00 2.437558726879272442e+00 1.155672806585862560e+02 +2.284569138276553169e+00 2.431424646114265897e+00 1.220509931357573947e+02 +2.304609218436873608e+00 2.425003067732275142e+00 1.286864869659601709e+02 +2.324649298597194491e+00 2.418299321231706767e+00 1.354710973921206971e+02 +2.344689378757514930e+00 2.411318855878493483e+00 1.424020997732258422e+02 +2.364729458917835370e+00 2.404067238517710425e+00 1.494767106785168664e+02 +2.384769539078156253e+00 2.396550151337982548e+00 1.566920890052907680e+02 +2.404809619238476692e+00 2.388773389589562868e+00 1.640453371198620403e+02 +2.424849699398797576e+00 2.380742859257013677e+00 1.715335020212285144e+02 +2.444889779559118015e+00 2.372464574687412675e+00 1.791535765269697436e+02 +2.464929859719438898e+00 2.363944656175040571e+00 1.869025004809070936e+02 +2.484969939879759337e+00 2.355189327503528496e+00 1.947771619820341300e+02 +2.505010020040080221e+00 2.346204913446435114e+00 2.027743986342312610e+02 +2.525050100200400660e+00 2.336997837227277053e+00 2.108909988162550349e+02 +2.545090180360721543e+00 2.327574617940013191e+00 2.191237029714987443e+02 +2.565130260521041983e+00 2.317941867931036182e+00 2.274692049170012638e+02 +2.585170340681362422e+00 2.308106290143709938e+00 2.359241531711823257e+02 +2.605210420841683305e+00 2.298074675426524660e+00 2.444851522997685436e+02 +2.625250501002003745e+00 2.287853899805951663e+00 2.531487642793698569e+02 +2.645290581162324628e+00 2.277450921725090449e+00 2.619115098781609845e+02 +2.665330661322645067e+00 2.266872779249217817e+00 2.707698700531099121e+02 +2.685370741482965951e+00 2.256126587239360770e+00 2.797202873631965190e+02 +2.705410821643286390e+00 2.245219534495030533e+00 2.887591673980486462e+02 +2.725450901803607273e+00 2.234158880867263886e+00 2.978828802214276834e+02 +2.745490981963927712e+00 2.222951954343126868e+00 3.070877618289785573e+02 +2.765531062124248596e+00 2.211606148102859937e+00 3.163701156196634088e+02 +2.785571142284569035e+00 2.200128917550841834e+00 3.257262138802831259e+02 +2.805611222444889474e+00 2.188527777321561008e+00 3.351522992824964149e+02 +2.825651302605210358e+00 2.176810298261803389e+00 3.446445863917298311e+02 +2.845691382765530797e+00 2.164984104390269337e+00 3.541992631873747541e+02 +2.865731462925851680e+00 2.153056869835828113e+00 3.638124925936636487e+02 +2.885771543086172120e+00 2.141036315755658670e+00 3.734804140206049965e+02 +2.905811623246493003e+00 2.128930207234495775e+00 3.831991449143642399e+02 +2.925851703406813442e+00 2.116746350166242685e+00 3.929647823164625606e+02 +2.945891783567134325e+00 2.104492588119187158e+00 4.027734044311732191e+02 +2.965931863727454765e+00 2.092176799186097114e+00 4.126210722004783520e+02 +2.985971943887775648e+00 2.079806892820440289e+00 4.225038308859634526e+02 +3.006012024048096087e+00 2.067390806660023728e+00 4.324177116570036219e+02 +3.026052104208416527e+00 2.054936503339299669e+00 4.423587331846135839e+02 +3.046092184368737410e+00 2.042451967291644355e+00 4.523229032403145879e+02 +3.066132264529057849e+00 2.029945201542878497e+00 4.623062202993779124e+02 +3.086172344689378733e+00 2.017424224497317731e+00 4.723046751478044598e+02 +3.106212424849699172e+00 2.004897066717655107e+00 4.823142524923883343e+02 +3.126252505010020055e+00 1.992371767699953278e+00 4.923309325732264483e+02 +3.146292585170340494e+00 1.979856372645053764e+00 5.023506927780170486e+02 +3.166332665330661378e+00 1.967358929227692510e+00 5.123695092575079570e+02 +3.186372745490981817e+00 1.954887484364624450e+00 5.223833585414381560e+02 +3.206412825651302256e+00 1.942450080983050720e+00 5.323882191543301587e+02 +3.226452905811623140e+00 1.930054754790647475e+00 5.423800732304792973e+02 +3.246492985971943579e+00 1.917709531048496396e+00 5.523549081274929904e+02 +3.266533066132264462e+00 1.905422421348207829e+00 5.623087180377352752e+02 +3.286573146292584902e+00 1.893201420394537093e+00 5.722375055970223912e+02 +3.306613226452905785e+00 1.881054502794775818e+00 5.821372834899317468e+02 +3.326653306613226224e+00 1.868989619856223694e+00 5.920040760510720474e+02 +3.346693386773547108e+00 1.857014696393007203e+00 6.018339208616766882e+02 +3.366733466933867547e+00 1.845137627543546266e+00 6.116228703408767160e+02 +3.386773547094188430e+00 1.833366275599931816e+00 6.213669933310161468e+02 +3.406813627254508869e+00 1.821708466850500807e+00 6.310623766763693538e+02 +3.426853707414829309e+00 1.810171988436861001e+00 6.407051267946321786e+02 +3.446893787575150192e+00 1.798764585226647394e+00 6.502913712405503475e+02 +3.466933867735470631e+00 1.787493956703248177e+00 6.598172602610595732e+02 +3.486973947895791515e+00 1.776367753873757227e+00 6.692789683413144530e+02 +3.507014028056111954e+00 1.765393576196397918e+00 6.786726957409805436e+02 +3.527054108216432837e+00 1.754578968528644589e+00 6.879946700201794556e+02 +3.547094188376753277e+00 1.743931418097274477e+00 6.972411475544654422e+02 +3.567134268537074160e+00 1.733458351491558469e+00 7.064084150382354892e+02 +3.587174348697394599e+00 1.723167131680813480e+00 7.154927909759586555e+02 +3.607214428857715482e+00 1.713065055057490182e+00 7.244906271606341761e+02 +3.627254509018035922e+00 1.703159348507010673e+00 7.333983101388791965e+02 +3.647294589178356361e+00 1.693457166505509370e+00 7.422122626620608798e+02 +3.667334669338677244e+00 1.683965588246658651e+00 7.509289451228887629e+02 +3.687374749498997684e+00 1.674691614798728523e+00 7.595448569768896050e+02 +3.707414829659318567e+00 1.665642166293012316e+00 7.680565381481970917e+02 +3.727454909819639006e+00 1.656824079144766593e+00 7.764605704190873894e+02 +3.747494989979959890e+00 1.648244103307762831e+00 7.847535788027066701e+02 +3.767535070140280329e+00 1.639908899563566447e+00 7.929322328984358137e+02 +3.787575150300601212e+00 1.631825036846622945e+00 8.009932482293520479e+02 +3.807615230460921651e+00 1.623998989606231236e+00 8.089333875612445581e+02 +3.827655310621242535e+00 1.616437135206458375e+00 8.167494622026619027e+02 +3.847695390781562974e+00 1.609145751365050003e+00 8.244383332854611126e+02 +3.867735470941883413e+00 1.602131013632347223e+00 8.319969130253510912e+02 +3.887775551102204297e+00 1.595398992911243319e+00 8.394221659619206548e+02 +3.907815631262524736e+00 1.588955653019160641e+00 8.467111101776515625e+02 +3.927855711422845619e+00 1.582806848293030866e+00 8.538608184954326816e+02 +3.947895791583166059e+00 1.576958321238246530e+00 8.608684196540875746e+02 +3.967935871743486942e+00 1.571415700222517753e+00 8.677310994614492756e+02 +3.987975951903807381e+00 1.566184497215570515e+00 8.744461019245148918e+02 +4.008016032064127820e+00 1.561270105575586431e+00 8.810107303562293737e+02 +4.028056112224448704e+00 1.556677797883275982e+00 8.874223484584509833e+02 +4.048096192384769587e+00 1.552412723824457164e+00 8.936783813806663375e+02 +4.068136272545089582e+00 1.548479908121984883e+00 8.997763167540272207e+02 +4.088176352705410466e+00 1.544884248517864656e+00 9.057137057002989877e+02 +4.108216432865731349e+00 1.541630513806363734e+00 9.114881638153049153e+02 +4.128256513026052232e+00 1.538723341918903031e+00 9.170973721264856522e+02 +4.148296593186372228e+00 1.536167238061506124e+00 9.225390780241765469e+02 +4.168336673346693111e+00 1.533966572905543835e+00 9.278110961662381442e+02 +4.188376753507013994e+00 1.532125580832512046e+00 9.329113093556687772e+02 +4.208416833667334878e+00 1.530648358233542172e+00 9.378376693908538755e+02 +4.228456913827654873e+00 1.529538861864323529e+00 9.425881978881050145e+02 +4.248496993987975756e+00 1.528800907256105734e+00 9.471609870761637922e+02 +4.268537074148296639e+00 1.528438167183412855e+00 9.515542005623437944e+02 +4.288577154308616635e+00 1.528454170189090799e+00 9.557660740700115412e+02 +4.308617234468937518e+00 1.528852299167273276e+00 9.597949161471043453e+02 +4.328657314629258401e+00 1.529635790004841844e+00 9.636391088454030296e+02 +4.348697394789579285e+00 1.530807730281920964e+00 9.672971083702858550e+02 +4.368737474949899280e+00 1.532371058031932520e+00 9.707674457007029787e+02 +4.388777555110220163e+00 1.534328560561707189e+00 9.740487271791230341e+02 +4.408817635270541047e+00 1.536682873332125610e+00 9.771396350712136609e+02 +4.428857715430861930e+00 1.539436478899741445e+00 9.800389280950321336e+02 +4.448897795591181925e+00 1.542591705919805545e+00 9.827454419195138371e+02 +4.468937875751502808e+00 1.546150728211101333e+00 9.852580896320574766e+02 +4.488977955911823692e+00 1.550115563882954017e+00 9.875758621750194379e+02 +4.509018036072143687e+00 1.554488074524779329e+00 9.896978287509432448e+02 +4.529058116232464570e+00 1.559269964458483093e+00 9.916231371963593801e+02 +4.549098196392785454e+00 1.564462780054019841e+00 9.933510143240067691e+02 +4.569138276553106337e+00 1.570067909108384452e+00 9.948807662333381359e+02 +4.589178356713426332e+00 1.576086580288286632e+00 9.962117785891847461e+02 +4.609218436873747216e+00 1.582519862636726060e+00 9.973435168684678729e+02 +4.629258517034068099e+00 1.589368665143676473e+00 9.982755265748584179e+02 +4.649298597194388982e+00 1.596633736381040114e+00 9.990074334212996519e+02 +4.669338677354708977e+00 1.604315664202031311e+00 9.995389434803163340e+02 +4.689378757515029861e+00 1.612414875505097545e+00 9.998698433020541643e+02 +4.709418837675350744e+00 1.620931636062481251e+00 1.000000000000000000e+03 +4.729458917835670739e+00 1.629866050413486533e+00 9.999293613043465712e+02 +4.749498997995991623e+00 1.639218061822500072e+00 9.996579555829848687e+02 +4.769539078156312506e+00 1.648987452301774237e+00 9.991858918301107906e+02 +4.789579158316633389e+00 1.659173842698966617e+00 9.985133596224548000e+02 +4.809619238476953385e+00 1.669776692849408217e+00 9.976406290431494881e+02 +4.829659318637274268e+00 1.680795301793028163e+00 9.965680505732656229e+02 +4.849699398797595151e+00 1.692228808055850298e+00 9.952960549510630699e+02 +4.869739478957916035e+00 1.704076189995956891e+00 9.938251529990096742e+02 +4.889779559118236030e+00 1.716336266213768447e+00 9.921559354186391602e+02 +4.909819639278556913e+00 1.729007696026489072e+00 9.902890725533304703e+02 +4.929859719438877796e+00 1.742088980006505361e+00 9.882253141191039276e+02 +4.949899799599197792e+00 1.755578460583548051e+00 9.859654889035417682e+02 +4.969939879759518675e+00 1.769474322710359537e+00 9.835105044329535531e+02 +4.989979959919839558e+00 1.783774594591596818e+00 9.808613466079225418e+02 +5.010020040080160442e+00 1.798477148475690290e+00 9.780190793073752502e+02 +5.030060120240480437e+00 1.813579701509330233e+00 9.749848439613382425e+02 +5.050100200400801320e+00 1.829079816654240354e+00 9.717598590925483677e+02 +5.070140280561122204e+00 1.844974903665872024e+00 9.683454198271051609e+02 +5.090180360721443087e+00 1.861262220133622414e+00 9.647428973743595861e+02 +5.110220440881763082e+00 1.877938872582164631e+00 9.609537384762481906e+02 +5.130260521042083965e+00 1.895001817633443997e+00 9.569794648262927694e+02 +5.150300601202404849e+00 1.912447863228867728e+00 9.528216724585031443e+02 +5.170340681362724844e+00 1.930273669911211520e+00 9.484820311064232783e+02 +5.190380761523045727e+00 1.948475752165717889e+00 9.439622835325791357e+02 +5.210420841683366611e+00 1.967050479819845377e+00 9.392642448286025001e+02 +5.230460921843687494e+00 1.985994079501115728e+00 9.343898016863045086e+02 +5.250501002004007489e+00 2.005302636152468398e+00 9.293409116399966479e+02 +5.270541082164328373e+00 2.024972094604515771e+00 9.241196022803618462e+02 +5.290581162324649256e+00 2.044998261204058920e+00 9.187279704401921663e+02 +5.310621242484970139e+00 2.065376805498225998e+00 9.131681813523182427e+02 +5.330661322645290134e+00 2.086103261973545120e+00 9.074424677800708423e+02 +5.350701402805611018e+00 2.107173031849256084e+00 9.015531291206212927e+02 +5.370741482965931901e+00 2.128581384924137954e+00 8.955025304815651452e+02 +5.390781563126251896e+00 2.150323461476119746e+00 8.892931017311141204e+02 +5.410821643286572780e+00 2.172394274213905074e+00 8.829273365222821894e+02 +5.430861723446893663e+00 2.194788710279818922e+00 8.764077912914567605e+02 +5.450901803607214546e+00 2.217501533303093186e+00 8.697370842317545794e+02 +5.470941883767534542e+00 2.240527385502743662e+00 8.629178942415799156e+02 +5.490981963927855425e+00 2.263860789839213794e+00 8.559529598487991962e+02 +5.511022044088176308e+00 2.287496152213901457e+00 8.488450781109748959e+02 +5.531062124248497192e+00 2.311427763715702355e+00 8.415971034920893317e+02 +5.551102204408817187e+00 2.335649802913659201e+00 8.342119467162179944e+02 +5.571142284569138070e+00 2.360156338194801862e+00 8.266925735986054633e+02 +5.591182364729458953e+00 2.384941330146225447e+00 8.190420038546226351e+02 +5.611222444889778949e+00 2.409998633980471094e+00 8.112633098870738877e+02 +5.631262525050099832e+00 2.435322002003218689e+00 8.033596155523445077e+02 +5.651302605210420715e+00 2.460905086122306518e+00 7.953340949058906517e+02 +5.671342685370741599e+00 2.486741440397069347e+00 7.871899709275636496e+02 +5.691382765531061594e+00 2.512824523626973505e+00 7.789305142272897911e+02 +5.711422845691382477e+00 2.539147701978509364e+00 7.705590417316205958e+02 +5.731462925851703361e+00 2.565704251649277179e+00 7.620789153516853958e+02 +5.751503006012024244e+00 2.592487361568209359e+00 7.534935406330763499e+02 +5.771543086172344239e+00 2.619490136130837588e+00 7.448063653882098833e+02 +5.791583166332665122e+00 2.646705597968513235e+00 7.360208783117147959e+02 +5.811623246492986006e+00 2.674126690750449509e+00 7.271406075794046728e+02 +5.831663326653306001e+00 2.701746282017488454e+00 7.181691194313910955e+02 +5.851703406813626884e+00 2.729557166046437722e+00 7.091100167399115435e+02 +5.871743486973947768e+00 2.757552066743818919e+00 6.999669375624501981e+02 +5.891783567134268651e+00 2.785723640567889792e+00 6.907435536807222434e+02 +5.911823647294588646e+00 2.814064479477745628e+00 6.814435691261201100e+02 +5.931863727454909530e+00 2.842567113908326615e+00 6.720707186922043093e+02 +5.951903807615230413e+00 2.871224015770126758e+00 6.626287664348450335e+02 +5.971943887775551296e+00 2.900027601472412453e+00 6.531215041606080831e+02 +5.991983967935871291e+00 2.928970234968723663e+00 6.435527499039991426e+02 +6.012024048096192175e+00 2.958044230823453802e+00 6.339263463941722421e+02 +6.032064128256513058e+00 2.987241857298241765e+00 6.242461595117250681e+02 +6.052104208416833053e+00 3.016555339456976181e+00 6.145160767361943499e+02 +6.072144288577153937e+00 3.045976862288150677e+00 6.047400055848752345e+02 +6.092184368737474820e+00 3.075498573843291616e+00 5.949218720435990235e+02 +6.112224448897795703e+00 3.105112588390241068e+00 5.850656189900898880e+02 +6.132264529058115698e+00 3.134810989579997376e+00 5.751752046105395948e+02 +6.152304609218436582e+00 3.164585833625852995e+00 5.652546008100322297e+02 +6.172344689378757465e+00 3.194429152493549307e+00 5.553077916174643178e+02 +6.192384769539078349e+00 3.224332957101171182e+00 5.453387715855913029e+02 +6.212424849699398344e+00 3.254289240527490801e+00 5.353515441868502194e+02 +6.232464929859719227e+00 3.284289981227487498e+00 5.253501202055987278e+02 +6.252505010020040110e+00 3.314327146253717160e+00 5.153385161274204620e+02 +6.272545090180360106e+00 3.344392694482282824e+00 5.053207525261383921e+02 +6.292585170340680989e+00 3.374478579842083992e+00 4.953008524491854700e+02 +6.312625250501001872e+00 3.404576754546040807e+00 4.852828398019860288e+02 +6.332665330661322756e+00 3.434679172323020335e+00 4.752707377319885609e+02 +6.352705410821642751e+00 3.464777791649148231e+00 4.652685670130051676e+02 +6.372745490981963634e+00 3.494864578977221026e+00 4.552803444305018843e+02 +6.392785571142284518e+00 3.524931511962900554e+00 4.453100811684944347e+02 +6.412825651302604513e+00 3.554970582686421299e+00 4.353617811986907782e+02 +6.432865731462925396e+00 3.584973800868508143e+00 4.254394396725285787e+02 +6.452905811623246279e+00 3.614933197079194027e+00 4.155470413167602146e+02 +6.472945891783567163e+00 3.644840825938279849e+00 4.056885588332180532e+02 +6.492985971943887158e+00 3.674688769306128311e+00 3.958679513034139177e+02 +6.513026052104208041e+00 3.704469139463525185e+00 3.860891625986033660e+02 +6.533066132264528925e+00 3.734174082279312135e+00 3.763561197959638776e+02 +6.553106212424849808e+00 3.763795780364542765e+00 3.666727316015129077e+02 +6.573146292585169803e+00 3.793326456211875808e+00 3.570428867804062634e+02 +6.593186372745490686e+00 3.822758375318961566e+00 3.474704525952413405e+02 +6.613226452905811570e+00 3.852083849294539952e+00 3.379592732530011290e+02 +6.633266533066131565e+00 3.881295238946041781e+00 3.285131683612518714e+02 +6.653306613226452448e+00 3.910384957347420976e+00 3.191359313942206768e+02 +6.673346693386773332e+00 3.939345472885993349e+00 3.098313281693717158e+02 +6.693386773547094215e+00 3.968169312287071815e+00 3.006030953350844470e+02 +6.713426853707414210e+00 3.996849063615168340e+00 2.914549388700485792e+02 +6.733466933867735094e+00 4.025377379250564047e+00 2.823905325949738199e+02 +6.753507014028055977e+00 4.053746978840048421e+00 2.734135166972172897e+02 +6.773547094188376860e+00 4.081950652220645459e+00 2.645274962689139784e+02 +6.793587174348696855e+00 4.109981262315153927e+00 2.557360398592040838e+02 +6.813627254509017739e+00 4.137831747998339971e+00 2.470426780411323762e+02 +6.833667334669338622e+00 4.165495126932617254e+00 2.384509019938032282e+02 +6.853707414829658617e+00 4.192964498372094617e+00 2.299641621003518992e+02 +6.873747494989979501e+00 4.220233045933865057e+00 2.215858665622992305e+02 +6.893787575150300384e+00 4.247294040335392928e+00 2.133193800308498282e+02 +6.913827655310621267e+00 4.274140842096944226e+00 2.051680222556753677e+02 +6.933867735470941263e+00 4.300766904207941721e+00 1.971350667517327224e+02 +6.953907815631262146e+00 4.327165774756191574e+00 1.892237394846470409e+02 +6.973947895791583029e+00 4.353331099518909397e+00 1.814372175751938983e+02 +6.993987975951903913e+00 4.379256624514525242e+00 1.737786280233937930e+02 +7.014028056112223908e+00 4.404936198514227463e+00 1.662510464527364036e+02 +7.034068136272544791e+00 4.430363775512244473e+00 1.588574958750354824e+02 +7.054108216432865675e+00 4.455533417153866971e+00 1.516009454764152053e+02 +7.074148296593185670e+00 4.480439295120240750e+00 1.444843094249101227e+02 +7.094188376753506553e+00 4.505075693468969966e+00 1.375104457001587832e+02 +7.114228456913827436e+00 4.529437010929587615e+00 1.306821549456662126e+02 +7.134268537074148320e+00 4.553517763152981068e+00 1.240021793440882476e+02 +7.154308617234468315e+00 4.577312584913854288e+00 1.174732015159950436e+02 +7.174348697394789198e+00 4.600816232265364292e+00 1.110978434425529429e+02 +7.194388777555110082e+00 4.624023584645035712e+00 1.048786654125609346e+02 +7.214428857715430965e+00 4.646929646931139857e+00 9.881816499425976019e+01 +7.234468937875750960e+00 4.669529551448691862e+00 9.291877603233054117e+01 +7.254509018036071843e+00 4.691818559924266552e+00 8.718286767048279273e+01 +7.274549098196392727e+00 4.713792065388847874e+00 8.161274340002822214e+01 +7.294589178356712722e+00 4.735445594027945404e+00 7.621064013481766608e+01 +7.314629258517033605e+00 4.756774806978249615e+00 7.097872731291521120e+01 +7.334669338677354489e+00 4.777775502070065627e+00 6.591910602537187458e+01 +7.354709418837675372e+00 4.798443615514884186e+00 6.103380817244479317e+01 +7.374749498997995367e+00 4.818775223537352659e+00 5.632479564760383539e+01 +7.394789579158316251e+00 4.838766543951037669e+00 5.179395954965144000e+01 +7.414829659318637134e+00 4.858413937677311445e+00 4.744311942327492204e+01 +7.434869739478958017e+00 4.877713910206781023e+00 4.327402252833200436e+01 +7.454909819639278012e+00 4.896663113002647449e+00 3.928834313816695811e+01 +7.474949899799598896e+00 4.915258344845452321e+00 3.548768186723586382e+01 +7.494989979959919779e+00 4.933496553118660088e+00 3.187356502831510241e+01 +7.515030060120239774e+00 4.951374835034558330e+00 2.844744401954644530e+01 +7.535070140280560658e+00 4.968890438800001697e+00 2.521069474156775314e+01 +7.555110220440881541e+00 4.986040764721496821e+00 2.216461704496407137e+01 +7.575150300601202424e+00 5.002823366249223191e+00 1.931043420825829671e+01 +7.595190380761522420e+00 5.019235950959545889e+00 1.664929244665321662e+01 +7.615230460921843303e+00 5.035276381475634722e+00 1.418226045172094807e+01 +7.635270541082164186e+00 5.050942676325811398e+00 1.191032896222642634e+01 +7.655310621242485070e+00 5.066233010739295217e+00 9.834410366254722646e+00 +7.675350701402805065e+00 5.081145717379013327e+00 7.955338334803988332e+00 +7.695390781563125948e+00 5.095679287011193104e+00 6.273867486990178044e+00 +7.715430861723446831e+00 5.109832369111450667e+00 4.790673086998884500e+00 +7.735470941883766827e+00 5.123603772407154366e+00 3.506350772904916813e+00 +7.755511022044087710e+00 5.136992465355831428e+00 2.421416317469038848e+00 +7.775551102204408593e+00 5.149997576559419699e+00 1.536305421008269612e+00 +7.795591182364729477e+00 5.162618395114220604e+00 8.513735364222744240e-01 +7.815631262525049472e+00 5.174854370896386335e+00 3.668957264467385126e-01 +7.835671342685370355e+00 5.186705114782850679e+00 8.306655319023606432e-02 +7.855711422845691239e+00 5.198170398807591575e+00 0.000000000000000000e+00 +7.875751503006012122e+00 5.209250156253183661e+00 1.177294256871248418e-01 +7.895791583166332117e+00 5.219944481677590176e+00 4.362075511299656205e-01 +7.915831663326653000e+00 5.230253630876193327e+00 9.553064782610614092e-01 +7.935871743486973884e+00 5.240178020779059587e+00 1.674817741429812656e+00 +7.955911823647293879e+00 5.249718229283516280e+00 2.594452391120483092e+00 +7.975951903807614762e+00 5.258874995022061682e+00 3.713841109991943057e+00 +7.995991983967935646e+00 5.267649217065747180e+00 5.032534361192301020e+00 +8.016032064128255641e+00 5.276041954563106096e+00 6.550002568888864118e+00 +8.036072144288576524e+00 5.284054426314822805e+00 8.265636330941418919e+00 +8.056112224448897408e+00 5.291688010284259391e+00 1.017874666363291603e+01 +8.076152304609218291e+00 5.298944243044088509e+00 1.228856527835901602e+01 +8.096192384769539174e+00 5.305824819159209227e+00 1.459424489016658200e+01 +8.116232464929860058e+00 5.312331590506231827e+00 1.709485955801583756e+01 +8.136272545090179165e+00 5.318466565529778478e+00 1.978940505663001659e+01 +8.156312625250500048e+00 5.324231908435906213e+00 2.267679927978462828e+01 +8.176352705410820931e+00 5.329629938322985261e+00 2.575588267487045968e+01 +8.196392785571141815e+00 5.334663128250363151e+00 2.902541870856099848e+01 +8.216432865731462698e+00 5.339334104245210710e+00 3.248409436339298395e+01 +8.236472945891783581e+00 5.343645644247928317e+00 3.613052066506330817e+01 +8.256513026052104465e+00 5.347600676996553837e+00 3.996323324022881707e+01 +8.276553106212425348e+00 5.351202280850603010e+00 4.398069290458620628e+01 +8.296593186372744455e+00 5.354453682554823679e+00 4.818128628099457700e+01 +8.316633266533065338e+00 5.357358255943372782e+00 5.256332644739540427e+01 +8.336673346693386222e+00 5.359919520584902841e+00 5.712505361426364914e+01 +8.356713426853707105e+00 5.362141140369139691e+00 6.186463583132555044e+01 +8.376753507014027988e+00 5.364026922035497691e+00 6.678016972325357870e+01 +8.396793587174348872e+00 5.365580813644318603e+00 7.186968125404561647e+01 +8.416833667334669755e+00 5.366806902991370976e+00 7.713112651978079271e+01 +8.436873747494988862e+00 5.367709415966225528e+00 8.256239256943308646e+01 +8.456913827655309746e+00 5.368292714855172676e+00 8.816129825341631943e+01 +8.476953907815630629e+00 5.368561296589365206e+00 9.392559509951207986e+01 +8.496993987975951512e+00 5.368519790938893976e+00 9.985296821583851568e+01 +8.517034068136272396e+00 5.368172958653508076e+00 1.059410372204906849e+02 +8.537074148296593279e+00 5.367525689550741497e+00 1.121873571974812194e+02 +8.557114228456914162e+00 5.366583000552199501e+00 1.185894196785977641e+02 +8.577154308617233269e+00 5.365350033668812024e+00 1.251446536507811516e+02 +8.597194388777554153e+00 5.363832053935846389e+00 1.318504265886247424e+02 +8.617234468937875036e+00 5.362034447298508866e+00 1.387040455115703708e+02 +8.637274549098195919e+00 5.359962718449001073e+00 1.457027580653883660e+02 +8.657314629258516803e+00 5.357622488615882084e+00 1.528437536274986712e+02 +8.677354709418837686e+00 5.355019493306628853e+00 1.601241644356925917e+02 +8.697394789579158569e+00 5.352159580004308026e+00 1.675410667398015221e+02 +8.717434869739479453e+00 5.349048705819276606e+00 1.750914819758495753e+02 +8.737474949899798560e+00 5.345692935096859166e+00 1.827723779622187124e+02 +8.757515030060119443e+00 5.342098436981957299e+00 1.905806701173493138e+02 +8.777555110220440326e+00 5.338271482941573609e+00 1.985132226984773354e+02 +8.797595190380761210e+00 5.334218444246249469e+00 2.065668500609244802e+02 +8.817635270541082093e+00 5.329945789411409507e+00 2.147383179374249096e+02 +8.837675350701402976e+00 5.325460081599669770e+00 2.230243447369789749e+02 +8.857715430861723860e+00 5.320767975985125631e+00 2.314216028627118078e+02 +8.877755511022042967e+00 5.315876217080687027e+00 2.399267200482068745e+02 +8.897795591182363850e+00 5.310791636029545515e+00 2.485362807117820694e+02 +8.917835671342684734e+00 5.305521147861844256e+00 2.572468273281535289e+02 +8.937875751503005617e+00 5.300071748717661180e+00 2.660548618169502788e+02 +8.957915831663326500e+00 5.294450513037422645e+00 2.749568469475133838e+02 +8.977955911823647384e+00 5.288664590720861369e+00 2.839492077594163675e+02 +8.997995991983968267e+00 5.282721204255688363e+00 2.930283329981389784e+02 +9.018036072144287374e+00 5.276627645817097978e+00 3.021905765653149274e+02 +9.038076152304608257e+00 5.270391274339290000e+00 3.114322589829767480e+02 +9.058116232464929141e+00 5.264019512560196290e+00 3.207496688711975139e+02 +9.078156312625250024e+00 5.257519844040566603e+00 3.301390644385522819e+02 +9.098196392785570907e+00 5.250899810158627723e+00 3.395966749847884216e+02 +9.118236472945891791e+00 5.244167007081546927e+00 3.491187024151063270e+02 +9.138276553106212674e+00 5.237329082714865081e+00 3.587013227654414891e+02 +9.158316633266533557e+00 5.230393733631166775e+00 3.683406877381355002e+02 +9.178356713426852664e+00 5.223368701979203443e+00 3.780329262473783842e+02 +9.198396793587173548e+00 5.216261772374713779e+00 3.877741459738065259e+02 +9.218436873747494431e+00 5.209080768774191128e+00 3.975604349276194398e+02 +9.238476953907815314e+00 5.201833551332843975e+00 4.073878630196048221e+02 +9.258517034068136198e+00 5.194528013248028486e+00 4.172524836394272256e+02 +9.278557114228457081e+00 5.187172077589415231e+00 4.271503352405529768e+02 +9.298597194388777964e+00 5.179773694117139726e+00 4.370774429311730955e+02 +9.318637274549097071e+00 5.172340836089261096e+00 4.470298200704844476e+02 +9.338677354709417955e+00 5.164881497059755411e+00 4.570034698696940154e+02 +9.358717434869738838e+00 5.157403687668390191e+00 4.669943869970894639e+02 +9.378757515030059722e+00 5.149915432423705752e+00 4.769985591865493006e+02 +9.398797595190380605e+00 5.142424766480450771e+00 4.870119688488334759e+02 +9.418837675350701488e+00 5.134939732412731495e+00 4.970305946850124315e+02 +9.438877755511022372e+00 5.127468376984182008e+00 5.070504133013864703e+02 +9.458917835671341479e+00 5.120018747916452284e+00 5.170674008252445901e+02 +9.478957915831662362e+00 5.112598890657316097e+00 5.270775345208204499e+02 +9.498997995991983245e+00 5.105216845149687543e+00 5.370767944047840956e+02 +9.519038076152304129e+00 5.097880642602845569e+00 5.470611648606347899e+02 +9.539078156312625012e+00 5.090598302267177466e+00 5.570266362513380045e+02 +9.559118236472945895e+00 5.083377828213707872e+00 5.669692065295602106e+02 +9.579158316633266779e+00 5.076227206119739321e+00 5.768848828448577706e+02 +9.599198396793587662e+00 5.069154400061871790e+00 5.867696831471699852e+02 +9.619238476953906769e+00 5.062167349317696186e+00 5.966196377859761242e+02 +9.639278557114227652e+00 5.055273965177453199e+00 6.064307911044755883e+02 +9.659318637274548536e+00 5.048482127766917849e+00 6.161992030281406869e+02 +9.679358717434869419e+00 5.041799682882824207e+00 6.259209506470201632e+02 +9.699398797595190302e+00 5.035234438842048021e+00 6.355921297911449983e+02 +9.719438877755511186e+00 5.028794163345857271e+00 6.452088565984089428e+02 +9.739478957915832069e+00 5.022486580360477681e+00 6.547672690742948589e+02 +9.759519038076151176e+00 5.016319367015202424e+00 6.642635286428171639e+02 +9.779559118236472059e+00 5.010300150519331197e+00 6.736938216880639629e+02 +9.799599198396792943e+00 5.004436505099149279e+00 6.830543610857074555e+02 +9.819639278557113826e+00 4.998735948956176678e+00 6.923413877238837131e+02 +9.839679358717434710e+00 4.993205941247933488e+00 7.015511720128191655e+02 +9.859719438877755593e+00 4.987853879092396525e+00 7.106800153826006863e+02 +9.879759519038076476e+00 4.982687094597387123e+00 7.197242517684906034e+02 +9.899799599198395583e+00 4.977712851916056280e+00 7.286802490831846626e+02 +9.919839679358716467e+00 4.972938344329665306e+00 7.375444106754310951e+02 +9.939879759519037350e+00 4.968370691358828140e+00 7.463131767744092713e+02 +9.959919839679358233e+00 4.964016935904367323e+00 7.549830259193067832e+02 +9.979959919839679117e+00 4.959884041418952449e+00 7.635504763735062852e+02 +1.000000000000000000e+01 4.955978889110630448e+00 7.720120875228209343e+02 diff --git a/buch/papers/kugel/figures/tikz/curvature-1d.pdf b/buch/papers/kugel/figures/tikz/curvature-1d.pdf Binary files differnew file mode 100644 index 0000000..6425af6 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/curvature-1d.pdf diff --git a/buch/papers/kugel/figures/tikz/curvature-1d.py b/buch/papers/kugel/figures/tikz/curvature-1d.py new file mode 100644 index 0000000..4710fc8 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/curvature-1d.py @@ -0,0 +1,32 @@ +import numpy as np +import matplotlib.pyplot as plt + + +@np.vectorize +def fn(x): + return (x ** 2) * 2 / 100 + (1 + x / 4) + np.sin(x) + +@np.vectorize +def ddfn(x): + return 2 * 5 / 100 - np.sin(x) + +x = np.linspace(0, 10, 500) +y = fn(x) +ddy = ddfn(x) + +cmap = ddy - np.min(ddy) +cmap = cmap * 1000 / np.max(cmap) + +plt.plot(x, y) +plt.plot(x, ddy) +# plt.plot(x, cmap) + +plt.show() + +fname = "curvature-1d.dat" +np.savetxt(fname, np.array([x, y, cmap]).T, delimiter=" ") + +# with open(fname, "w") as f: +# # f.write("x y cmap\n") +# for xv, yv, cv in zip(x, y, cmap): +# f.write(f"{xv} {yv} {cv}\n") diff --git a/buch/papers/kugel/figures/tikz/curvature-1d.tex b/buch/papers/kugel/figures/tikz/curvature-1d.tex new file mode 100644 index 0000000..6983fb0 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/curvature-1d.tex @@ -0,0 +1,21 @@ +% vim:ts=2 sw=2 et: +\documentclass[tikz, border=5mm]{standalone} +\usepackage{pgfplots} + +\begin{document} +\begin{tikzpicture} + \begin{axis}[ + clip = false, + width = 8cm, height = 6cm, + xtick = \empty, ytick = \empty, + colormap name = viridis, + axis lines = middle, + axis line style = {ultra thick, -latex} + ] + \addplot+[ + smooth, mark=none, line width = 3pt, mesh, + point meta=explicit, + ] file {curvature-1d.dat}; + \end{axis} +\end{tikzpicture} +\end{document} diff --git a/buch/papers/kugel/figures/tikz/spherical-coordinates.pdf b/buch/papers/kugel/figures/tikz/spherical-coordinates.pdf Binary files differnew file mode 100644 index 0000000..1bff016 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/spherical-coordinates.pdf diff --git a/buch/papers/kugel/figures/tikz/spherical-coordinates.tex b/buch/papers/kugel/figures/tikz/spherical-coordinates.tex new file mode 100644 index 0000000..3a45385 --- /dev/null +++ b/buch/papers/kugel/figures/tikz/spherical-coordinates.tex @@ -0,0 +1,99 @@ +\documentclass[tikz]{standalone} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{bm} +\usepackage{lmodern} +\usepackage{tikz-3dplot} + +\usetikzlibrary{arrows} +\usetikzlibrary{intersections} +\usetikzlibrary{math} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows.meta} +\usetikzlibrary{shapes.misc} +\usetikzlibrary{calc} + +\begin{document} + +\tdplotsetmaincoords{60}{130} +\pgfmathsetmacro{\l}{2} + +\begin{tikzpicture}[ + >=latex, + tdplot_main_coords, + dot/.style = { + black, fill = black, circle, + outer sep = 0, inner sep = 0, + minimum size = .8mm + }, + round/.style = { + draw = orange, thick, circle, + minimum size = 1mm, + inner sep = 0pt, outer sep = 0pt, + }, + cross/.style = { + cross out, draw = magenta, thick, + minimum size = 1mm, + inner sep = 0pt, outer sep = 0pt + }, + ] + + % origin + \coordinate (O) at (0,0,0); + + % poles + \coordinate (NP) at (0,0,\l); + \coordinate (SP) at (0,0,-\l); + + % \draw (SP) node[dot, gray] {}; + % \draw (NP) node[dot, gray] {}; + + % gray unit circle + \tdplotdrawarc[gray]{(O)}{\l}{0}{360}{}{}; + \draw[gray, dashed] (-\l, 0, 0) to (\l, 0, 0); + \draw[gray, dashed] (0, -\l, 0) to (0, \l, 0); + + % axis + \draw[->] (O) -- ++(1.25*\l,0,0) node[left] {\(\mathbf{\hat{x}}\)}; + \draw[->] (O) -- ++(0,1.25*\l,0) node[right] {\(\mathbf{\hat{y}}\)}; + \draw[->] (O) -- ++(0,0,1.25*\l) node[above] {\(\mathbf{\hat{z}}\)}; + + % meridians + \foreach \phi in {0, 30, 60, ..., 150}{ + \tdplotsetrotatedcoords{\phi}{90}{0}; + \tdplotdrawarc[lightgray, densely dotted, tdplot_rotated_coords]{(O)}{\l}{0}{360}{}{}; + } + + % dot above and its projection + \pgfmathsetmacro{\phi}{120} + \pgfmathsetmacro{\theta}{40} + + \pgfmathsetmacro{\px}{cos(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\py}{sin(\phi)*sin(\theta)*\l} + \pgfmathsetmacro{\pz}{cos(\theta)*\l}) + + % point A + \coordinate (A) at (\px,\py,\pz); + \coordinate (Ap) at (\px,\py, 0); + + % lines + \draw[red!80!black, ->] (O) -- (A); + \draw[red!80!black, densely dashed] (O) -- (Ap) -- (A) + node[above right] {\(\mathbf{\hat{r}}\)}; + + % arcs + \tdplotdrawarc[blue!80!black, ->]{(O)}{.8\l}{0}{\phi}{}{}; + \node[below right, blue!80!black] at (.8\l,0,0) {\(\bm{\hat{\varphi}}\)}; + + \tdplotsetrotatedcoords{\phi-90}{-90}{0}; + \tdplotdrawarc[blue!80!black, ->, tdplot_rotated_coords]{(O)}{.95\l}{0}{\theta}{}{}; + \node[above right = 1mm, blue!80!black] at (0,0,.8\l) {\(\bm{\hat{\vartheta}}\)}; + + + % dots + \draw (O) node[dot] {}; + \draw (A) node[dot, fill = red!80!black] {}; + +\end{tikzpicture} +\end{document} +% vim:ts=2 sw=2 et: diff --git a/buch/papers/kugel/main.tex b/buch/papers/kugel/main.tex index 98d9cb2..d063f87 100644 --- a/buch/papers/kugel/main.tex +++ b/buch/papers/kugel/main.tex @@ -14,6 +14,7 @@ \input{papers/kugel/preliminaries} \input{papers/kugel/spherical-harmonics} \input{papers/kugel/applications} +\input{papers/kugel/proofs} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/kugel/packages.tex b/buch/papers/kugel/packages.tex index 61f91ad..ead7653 100644 --- a/buch/papers/kugel/packages.tex +++ b/buch/papers/kugel/packages.tex @@ -1,3 +1,4 @@ +% vim:ts=2 sw=2 et: % % packages.tex -- packages required by the paper kugel % @@ -7,4 +8,13 @@ % if your paper needs special packages, add package commands as in the % following example %\usepackage{packagename} +\usepackage{cases} +\newcommand{\kugeltodo}[1]{\textcolor{red!70!black}{\texttt{[TODO: #1]}}} +\newcommand{\kugelplaceholderfig}[2]{ \begin{tikzpicture}% + \fill[lightgray!20] (0, 0) rectangle (#1, #2);% + \node[gray, anchor = center] at ({#1 / 2}, {#2 / 2}) {\Huge \ttfamily \bfseries TODO}; + \end{tikzpicture}} + +\DeclareMathOperator{\sphlaplacian}{\nabla^2_{\mathit{S}}} +\DeclareMathOperator{\surflaplacian}{\nabla^2_{\partial \mathit{S}}} diff --git a/buch/papers/kugel/preliminaries.tex b/buch/papers/kugel/preliminaries.tex index 03cd421..e48abe4 100644 --- a/buch/papers/kugel/preliminaries.tex +++ b/buch/papers/kugel/preliminaries.tex @@ -44,23 +44,23 @@ numbers \(\mathbb{R}\). \) \end{definition} -\texttt{TODO: Text here.} +\kugeltodo{Text here.} \begin{definition}[Span] \end{definition} -\texttt{TODO: Text here.} +\kugeltodo{Text here.} \begin{definition}[Linear independence] \end{definition} -\texttt{TODO: Text here.} +\kugeltodo{Text here.} \begin{definition}[Basis] \end{definition} -\texttt{TODO: Text here.} +\kugeltodo{Text here.} \begin{definition}[Inner product] \label{kugel:def:inner-product} \nocite{axler_linear_2014} diff --git a/buch/papers/kugel/proofs.tex b/buch/papers/kugel/proofs.tex new file mode 100644 index 0000000..143caa8 --- /dev/null +++ b/buch/papers/kugel/proofs.tex @@ -0,0 +1,245 @@ +% vim:ts=2 sw=2 et spell tw=80: +\section{Proofs} + +\subsection{Legendre Functions} \label{kugel:sec:proofs:legendre} + +\kugeltodo{Fix theorem numbers to match, review text.} + +\begin{lemma} + The polynomial function + \begin{align*} + y_n(x)&=\sum_{k=0}^{\lfloor \frac{n}{2} \rfloor} (-1)^k \frac{(2n-2k)!}{2^n k! (n-k)!(n-2k)!} x^{n-2k}\\ + &= \frac{1}{n!2^n}\frac{d^n}{dx^n}(1-x^2)^n =: P_n(x), + \end{align*} + is a solution to the second order differential equation + \begin{equation}\label{kugel:eq:sol_leg} + (1-x^2)\frac{d^2y}{dx^2}-2x\frac{dy}{dx} + n(n+1)y=0, \quad \forall n>0. + \end{equation} +\end{lemma} +\begin{proof} + In order to find a solution to Eq.\eqref{eq:legendre}, the following Ansatz can be performed: + \begin{equation}\label{eq:ansatz} + y(x) = \sum_{k=0}^\infty a_k x^k. + \end{equation} + Given Eq.\eqref{eq:ansatz}, then + \begin{align*} + \frac{dy}{dx} &= \sum_{k=0}^\infty k a_k x^{k-1}, \\ + \frac{d^2y}{dx^2} &= \sum_{k=0}^\infty k (k-1) a_k x^{k-2}. + \end{align*} + Eq.\eqref{eq:legendre} can be therefore written as + \begin{align} + &(1-x^2)\sum_{k=0}^\infty k (k-1) a_k x^{k-2} - 2x\sum_{k=0}^\infty k a_k x^{k-1} + n(n+1)\sum_{k=0}^\infty a_k x^k=0 \label{eq:ansatz_in_legendre} \\ + &=\sum_{k=0}^\infty k (k-1) a_k x^{k-2} - \sum_{k=0}^\infty k (k-1) a_k x^{k} - 2x\sum_{k=0}^\infty k a_k x^{k-1} + n(n+1)\sum_{k=0}^\infty a_k x^k=0. \nonumber + \end{align} + If one consider the term + \begin{equation}\label{eq:term} + \sum_{k=0}^\infty k (k-1) a_k x^{k-2}, + \end{equation} + the substitution $\tilde{k}=k-2$ yields Eq.\eqref{eq:term} to + \begin{equation*} + \sum_{\tilde{k}=-2}^\infty (\tilde{k}+2) (\tilde{k}+1) a_{\tilde{k}+2} x^{\tilde{k}}=\sum_{\tilde{k}=0}^\infty (\tilde{k}+2) (\tilde{k}+1) a_{\tilde{k}} x^{\tilde{k}}. + \end{equation*} + This means that Eq.\eqref{eq:ansatz_in_legendre} becomes + \begin{align} + &\sum_{k=0}^\infty (k+1)(k+2) a_{k+2} x^{k} - \sum_{k=0}^\infty k (k-1) a_k x^{k} - 2\sum_{k=0}^\infty k a_k x^k + n(n+1)\sum_{k=0}^\infty a_k x^k \nonumber \\ + = &\sum_{k=0}^\infty \big[ (k+1)(k+2) a_{k+2} - k (k-1) a_k - 2 k a_k + n(n+1) a_k \big] x^k \stackrel{!}{=} 0. \label{eq:condition} + \end{align} + The condition in Eq.\eqref{eq:condition} is equivalent to + \begin{equation}\label{eq:condition_2} + (k+1)(k+2) a_{k+2} - k (k-1) a_k - 2 k a_k + n(n+1) a_k = 0. + \end{equation} + We can derive a recursion formula for $a_{k+2}$ from Eq.\eqref{eq:condition_2}, which can be expressed as + \begin{equation}\label{eq:recursion} + a_{k+2}= \frac{k (k-1) - 2 k + n(n+1)}{(k+1)(k+2)}a_k = \frac{(k-n)(k+n+1)}{(k+2)(k+1)}a_k. + \end{equation} + All coefficients can be calculated using the latter. + + Following Eq.\eqref{eq:recursion}, if we want to compute $a_6$ we would have + \begin{align*} + a_{6}= -\frac{(n-4)(n+5)}{6\cdot 5}a_4 &= -\frac{(n-4)(5+n)}{6 \cdot 5} -\frac{(n-2)(n+3)}{4 \cdot 3} a_2 \\ + &= -\frac{(n-4)(n+5)}{6 \cdot 5} -\frac{(n-2)(n+3)}{4 \cdot 3} -\frac{n(n+1)}{2 \cdot 1} a_0 \\ + &= -\frac{(n+5)(n+3)(n+1)n(n-2)(n-4)}{6!} a_0. + \end{align*} + One can generalize this relation for the $i^\text{th}$ even coefficient as + \begin{equation*} + a_{2k} = (-1)^k \frac{(n+(2k-1))(n+(2k-1)-2)\hdots (n-(2k-2)+2)(n-(2k-2))}{(2k)!}a_0 + \end{equation*} + where $i=2k$. + + A similar expression can be written for the odd coefficients $a_{2k-1}$. In this case, the equation starts from $a_1$ and to find the pattern we can write the recursion for an odd coefficient, $a_7$ for example + \begin{align*} + a_{7}= -\frac{(n-5)(n+6)}{7\cdot 6}a_5 &= - \frac{(n-5)(n+6)}{7\cdot 6} -\frac{(n-3)(n+4)}{5 \cdot 4} a_3 \\ + &= - \frac{(n-5)(n+6)}{7\cdot 6} -\frac{(n-3)(n+4)}{5 \cdot 4} -\frac{(n-1)(n+2)}{3 \cdot 2} a_1 \\ + &= -\frac{(n+6)(n+4)(n+2)(n-1)(n-3)(n-5)}{7!} a_1. + \end{align*} + As before, we can generalize this equation for the $i^\text{th}$ odd coefficient + \begin{equation*} + a_{2k+1} = (-1)^k \frac{(n + 2k)(n+2k-2)\hdots(n-(2k-1)+2)(n-(2k-1))}{(2k+1)!}a_1 + \end{equation*} + where $i=2k+1$. + + Let be + \begin{align*} + y_\text{e}^K(x) &:= \sum_{k=0}^K(-1)^k \frac{(n+(2k-1))(n+(2k-1)-2)\hdots \color{red}(n-(2k-2)+2)(n-(2k-2))}{(2k)!} x^{2k}, \\ + y_\text{o}^K(x) &:= \sum_{k=0}^K(-1)^k \frac{(n + 2k)(n+2k-2)\hdots \color{blue} (n-(2k-1)+2)(n-(2k-1))}{(2k+1)!} x^{2k+1}. + \end{align*} + The solution to the Eq.\eqref{eq:legendre} can be written as + \begin{equation}\label{eq:solution} + y(x) = \lim_{K \to \infty} \left[ a_0 y_\text{e}^K(x) + a_1 y_\text{o}^K(x) \right]. + \end{equation} + + The colored parts can be analyzed separately: + \begin{itemize} + \item[\textcolor{red}{\textbullet}] Suppose that $n=n_0$ is an even number. Then the red part, for a specific value of $k=k_0$, will follow the following relation: + \begin{equation*} + n_0-(2k_0-2)=0. + \end{equation*} + From that point on, given the recursive nature of Eq.\eqref{eq:recursion}, all the subsequent coefficients will also be 0, making the sum finite. + \begin{equation*} + a_{2k}=0 \iff y_{\text{o}}^{2k}(x)=y_{\text{o}}^{2k_0}(x), \quad \forall k>k_0 + \end{equation*} + \item[\textcolor{blue}{\textbullet}] Suppose that $n=n_0$ is an odd number. Then the blue part, for a specific value of $k=k_0$, will follow the following relation + \begin{equation*} + n_0-(2k_0-1)=0. + \end{equation*} + From that point on, for the same reason as before, all the subsequent coefficients will also be 0, making the sum finite. + \begin{equation*} + a_{2k+1}=0 \iff y_{\text{o}}^{2k+1}(x)=y_{\text{o}}^{2k_0+1}(x), \quad \forall k>k_0 + \end{equation*} + \end{itemize} + + There is the possibility of expressing the solution in Eq.\eqref{eq:solution} in a more compact form, combining the two solutions $y_\text{o}^K(x)$ and $y_\text{e}^K(x)$. They are both a polynomial of maximum degree $n$, assuming $n \in \mathbb{N}$. In the case where $n$ is even, the polynomial solution + \begin{equation*} + \lim_{K\to \infty} y_\text{e}^K(x) + \end{equation*} + will be a finite sum. If instead $n$ is odd, will be + \begin{equation*} + \lim_{K\to \infty} y_\text{o}^K(x) + \end{equation*} + to be a finite sum. + + Depending on the coefficient we start with, $a_1$ or $a_0$, we will obtain the odd or even polynomial respectively. Starting with the last coefficient $a_n$ and, recursively, calculating all the others in descending order, we can express the two parts $y_\text{o}^K(x)$ and $y_\text{e}^K(x)$ with a single sum. Hence, because we start with the last coefficient, the choice concerning $a_1$ and $a_0$ will be at the end of the sum, and not at the beginning. To compact Eq.\eqref{eq:solution}, Eq.\eqref{eq:recursion} can be reconsidered to calculate the coefficient $a_{k-2}$, using $a_k$ + \begin{equation*} + a_{k-2} = -\frac{(k+2)(k+1)}{(k-n)(k+n+1)}a_k + \end{equation*} + Now the game is to find a pattern, as before. Remember that $n$ is a fixed parameter of Eq.\eqref{eq:legendre}. + \begin{align*} + a_{n-2} &= -\frac{n(n-1)}{2(2n-1)}a_n, \\ + a_{n-4} &= -\frac{(n-2)(n-3)}{4(2n-3)}a_{n-2} \\ + &= -\frac{(n-2)(n-3)}{4(2n-3)}-\frac{n(n-1)}{2(2n-1)}a_n. + \end{align*} + In general + \begin{equation}\label{eq:general_recursion} + a_{n-2k} = (-1)^k \frac{n(n-1)(n-2)(n-3) \hdots (n-2k+1)}{2\cdot4\hdots 2k(2n-1)(2n-3)\hdots(2n-2k+1)}a_n + \end{equation} + The whole solution can now be written as + \begin{align} + y(x) &= a_n x^n + a_{n-2} x^{n-2} + a_{n-4} x^{n-4} + a_{n-6} x^{n-6} + \hdots + \begin{cases} + a_1 x, \quad &\text{if } n \text{ odd} \\ + a_0, \quad &\text{if } n \text{ even} + \end{cases} \nonumber \\ + &= \sum_{k=0}^{\lfloor \frac{n}{2} \rfloor} a_{n-2k}x^{n-2k} \label{eq:solution_2} + \end{align} + By considering + \begin{align} + (2n-1)(2n-3)\hdots (2n-2k+1)&=\frac{2n(2n-1)(2n-2)(2n-3)\hdots(2n-2k+1)} + {2n(2n-2)(2n-4)(2n-6)\hdots(2n-2k+2)} \nonumber \\ + &=\frac{\frac{(2n)!}{(2n-2k)!}} + {2^kn(n-1)(n-2)(n-3)\hdots(n-k+1)} \nonumber \\ + &=\frac{\frac{(2n)!}{(2n-2k)!}} + {2^k\frac{n!}{(n-k)!}}=\frac{(n-k)!(2n)!}{n!(2n-2k)!2^k} \label{eq:1_sub_recursion}, \\ + 2 \cdot 4 \hdots 2k &= 2^r 1\cdot2 \hdots r = 2^r r!\label{eq:2_sub_recursion}, \\ + n(n-1)(n-2)(n-3) \hdots (n-2k+1) &= \frac{n!}{(n-2k)!}\label{eq:3_sub_recursion}. + \end{align} + Eq.\eqref{eq:solution_2} can be rewritten as + \begin{equation}\label{eq:solution_3} + y(x)=a_n \sum_{k=0}^{\lfloor \frac{n}{2} \rfloor} (-1)^k \frac{n!^2(2n-2k)!}{k!(n-2k)!(n-k)!(2n)!} x^{n-2k}. + \end{equation} + Eq.\eqref{eq:solution_3} is defined for any $a_n$. By letting $a_n$ be declared as + \begin{equation*} + a_{n} := \frac{(2n)!}{2^n n!^2}, + \end{equation*} + the so called \emph{Legendre polynomial} emerges + \begin{equation}\label{eq:leg_poly} + P_n(x):=\sum_{k=0}^{\lfloor \frac{n}{2} \rfloor} (-1)^k \frac{(2n-2k)!}{2^n k! (n-k)!(n-2k)!} x^{n-2k} + \end{equation} +\end{proof} + + +\begin{lemma} + If $Z_n(z)$ is a solution of the Legendre equation \eqref{kugel:eqn:legendre}, + then + \begin{equation*} + P^m_n(z) = (1 - z^2)^{m/2} \frac{d^m}{dz^m}Z_n(z) + \end{equation*} + solves the associated Legendre equation \eqref{kugel:eqn:associated-legendre}. +\end{lemma} +% \begin{proof} [TODO: modificare la $m$ (è già usata come costante di separazione) o forse è giusta (?)] +\begin{proof} + To begin, we can start by differentiating $m$ times Eq.\eqref{kugel:eq:leg_eq} (which is staisfied by $y(x)$), obtaining + \begin{equation}\label{eq:lagrange_mderiv} + \frac{d^m}{dx^m}\left[ (1-x^2)\frac{d^2y}{dx^2} \right] -2 \frac{d^m}{dx^m}\left[ x\frac{dy}{dx} \right] + n(n+1)\frac{d^m}{dx^m}y=0. + \end{equation} + \emph{Leibniz's theorem} says, that if we want to differentiate $m$ times a multiplication of two functions, we can use the binomial coefficients to build up a sum. This allows us to be more compact, obtaining + \begin{equation}\label{eq:leibniz} + \frac{d^m}{dx^m}[u(x)v(x)] = \sum_{i=0}^m \binom{n}{i} \frac{d^{m-i}u}{dx^{m-1}} \frac{d^{i}v}{dx^i}. + \end{equation} + Using Eq.\eqref{eq:leibniz} in Eq.\eqref{eq:lagrange_mderiv}, we have + \begin{align} + (1-x^2)\frac{d^{m+2}y}{dx^{m+2}} &+ m \frac{d}{dx}(1-x^2)\frac{d^{m+1}y}{dx^{m+1}} + \frac{m(m-1)}{2}\frac{d^{2}}{dx^{2}}(1-x^2)\frac{d^{m}y}{dx^{m}} + n(n+1)\frac{d^m{}y}{dx^{m}} \nonumber \\ + &-2\left(x\frac{d^{m+1}y}{dx^{m+1}} + m\frac{d}{dx}x\frac{d^{m}y}{dx^{m}} \right) \nonumber \\ + &= (1-x^2)\frac{d^{m+2}y}{dx^{m+2}} -2x(m+1)\frac{d^{m+1}y}{dx^{m+1}}+(n(n+1)-m(m-1)-2m)\frac{d^{m}y}{dx^{m}}=0. \label{eq:aux_3} + \end{align} + To make the notation easier to follow, a new function can be defined + \begin{equation*} + \frac{d^{m}y}{dx^{m}} := y_m. + \end{equation*} + Eq.\eqref{eq:aux_3} now becomes + \begin{equation}\label{eq:1st_subs} + (1-x^2)\frac{d^{2}y_m}{dx^{2}} -2x(m+1)\frac{dy_m}{dx}+(n(n+1)-m(m+1))y_m=0 + \end{equation} + A second function can be further defined as + \begin{equation*} + (1-x^2)^{\frac{m}{2}}\frac{d^{m}y}{dx^{m}} = (1-x^2)^{\frac{m}{2}}y_m := \hat{y}_m, + \end{equation*} + allowing to write Eq.\eqref{eq:1st_subs} as + \begin{equation}\label{eq:2st_subs} + (1-x^2)\frac{d^2}{dx^2}[\hat{y}_m(1-x^2)^{-\frac{m}{2}}] -2(m+1)x\frac{d}{dx}[\hat{y}_m(1-x^2)^{-\frac{m}{2}}] + (n(n+1)-m(m+1))\hat{y}_m(1-x^2)^{-\frac{m}{2}}=0. + \end{equation} + The goal now is to compute the two terms + \begin{align*} + \frac{d^2}{dx^2}[\hat{y}_m(1-x^2)^{-\frac{m}{2}}] &= \frac{d^2\hat{y}_m}{dx^2} (1-x^2)^{-\frac{m}{2}} + \frac{d\hat{y}_m}{dx}\frac{m}{2}(1-x^2)^{-\frac{m}{2}-1}2x \\ + &+ m\left( \frac{d\hat{y}_m}{dx} x (1-x^2)^{-\frac{m}{2}-1} + \hat{y}_m (1-x^2)^{-\frac{m}{2}-1} - \hat{y}_m x (-\frac{m}{2}-1)(1-x^2)^{-\frac{m}{2}} 2x\right) \\ + &= \frac{d^2\hat{y}_m}{dx^2} (1-x^2)^{-\frac{m}{2}} + \frac{d\hat{y}_m}{dx}mx (1-x^2)^{-\frac{m}{2}-1} + m\frac{d\hat{y}_m}{dx}x (1-x^2)^{-\frac{m}{2}-1}\\ + &+ m\hat{y}_m (1-x^2)^{-\frac{m}{2}-1} + m\hat{y}_m x^2(m+2)(1-x^2)^{-\frac{m}{2}-2} + \end{align*} + and + \begin{align*} + \frac{d}{dx}[\hat{y}_m(1-x^2)^{-\frac{m}{2}}] &= \frac{d\hat{y}_m}{dx}(1-x^2)^{-\frac{m}{2}} + \hat{y}_m\frac{m}{2}(1-x^2)^{-\frac{m}{2}-1}2x \\ + &= \frac{d\hat{y}_m}{dx}(1-x^2)^{-\frac{m}{2}} + \hat{y}_mm(1-x^2)^{-\frac{m}{2}-1}x, + \end{align*} + to use them in Eq.\eqref{eq:2st_subs}, obtaining + \begin{align*} + (1-x^2)\biggl[\frac{d^2\hat{y}_m}{dx^2} (1-x^2)^{-\frac{m}{2}} &+ \frac{d\hat{y}_m}{dx}mx (1-x^2)^{-\frac{m}{2}-1} + m\frac{d\hat{y}_m}{dx}x (1-x^2)^{-\frac{m}{2}-1} \\ + &+ m\hat{y}_m (1-x^2)^{-\frac{m}{2}-1} + m\hat{y}_m x^2(m+2)(1-x^2)^{-\frac{m}{2}-2}\biggr] \\ + &-2(m+1)x\left[ \frac{d\hat{y}_m}{dx}(1-x^2)^{-\frac{m}{2}} + \hat{y}_mm(1-x^2)^{-\frac{m}{2}-1}x \right] \\ + &+ (n(n+1)-m(m+1))\hat{y}_m(1-x^2)^{-\frac{m}{2}}=0.\\ + \end{align*} + We can now divide by $(1-x^2)^{-\frac{m}{2}}$, obtaining + \begin{align*} + (1-x^2)\biggl[\frac{d^2\hat{y}_m}{dx^2} &+ \frac{d\hat{y}_m}{dx}mx (1-x^2)^{-1} + m\frac{d\hat{y}_m}{dx}x (1-x^2)^{-1} + m\hat{y}_m (1-x^2)^{-1} + m\hat{y}_m x^2(m+2)(1-x^2)^{-2}\biggr] \\ + &-2(m+1)x\left[ \frac{d\hat{y}_m}{dx} + \hat{y}_mm(1-x^2)^{-1}x \right] + (n(n+1)-m(m+1))\hat{y}_m\\ + &= \frac{d^2\hat{y}_m}{dx^2} + \frac{d\hat{y}_m}{dx}mx + m\frac{d\hat{y}_m}{dx}x + m\hat{y}_m + m\hat{y}_m x^2(m+2)(1-x^2)^{-1} \\ + &-2(m+1)x\left[ \frac{d\hat{y}_m}{dx} + \hat{y}_mm(1-x^2)^{-1}x \right] + (n(n+1)-m(m+1))\hat{y}_m\\ + \end{align*} + and collecting some terms + \begin{equation*} + (1-x^2)\frac{d^2\hat{y}_m}{dx^2} - 2x\frac{d\hat{y}_m}{dx} + \left( -x^2 \frac{m^2}{1-x^2} + m+n(n+1)-m(m+1)\right)\hat{y}_m=0. + \end{equation*} + Showing that + \begin{align*} + -x^2 \frac{m^2}{1-x^2} + m+n(n+1)-m(m+1) &= n(n+1)- m^2 -x^2 \frac{m^2}{1-x^2} \\ + &= n(n+1)- \frac{m}{1-x^2} + \end{align*} + implies $\hat{y}_m(x)$ being a solution of Eq.\eqref{kugel:eq:associated_leg_eq} +\end{proof} diff --git a/buch/papers/kugel/references.bib b/buch/papers/kugel/references.bib index b74c5cd..e5d6452 100644 --- a/buch/papers/kugel/references.bib +++ b/buch/papers/kugel/references.bib @@ -192,4 +192,15 @@ Created by Henry Reich}, urldate = {2022-08-01}, date = {2022}, file = {Metric Spaces\: Completeness:/Users/npross/Zotero/storage/5JYEE8NF/completeness.html:text/html}, +} + +@book{bell_special_2004, + location = {Mineola, {NY}}, + title = {Special functions for scientists and engineers}, + isbn = {978-0-486-43521-3}, + series = {Dover books on mathematics}, + pagetotal = {247}, + publisher = {Dover Publ}, + author = {Bell, William Wallace}, + date = {2004}, }
\ No newline at end of file diff --git a/buch/papers/kugel/spherical-harmonics.tex b/buch/papers/kugel/spherical-harmonics.tex index 6b23ce5..2ded50b 100644 --- a/buch/papers/kugel/spherical-harmonics.tex +++ b/buch/papers/kugel/spherical-harmonics.tex @@ -1,13 +1,410 @@ -% vim:ts=2 sw=2 et spell: +% vim:ts=2 sw=2 et spell tw=80: -\section{Spherical Harmonics} +\section{Construction of the Spherical Harmonics} -\subsection{Eigenvalue Problem in Spherical Coordinates} +\kugeltodo{Review text, or rewrite if preliminaries becomes an addendum} + +We finally arrived at the main section, which gives our chapter its name. The +idea is to discuss spherical harmonics, their mathematical derivation and some +of their properties and applications. + +The subsection \ref{} \kugeltodo{Fix references} will be devoted to the +Eigenvalue problem of the Laplace operator. Through the latter we will derive +the set of Eigenfunctions that obey the equation presented in \ref{} +\kugeltodo{reference to eigenvalue equation}, which will be defined as +\emph{Spherical Harmonics}. In fact, this subsection will present their +mathematical derivation. + +In the subsection \ref{}, on the other hand, some interesting properties +related to them will be discussed. Some of these will come back to help us +understand in more detail why they are useful in various real-world +applications, which will be presented in the section \ref{}. + +One specific property will be studied in more detail in the subsection \ref{}, +namely the recursive property. The last subsection is devoted to one of the +most beautiful applications (In our humble opinion), namely the derivation of a +Fourier-style series expansion but defined on the sphere instead of a plane. +More importantly, this subsection will allow us to connect all the dots we have +created with the previous sections, concluding that Fourier is just a specific +case of the application of the concept of orthogonality. Our hope is that after +reading this section you will appreciate the beauty and power of generalization +that mathematics offers us. + +\subsection{Eigenvalue Problem} +\label{kugel:sec:construction:eigenvalue} + +\begin{figure} + \centering + \includegraphics{papers/kugel/figures/tikz/spherical-coordinates} + \caption{ + Spherical coordinate system. Space is described with the free variables $r + \in \mathbb{R}_0^+$, $\vartheta \in [0; \pi]$ and $\varphi \in [0; 2\pi)$. + \label{kugel:fig:spherical-coordinates} + } +\end{figure} + +From Section \ref{buch:pde:section:kugel}, we know that the spherical Laplacian +in the spherical coordinate system (shown in Figure +\ref{kugel:fig:spherical-coordinates}) is is defined as +\begin{equation*} + \sphlaplacian := + \frac{1}{r^2} \frac{\partial}{\partial r} \left( + r^2 \frac{\partial}{\partial r} + \right) + + \frac{1}{r^2} \left[ + \frac{1}{\sin\vartheta} \frac{\partial}{\partial \vartheta} \left( + \sin\vartheta \frac{\partial}{\partial\vartheta} + \right) + + \frac{1}{\sin^2 \vartheta} \frac{\partial^2}{\partial\varphi^2} + \right]. +\end{equation*} +But we will not consider this algebraic monstrosity in its entirety. As the +title suggests, we will only care about the \emph{surface} of the sphere. This +is for many reasons, but mainly to simplify reduce the already broad scope of +this text. Concretely, we will always work on the unit sphere, which just means +that we set $r = 1$ and keep only $\vartheta$ and $\varphi$ as free variables. +Now, since the variable $r$ became a constant, we can leave out all derivatives +with respect to $r$ and substitute all $r$'s with 1's to obtain a new operator +that deserves its own name. + +\begin{definition}[Surface spherical Laplacian] + \label{kugel:def:surface-laplacian} + The operator + \begin{equation*} + \surflaplacian := + \frac{1}{\sin\vartheta} \frac{\partial}{\partial \vartheta} \left( + \sin\vartheta \frac{\partial}{\partial\vartheta} + \right) + + \frac{1}{\sin^2 \vartheta} \frac{\partial^2}{\partial\varphi^2}, + \end{equation*} + is called the surface spherical Laplacian. +\end{definition} + +In the definition, the subscript ``$\partial S$'' was used to emphasize the +fact that we are on the spherical surface, which can be understood as being the +boundary of the sphere. But what does it actually do? To get an intuition, +first of all, notice the fact that $\surflaplacian$ have second derivatives, +which means that this a measure of \emph{curvature}; But curvature of what? To +get an even stronger intuition we will go into geometry, were curvature can be +grasped very well visually. Consider figure \ref{kugel:fig:curvature} where the +curvature is shown using colors. First we have the curvature of a curve in 1D, +then the curvature of a surface (2D), and finally the curvature of a function on +the surface of the unit sphere. + +\begin{figure} + \centering + \includegraphics[width=.3\linewidth]{papers/kugel/figures/tikz/curvature-1d} + \hskip 5mm + \includegraphics[width=.3\linewidth]{papers/kugel/figures/povray/curvature} + \hskip 5mm + \includegraphics[width=.3\linewidth]{papers/kugel/figures/povray/spherecurve} + \caption{ + \kugeltodo{Fix alignment / size, add caption. Would be nice to match colors.} + \label{kugel:fig:curvature} + } +\end{figure} + +Now that we have defined an operator, we can go and study its eigenfunctions, +which means that we would like to find the functions $f(\vartheta, \varphi)$ +that satisfy the equation +\begin{equation} \label{kuvel:eqn:eigen} + \surflaplacian f = -\lambda f. +\end{equation} +Perhaps it may not be obvious at first glance, but we are in fact dealing with a +partial differential equation (PDE) \kugeltodo{Boundary conditions?}. If we +unpack the notation of the operator $\nabla^2_{\partial S}$ according to +definition +\ref{kugel:def:surface-laplacian}, we get: +\begin{equation} \label{kugel:eqn:eigen-pde} + \frac{1}{\sin\vartheta} \frac{\partial}{\partial \vartheta} \left( + \sin\vartheta \frac{\partial f}{\partial\vartheta} + \right) + + \frac{1}{\sin^2 \vartheta} \frac{\partial^2 f}{\partial\varphi^2} + + \lambda f = 0. +\end{equation} +Since all functions satisfying \eqref{kugel:eqn:eigen-pde} are the +\emph{eigenfunctions} of $\surflaplacian$, our new goal is to solve this PDE. +The task may seem very difficult but we can simplify it with a well-known +technique: \emph{the separation Ansatz}. It consists in assuming that the +function $f(\vartheta, \varphi)$ can be factorized in the following form: +\begin{equation} + f(\vartheta, \varphi) = \Theta(\vartheta)\Phi(\varphi). +\end{equation} +In other words, we are saying that the effect of the two independent variables +can be described using the multiplication of two functions that describe their +effect separately. This separation process was already presented in section +\ref{buch:pde:section:kugel}, but we will briefly rehearse it here for +convenience. If we substitute this assumption in +\eqref{kugel:eqn:eigen-pde}, we have: +\begin{equation*} + \frac{1}{\sin\vartheta} \frac{\partial}{\partial \vartheta} \left( + \sin\vartheta \frac{\partial \Theta(\vartheta)}{\partial\vartheta} + \right) \Phi(\varphi) + + \frac{1}{\sin^2 \vartheta} + \frac{\partial^2 \Phi(\varphi)}{\partial\varphi^2} + \Theta(\vartheta) + + \lambda \Theta(\vartheta)\Phi(\varphi) = 0. +\end{equation*} +Dividing by $\Theta(\vartheta)\Phi(\varphi)$ and introducing an auxiliary +variable $m^2$, the separation constant, yields: +\begin{equation*} + \frac{1}{\Theta(\vartheta)}\sin \vartheta \frac{d}{d \vartheta} \left( + \sin \vartheta \frac{d \Theta}{d \vartheta} + \right) + + \lambda \sin^2 \vartheta + = -\frac{1}{\Phi(\varphi)} \frac{d^2\Phi(\varphi)}{d\varphi^2} + = m^2, +\end{equation*} +which is equivalent to the following system of 2 first order differential +equations (ODEs): +\begin{subequations} + \begin{gather} + \frac{d^2\Phi(\varphi)}{d\varphi^2} = -m^2 \Phi(\varphi), + \label{kugel:eqn:ode-phi} \\ + \sin \vartheta \frac{d}{d \vartheta} \left( + \sin \vartheta \frac{d \Theta}{d \vartheta} + \right) + + \left( \lambda - \frac{m^2}{\sin^2 \vartheta} \right) + \Theta(\vartheta) = 0 + \label{kugel:eqn:ode-theta}. + \end{gather} +\end{subequations} +The solution of \eqref{kugel:eqn:ode-phi} is easy to find: The complex +exponential is obviously the function we are looking for. So we can directly +write the solutions +\begin{equation} \label{kugel:eqn:ode-phi-sol} + \Phi(\varphi) = e^{i m \varphi}, \quad m \in \mathbb{Z}. +\end{equation} +The restriction that the separation constant $m$ needs to be an integer arises +from the fact that we require a $2\pi$-periodicity in $\varphi$ since the +coordinate systems requires that $\Phi(\varphi + 2\pi) = \Phi(\varphi)$. +Unfortunately, solving \eqref{kugel:eqn:ode-theta} is as straightforward, +actually, it is quite difficult, and the process is so involved that it will +require a dedicated section of its own. + +\subsection{Legendre Functions} + +\begin{figure} + \centering + \kugelplaceholderfig{.8\textwidth}{5cm} + \caption{ + \kugeltodo{Why $z = \cos \vartheta$.} + } +\end{figure} + +To solve \eqref{kugel:eqn:ode-theta} we start with the substitution $z = \cos +\vartheta$ \kugeltodo{Explain geometric origin with picture}. The operator +$\frac{d}{d \vartheta}$ becomes +\begin{equation*} + \frac{d}{d \vartheta} + = \frac{dz}{d \vartheta}\frac{d}{dz} + = -\sin \vartheta \frac{d}{dz} + = -\sqrt{1-z^2} \frac{d}{dz}, +\end{equation*} +since $\sin \vartheta = \sqrt{1 - \cos^2 \vartheta} = \sqrt{1 - z^2}$, and +then \eqref{kugel:eqn:ode-theta} becomes +\begin{align*} + \frac{-\sqrt{1-z^2}}{\sqrt{1-z^2}} \frac{d}{dz} \left[ + \left(\sqrt{1-z^2}\right) \left(-\sqrt{1-z^2}\right) \frac{d \Theta}{dz} + \right] + + \left( \lambda - \frac{m^2}{1 - z^2} \right)\Theta(\vartheta) &= 0, + \\ + \frac{d}{dz} \left[ (1-z^2) \frac{d \Theta}{dz} \right] + + \left( \lambda - \frac{m^2}{1 - z^2} \right)\Theta(\vartheta) &= 0, + \\ + (1-z^2)\frac{d^2 \Theta}{dz} - 2z\frac{d \Theta}{dz} + + \left( \lambda - \frac{m^2}{1 - z^2} \right)\Theta(\vartheta) &= 0. +\end{align*} +By making two final cosmetic substitutions, namely $Z(z) = \Theta(\cos^{-1}z)$ +and $\lambda = n(n+1)$, we obtain what is known in the literature as the +\emph{associated Legendre equation of order $m$}: +\nocite{olver_introduction_2013} +\begin{equation} \label{kugel:eqn:associated-legendre} + (1 - z^2)\frac{d^2 Z}{dz} + - 2z\frac{d Z}{dz} + + \left( n(n + 1) - \frac{m^2}{1 - z^2} \right) Z(z) = 0, + \quad + z \in [-1; 1], m \in \mathbb{Z}. +\end{equation} + +Our new goal has therefore become to solve +\eqref{kugel:eqn:associated-legendre}, since if we find a solution for $Z(z)$ we +can perform the substitution backwards and get back to our eigenvalue problem. +However, the associated Legendre equation is not any easier, so to attack the +problem we will look for the solutions in the easier special case when $m = 0$. +This reduces the problem because it removes the double pole, which is always +tricky to deal with. In fact, the reduced problem when $m = 0$ is known as the +\emph{Legendre equation}: +\begin{equation} \label{kugel:eqn:legendre} + (1 - z^2)\frac{d^2 Z}{dz} + - 2z\frac{d Z}{dz} + + n(n + 1) Z(z) = 0, + \quad + z \in [-1; 1]. +\end{equation} + +The Legendre equation is a second order differential equation, and therefore it +has 2 independent solutions, which are known as \emph{Legendre functions} of the +first and second kind. For the scope of this text we will only derive a special +case of the former that is known known as the \emph{Legendre polynomials}, since +we only need a solution between $-1$ and $1$. + +\begin{lemma}[Legendre polynomials] + \label{kugel:lem:legendre-poly} + The polynomial function + \[ + P_n(z) = \sum^{\lfloor n/2 \rfloor}_{k=0} + \frac{(-1)^k}{2^n s^k!} \frac{(2n - 2k)!}{(n - k)! (n-2k)!} z^{n - 2k} + \] + is the only finite solution of the Legendre equation + \eqref{kugel:eqn:legendre} when $n \in \mathbb{Z}$ and $z \in [-1; 1]$. +\end{lemma} +\begin{proof} + This results is derived in section \ref{kugel:sec:proofs:legendre}. +\end{proof} + +Since the Legendre \emph{polynomials} are indeed polynomials, they can also be +expressed using the hypergeometric functions described in section +\ref{buch:rekursion:section:hypergeometrische-funktion}, so in fact +\begin{equation} + P_n(z) = {}_2F_1 \left( \begin{matrix} + n + 1, & -n \\ \multicolumn{2}{c}{1} + \end{matrix} ; \frac{1 - z}{2} \right). +\end{equation} +Further, there are a few more interesting but not very relevant forms to write +$P_n(z)$ such as \emph{Rodrigues' formula} and \emph{Laplace's integral +representation} which are +\begin{equation*} + P_n(z) = \frac{1}{2^n} \frac{d^n}{dz^n} (x^2 - 1)^n, + \qquad \text{and} \qquad + P_n(z) = \frac{1}{\pi} \int_0^\pi \left( + z + \cos\vartheta \sqrt{z^2 - 1} + \right) \, d\vartheta +\end{equation*} +respectively, both of which we will not prove (see chapter 3 of +\cite{bell_special_2004} for a proof). Now that we have a solution for the +Legendre equation, we can make use of the following lemma patch the solutions +such that they also become solutions of the associated Legendre equation +\eqref{kugel:eqn:associated-legendre}. + +\begin{lemma} \label{kugel:lem:extend-legendre} + If $Z_n(z)$ is a solution of the Legendre equation \eqref{kugel:eqn:legendre}, + then + \begin{equation*} + Z^m_n(z) = (1 - z^2)^{m/2} \frac{d^m}{dz^m}Z_n(z) + \end{equation*} + solves the associated Legendre equation \eqref{kugel:eqn:associated-legendre}. + \nocite{bell_special_2004} +\end{lemma} +\begin{proof} + See section \ref{kugel:sec:proofs:legendre}. +\end{proof} + +What is happening in lemma \ref{kugel:lem:extend-legendre}, is that we are +essentially inserting a square root function in the solution in order to be able +to reach the parts of the domain near the poles at $\pm 1$ of the associated +Legendre equation, which is not possible only using power series +\kugeltodo{Reference book theory on extended power series method.}. Now, since +we have a solution in our domain, namely $P_n(z)$, we can insert it in the lemma +obtain the \emph{associated Legendre functions}. + +\begin{definition}[Ferrers or associated Legendre functions] + \label{kugel:def:ferrers-functions} + The functions + \begin{equation} + P^m_n (z) = \frac{1}{n!2^n}(1-z^2)^{\frac{m}{2}}\frac{d^{m}}{dz^{m}} P_n(z) + = \frac{1}{n!2^n}(1-z^2)^{\frac{m}{2}}\frac{d^{m+n}}{dz^{m+n}}(1-z^2)^n + \end{equation} + are known as Ferrers or associated Legendre functions. +\end{definition} + +\kugeltodo{Discuss $|m| \leq n$.} + +\if 0 +The constraint $|m|<n$, can be justified by considering Eq.\eqref{kugel:eq:associated_leg_func}, in which the derivative of degree $m+n$ is present. A derivative to be well defined must have an order that is greater than zero. Furthermore, it can be seen that this derivative is applied on a polynomial of degree $2n$. As is known from Calculus 1, if you derive a polynomial of degree $2n$ more than $2n$ times, you get zero, which is a trivial solution in which we are not interested.\newline +We can thus summarize these two conditions by writing: +\begin{equation*} + \begin{rcases} + m+n \leq 2n &\implies m \leq n \\ + m+n \geq 0 &\implies m \geq -n + \end{rcases} |m| \leq n. +\end{equation*} +The set of functions in Eq.\eqref{kugel:eq:sph_harm_0} is named \emph{Spherical Harmonics}, which are the eigenfunctions of the Laplace operator on the \emph{spherical surface domain}, which is exactly what we were looking for at the beginning of this section. +\fi + +\subsection{Spherical Harmonics} + +Finally, we can go back to solving our boundary value problem we started in +section \ref{kugel:sec:construction:eigenvalue}. We had left off in the middle +of the separation, were we had used the Ansatz $f(\vartheta, \varphi) = +\Theta(\vartheta) \Phi(\varphi)$ to find that $\Phi(\varphi) = e^{im\varphi}$, +and we were solving for $\Theta(\vartheta)$. As you may recall, previously we +performed the substitution $z = \cos \vartheta$. Now we can finally to bring back the +solution to the associated Legendre equation $P^m_n(z)$ into the $\vartheta$ +domain and combine it with $\Phi(\varphi)$ to get the full result: +\begin{equation*} + f(\vartheta, \varphi) + = \Theta(\vartheta)\Phi(\varphi) + = P^m_n (\cos \vartheta) e^{im\varphi}. +\end{equation*} +This family of functions, which recall are the solutions of the eigenvalue +problem of the surface spherical Laplacian, are the long anticipated +\emph{complex spherical harmonics}, and they are usually denoted with +$Y^m_n(\vartheta, \varphi)$. + +\begin{definition}[Spherical harmonics] + \label{kugel:def:spherical-harmonics} + The functions + \begin{equation*} + Y_{m,n}(\vartheta, \varphi) = P^m_n(\cos \vartheta) e^{im\varphi}, + \end{equation*} + where $m, n \in \mathbb{Z}$ and $|m| < n$ are called spherical harmonics. +\end{definition} + +\begin{figure} + \centering + \kugelplaceholderfig{\textwidth}{.8\paperheight} + \caption{ + \kugeltodo{Big picture with the first few spherical harmonics.} + } +\end{figure} + +\subsection{Normalization} + +\kugeltodo{Discuss various normalizations.} + +\if 0 +As explained in the chapter \ref{}, the concept of orthogonality is very important and at the practical level it is very useful, because it allows us to develop very powerful techniques at the mathematical level.\newline +Throughout this book we have been confronted with the Sturm-Liouville theory (see chapter \ref{}). The latter, among other things, carries with it the concept of orthogonality. Indeed, if we consider the solutions of the Sturm-Liouville equation, which can be expressed in this form +\begin{equation}\label{kugel:eq:sturm_liouville} + \mathcal{S}f := \frac{d}{dx}\left[p(x)\frac{df}{dx}\right]+q(x)f(x) +\end{equation} +possiamo dire che formano una base ortogonale.\newline +Adesso possiamo dare un occhiata alle due equazioni che abbiamo ottenuto tramite la Separation Ansatz (Eqs.\eqref{kugel:eq:associated_leg_eq}\eqref{kugel:eq:ODE_1}), le quali possono essere riscritte come: +\begin{align*} + \frac{d}{dx} \left[ (1-x^2) \cdot \frac{dP_{m,n}}{dx} \right] &+ \left(n(n+1)-\frac{m}{1-x^2} \right) \cdot P_{m,n}(x) = 0, \\ + \frac{d}{d\varphi} \left[ 1 \cdot \frac{ d\Phi }{d\varphi} \right] &+ 1 \cdot \Phi(\varphi) = 0. +\end{align*} +Si può concludere in modo diretto che sono due casi dell'equazione di Sturm-Liouville. Questo significa che le loro soluzioni sono ortogonali sotto l'inner product con weight function $w(x)=1$, dunque: +\begin{align} +\int_{0}^{2\pi} \Phi_m(\varphi)\Phi_m'(\varphi) d\varphi &= \delta_{m'm}, \nonumber \\ +\int_{-1}^1 P_{m,m'}(x)P_{n,n'}(x) dx &= \delta_{m'm}\delta_{n'n}. \label{kugel:eq:orthogonality_associated_func} +\end{align} +Inoltre, possiamo provare l'ortogonalità di $\Theta(\vartheta)$ utilizzando \eqref{kugel:eq:orthogonality_associated_func}: +\begin{align} + x +\end{align} +Ora, visto che la soluzione dell'eigenfunction problem è formata dalla moltiplicazione di $\Phi_m(\varphi)$ e $P_{m,n}(x)$ +\fi \subsection{Properties} \subsection{Recurrence Relations} -\section{Series Expansions in \(C(S^2)\)} +\section{Series Expansions in $C(S^2)$} -\nocite{olver_introduction_2013} +\subsection{Orthogonality of $P_n$, $P^m_n$ and $Y^m_n$} + +\subsection{Series Expansion} + +\subsection{Fourier on $S^2$} diff --git a/buch/papers/parzyl/images/Makefile b/buch/papers/parzyl/images/Makefile new file mode 100644 index 0000000..4bd13ec --- /dev/null +++ b/buch/papers/parzyl/images/Makefile @@ -0,0 +1,16 @@ +# +# Makefile to build 3d images +# +# (c) 2022 Prof Dr Andreas Müller +# + +all: halfplane.pdf + +halfplane.pdf: halfplane.tex halfplane.jpg + pdflatex halfplane.tex +halfplane.png: halfplane.pov + povray +A0.1 -W1920 -H1080 -Ohalfplane.png halfplane.pov +halfplane.jpg: halfplane.png Makefile + convert -extract 1280x1080+340+0 halfplane.png \ + -density 300 -units PixelsPerInch halfplane.jpg + diff --git a/buch/papers/parzyl/images/common.inc b/buch/papers/parzyl/images/common.inc new file mode 100644 index 0000000..28aed2b --- /dev/null +++ b/buch/papers/parzyl/images/common.inc @@ -0,0 +1,64 @@ +// +// common.inc -- some common useful tools for drawing 3d images +// +// (c) 2018 Prof Dr Andreas Müller, Hochschule Rapperswil +// + +// +// draw a right angle quarter circle at point <o> with legs <v1> and <v2> and +// color <c> +// +#declare rechterwinkelradius = 0.5; +#declare rechterwinkelthickness = 0.01; +#macro rechterwinkel(o, v1, v2, c) +intersection { + sphere { o, rechterwinkelradius } + #declare rnormale = vnormalize(vcross(v1, v2)); + plane { rnormale, vdot(o, rnormale) + rechterwinkelthickness * rechterwinkelradius / 0.5 } + plane { -rnormale, -vdot(o, rnormale) + rechterwinkelthickness * rechterwinkelradius / 0.5 } + plane { -v1, -vdot(o, v1) } + plane { -v2, -vdot(o, v2) } + pigment { + color c + } +} +sphere { o + 0.45 * (vnormalize(v1) +vnormalize(v2)) * rechterwinkelradius, + 0.05 * rechterwinkelradius / 0.5 + pigment { + color c + } +} +#end + +// +// 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 + diff --git a/buch/papers/parzyl/images/halfplane.jpg b/buch/papers/parzyl/images/halfplane.jpg Binary files differnew file mode 100644 index 0000000..8cb5ae3 --- /dev/null +++ b/buch/papers/parzyl/images/halfplane.jpg diff --git a/buch/papers/parzyl/images/halfplane.pdf b/buch/papers/parzyl/images/halfplane.pdf Binary files differnew file mode 100644 index 0000000..7275810 --- /dev/null +++ b/buch/papers/parzyl/images/halfplane.pdf diff --git a/buch/papers/parzyl/images/halfplane.png b/buch/papers/parzyl/images/halfplane.png Binary files differnew file mode 100644 index 0000000..5beefa0 --- /dev/null +++ b/buch/papers/parzyl/images/halfplane.png diff --git a/buch/papers/parzyl/images/halfplane.pov b/buch/papers/parzyl/images/halfplane.pov new file mode 100644 index 0000000..419bb67 --- /dev/null +++ b/buch/papers/parzyl/images/halfplane.pov @@ -0,0 +1,201 @@ +// +// 3dimage.pov +// +// (c) 2022 Prof Dr Andreas Müller +// +#version 3.7; +#include "colors.inc" +#include "skies.inc" +#include "common.inc" + +global_settings { + assumed_gamma 1 +} + +#declare imagescale = 0.63; +#declare ar = 0.02; + +#declare Cameracenter = <5,3,-4>; +#declare Worldpoint = <0,-0.80, 0>; +#declare Lightsource = < 7,10,-3>; +#declare Lightdirection = vnormalize(Lightsource - Worldpoint); +#declare Lightaxis1 = vnormalize(vcross(Lightdirection, <0,1,0>)); +#declare Lightaxis2 = vnormalize(vcross(Lightaxis1, Lightdirection)); + +camera { + location Cameracenter + look_at Worldpoint + right 16/9 * x * imagescale + up y * imagescale +} + +light_source { + Lightsource color White + area_light Lightaxis1 Lightaxis2, 10, 10 + adaptive 1 + jitter +} + +sky_sphere { + pigment { + color White + } +} + +arrow( <-2.1, 0, 0 >, < 2.2, 0, 0 >, ar, White) +arrow( < 0, -1.1, 0 >, < 0, 1.3, 0 >, ar, White) +arrow( < 0, 0, -2 >, < 0, 0, 2.2 >, ar, White) + +#declare planecolor = rgb<0.2,0.6,1.0>; +#declare r = 0.01; + +#macro planebox() + box { <-2.1,-1.1,-2.1>, <0,1.1,2.1> } +#end + +intersection { + plane { <0, 0, 1>, 0.001 } + plane { <0, 0, -1>, 0.001 } + planebox() + pigment { + color planecolor transmit 0.3 + } + finish { + metallic + specular 0.95 + } +} + +#declare Xstep = 0.2; + +intersection { + union { + #declare X = 0; + #while (X > -2.5) + cylinder { <X,-3,0>, <X,+3,0>, r } + #declare X = X - Xstep; + #end + + #declare Y = Xstep; + #while (Y < 2.5) + cylinder { <-3, Y, 0>, <0, Y, 0>, r } + cylinder { <-3, -Y, 0>, <0, -Y, 0>, r } + #declare Y = Y + Xstep; + #end + } + planebox() + pigment { + color planecolor + } + finish { + metallic + specular 0.95 + } +} + +#declare parammin = -4; +#declare parammax = 4; +#declare paramsteps = 100; +#declare paramstep = (parammax - parammin) / paramsteps; + +#macro punkt(sigma, tau, Z) + < + 0.5 * (tau*tau - sigma*sigma) + Z, + sigma * tau, + > +#end + +#macro sigmasurface(sigma, farbe) + #declare taumin1 = 2/sigma; + #declare taumin2 = sqrt(4+sigma*sigma); + #if (taumin1 > taumin2) + #declare taumin = -taumin2; + #else + #declare taumin = -taumin1; + #end + + mesh { + #declare tau = taumin; + #declare taumax = -taumin; + #declare taustep = (taumax - taumin) / paramsteps; + #while (tau < taumax - taustep/2) + triangle { + punkt(sigma, tau, -1), + punkt(sigma, tau, 0), + punkt(sigma, tau + taustep, -1) + } + triangle { + punkt(sigma, tau + taustep, -1), + punkt(sigma, tau + taustep, 0), + punkt(sigma, tau, 0) + } + #declare tau = tau + taustep; + #end + pigment { + color farbe + } + finish { + specular 0.9 + metallic + } + } + + union { + #declare tau = taumin; + #declare taumax = -taumin; + #declare taustep = (taumax - taumin) / paramsteps; + #while (tau < taumax - taustep/2) + sphere { punkt(sigma, tau, 0), r } + cylinder { + punkt(sigma, tau, 0), + punkt(sigma, tau + taustep, 0), + r + } + #declare tau = tau + taustep; + #end + sphere { punkt(sigma, tau, 0), r } + pigment { + color farbe + } + finish { + specular 0.9 + metallic + } + + } +#end + +#declare greensurfacecolor = rgb<0.6,1.0,0.6>; +#declare redsurfacecolor = rgb<1.0,0.6,0.6>; + +sigmasurface(0.25, greensurfacecolor) +sigmasurface(0.5, greensurfacecolor) +sigmasurface(0.75, greensurfacecolor) +sigmasurface(1, greensurfacecolor) +sigmasurface(1.25, greensurfacecolor) +sigmasurface(1.5, greensurfacecolor) +sigmasurface(1.75, greensurfacecolor) +sigmasurface(2, greensurfacecolor) + +union { + sigmasurface(0.25, redsurfacecolor) + sigmasurface(0.5, redsurfacecolor) + sigmasurface(0.75, redsurfacecolor) + sigmasurface(1.00, redsurfacecolor) + sigmasurface(1.25, redsurfacecolor) + sigmasurface(1.5, redsurfacecolor) + sigmasurface(1.75, redsurfacecolor) + sigmasurface(2, redsurfacecolor) + rotate <0, 180, 0> +} + +box { <-2,-1,-2>, <2,-0.99,2> + pigment { + color rgb<1.0,0.8,0.6> transmit 0.8 + } + finish { + specular 0.9 + metallic + } +} diff --git a/buch/papers/parzyl/images/halfplane.tex b/buch/papers/parzyl/images/halfplane.tex new file mode 100644 index 0000000..e470057 --- /dev/null +++ b/buch/papers/parzyl/images/halfplane.tex @@ -0,0 +1,41 @@ +% +% halfplane.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{5} +\def\hoehe{4} + +\begin{tikzpicture}[>=latex,thick] + +% Povray Bild +\node at (0,0) {\includegraphics[width=10cm]{halfplane.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,3.7) {$z$}; +\node at (3.3,-0.3) {$x$}; +\node at (2.7,2.5) {$y$}; + +\end{tikzpicture} + +\end{document} + diff --git a/buch/papers/parzyl/img/D_plot.png b/buch/papers/parzyl/img/D_plot.png Binary files differnew file mode 100644 index 0000000..6c61eea --- /dev/null +++ b/buch/papers/parzyl/img/D_plot.png diff --git a/buch/papers/parzyl/img/plane.pdf b/buch/papers/parzyl/img/plane.pdf Binary files differnew file mode 100644 index 0000000..c52c336 --- /dev/null +++ b/buch/papers/parzyl/img/plane.pdf diff --git a/buch/papers/parzyl/img/v_plot.png b/buch/papers/parzyl/img/v_plot.png Binary files differnew file mode 100644 index 0000000..7cd5455 --- /dev/null +++ b/buch/papers/parzyl/img/v_plot.png diff --git a/buch/papers/parzyl/main.tex b/buch/papers/parzyl/main.tex index 528a2e2..fd2aea7 100644 --- a/buch/papers/parzyl/main.tex +++ b/buch/papers/parzyl/main.tex @@ -6,13 +6,13 @@ \chapter{Parabolische Zylinderfunktionen\label{chapter:parzyl}} \lhead{Parabolische Zylinderfunktionen} \begin{refsection} -\chapterauthor{Thierry Schwaller, Alain Keller} +\chapterauthor{Alain Keller und Thierry Schwaller} \input{papers/parzyl/teil0.tex} \input{papers/parzyl/teil1.tex} \input{papers/parzyl/teil2.tex} - +\input{papers/parzyl/teil3.tex} \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/parzyl/references.bib b/buch/papers/parzyl/references.bib index 494ff7c..390d5ed 100644 --- a/buch/papers/parzyl/references.bib +++ b/buch/papers/parzyl/references.bib @@ -33,3 +33,36 @@ url = {https://doi.org/10.1016/j.acha.2017.11.004} } +@book{parzyl:whittaker, + place={Cambridge}, + edition={4}, + series={Cambridge Mathematical Library}, + title={A Course of Modern Analysis}, + DOI={10.1017/CBO9780511608759}, + publisher={Cambridge University Press}, + author={Whittaker, E. T. and Watson, G. N.}, + year={1996}, + collection={Cambridge Mathematical Library}} + +@book{parzyl:abramowitz-stegun, + added-at = {2008-06-25T06:25:58.000+0200}, + address = {New York}, + author = {Abramowitz, Milton and Stegun, Irene A.}, + edition = {ninth Dover printing, tenth GPO printing}, + interhash = {d4914a420f489f7c5129ed01ec3cf80c}, + intrahash = {23ec744709b3a776a1af0a3fd65cd09f}, + keywords = {Handbook}, + publisher = {Dover}, + timestamp = {2008-06-25T06:25:58.000+0200}, + title = {Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables}, + year = 1972 +} + +@online{parzyl:coordinates, + title = {Parabolic cylindrical coordinates}, + url = {https://en.wikipedia.org/wiki/Parabolic_cylindrical_coordinates}, + date = {2022-08-17}, + year = {2022}, + month = {8}, + day = {17} +}
\ No newline at end of file diff --git a/buch/papers/parzyl/teil0.tex b/buch/papers/parzyl/teil0.tex index 4b251db..8be936d 100644 --- a/buch/papers/parzyl/teil0.tex +++ b/buch/papers/parzyl/teil0.tex @@ -4,45 +4,73 @@ % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % \section{Einleitung\label{parzyl:section:teil0}} -\rhead{Teil 0} -Die Laplace-Gleichung ist eine wichtige Gleichung in der Physik. -Mit ihr lässt sich zum Beispiel das elektrische Feld in einem ladungsfreien Raum bestimmen. -In diesem Kapitel wird die Lösung der Laplace-Gleichung im -parabolischen Zylinderkoordinatensystem genauer untersucht. -\subsection{Laplace Gleichung} -Die partielle Differentialgleichung -\begin{equation} - \Delta f = 0 -\end{equation} -ist als Laplace-Gleichung bekannt. -Sie ist eine spezielle Form der Poisson-Gleichung +\rhead{Einleitung} +%Die Laplace-Gleichung ist eine wichtige Gleichung in der Physik. +%Mit ihr lässt sich zum Beispiel das elektrische Feld in einem ladungsfreien Raum bestimmen. +%In diesem Kapitel wird die Lösung der Laplace-Gleichung im +%parabolischen Zylinderkoordinatensystem genauer untersucht. +Die Helmholtz-Gleichung ist eine wichtige Gleichung in der Physik. +Mit ihr lässt sich zum Beispiel das Verhalten von elektromagnetischen Wellen beschreiben. +In diesem Kapitel werden die Lösungen der Helmholtz-Gleichung im parabolischen Zylinderkoordinatensystem, +die parabolischen Zylinderfunktionen, genauer untersucht. + +\subsection{Helmholtz-Gleichung} +Die partielle Differentialgleichung \begin{equation} - \Delta f = g + \Delta f = \lambda f \end{equation} -mit g als beliebige Funktion. -In der Physik hat die Laplace-Gleichung in verschieden Gebieten -verwendet, zum Beispiel im Elektromagnetismus. -Das Gaussche Gesetz in den Maxwellgleichungen +ist als Helmholtz-Gleichung bekannt und beschreibt das Eigenwert Problem für den Laplace-Operator. +Sie ist eine der Gleichungen welche auftritt wenn die Wellengleichung \begin{equation} - \nabla \cdot E = \frac{\varrho}{\epsilon_0} -\label{parzyl:eq:max1} + \left ( \nabla^2 - \frac{1}{c^2}\frac{\partial^2}{\partial t^2} \right ) u(\textbf{r},t) + = + 0 \end{equation} -besagt das die Divergenz eines Elektrischen Feldes an einem -Punkt gleich der Ladung an diesem Punkt ist. -Das elektrische Feld ist hierbei der Gradient des elektrischen -Potentials +mit Hilfe von Separation \begin{equation} - \nabla \phi = E. -\end{equation} -Eingesetzt in \eqref{parzyl:eq:max1} resultiert + u(\textbf{r},t) = A(\textbf{r})T(t) +\end{equation} +in zwei Differentialgleichungen aufgeteilt wird. Die Helmholtz-Gleichung ist der Teil, +welcher zeitunabhängig ist \begin{equation} - \nabla \cdot \nabla \phi = \Delta \phi = \frac{\varrho}{\epsilon_0}, + \nabla^2 A(\textbf{r}) = \lambda A(\textbf{r}). \end{equation} -was eine Possion-Gleichung ist. -An Ladungsfreien Stellen, ist der rechte Teil der Gleichung $0$. + +%\subsection{Laplace Gleichung} +%Die partielle Differentialgleichung +%\begin{equation} +% \Delta f = 0 +%\end{equation} +%ist als Laplace-Gleichung bekannt. +%Sie ist eine spezielle Form der Poisson-Gleichung +%\begin{equation} +% \Delta f = g +%\end{equation} +%mit $g$ als beliebiger Funktion. +%In der Physik hat die Laplace-Gleichung in verschiedenen Gebieten +%verwendet, zum Beispiel im Elektromagnetismus. +%Das Gaussche Gesetz in den Maxwellgleichungen +%\begin{equation} +% \nabla \cdot E = \frac{\varrho}{\epsilon_0} +%\label{parzyl:eq:max1} +%\end{equation} +%besagt, dass die Divergenz eines elektrischen Feldes an einem +%Punkt gleich der Ladungsdichte an diesem Punkt ist. +%Das elektrische Feld ist hierbei der Gradient des elektrischen +%Potentials +%\begin{equation} +% \nabla \phi = E. +%\end{equation} +%Eingesetzt in \eqref{parzyl:eq:max1} resultiert +%\begin{equation} +% \nabla \cdot \nabla \phi = \Delta \phi = \frac{\varrho}{\epsilon_0}, +%\end{equation} +%was eine Poisson-Gleichung ist. +%An ladungsfreien Stellen ist der rechte Teil der Gleichung $0$. \subsection{Parabolische Zylinderkoordinaten \label{parzyl:subsection:finibus}} -Im parabolischen Zylinderkoordinatensystem bilden parabolische Zylinder die Koordinatenflächen. +Das parabolischen Zylinderkoordinatensystem \cite{parzyl:coordinates} ist ein krummliniges Koordinatensystem, +bei dem parabolische Zylinder die Koordinatenflächen bilden. Die Koordinate $(\sigma, \tau, z)$ sind in kartesischen Koordinaten ausgedrückt mit \begin{align} x & = \sigma \tau \\ @@ -51,7 +79,7 @@ Die Koordinate $(\sigma, \tau, z)$ sind in kartesischen Koordinaten ausgedrückt z & = z. \label{parzyl:coordRelationse} \end{align} -Wird $\tau$ oder $\sigma$ konstant gesetzt resultieren die Parabeln +Wird $\tau$ oder $\sigma$ konstant gesetzt, resultieren die Parabeln \begin{equation} y = \frac{1}{2} \left( \frac{x^2}{\sigma^2} - \sigma^2 \right) \end{equation} @@ -67,7 +95,6 @@ und konstantes $\sigma$ und die grünen ein konstantes $\tau$.} \label{parzyl:fig:cordinates} \end{figure} - Abbildung \ref{parzyl:fig:cordinates} zeigt das Parabolische Koordinatensystem. Das parabolische Zylinderkoordinatensystem entsteht wenn die Parabeln aus der Ebene gezogen werden. @@ -75,17 +102,15 @@ Ebene gezogen werden. Um in diesem Koordinatensystem integrieren und differenzieren zu können braucht es die Skalierungsfaktoren $h_{\tau}$, $h_{\sigma}$ und $h_{z}$. -\dots - -Wird eine infinitessimal kleine Distanz $ds$ zwischen zwei Punkten betrachtet -kann dies im kartesischen Koordinatensystem mit +Eine infinitessimal kleine Distanz $ds$ zwischen zwei Punkten +kann im kartesischen Koordinatensystem mit \begin{equation} \left(ds\right)^2 = \left(dx\right)^2 + \left(dy\right)^2 + \left(dz\right)^2 \label{parzyl:eq:ds} \end{equation} ausgedrückt werden. -Das Skalierungsfaktoren werden so bestimmt, dass +Die Skalierungsfaktoren werden in einem orthogonalen Koordinatensystem so bestimmt, dass \begin{equation} \left(ds\right)^2 = \left(h_{\sigma}d\sigma\right)^2 + \left(h_{\tau}d\tau\right)^2 + \left(h_z dz\right)^2 @@ -106,7 +131,7 @@ von \eqref{parzyl:coordRelationsa} - \eqref{parzyl:coordRelationse} als dz &= \frac{\partial \tilde{z} }{\partial \sigma} d\sigma + \frac{\partial \tilde{z} }{\partial \tau} d\tau + \frac{\partial \tilde{z} }{\partial \tilde{z}} d \tilde{z} - = d \tilde{z} \\ + = d \tilde{z} \end{align} substituiert. Wird diese Gleichung in der Form von \eqref{parzyl:eq:dspara} @@ -120,21 +145,21 @@ geschrieben, resultiert Daraus ergeben sich die Skalierungsfaktoren \begin{align} h_{\sigma} &= \sqrt{\sigma^2 + \tau^2}\\ - h_{\sigma} &= \sqrt{\sigma^2 + \tau^2}\\ + h_{\tau} &= \sqrt{\sigma^2 + \tau^2}\\ h_{z} &= 1. \end{align} \subsection{Differentialgleichung} Möchte man eine Differentialgleichung im parabolischen -Zylinderkoordinatensystem aufstellen müssen die Skalierungsfaktoren +Zylinderkoordinatensystem aufstellen, müssen die Skalierungsfaktoren mitgerechnet werden. -Der Laplace Operator ist dadurch gegeben als +Der Laplace Operator wird dadurch zu \begin{equation} \Delta f = \frac{1}{\sigma^2 + \tau^2} \left( \frac{\partial^2 f}{\partial \sigma ^2} + \frac{\partial^2 f}{\partial \tau ^2} \right) - + \frac{\partial^2 f}{\partial z}. + + \frac{\partial^2 f}{\partial z^2}. \label{parzyl:eq:laplaceInParZylCor} \end{equation} \subsubsection{Lösung der Helmholtz-Gleichung im parabolischen Zylinderfunktion} @@ -181,8 +206,7 @@ Diese partielle Differentialgleichung kann mit Hilfe von Separation gelöst werd \begin{equation} f(\sigma,\tau,z) = g(\sigma)h(\tau)i(z) \end{equation} -gesetzt. -Was dann schlussendlich zu den Differentialgleichungen +gesetzt, was dann schlussendlich zu den Differentialgleichungen \begin{equation}\label{parzyl:sep_dgl_1} g''(\sigma) - @@ -216,26 +240,12 @@ und + \mu \right ) - i(\tau) + i(z) = 0 \end{equation} führt. -Wobei die Lösung von \eqref{parzyl:sep_dgl_3} -\begin{equation} - i(z) - = - A\cos{ - \left ( - \sqrt{\lambda + \mu}z - \right )} - + - B\sin{ - \left ( - \sqrt{\lambda + \mu}z - \right )} -\end{equation} -ist und \eqref{parzyl:sep_dgl_1} und \eqref{parzyl:sep_dgl_2} die sogenannten Weberschen Differentialgleichungen sind, welche die parabolischen Zylinder Funktionen als Lösung haben. + diff --git a/buch/papers/parzyl/teil1.tex b/buch/papers/parzyl/teil1.tex index f297189..13d8109 100644 --- a/buch/papers/parzyl/teil1.tex +++ b/buch/papers/parzyl/teil1.tex @@ -5,24 +5,180 @@ % \section{Lösung \label{parzyl:section:teil1}} -\rhead{Problemstellung} -Die Differentialgleichungen \eqref{parzyl:sep_dgl_1} und \eqref{parzyl:sep_dgl_2} können mit einer Substitution -in die Whittaker Gleichung gelöst werden. +\rhead{Lösung} + +\eqref{parzyl:sep_dgl_3} beschriebt einen ungedämpften harmonischen Oszillator. +Die Lösung ist somit +\begin{equation} + i(z) + = + A\cos{ + \left ( + \sqrt{\lambda + \mu}z + \right )} + + + B\sin{ + \left ( + \sqrt{\lambda + \mu}z + \right )}. +\end{equation} +Die Differentialgleichungen \eqref{parzyl:sep_dgl_1} und \eqref{parzyl:sep_dgl_2} werden in \cite{parzyl:whittaker} +mit Hilfe der Whittaker Gleichung gelöst. \begin{definition} - Die Funktion + Die Funktionen + \begin{equation*} + M_{k,m}(x) = + e^{-x/2} x^{m+1/2} \, + {}_{1} F_{1} + ( + {\textstyle \frac{1}{2}} + + m - k, 1 + 2m; x) \qquad x \in \mathbb{C} + \end{equation*} + und \begin{equation*} - W_{k,m}(z) = - e^{-z/2} z^{m+1/2} \, - {}_{1} F_{1}(\frac{1}{2} + m - k, 1 + 2m; z) + W_{k,m}(x) = \frac{ + \Gamma \left( -2m\right) + }{ + \Gamma \left( {\textstyle \frac{1}{2}} - m - k\right) + } + M_{-k, m} \left(x\right) + + + \frac{ + \Gamma \left( 2m\right) + }{ + \Gamma \left( {\textstyle \frac{1}{2}} + m - k\right) + } + M_{k, -m} \left(x\right) \end{equation*} - heisst Whittaker Funktion und ist eine Lösung - von + gehören zu den Whittaker Funktionen und sind Lösungen + von der Whittaker Differentialgleichung \begin{equation} - \frac{d^2W}{d z^2} + - \left(-\frac{1}{4} + \frac{k}{z} + \frac{\frac{1}{4} - m^2}{z^2} \right) W = 0. + \frac{d^2W}{d x^2} + + \biggl( -\frac{1}{4} + \frac{k}{x} + \frac{\frac{1}{4} - m^2}{x^2} \biggr) W = 0. + \label{parzyl:eq:whitDiffEq} \end{equation} -\end{definition} - -Lösung Folgt\dots +\end{definition} +Es wird nun die Differentialgleichung bestimmt, welche +\begin{equation} + w = x^{-1/2} W_{k,-1/4} \left({\textstyle \frac{1}{2}} x^2\right) +\end{equation} +als Lösung hat. +Dafür wird $w$ in \eqref{parzyl:eq:whitDiffEq} eingesetzt, woraus +\begin{equation} + \frac{d^2 w}{dx^2} - \left(\frac{1}{4} x^2 - 2k\right) w = 0 +\label{parzyl:eq:weberDiffEq} +\end{equation} +resultiert. Diese Differentialgleichung ist dieselbe wie +\eqref{parzyl:sep_dgl_1} und \eqref{parzyl:sep_dgl_2}, welche somit +$w$ als Lösung haben. +%Da es sich um eine Differentialgleichung zweiter Ordnung handelt, hat sie nicht nur +%eine sondern zwei Lösungen. +%Die zweite Lösung der Whittaker-Gleichung ist $W_{k,-m} (z)$. +%Somit hat \eqref{parzyl:eq:weberDiffEq} +%\begin{align} +% w_1(k, z) & = z^{-1/2} W_{k,-1/4} \left({\textstyle \frac{1}{2}} z^2\right)\\ +% w_2(k, z) & = z^{-1/2} W_{k,1/4} \left({\textstyle \frac{1}{2}} z^2\right) +%\end{align} +%als Lösungen. +%Mit der Hypergeometrischen Funktion ausgeschrieben ergeben sich die Lösungen +%\begin{align} +% \label{parzyl:eq:solution_dgl} +% w_1(k,z) &= e^{-z^2/4} \, +% {}_{1} F_{1} +% ( +% {\textstyle \frac{1}{4}} +% - k, {\textstyle \frac{1}{2}} ; {\textstyle \frac{1}{2}}z^2) \\ +% w_2(k,z) & = z e^{-z^2/4} \, +% {}_{1} F_{1} +% ({\textstyle \frac{3}{4}} +% - k, {\textstyle \frac{3}{2}} ; {\textstyle \frac{1}{2}}z^2). +%\end{align} +In der Literatur gibt es verschiedene Standartlösungen für +\eqref{parzyl:eq:weberDiffEq}, wobei die Differentialgleichung jeweils +unterschiedlich geschrieben wird. +Whittaker und Watson zeigen in \cite{parzyl:whittaker} die Lösung +\begin{equation} + D_n(x) = 2^{\frac{1}{2}n + \frac{1}{2}} x^{-\frac{1}{2}} W_{n/2 + 1/4, -1/4}\left(\frac{1}{2}x^2\right), +\end{equation} +welche die Differentialgleichung +\begin{equation} + \frac{d^2D_n(x)}{dx^2} + \left(n + \frac{1}{2} - \frac{1}{4} x^2\right)D_n(x) = 0 +\end{equation} +löst. +Mit $M_{k,m}(x)$ geschrieben resultiert +\begin{equation} + D_n(x) = \frac{ + \Gamma \left( {\textstyle \frac{1}{2}}\right) 2^{\frac{1}{2}n + \frac{1}{4}} x^{-\frac{1}{2}} + }{ + \Gamma \left( {\textstyle \frac{1}{2}} - {\textstyle \frac{1}{2}} n \right) + } + M_{\frac{1}{2} n + \frac{1}{4}, - \frac{1}{4}} \left(\frac{1}{2}x^2\right) + + + \frac{ + \Gamma\left(-{\textstyle \frac{1}{2}}\right) 2^{\frac{1}{2}n + \frac{1}{4}} x^{-\frac{1}{2}} + }{ + \Gamma\left(- {\textstyle \frac{1}{2}} n\right) + } + M_{\frac{1}{2} n + \frac{1}{4}, \frac{1}{4}} \left(\frac{1}{2}x^2\right). +\end{equation} +In \cite{parzyl:abramowitz-stegun} sind zwei Lösungen $U(a, x)$ und $V(a,x)$ +\begin{align} + U(a,x) &= + \cos\left[\pi \left({\textstyle \frac{1}{4}} + {\textstyle \frac{1}{2}} a\right)\right] Y_1 + - \sin\left[\pi \left({\textstyle \frac{1}{4}} + {\textstyle \frac{1}{2}} a\right)\right] Y_2 + \label{parzyl:eq:Uaz} + \\ + V(a,x) &= \frac{1}{\Gamma \left({\textstyle \frac{1}{2} - a}\right)} \left\{ + \sin\left[\pi \left({\textstyle \frac{1}{4}} + {\textstyle \frac{1}{2}} a\right)\right] Y_1 + + \cos\left[\pi \left({\textstyle \frac{1}{4}} + {\textstyle \frac{1}{2}} a\right)\right] Y_2 + \right\} + \label{parzyl:eq:Vaz} +\end{align} +mit +\begin{align} + Y_1 &= \frac{1}{\sqrt{\pi}} + \frac{\Gamma\left({\textstyle \frac{1}{4} - + {\textstyle \frac{1}{2}}a}\right)} + {2^{\frac{1}{2} a + \frac{1}{4}}} + e^{-x^2/4} + {}_{1} F_{1} + \left({\textstyle \frac{1}{2}}a + {\textstyle \frac{1}{4}}, + {\textstyle \frac{1}{2}} ; + {\textstyle \frac{1}{2}}x^2\right)\\ + Y_2 &= \frac{1}{\sqrt{\pi}} + \frac{\Gamma\left({\textstyle \frac{3}{4} - + {\textstyle \frac{1}{2}}a}\right)} + {2^{\frac{1}{2} a - \frac{1}{4}}} + x e^{-x^2/4} + {}_{1} F_{1} + \left({\textstyle \frac{1}{2}}a + {\textstyle \frac{3}{4}}, + {\textstyle \frac{3}{2}} ; + {\textstyle \frac{1}{2}}x^2\right) +\end{align} +der Differentialgleichung +\begin{equation} + \frac{d^2 y}{d x^2} - \left(\frac{1}{4} x^2 + a\right) y = 0 +\end{equation} +beschrieben. Die Lösungen $U(a,z)$ und $V(a, z)$ können auch mit $D_n(z)$ +ausgedrückt werden +\begin{align} + U(a,x) &= D_{-a-1/2}(x) \\ + V(a,x) &= \frac{\Gamma \left({\textstyle \frac{1}{2}} + a\right)}{\pi} + \left[\sin\left(\pi a\right) D_{-a-1/2}(x) + D_{-a-1/2}(-x)\right]. +\end{align} +In den Abbildungen \ref{parzyl:fig:dnz} und \ref{parzyl:fig:Vnz} sind +die Funktionen $D_n(x)$ und $V(a,x)$ mit verschiedenen Werten für $a$ abgebildet. +\begin{figure} + \centering + \includegraphics[scale=0.35]{papers/parzyl/img/D_plot.png} + \caption{$D_n(x)$ mit unterschiedlichen Werten für $n$.} + \label{parzyl:fig:dnz} +\end{figure} +\begin{figure} + \centering + \includegraphics[scale=0.35]{papers/parzyl/img/v_plot.png} + \caption{$V(a,x)$ mit unterschiedlichen Werten für $a$.} + \label{parzyl:fig:Vnz} +\end{figure}
\ No newline at end of file diff --git a/buch/papers/parzyl/teil2.tex b/buch/papers/parzyl/teil2.tex index 3f890d0..573432a 100644 --- a/buch/papers/parzyl/teil2.tex +++ b/buch/papers/parzyl/teil2.tex @@ -5,18 +5,21 @@ % \section{Anwendung in der Physik \label{parzyl:section:teil2}} -\rhead{Teil 2} +\rhead{Anwendung in der Physik} - -\subsection{Elektrisches Feld einer semi-infiniten Platte -\label{parzyl:subsection:bonorum}} -Die parabolischen Zylinderkoordinaten tauchen auf, wenn man das elektrische Feld einer semi-infiniten Platte finden will. -Das dies so ist kann im zwei Dimensionalen mit Hilfe von komplexen Funktionen gezeigt werden. Wobei die Platte dann nur eine Linie ist. +Die parabolischen Zylinderkoordinaten tauchen auf, wenn man das elektrische Feld einer semi-infiniten Platte, wie in Abbildung \ref{parzyl:fig:leiterplatte} gezeigt, finden will. +\begin{figure} + \centering + \includegraphics[width=0.9\textwidth]{papers/parzyl/img/plane.pdf} + \caption{Semi-infinite Leiterplatte} + \label{parzyl:fig:leiterplatte} +\end{figure} +Das dies so ist kann im zwei Dimensionalen mit Hilfe von komplexen Funktionen gezeigt werden. Die Platte ist dann nur eine Linie, was man in Abbildung TODO sieht. Jede komplexe Funktion $F(z)$ kann geschrieben werden als \begin{equation} - F(z) = U(x,y) + iV(x,y) \qquad z \in \mathbb{C}; x,y \in \mathbb{R}. + F(s) = U(x,y) + iV(x,y) \qquad s \in \mathbb{C}; x,y \in \mathbb{R}. \end{equation} -Dabei muss gelten, falls die Funktion differenzierbar ist, dass +Dabei müssen, falls die Funktion differenzierbar ist, die Cauchy-Riemann Differentialgleichungen \begin{equation} \frac{\partial U(x,y)}{\partial x} = @@ -24,8 +27,9 @@ Dabei muss gelten, falls die Funktion differenzierbar ist, dass \qquad \frac{\partial V(x,y)}{\partial x} = - -\frac{\partial U(x,y)}{\partial y}. + -\frac{\partial U(x,y)}{\partial y} \end{equation} +gelten. Aus dieser Bedingung folgt \begin{equation} \label{parzyl_e_feld_zweite_ab} @@ -35,7 +39,7 @@ Aus dieser Bedingung folgt \frac{\partial^2 U(x,y)}{\partial y^2} = 0 - }_{\nabla^2U(x,y)=0} + }_{\displaystyle{\nabla^2U(x,y)=0}} \qquad \underbrace{ \frac{\partial^2 V(x,y)}{\partial x^2} @@ -43,49 +47,58 @@ Aus dieser Bedingung folgt \frac{\partial^2 V(x,y)}{\partial y^2} = 0 - }_{\nabla^2V(x,y) = 0}. + }_{\displaystyle{\nabla^2V(x,y) = 0}}. \end{equation} -Zusätzlich zeigen diese Bedingungen auch, dass die zwei Funktionen $U(x,y)$ und $V(x,y)$ orthogonal zueinander sind. +Zusätzlich kann auch gezeigt werden, dass die Funktion $F(z)$ eine winkeltreue Abbildung ist. Der Zusammenhang zum elektrischen Feld ist jetzt, dass das Potential an einem quellenfreien Punkt gegeben ist als \begin{equation} \nabla^2\phi(x,y) = 0. \end{equation} -Da dies bei komplexen differenzierbaren Funktionen gilt, wie Gleichung \ref{parzyl_e_feld_zweite_ab} zeigt, kann entweder $U(x,y)$ oder $V(x,y)$ von einer solchen Funktion als das Potential angesehen werden. Im weiteren wird für das Potential $U(x,y)$ verwendet. -Da die Funktion, welche nicht das Potential beschreibt, in weiteren angenommen als $V(x,y)$, orthogonal zum Potential ist, zeigt dies das Verhalten des elektrischen Feldes. -Um nun zu den parabolische Zylinderkoordinaten zu gelangen muss nur noch eine geeignete komplexe Funktion $F(z)$ gefunden werden, welche eine semi-infinite Platte beschreiben kann. Man könnte natürlich auch nach anderen Funktionen suchen, welche andere Bedingungen erfüllen und würde dann auf andere Koordinatensysteme stossen. Die gesuchte Funktion in diesem Fall ist +Dies ist eine Bedingung welche differenzierbare Funktionen, wie in Gleichung \eqref{parzyl_e_feld_zweite_ab} gezeigt wird, bereits besitzen. +Nun kann zum Beispiel $U(x,y)$ als das Potential angeschaut werden +\begin{equation} + \phi(x,y) = U(x,y). +\end{equation} +Orthogonal zum Potential ist das elektrische Feld +\begin{equation} + E(x,y) = V(x,y). +\end{equation} +Um nun zu den parabolische Zylinderkoordinaten zu gelangen muss nur noch eine geeignete +komplexe Funktion $F(s)$ gefunden werden, +welche eine semi-infinite Platte beschreiben kann. +Die gesuchte Funktion in diesem Fall ist \begin{equation} - F(z) + F(s) = - \sqrt{z} + \sqrt{s} = \sqrt{x + iy}. \end{equation} Dies kann umgeformt werden zu \begin{equation} - F(z) + F(s) = \underbrace{\sqrt{\frac{\sqrt{x^2+y^2} + x}{2}}}_{U(x,y)} + i\underbrace{\sqrt{\frac{\sqrt{x^2+y^2} - x}{2}}}_{V(x,y)} . \end{equation} -Die Äquipotentialflächen können nun betrachtet werden, indem man die Funktion welche das Potential beschreibt gleich eine Konstante setzt, +Die Äquipotentialflächen können nun betrachtet werden, +indem man die Funktion, welche das Potential beschreibt, gleich eine Konstante setzt, \begin{equation} - \sigma = U(x,y) = \sqrt{\frac{\sqrt{x^2+y^2} + x}{2}}, + \sigma = U(x,y) = \sqrt{\frac{\sqrt{x^2+y^2} + x}{2}}. \end{equation} -und die Flächen mit der gleichen elektrischen Feldstärke können als +Die Flächen mit der gleichen elektrischen Feldstärke können als \begin{equation} \tau = V(x,y) = \sqrt{\frac{\sqrt{x^2+y^2} - x}{2}} \end{equation} -beschrieben werden. Diese zwei Gleichungen zeigen nun wie man vom kartesischen Koordinatensystem ins parabolische Zylinderkoordinatensystem kommt. Werden diese Formeln nun nach x und y aufgelöst so beschreibe sie, wie man aus dem parabolischen Zylinderkoordinatensystem zurück ins kartesische rechnen kann +beschrieben werden. Diese zwei Gleichungen zeigen nun, wie man vom +kartesischen Koordinatensystem ins parabolische Zylinderkoordinatensystem kommt. +Werden diese Formeln nun nach $x$ und $y$ aufgelöst \begin{equation} x = \sigma \tau, \end{equation} \begin{equation} - y = \frac{1}{2}\left ( \tau^2 - \sigma^2 \right ) + y = \frac{1}{2}\left ( \tau^2 - \sigma^2 \right ), \end{equation} - - - - - +so beschreibe sie, wie man aus dem parabolischen Zylinderkoordinatensystem zurück ins kartesische rechnen kann.
\ No newline at end of file diff --git a/buch/papers/parzyl/teil3.tex b/buch/papers/parzyl/teil3.tex index 4e44bd6..166eebf 100644 --- a/buch/papers/parzyl/teil3.tex +++ b/buch/papers/parzyl/teil3.tex @@ -3,6 +3,102 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 3 -\label{parzyl:section:teil3}} -\rhead{Teil 3} +\section{Eigenschaften +\label{parzyl:section:Eigenschaften}} +\rhead{Eigenschaften} + +\subsection{Potenzreihenentwicklung + \label{parzyl:potenz}} +%Die parabolischen Zylinderfunktionen, welche in Gleichung \ref{parzyl:eq:solution_dgl} gegeben sind, +%können auch als Potenzreihen geschrieben werden +Die parabolischen Zylinderfunktionen können auch als Potenzreihen geschrieben werden. +Im folgenden Abschnitt werden die Terme welche nur von $n$ oder $a$ abhängig sind vernachlässigt. +Die parabolischen Zylinderfunktionen sind Linearkombinationen aus einem geraden Teil $w_1(\alpha, x)$ +und einem ungeraden Teil $w_2(\alpha, x)$, welche als Potenzreihe +\begin{align} + w_1(\alpha,x) + &= + e^{-x^2/4} \, + {}_{1} F_{1} + ( + \alpha, {\textstyle \frac{1}{2}} ; {\textstyle \frac{1}{2}}x^2) + = + e^{-\frac{x^2}{4}} + \sum^{\infty}_{n=0} + \frac{\left ( \alpha \right )_{n}}{\left ( \frac{1}{2}\right )_{n}} + \frac{\left ( \frac{1}{2} x^2\right )^n}{n!} \\ + &= + e^{-\frac{x^2}{4}} + \left ( + 1 + + + \left ( 2\alpha \right )\frac{x^2}{2!} + + + \left ( 2\alpha \right )\left ( 2 + 2\alpha \right )\frac{x^4}{4!} + + + \dots + \right ) +\end{align} +und +\begin{align} + w_2(\alpha,x) + &= + xe^{-x^2/4} \, + {}_{1} F_{1} + ( + {\textstyle \frac{1}{2}} + + \alpha, {\textstyle \frac{3}{2}} ; {\textstyle \frac{1}{2}}x^2) + = + xe^{-\frac{x^2}{4}} + \sum^{\infty}_{n=0} + \frac{\left ( \frac{3}{4} - k \right )_{n}}{\left ( \frac{3}{2}\right )_{n}} + \frac{\left ( \frac{1}{2} x^2\right )^n}{n!} \\ + &= + e^{-\frac{x^2}{4}} + \left ( + x + + + \left ( 1 + 2\alpha \right )\frac{x^3}{3!} + + + \left ( 1 + 2\alpha \right )\left ( 3 + 2\alpha \right )\frac{x^5}{5!} + + + \dots + \right ) +\end{align} +sind. +Die Potenzreihen sind in der regel unendliche Reihen. +Es gibt allerdings die Möglichkeit für bestimmte $\alpha$ das die Terme in der Klammer gleich null werden +und die Reihe somit eine endliche Anzahl $n$ Summanden hat. +Dies geschieht bei $w_1(\alpha,x)$ falls +\begin{equation} + \alpha = -n \qquad n \in \mathbb{N}_0 +\end{equation} +und bei $w_2(\alpha,x)$ falls +\begin{equation} + \alpha = -\frac{1}{2} - n \qquad n \in \mathbb{N}_0. +\end{equation} +Der Wert des von $\alpha$ ist abhängig, ob man $D_n(x)$ oder $U(a,x)$ / $V(a,x)$ verwendet. +Bei $D_n(x)$ gilt $\alpha = -{\textstyle \frac{1}{2}} n$ und bei $U(a,z)$ oder $V(a,x)$ gilt +$\alpha = {\textstyle \frac{1}{2}} a + {\textstyle \frac{1}{4}}$. +\subsection{Ableitung} +Die Ableitungen $\frac{\partial w_1(\alpha, x)}{\partial x}$ und $\frac{\partial w_2(\alpha, x)}{\partial x}$ +können mit den Eigenschaften der hypergeometrischen Funktionen in Abschnitt +\ref{buch:rekursion:hypergeometrisch:stammableitung} berechnet werden. +Zusammen mit der Produktregel ergeben sich die Ableitungen +\begin{equation} + \frac{\partial w_1(\alpha,x)}{\partial x} = 2\alpha w_2(\alpha + \frac{1}{2}, x) - \frac{1}{2} x w_1(\alpha, x), +\end{equation} +und +%\begin{equation} +% \frac{\partial w_2(z,k)}{\partial z} = w_1(z, k -\frac{1}{2}) - \frac{1}{2} z w_2(z,k). +%\end{equation} +\begin{equation} + \frac{\partial w_2(\alpha,x)}{\partial x} = e^{-x^2/4} \left( + x^{-1} w_2(\alpha, x) - \frac{x}{2} w_2(\alpha, x) + 2 x^2 \left(\frac{\alpha + 1}{3}\right) + {}_{1} F_{1} ( + {\textstyle \frac{3}{2}} + + \alpha, {\textstyle \frac{5}{2}} ; {\textstyle \frac{1}{2}}x^2) + \right) +\end{equation} +Nach dem selben Vorgehen können weitere Ableitungen berechnet werden. + diff --git a/buch/papers/sturmliouville/einleitung.tex b/buch/papers/sturmliouville/einleitung.tex index d497622..f58baf9 100644 --- a/buch/papers/sturmliouville/einleitung.tex +++ b/buch/papers/sturmliouville/einleitung.tex @@ -22,32 +22,24 @@ als \end{equation} geschrieben werden kann, dann wird diese Gleichung als Sturm-Liouville-Gleichung bezeichnet. \end{definition} -Alle homogene 2. Ordnung lineare gewöhnliche Differentialgleichungen können in die Form der Gleichung \ref{eq:sturm-liouville-equation} umgeformt werden. +Alle homogenen linearen gewöhnlichen Differentialgleichungen 2. Ordnung können in die Form der Gleichung \eqref{eq:sturm-liouville-equation} umgewandelt werden. \subsection{Randbedingungen\label{sub:was-ist-das-slp-randbedingungen}} -Wenn von der Funktion $y(x)$ die Werte $x$ des jeweiligen Randes des Definitionsbereiches anzunehmen sind, also +Geeignete Randbedingungen sind erforderlich, um die Lösungen einer Differentialgleichung genau zu bestimmen. +Die Sturm-Liouville-Gleichung mit homogenen Randbedingungen des dritten Typs \begin{equation} - y(a) = y(b) = 0, + \begin{aligned} + \label{eq:randbedingungen} + k_a y(a) + h_a p(a) y'(a) &= 0 \\ + k_b y(b) + h_b p(b) y'(b) &= 0. + \end{aligned} \end{equation} -so spricht man von einer Dirichlet-Randbedingung\footnote{Die Dirichlet-Randbedingung oder auch Randbedingung des ersten Typs genannt ist nach dem deutschen Mathematiker Peter Gstav Lejeune Dirichlet benannt. Sie findet Anwendung auf gewöhnliche oder patielle Differentialgleichungen und gibt mit der Bedingung die Werte an, die für die abgeleitete Lösung innerhalb der Domänengrenze gelten.}, und von einer Neumann-Randbedingung\footnote{Die Neumann-Randbedingung oder auch Randbedingung des zweiten Typs genannt, ist nach dem deutschen Mathematiker Carl Neumann benannt. Sie legt die Werte fest, die eine Lösung entlang der Domänengrenze annehmen muss, wenn eine gewöhnliche oder partielle Differentialgleichung gestellt wird.} spricht man, wenn -\begin{equation} - y'(a) = y'(b) = 0 -\end{equation} -ergibt. +ist das klassische Sturm-Liouville-Problem. -Die Sturm-Liouville-Theorie besagt, dass, wenn man die Sturm-Liouville-Gleichung mit den homogenen Randbedingungen des dritten Typs\footnote{Die Randbedingung des dritten Typs, oder Robin-Randbedingungen (benannt nach dem französischen mathematischen Analytiker und angewandten Mathematiker Victor Gustave Robin), wird genannt, wenn sie einer gewöhnlichen oder partiellen Differentialgleichung auferlegt wird, so sind die Spezifikationen einer Linearkombination der Werte einer Funktion sowie die Werte ihrer Ableitung am Rande des Bereichs} -\begin{equation} -\begin{aligned} - \label{eq:randbedingungen} - k_a y(a) + h_a p(a) y'(a) &= 0 \\ - k_b y(b) + h_b p(b) y'(b) &= 0 -\end{aligned} -\end{equation} -kombiniert, dann bekommt man das klassische Sturm-Liouville-Problem. \subsection{Eigenwertproblem} -Die Gleichungen \ref{eq:sturm-liouville-equation} hat die Form eines Eigenwertproblems -Wenn bei der Sturm-Liouville-Gleichung \ref{eq:sturm-liouville-equation} alles konstant bleibt, aber der Wert von $\lambda$ sich ändert, erhält man eine andere Eigenfunktion, weil man eine andere gewöhnliche Differentialgleichung löst; +Die Gleichungen \eqref{eq:sturm-liouville-equation} hat die Form eines Eigenwertproblems. +Wenn bei der Sturm-Liouville-Gleichung \eqref{eq:sturm-liouville-equation} alles konstant bleibt, aber der Wert von $\lambda$ sich ändert, erhält man eine andere Eigenfunktion, weil man eine andere gewöhnliche Differentialgleichung löst; der Parameter $\lambda$ wird als Eigenwert bezeichnet. Es ist genau das gleiche Prinzip wie bei den Matrizen, andere Eigenwerte ergeben andere Eigenvektoren. Es besteht eine Korrespondenz zwischen den Eigenwerten und den Eigenvektoren. @@ -67,14 +59,13 @@ Somit ergibt die Gleichung \subsection{Koeffizientenfunktionen} Die Funktionen $p(x)$, $q(x)$ und $w(x)$ werden als Koeffizientenfunktionen mit ihren freien Variablen $x$ bezeichnet. Die Funktion $w(x)$ (manchmal auch $r(x)$ genannt) wird als Gewichtsfunktion oder Dichtefunktion bezeichnet. -Es gibt zwei verschiedene Sturm-Liouville-Probleme: das reguläre Sturm-Liouville-Problem und das singuläre Sturm-Liouville-Problem. -Die Funktionen für das reguläre und das singuläre Sturm-Liouville-Problem sind nicht dieselben. +Die Eigenschaften der Koeffizientenfunktionen haben einen grossen Einfluss auf die Lösbarkeit des Sturm-Liouville-Problems. % %Kapitel mit "Das reguläre Sturm-Liouville-Problem" % -\subsection{Das reguläre Sturm-Liouville-Problem\label{sub:reguläre_sturm_liouville_problem}} +\subsection{Das reguläre oder singuläre Sturm-Liouville-Problem\label{sub:reguläre_sturm_liouville_problem}} Damit es sich um ein reguläres Sturm-Liouville-Problem handelt, müssen einige Bedingungen beachtet werden. \begin{definition} \label{def:reguläres_sturm-liouville-problem} @@ -84,30 +75,14 @@ Damit es sich um ein reguläres Sturm-Liouville-Problem handelt, müssen einige \item Die Funktionen $p(x), p'(x), q(x)$ und $w(x)$ müssen stetig und reell sein. \item sowie müssen in einem endlichen Intervall $[a,b]$ integrierbar sein. \item $p(x)$ und $w(x)$ sind $>0$. - \item Es gelten die Randbedingungen \ref{eq:randbedingungen}, wobei $|k_i|^2 + |h_i|^2\ne 0$ mit $i=a,b$. + \item Es gelten die Randbedingungen \eqref{eq:randbedingungen}, wobei $|k_i|^2 + |h_i|^2\ne 0$ mit $i=a,b$. \end{itemize} \end{definition} Bei einem regulären Sturm-Liouville-Problem geht es darum, wichtige Eigenschaften der Eigenfunktionen beschreiben zu können, ohne sie genau zu kennen. -% -%Kapitel mit "Das singuläre Sturm-Liouville-Problem" -% -\subsection{Das singuläre Sturm-Liouville-Problem\label{sub:singuläre_sturm_liouville_problem}} -Von einem singulären Sturm-Liouville-Problem spricht man, wenn die Bedingungen des regulärem Problem nicht erfüllt sind. -\begin{definition} - \label{def:singulär_sturm-liouville-problem} - \index{singuläres Sturm-Liouville-Problem} -Es handelt sich um ein singuläres Sturm-Liouville-Problem, wenn: - \begin{itemize} - \item wenn sein Definitionsbereich auf dem Intervall $[ \ a,b] \ $ unbeschränkt ist oder - \item wenn die Koeffizienten an den Randpunkten Singularitäten haben. - \end{itemize} -\end{definition} -Allerdings kann nur eine der Bedingungen nicht erfüllt sein, so dass es sich bereits um ein singuläres Sturm-Liouville-Problem handelt. - \begin{beispiel} Das Randwertproblem \begin{equation} diff --git a/buch/papers/sturmliouville/tschebyscheff_beispiel.tex b/buch/papers/sturmliouville/tschebyscheff_beispiel.tex index f0e6860..c304632 100644 --- a/buch/papers/sturmliouville/tschebyscheff_beispiel.tex +++ b/buch/papers/sturmliouville/tschebyscheff_beispiel.tex @@ -41,29 +41,27 @@ ist die gleiche wie $w(x)$ und erfüllt die Bedingung. \subsubsection*{Randwertproblem} Für die Verifizierung der Randbedingungen benötigt man erneut $p(x)$. Da sich die Polynome nur auf dem Intervall $[ -1,1 ]$ orthogonal verhalten, sind $a = -1$ und $b = 1$ gesetzt. -Beim einsetzen in die Randbedingung \ref{eq:randbedingungen}, erhält man +Beim einsetzen in die Randbedingung \eqref{eq:randbedingungen}, erhält man \begin{equation} \begin{aligned} - k_a y(-1) + h_a y'(-1) &= 0 + k_a y(-1) + h_a y'(-1) &= 0\\ k_b y(-1) + h_b y'(-1) &= 0. \end{aligned} \end{equation} -Die Funktion $y(x)$ und $y'(x)$ sind in diesem Fall die Tschebyscheff Polynome (siehe \ref{sub:tschebyscheff-polynome}). -Es gibt zwei Arten von Tschebyscheff Polynome: die erste Art $T_n(x)$ und die zweite Art $U_n(x)$. -Jedoch beachtet man in diesem Kapitel nur die Tschebyscheff Polynome erster Art (\ref{eq:tschebyscheff-polynome}). +Die Funktion $y(x)$ und $y'(x)$ sind in diesem Fall die Tschebyscheff Polynome (siehe \ref{sub:definiton_der_tschebyscheff-Polynome}). Die Funktion $y(x)$ wird nun mit der Funktion $T_n(x)$ ersetzt und für die Verifizierung der Randbedingung wählt man $n=2$. Somit erhält man \begin{equation} \begin{aligned} k_a T_2(-1) + h_a T_{2}'(-1) &= k_a = 0\\ k_b T_2(1) + h_b T_{2}'(1) &= k_b = 0. -\end{aligned} + \end{aligned} \end{equation} Ähnlich wie beim Beispiel der Wärmeleitung in einem homogenen Stab kann man, damit die Bedingung $|k_i|^2 + |h_i|^2\ne 0$ erfüllt ist, können beliebige $h_a \ne 0$ und $h_b \ne 0$ gewählt werden. Somit ist erneut gezeigt, dass die Randbedingungen der Tschebyscheff-Polynome auf die Sturm-Liouville-Randbedingungen erfüllt und alle daraus resultierenden Lösungen orthogonal sind. \begin{beispiel} - Die Gleichung \ref{eq:skalar-sturm-liouville} mit $y_m = T_1(x)$ und $y_n(x) = T_2(x)$ eingesetzt sowie $a=-1$ und $b = 1$ ergibt + Die Gleichung \eqref{eq:skalar-sturm-liouville} mit $y_m = T_1(x)$ und $y_n(x) = T_2(x)$ eingesetzt sowie $a=-1$ und $b = 1$ ergibt \[ \int_{-1}^{1} w(x) x (2x^2-1) dx = 0. \] diff --git a/buch/papers/transfer/main.tex b/buch/papers/transfer/main.tex index ed16998..60f8230 100644 --- a/buch/papers/transfer/main.tex +++ b/buch/papers/transfer/main.tex @@ -3,7 +3,7 @@ % % (c) 2020 Hochschule Rapperswil % -\chapter{Transferfunktionen\label{chapter:transfer}} +\chapter{Transferfunktion Tangens hyperbolicus\label{chapter:transfer}} \lhead{Thema} \begin{refsection} \chapterauthor{Marc Benz} @@ -12,6 +12,8 @@ \input{papers/transfer/teil1.tex} \input{papers/transfer/teil2.tex} \input{papers/transfer/teil3.tex} +%\input{papers/transfer/teil4.tex} + \printbibliography[heading=subbibliography] \end{refsection} diff --git a/buch/papers/transfer/packages.tex b/buch/papers/transfer/packages.tex index ee51b71..fa7069a 100644 --- a/buch/papers/transfer/packages.tex +++ b/buch/papers/transfer/packages.tex @@ -8,3 +8,8 @@ % following example %\usepackage{packagename} +\usetikzlibrary{positioning} +\usetikzlibrary{arrows} +\usetikzlibrary{fit} +\usetikzlibrary{shapes.geometric} +%\usepackage{subcaption} diff --git a/buch/papers/transfer/references.bib b/buch/papers/transfer/references.bib index 75f5d68..181682c 100644 --- a/buch/papers/transfer/references.bib +++ b/buch/papers/transfer/references.bib @@ -4,6 +4,30 @@ % (c) 2020 Autor, Hochschule Rapperswil % + + +@article{transfer:DBLP:journals/corr/abs-1909-07729, + author = {Abhisek Kundu and + Sudarshan Srinivasan and + Eric C. Qin and + Dhiraj D. Kalamkar and + Naveen K. Mellempudi and + Dipankar Das and + Kunal Banerjee and + Bharat Kaul and + Pradeep Dubey}, + title = {K-TanH: Hardware Efficient Activations For Deep Learning}, + journal = {CoRR}, + volume = {abs/1909.07729}, + year = {2019}, + url = {http://arxiv.org/abs/1909.07729}, + eprinttype = {arXiv}, + eprint = {1909.07729}, + timestamp = {Sat, 04 Apr 2020 17:18:32 +0200}, + biburl = {https://dblp.org/rec/journals/corr/abs-1909-07729.bib}, + bibsource = {dblp computer science bibliography, https://dblp.org} +} + @online{transfer:bibtex, title = {BibTeX}, url = {https://de.wikipedia.org/wiki/BibTeX}, @@ -31,5 +55,4 @@ volume = 47, pages = {607--627}, url = {https://doi.org/10.1016/j.acha.2017.11.004} -} - +}
\ No newline at end of file diff --git a/buch/papers/transfer/teil0.tex b/buch/papers/transfer/teil0.tex index 19d4961..f8c8cb4 100644 --- a/buch/papers/transfer/teil0.tex +++ b/buch/papers/transfer/teil0.tex @@ -3,20 +3,232 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 0\label{transfer: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{transfer: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. - -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. +\section{Motivation\label{transfer:section:teil0}} +\rhead{Einleitung} + +Die Transferfunktion ist einer der wichtigsten Bestandteile moderner neuraler Netzwerke. Sie verleiht ihnen die nicht Linearität, die benötigt wird um komplexere Aufgaben zu lösen. Dabei kann theoretisch jede nicht lineare Funktion eingesetzt werden. In der Praxis tauchen aber nur sehr wenige Funktionen mit ähnlichen Eigenschaften auf. Einige davon sind in der Tabelle \ref{tab:aktfkt} zu sehen. In der heutigen Zeit sind vor allem die Variationen der ReLu Funktion beliebt. Der Tangens hyperbolicus wird aber dank dem Aufkommen der Recurrent Neural Networks, zum Beispiel dem Long short term memory Netzwerk, das aus Zellen wie in \ref{motivation:figure:LSTM} gezeigt bestehen, wieder vermehrt eingesetzt. +Die klassische Berechnung ist aber sehr aufwendig und basiert auf Gleitkommaoperationen und relativ komplizierten Funktionen. Diese benötigen einen grossen Rechenaufwand. Vor allem auf Systemen die keine Gleitkommaarithmetik Hardware besitzen wie das zum Beispiel bei gewissen Mikrocontrollern der Fall ist. +\begin{table}[h] + \centering + \begin{tabular}{llll} + \hline + \multicolumn{1}{l}{Name} & \multicolumn{1}{l}{Function} & \multicolumn{1}{l}{Figure} \\ + \hline + Sigmoid & $\sigma(x)=\frac{1}{1+e^{-x}}$ & + \begin{tikzpicture}[baseline={(0,0.2)}] + \draw (-1,0) -- (1,0); + \draw (0,0) -- (0,1); + \draw[red] plot[domain=-1:1,variable=\x] ({\x},{1/(1+exp(-4*\x))}); + \end{tikzpicture}\\ + ReLU & $f(x) =\begin{cases} + 0 & ~\text{if}~ x<0 \\ + x & ~\text{if}~x \geq 0. + \end{cases}$ & + \begin{tikzpicture}[baseline={(0,0.5)}] + \draw (-1,0) -- (1,0); + \draw (0,0) -- (0,1); + \draw[red] plot[domain=-1:1,variable=\x] ({\x},{ifthenelse(\x<0,0,\x)}); + \end{tikzpicture}\\ + Leaky ReLu & $f(x) =\begin{cases} + 0 & ~\text{if}~ x<0 \\ + x & ~\text{if}~x \geq a \cdot x. + \end{cases}$ & + \begin{tikzpicture}[baseline={(0,0.5)}] + \draw (-1,0) -- (1,0); + \draw (0,0) -- (0,1); + \draw[red] plot[domain=-1:1,variable=\x] ({\x},{ifthenelse(\x<0,0.1*\x,\x)}); + \end{tikzpicture} + \end{tabular} + \caption{Transferfunktionen} + \label{tab:aktfkt} +\end{table} + +\begin{figure} +\centering +\begin{tikzpicture} + \begin{axis}[ + xmin=-2.5, xmax=2.5, + ymin=-1.5, ymax=1.5, + axis lines=center, + axis on top=true, + domain=-2.5:2.5, + ylabel=$y$, + xlabel=$x$, + ] + + \addplot [mark=none,draw=red,ultra thick] {tanh(\x)}; + \node [right, red] at (axis cs: 1,0.7) {$\tanh(x)$}; + + %% Add the asymptotes + \draw [blue, dotted, thick] (axis cs:-2.5,-1)-- (axis cs:0,-1); + \draw [blue, dotted, thick] (axis cs:+2.5,+1)-- (axis cs:0,+1); + \end{axis} +\end{tikzpicture} +\caption{Tangens hyperbolicus +\label{anleitung:figure:tanhyp}} +\end{figure} + +\begin{figure} +\centering +\tikzset{ + every node/.style={ + font=\scriptsize + }, + decision/.style={ + shape=rectangle, + minimum height=1cm, + text width=3cm, + text centered, + rounded corners=1ex, + draw, + label={[yshift=0.2cm]left:ja}, + label={[yshift=0.2cm]right:nein}, + }, + outcome/.style={ + shape=ellipse, + fill=gray!15, + draw, + text width=1.5cm, + text centered + }, + decision tree/.style={ + edge from parent path={[-latex] (\tikzparentnode) -| (\tikzchildnode)}, + sibling distance=4cm, + level distance=1.5cm + } +} + +\begin{tikzpicture} + + \node [decision] { $x>k \cdot \frac{\ln 10}{2}$ } + [decision tree] + child { node [outcome] { $+1$ } } + child { node [decision] { $x<-k \cdot \frac{\ln 10}{2}$} + child { node [outcome] { $-1$ } } + child { node [decision] { $-0,1<x<+0,1$ } + child { node [outcome] { $\frac{\sinh x}{e^{x}-\sinh x}$ } } + child { node [outcome] { $\frac{e^{2 x}-1}{e^{2 x}+1}$ } } + } + }; +\end{tikzpicture} +\caption{Annäherung für Tangens hyperbolicus +\label{anleitung:figure:approxtanhhypalgo}} +\end{figure} + + +\begin{figure} +\centering +\newcommand{\empt}[2]{$#1^{\langle #2 \rangle}$} + +\begin{tikzpicture}[ + % GLOBAL CFG + font=\sf \scriptsize, + >=LaTeX, + % Styles + cell/.style={% For the main box + rectangle, + rounded corners=5mm, + draw, + very thick, + }, + operator/.style={%For operators like + and x + circle, + draw, + inner sep=-0.5pt, + minimum height =.2cm, + }, + function/.style={%For functions + ellipse, + draw, + inner sep=1pt + }, + ct/.style={% For external inputs and outputs + circle, + draw, + line width = .75pt, + minimum width=1cm, + inner sep=1pt, + }, + gt/.style={% For internal inputs + rectangle, + draw, + minimum width=4mm, + minimum height=3mm, + inner sep=1pt + }, + mylabel/.style={% something new that I have learned + font=\scriptsize\sffamily + }, + ArrowC1/.style={% Arrows with rounded corners + rounded corners=.25cm, + thick, + }, + ArrowC2/.style={% Arrows with big rounded corners + rounded corners=.5cm, + thick, + }, + ] + + %Start drawing the thing... + % Draw the cell: + \node [cell, minimum height =4cm, minimum width=6cm] at (0,0){} ; + + % Draw inputs named ibox# + \node [gt] (ibox1) at (-2,-0.75) {$\sigma$}; + \node [gt] (ibox2) at (-1.5,-0.75) {$\sigma$}; + \node [function, draw=red!60, fill=red!5] (ibox3) at (-0.5,-0.75) {$\tanh$}; + \node [gt] (ibox4) at (0.5,-0.75) {$\sigma$}; + + % Draw opérators named mux# , add# and func# + \node [operator] (mux1) at (-2,1.5) {$\times$}; + \node [operator] (add1) at (-0.5,1.5) {+}; + \node [operator] (mux2) at (-0.5,0) {$\times$}; + \node [operator] (mux3) at (1.5,0) {$\times$}; + \node [function, draw=red!60, fill=red!5] (func1) at (1.5,0.75) {$\tanh$}; + + % Draw External inputs named as basis c,h,x + \node[ct, label={[mylabel]}] (c) at (-4,1.5) {\empt{c}{t-1}}; + \node[ct, label={[mylabel]}] (h) at (-4,-1.5) {\empt{h}{t-1}}; + \node[ct, label={[mylabel]}] (x) at (-2.5,-3) {\empt{x}{t}}; + + % Draw External outputs? named as basis c2,h2,x2 + \node[ct, label={[mylabel]}] (c2) at (4,1.5) {\empt{c}{t}}; + \node[ct, label={[mylabel]}] (h2) at (4,-1.5) {\empt{h}{t}}; + \node[ct, label={[mylabel]}] (x2) at (2.5,3) {\empt{h}{t}}; + + % Start connecting all. + %Intersections and displacements are used. + % Drawing arrows + \draw [ArrowC1] (c) -- (mux1) -- (add1) -- (c2); + + % Inputs + \draw [ArrowC2] (h) -| (ibox4); + \draw [ArrowC1] (h -| ibox1)++(-0.5,0) -| (ibox1); + \draw [ArrowC1] (h -| ibox2)++(-0.5,0) -| (ibox2); + \draw [ArrowC1] (h -| ibox3)++(-0.5,0) -| (ibox3); + \draw [ArrowC1] (x) -- (x |- h)-| (ibox3); + + % Internal + \draw [->, ArrowC2] (ibox1) -- (mux1); + \draw [->, ArrowC2] (ibox2) |- (mux2); + \draw [->, ArrowC2] (ibox3) -- (mux2); + \draw [->, ArrowC2] (ibox4) |- (mux3); + \draw [->, ArrowC2] (mux2) -- (add1); + \draw [->, ArrowC1] (add1 -| func1)++(-0.5,0) -| (func1); + \draw [->, ArrowC2] (func1) -- (mux3); + + %Outputs + \draw [-, ArrowC2] (mux3) |- (h2); + \draw (c2 -| x2) ++(0,-0.1) coordinate (i1); + \draw [-, ArrowC2] (h2 -| x2)++(-0.5,0) -| (i1); + \draw [-, ArrowC2] (i1)++(0,0.2) -- (x2); + +\end{tikzpicture} +\caption{Long short term memory cell +\label{motivation:figure:LSTM}} +\end{figure} + + + diff --git a/buch/papers/transfer/teil1.tex b/buch/papers/transfer/teil1.tex index c60f1ea..f117fc0 100644 --- a/buch/papers/transfer/teil1.tex +++ b/buch/papers/transfer/teil1.tex @@ -3,53 +3,54 @@ % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 1 +\section{Taylorapproximation \label{transfer: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 +\subsection{Idee} +Die Taylorreihe kann eine glatte Funktion in einer Umgebung durch Polynome beliebig genau annähern. Beschränkt man sich auf einen bestimmten Grad dieser Polynome, spricht man von einer Taylorapproximation. Diese entwickelt sich immer um einen Punkt und kann über die Ableitungen berechnet werden. + +\subsection{Definition der Taylorreihe} +Sei $I \subset \mathbb{R}$ ein offenes Intervall, $f: I \rightarrow \mathbb{R}$ eine glatte Funktion und $a$ ein Element von $I$. Dann ist die unendliche Reihe \begin{equation} -\int_a^b x^2\, dx -= -\left[ \frac13 x^3 \right]_a^b -= -\frac{b^3-a^3}3. -\label{transfer:equation1} + T_{f(x ; a)}=\sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n !}(x-a)^{n}=f(a)+f^{\prime}(a)(x-a)+\frac{f^{\prime \prime}(a)}{2}(x-a)^{2}+\frac{f^{\prime \prime \prime}(a)}{6}(x-a)^{3}+\ldots \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. - -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? - -\subsection{De finibus bonorum et malorum -\label{transfer: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}. +eine Taylorreihe. -Et harum quidem rerum facilis est et expedita distinctio -\ref{transfer: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{transfer: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. +\subsection{Beispiel} +In diesem Beispiel wird die Taylorapproximation mit dem Grad 2 des Tangens hyperbolicus um den Punkt Null berechnet. +$$ + \tanh \approx T_{2} \tanh(x ; a)=\tanh(a)+\tanh^{\prime}(a) \cdot(x-a)+\frac{\tanh^{\prime \prime}(a) \cdot(x-a)^{2}}{2} +$$ +mit $a = 0$ folgt +$$ + T_{2} \tanh(x ; 0)=\tanh(0)+\tanh^{\prime}(0) \cdot(x)+\frac{\tanh^{\prime \prime}(0) \cdot(x)^{2}}{2} = 0 + x + 0 = x +$$ +\begin{figure} +\centering +\begin{tikzpicture} + \begin{axis}[ + xmin=-2.5, xmax=2.5, + ymin=-1.5, ymax=1.5, + axis lines=center, + axis on top=true, + domain=-2.5:2.5, + ylabel=$y$, + xlabel=$x$, + ] + + \addplot [mark=none,draw=red,thick] {tanh(\x)}; + \node [right, red] at (axis cs: 1.4,0.7) {$\tanh(x)$}; + \addplot [mark=none,draw=blue,ultra thick, samples=100, smooth] expression{x-(x^3)/3+ (2*x^5)/15-(17 * x^7)/315}; + \node [right, blue] at (axis cs: -1.8,0.7) {$Taylorapprox.$}; + + %% Add the asymptotes + \draw [blue, dotted, thick] (axis cs:-2.5,-1)-- (axis cs:0,-1); + \draw [blue, dotted, thick] (axis cs:+2.5,+1)-- (axis cs:0,+1); + \end{axis} +\end{tikzpicture} +\caption{Taylorapproximation des Grades 7 +\label{motivation:figure:Taylor}} +\end{figure} +\subsection{Problem} +Wie in Abbildung \ref{motivation:figure:Taylor} ersichtlich, ist der Approximationsfehler sogar bei Grad 7 des Polynoms sehr gross. Dies liegt ist unter anderem an der Unbeschränktheit, die solche Polynome besitzen. diff --git a/buch/papers/transfer/teil2.tex b/buch/papers/transfer/teil2.tex index ce8f798..aae81a7 100644 --- a/buch/papers/transfer/teil2.tex +++ b/buch/papers/transfer/teil2.tex @@ -1,40 +1,68 @@ % -% teil2.tex -- Beispiel-File für teil2 +% teil1.tex -- Beispiel-File für das Paper % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 2 +\section{Padé-Approximation \label{transfer: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? +\rhead{} + +\subsection{Idee + \label{transfer:pade:idee}} +Die Taylorapproximation ist für den Gebrauch als Ersatz des Tangenshyperbolicus als Transferfunktion nicht brauchbar. Die Padé-Approximation kann die grössten Probleme aber entschärfen und dies mit sehr begrenztem zusätzlichen Rechenaufwand. Dafür wird die Taylorapproximation in einen Bruch von zwei Polynom zerlegt. + +\subsection{Definition +\label{transfer:pade:definition}} +Sei +\begin{equation} + R(x)=\frac{\sum_{j=0}^{m} a_{j} x^{j}}{1+\sum_{k=1}^{n} b_{k} x^{k}}=\frac{a_{0}+a_{1} x+a_{2} x^{2}+\cdots+a_{m} x^{m}}{1+b_{1} x+b_{2} x^{2}+\cdots+b_{n} x^{n}} +\end{equation} +und gilt +\begin{gather*} + f(0) =R(0) \\ + f^{\prime}(0) =R^{\prime}(0) \\ + f^{\prime \prime}(0) =R^{\prime \prime}(0) \\ + \vdots \\ + f^{(m+n)}(0) =R^{(m+n)}(0), +\end{gather*} +so ist $R(x)$ die Padé-Approximation von $f(x)$. +\subsection{Beispiel + \label{transfer:pade:beispiel}} +Sei $f(x) = \tanh (x)$ und $T_{5} \tanh(x ; a) = x-\frac{x^{3}}{3}+\frac{2 x^{5}}{15}$, dann gilt +$$ + \begin{gathered} + [3 / 2]_{f}(x) = \frac{A_{0}+A_{1} x+A_{2} x^{2}+A_{3} x^{3}}{B_{0}+B_{1} x+B_{2} x^{2}}=x-\frac{x^{3}}{3}+\frac{2 x^{5}}{15}+O\left(x^{6}\right), B_{0} = 1,\\ + \Downarrow \\ + [3 / 2]_{f}(x) = \frac{15x+x^3}{15+6x^2} +\end{gathered} +$$ + +\begin{figure} +\centering +\begin{tikzpicture} + \begin{axis}[ + xmin=-3.5, xmax=3.5, + ymin=-1.5, ymax=1.5, + axis lines=center, + axis on top=true, + domain=-3.5:3.5, + ylabel=$y$, + xlabel=$x$, + ] + + \addplot [mark=none,draw=red,thick] {tanh(\x)}; + \node [right, red] at (axis cs: 1.4,0.7) {$\tanh(x)$}; + \addplot [mark=none,draw=blue,ultra thick, samples=100, smooth] expression{x*(15+x^2)/(15+6*x^2)}; + \node [right, blue] at (axis cs: -1.8,0.7) {$Padé$}; + + %% Add the asymptotes + \draw [blue, dotted, thick] (axis cs:-2.5,-1)-- (axis cs:0,-1); + \draw [blue, dotted, thick] (axis cs:+2.5,+1)-- (axis cs:0,+1); + \end{axis} +\end{tikzpicture} +\caption{$[3 / 2]_{f}(x)$ +\label{motivation:figure:Pade32}} +\end{figure} -\subsection{De finibus bonorum et malorum -\label{transfer: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. diff --git a/buch/papers/transfer/teil3.tex b/buch/papers/transfer/teil3.tex index f707587..5bbe0c1 100644 --- a/buch/papers/transfer/teil3.tex +++ b/buch/papers/transfer/teil3.tex @@ -1,40 +1,26 @@ % -% teil3.tex -- Beispiel-File für Teil 3 +% teil2.tex -- Beispiel-File für teil2 % % (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil % -\section{Teil 3 +\section{MiniMax-Polynom \label{transfer: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? +\rhead{MiniMax-Polynom} -\subsection{De finibus bonorum et malorum -\label{transfer: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{Idee +\label{transfer:subsection:idee}} +Finde das Polynom eines bestimmten Grades, welches eine Funktion in einem Intervall am besten approximiert. + + +\subsection{Definition + \label{transfer:subsection:definition}} +Das Polynom welches + $$ \max _{a \leq x \leq b}|f(x)-P(x)| , a \in \mathbb{R}, b \in \mathbb{R}.$$ +minimiert. +\subsection{Beispiel + \label{transfer:subsection:beispiel}} +Um ein MiniMax-Polynom zu berechnen, kann der Remez-Algorithmus verwendet werden. Dieser basiert im wesentlichen auf dem Alternantensatz von Tschebyschow. diff --git a/buch/papers/transfer/teil4.tex b/buch/papers/transfer/teil4.tex new file mode 100644 index 0000000..d652e2d --- /dev/null +++ b/buch/papers/transfer/teil4.tex @@ -0,0 +1,218 @@ +% +% teil4.tex +% +% (c) 2020 Prof Dr Andreas Müller, Hochschule Rapperswil +% +\section{K-Tanh +\label{transfer:section:teil4}} +\rhead{K-Tanh} + +\subsection{Idee + \label{transfer:subsection:Ktanh-Idee}} +Um die Berechnung des Tangens hyperbolicus wirklich zu beschleunigen, braucht es einen Algorithmus, der ohne Gleitkommaoperationen auskommt. Um dies zu bewerkstelligen, ist eine Unterteilung der Funktion in mehrere Abschnitte nötig. Diese können dann linear approximiert werden. Die dazugehörigen Parameter können einmal berechnet werden und zu Rechenzeit aus einem LUT????? gelesen und danach mit integer Operationen verrechnet werden. + + +\subsection{Definitionen + \label{transfer:subsection:Ktanh-Definition}} + +\subsubsection{Gleitkommazahlen nach IEEE-754 + \label{transfer:subsection:Ktanh-Algorithmus:Gleitkommazahl}} +Da ein Computer nur mit binären Werten arbeiten kann, müssen Zahlen durch sogenannte Gleitkommazahlen approximiert werden. Dafür wird die Zahl in zwei Teile aufgeteilt, die Mantisse und den Exponenten. Die Zahl setzt sich dann wie folgt zusammen: +$$ +\begin{array}{|l|l|l|} + \hline S & E & M \\ + \hline +\end{array} +$$ +Aus dem sich die Dezimalzahl wie folgt berechnet +$$ +x=s \cdot m \cdot b^{e} +$$ +wobei +$$ +\begin{aligned} + &s=(-1)^{S} \\ + &e=E-B\\ + &B=2^{r-1}-1 + &m=1+M / 2^{p} +\end{aligned} +$$ +mit $r$ = Anzahl der Exponenten bits und p = Anzahl mantisse Bits. + + +\subsubsection{K-tanh Algorithmus +\label{transfer:subsection:Ktanh-Algorithmus}} +\cite{transfer:DBLP:journals/corr/abs-1909-07729} + +Negative Werte werden nicht separat behandelt. Diese werden dank der Symertrie um den Ursprung mit einem einfachen Vorzeichenwechsel aus den positiven berechnet. +Für $x < 0.25$ gilt $y = x$. +Ist $x > 3.75$ gitl $y = 1$. +Ist der Wert zwischen diesen Grenzen, werden über einen Lookuptable geeignete Werte gefunden um aus dem $x$ die Approximation des Tanh zu berechnen. +Dafür werden eine bestimmte Anzahl LSBs des Exponenten und MSBs der Mantisse zu einem Index $t$ zusammengestzt. Der dann die Stelle im Lookuptable zeigt. +Damit werden die richtigen Werte für $E_{t}, r_{t}, b_{t}$ aus der Tabelle, die im Vorhinein schon berechnet wurden, ausgelesen. +Damit hat man das $E$ bereits gefunden und mit der Formel +\[ + M_{o} \leftarrow\left(M_{i} \gg r\right)+b +\] + +kann das neue $M$ berechnet werden. + +\begin{figure} +\centering +\tikzset{ + every node/.style={ + font=\scriptsize + }, + decision/.style={ + shape=rectangle, + minimum height=1cm, + text width=3cm, + text centered, + rounded corners=1ex, + draw, + label={[yshift=0.2cm]left:ja}, + label={[yshift=0.2cm]right:nein}, + }, + outcome/.style={ + shape=ellipse, + fill=gray!15, + draw, + text width=1.5cm, + text centered + }, + decision tree/.style={ + edge from parent path={[-latex] (\tikzparentnode) -| (\tikzchildnode)}, + sibling distance=4cm, + level distance=1.5cm + } +} +\begin{tikzpicture} + + \node [decision] { $x<0.25$ } + [decision tree] + child { node [outcome] { $x$ } } + child { node [decision] { $x>3.75$} + child { node [outcome] { $1$ } } + child { node [outcome] { $K-tanh$ } } + }; + +\end{tikzpicture} +\caption{Gesamter Algorithmus +\label{motivation:figure:gesalgo}} +\end{figure} + +\begin{figure} +\centering +\begin{tikzpicture} + [>=stealth', auto, node distance=2cm, scale=1.2] + + \tikzstyle{dot} = [circle, draw, fill, inner sep=0.03cm] + + \tikzstyle{brace} = [decorate, decoration={brace,amplitude=4pt}] + + \begin{scope}[] + + \node[ minimum width=0.5cm] (s) at (0, 0) {$s$}; + \node[anchor=west, minimum width=1.5cm] (e) at (s.east) {$E_i$}; + \node[anchor=west, minimum width=1.5cm] (m) at (e.east) {$M_i$}; + \draw[blue] (e.north west) -- (e.south west) (e.north east) -- (e.south east); + \node[draw, green!50!black, rounded corners=0.1cm, fit=(s) (e) (m), inner sep = 0] (a) {}; + + \node[minimum width=0.5cm] (s) at (5, 0) {$s$}; + \node[anchor=west, minimum width=1.5cm] (e) at (s.east) {$E_o$}; + \node[anchor=west, minimum width=1.5cm] (m) at (e.east) {$M_o$}; + \draw[blue] (e.north west) -- (e.south west) (e.north east) -- (e.south east); + \node[draw, green!50!black, rounded corners=0.1cm, fit=(s) (e) (m), inner sep = 0] (b) {}; + + \draw[yshift=-0.4cm, decorate,decoration={brace,amplitude=4pt}] (a.south) ++(0, -0.2) +(0.5,0) -- +(-0.5,0 ); + + \node[draw=black, fill=black!20, minimum width=1.5cm, minimum height= 2cm, below=1cm of a] (lut) {}; + + \node[draw=blue, inner sep=0.2cm, right = 1.5cm of lut, align=left] (box) {$E_0 \gets E$ \\ $M_0 \gets (M_i \gg r) + b$}; + + \draw[->] (a.south) +(0, -0.5) -- (lut); + \draw[->] (lut) -- node[above]{$(E,r,b)$} (box); + \draw[->] (box) -| ([xshift=0.5cm, yshift=-0.3cm]b.south); + + \end{scope} + +\end{tikzpicture} +\caption{Ablauf der K-tanh Berechnung +\label{motivation:figure:Ktanhablauf}} +\end{figure} + + +\subsection{Beispiel +\label{transfer:subsection:Ktanh-Algorithmus:Beispiel}} + +%TODO + +In diesem Abschnitt wird das Verfahren am einem Beispiel mit dem BFloat16 erklärt. Das bedeutet die Gleitkommazahlen werden mit 8 Exponenten, 7 Mantisse und einem Vorzeichen bit dargestellt. + +\subsubsection{Algorithmus für die Bestimmung der Parameter + \label{transfer:subsection:Ktanh-Algorithmus:Algo}} + +\begin{enumerate} + \item Wir berechnen zuerst den Tanh für ein gegebenes x und finden die zugehörige BFloat16-Darstellung. + \[ + y_{i}=\operatorname{TanH}\left(x_{i}\right)=(-1)^{s} \cdot 2^{E_{i}} \cdot\left(1+M_{i} / 2^{q}\right) + \] + + \item Sollten die Exponenten in einem Intervall $t$ nicht gleich sein, muss ein gemeinsamer Exponent gefunden werden, so dass + $$ + \underset{E, \hat{M}_{i} \in \mathbb{Z}}{\operatorname{argmin}} \sum_{i}\left(y_{i}-\hat{y}_{i}\right)^{2}, \quad \text { mit } \quad E \in\left\{E_{i}\right\}, \hat{M}_{i} \in[0,127] + $$ + minimiert wird. Was bedeutet, dass der Exponent mit welchem der kleinsten quadrierten und aufsummierten Fehler entsteht gewählt wird. + ?????We pick E from the set of exponents {Ei}. If E = Ej , + then, Mˆ + j = Mj , for all j. If E > Ej , then, Mˆ + j = 0. + Similarly, for E < Ej , Mˆ + j = 2q − 1. Store this E in the + parameter table TE.????? + \item Um den Verschiebungsparameter r und den Additionsterm b zu finden, muss das folgende Optimierungsproblem gelöst werden. Auch hier wird einfach der kleinste quadrierte und aufsummierte Fehler gesucht wird. + $$ + \begin{array}{ll} + & \underset{r, b \in \mathbb{Z}}{\operatorname{argmin}} \sum_{i}\left(\hat{M}_{i}-\left(m_{i} / 2^{r}+b\right)\right)^{2} \\ + \text { mit } & 0 \leq r \leq r_{\max } \leq p, \quad b_{\min } \leq b \leq b_{\max } + \end{array} + $$ + Dabei müssen $r_max$, $b_min$ und $b_max$ sorgfältig gewählt werden, so dass kein +\end{enumerate} + +\subsubsection{Numerisches Beispiel + \label{transfer:subsection:Ktanh-Algorithmus:Num}} +Zum Index $t = 00000$ gehört neben Anderen der Wert $x_i = 2$. Denn mit \ref{transfer:subsection:Ktanh-Algorithmus:Gleitkommazahl} folgt + +$$ +\begin{array}{|l|l|l|} + \hline S_i & E_{i} & M_{i} \\ + \hline 0 & 100000 \textbf{00} & \textbf{000} 0000 \\ + \hline +\end{array} +$$ +Der dazugehörige Tanh Wert ist +$y_i = \tanh{x_i}=0.96402758\ldots$. Es lässt sich die dazugehörige BFloat-16-Darstellung finden + +$$ +\begin{array}{|l|l|l|} + \hline S_{y_{i}} & E_{y_{i}} & M_{y_{i}} \\ + \hline 0 & 01111110 & 1110110 \\ + \hline +\end{array} +$$ +Nun müssen alle anderen Werte dieses Intervalls $t = 00000$ ausgewertet werden. Stimmen nicht alle Exponenten der $S_{y}$ überein, so muss noch ein gemeinsamer Exponent mit dem Optimierungproblem \ref{} gefunden werden. Danach kann der Verschiebe- und Additionsfaktor für das Intervall berechnet werden. +Es ergeben sich die Werte: +$$ +\begin{array}{c|ccc} + \text { Index } t & E_{t} & r_{t} & b_{t} \\ + \hline 00111 & 126 & 2 & 119 +\end{array} +$$ + + + + + + + diff --git a/cover/buchcover.tex b/cover/buchcover.tex index d6ad7ec..748fbeb 100644 --- a/cover/buchcover.tex +++ b/cover/buchcover.tex @@ -1,5 +1,5 @@ % -% buchcover.tex -- Cover für das Buch Numerik +% buchcover.tex -- Cover für das Buch Spezielle Funktionen % % (c) 2018 Prof Dr Andreas Müller, Hochschule Rapperswil % |