about summary refs log tree commit diff
path: root/docs/generieren.tex
blob: cf9b7ce724e3d9a3e2089e7ddfc58b1c5a5504b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
\section{Generieren}

Das Generieren der Statischen Punkt Wolke aus der die Galaxie abstrahiert wird
ist ein wichtiger Bestandteil des Gesamtprojektes, denn alles baut auf ihr auf.
Kurz: um Kräfte zwischen Sternen zu berechnen braucht man erstmal Sterne!  Dazu
wird das Navarro-Frenk-White Profil verwendet um eine Statische Punktwolke zu
generieren.

\subsection{Das Navarro-Frenk-White Profil}
Das Navarro-Frenk-White Profil (NFW-Profile) \cite{navarrofrenkwhite95} ist ein Profil das genutzt wird, um
die Räumilche Massen Verteilung von Sternen zu definieren. Es generiert für
einen Stern mit dem Abstand \( r \) zum Mittelpunkt der Galaxie eine
Warscheinlichkeit \( \rho \) welche definiert wie Warscheinlich es ist das der
Stern mit dem Abstand \( r \) existiert:

\begin{equation} \label{eq:NFW_profile}
  \rho_{NFW}(r) = \frac{ 1 }{ \sqrt{ 2 \pi } \cdot \sigma } \cdot
  \exp \left( \frac{ -\phi(r) }{ \sigma^{ 2 } } \right)
\end{equation}

\begin{equation*}
  \phi(r) = \frac{ 4\pi \cdot G \cdot f_{0} \cdot R_{s}^3 }{ r } \cdot
  ln{ \left( 1 + \frac{ r }{ R_{s} } \right) }
\end{equation*}

Es kann nun mithilfe der Random-Sampling Methode (\ref{subsec:random_sampling})
ermittelt werden, ob ein Stern beibehalten wird oder nicht.\\

\par Möchte man nun herausfinden wie weit ein Punkt mit der Koordinate \(
(x_{1}, x_{2}, x_{3}) \) vom Mittelpunkt des Raumes entfernt ist, kann der Satz
des Pythagoras (\ref{eq:pythagoras}) verwendet werden.

\begin{equation} \label{eq:pythagoras}
    r_{3} = \sqrt{x_{1}^{2} + x_{2}^{2} + x_{3}^{2} }
\end{equation}

Der Abstand \( r_{3} \) zum Mittelpunkt des Raumes kann nun in das NFW-Profil
(\ref{eq:NFW_profile}) gegeben werden um einen Wert \( s \) zu ermitteln welcher
beim Random Sampling verwendet wird:

\begin{equation}
\rho_{NFW}(r) = \dots = s
\end{equation}

Dieser Wert \( s \) stellt die Wahrscheinlichkeit dar, das ein Stern der
eine Entfernung \( r \) vom Mittelpunkt der Galaxie besitzt existiert.

Die Galaxie sieht aus der Ferne jetzt jedoch aus wie ein Würfel, da die aus \(
\rho_{NFW_{1}} \) resultierende Kurve abrupt endet. Dies kann gelöst werden,
indem statt \( \rho_{NFW_{1}}(r) \) folgendes gerechnet wird: \(
\rho_{NFW_{1}}(r) - \rho_{NFW_{1}}(r_{max}) = \rho_{NFW_{2}}(r)\)

\begin{figure}
\centering
\begin{tikzpicture}
    \draw[very thin, color=lightgray, step=5mm] (-0.9, -0.9) grid (3.9, 2.4);
    \draw[->] (-1,0) -- (4,0) node[right] {$x$};
    \draw[->] (0,-1) -- (0,2.5) node[above] {$y$};
    \draw[scale=0.5, domain=0.25:6.5, smooth, variable=\x, black] plot ({\x},{(1/\x) + 1}) node[above] {$\rho_{NFW_{1}}(x)$};
    \draw[scale=0.5, domain=0.25:6.5, smooth, variable=\x, black] plot ({\x},{1/\x}) node[below] {$\rho_{NFW_{2}}(x)$};
\end{tikzpicture}
\caption{Durch Verschiebung des NFW-Profils wird }
\end{figure}

Problematisch ist hierbei die Tatsache, dass aufgrund der Verschiebung die
Anzahl der Sterne die in Relation zu dem Bereich in dem sie generiert werden
sehr stark sinkt und die Zeit um eine bestimmte Anzahl an Sternen zu generieren
sehr stark steigt.

\subsection{Random Sampling} \label{subsec:random_sampling}

Um nun zu ermitteln ob ein Stern beibehalten wird oder nicht, wird die
Random-Sampling Methode verwendet.  Diese generiert in dem gegebenen Intervall,
welches zwischen der Minimalen und Maximalen Warscheinlichkeit welche aus dem
NFW-Profile entnommen werden, einen zufälligen Wert.

\begin{equation}\label{range:psi}
    \psi = [ \rho(r_{min}); \rho(r_{max}) ] 
\end{equation}

Sei \( s \) ein zufälliger Wert im Intervall \( \psi \).  Generiert man nun
einen zufälligen Wert \( r \) im Intervall \( \psi \), kann überprüft werden, ob \( s
> r \lor s < r \) gilt. Ist \( r
> s \), wird der Stern verworfen, ist \( r < s \) wird der Stern behalten.

\begin{figure}
\centering
\begin{tikzpicture}
    % draw the background grid
    \draw[very thin, color=lightgray, step=5mm] (-0.9, -0.9) grid (3.9, 2.4);

    % draw the x-ticks
    \draw[xshift=0cm](0.5cm, 1pt) -- (0.5cm, -3pt) node[anchor=north] {$r_{1}$};
    \draw[xshift=0cm](1.5cm, 1pt) -- (1.5cm, -3pt) node[anchor=north] {$r_{2}$};

    % draw the y-ticks
    \draw[yshift=0cm](1pt, 0.5cm) -- (-3pt, 0.5cm) node[anchor=east] {$p(r_{1})$};
    \draw[yshift=0cm](1pt, 1.0cm) -- (-3pt, 1.0cm) node[anchor=east] {$p(r_{2})$};

    % draw the dotted lines connecting the point s_1
    \draw[thick, dotted] (0.5, 0) -- (0.5, 0.5);
    \draw[thick, dotted] (0, 0.5) -- (0.5, 0.5);

    % draw the dotted lines connecting the point s_2
    \draw[thick, dotted] (0, 1.0) -- (1.5, 1.0);
    \draw[thick, dotted] (1.5, 0) -- (1.5, 1.0);

    % draw the axes
    \draw[->] (-1,0) -- (4,0) node[right] {$r$};
    \draw[->] (0,-1) -- (0,2.5) node[above] {$\psi$};

    % draw the plot
    \draw[scale=0.5, domain=0.25:6.5, smooth, variable=\x, black]
        plot ({\x},{(1/\x) + 1}) node[above] {$\rho_{NFW_{1}}(x)$};

    % draw the points
    \fill (0.5, 0.5) circle (0.05) node[above] {$s_1$};
    \fill (1.5, 1) circle (0.05) node[above] {$s_2$};
\end{tikzpicture}
\caption{Veranschauliching des Konzeptes welches beim Random-Sampling verwendet wird.}
\end{figure}

In der obigen Abbildung ist zu sehen wir zwei zufällige Punkte \( s_1 \) und \(
s_2 \) generiert wurden.

Angenommen es wurde ein Stern generiert für den nach Formel
(\ref{eq:pythagoras}) gilt: \( r = \sqrt{x_{1}^{2} + x_{2}^{2} + x_{3}^{2}} =
\dots = r_1 \). Es wird dann ein Zufälliger Wert \( p(r_1) \) im in
(\ref{range:psi}) definierten Intervall generiert. Die folgenden zwei Fälle
können dann eintreten und werden wie in (\ref{cases:random_sampling})
beschrieben abgehandelt.

\kern-1em

\begin{equation}\label{cases:random_sampling}
\begin{cases}
s_1 \leq NFW(r_1) & \rightarrow \text{Stern wird beibehalten}\\
s_1 > NFW(r_1) & \rightarrow \text{Stern wird verworfen}
\end{cases} 
\end{equation}

Es kann somit für einen gegebenen Stern geprüft werden ob dieser existiert oder
nicht und anhand dessen beschlossen werden ob der Stern beibehalten wird oder
nicht.

\subsection{Lookup Tabellen}
Statt nun für jeden Stern die Distanz des jeweiligen Sternes \( r \) in das
NFW-Profil (\ref{eq:NFW_profile}) einzusetzen, kann das NFW-Profil im vorhinein
berechnet werden. Es wird dabei eine Tabelle erstellt in der die Entfernung des
Sternes zum Mittelpunkt der Galaxie der jeweiligen Wahrscheinlichkeit
zugeordnet wird:

\begin{center}
\begin{tabular} {l | l}
    \( r_1 \) & \( \rho_1 \) \\ \hline
    \( r_2 \) & \( \rho_2 \) \\ \hline
    \( r_3 \) & \( \rho_3 \) \\ \hline
    \( \dots \) & \( \dots \) \\ \hline
    \( r_n \quad n \in \mathbb{N} \) & \( \rho_n \quad n \in \mathbb{N} \) \\ \hline
\end{tabular}
\end{center}

Die Tabelle kann jedoch nicht so genaue Ergebnisse liefern wie das NFW-Profil,
sie kann jedoch so angepasst werden, dass sie in den Arbeitsspeicher passt und
somit das NFW-Profil so genau wie möglich widerspiegelt und das Generieren
stark verbessert. Dadurch das sie in den Arbeitsspeicher passt ist der Tatsache
das sie nicht direk berechnet wird auch zu vernachlässigen, denn das Lesen von
Daten aus dem Arbeitsspeicher funktioniert sehr schnell. Mit genügend
Arbeitsspeicher ist der Fehler demnach auch vernachlässigbar. Ein Kritischer
Faktor, der beachtet werden muss wenn Lookuptabellen genutzt werden, ist die
Geschwindigkeit des jeweiligen Speichermediums. Nutzt man z.B. Eine sehr
langsame Festplatte kann es mehr Sinne machen die jeweiligen Werte direkt zu
berechnen. Dagegen ist eine schnelle SSD (Solid-State-Drive) um einiges
schneller, kommt jedoch nicht gegen den Arbeitsspeicher an weshalb es sich
nicht lohnt ein anders Medium zu nutzen.

\subsection{Beschleunigung der Generierung}
Es existieren mehrere Möglichkeiten die Generierung der Punkte zu verbessern.

Eine gute Möglichkeit ist die Nutzung von mehr Rechenleistung. Bei der Nutzung
von \( n \) mal sovielen Rechen kernen ist das Generieren von Sternen \( n \)
mal schneller. Die Server des Server-Hosters Hetzner können dabei gut
verwendet werden: Es wird stündlich abgerechnet und 32 Kerne mit 128 GB RAM
kosten \( \approx \) 50ct/h was es ermöglicht für einen vergleichsweisen
Günstigen Preis, sehr viele Koordinaten zu generieren.

Die Ausgabe von jeder Potentiellen Koordinate in die Kommandozeile verlangsamt
die Generierung unglaublich stark, da der Rechner darauf wartet das die Ausgabe
fertig ist bevor er mit der nächsten Rechnung beginnt was zu einer relativ
starken Verlangsamung der Generierung führt. Dies sollte also verhindert werden.