Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commitd6fe1758d7e5991a754b436ff93e5bae8366ae54 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-05-03 07:53:12 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-05-03 07:53:12 +0300
Filesea788c53a8b13bedb9142259680313d5720f416c
uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.tar
uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.tar.gz
uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.zip
Parent070183187ea3ca851e89f062f6e64f5fac0f6119 (diff)
cm: Final touches
2 files changed, 29 insertions, 27 deletions
-rw-r--r--Year 4/Celestial mechanics/Project.pdfbin116912 -> 117004 bytes
-rw-r--r--Year 4/Celestial mechanics/Project.tex56
diff --git a/Year 4/Celestial mechanics/Project.pdf b/Year 4/Celestial mechanics/Project.pdf
index e8bc1f6..fa9fd7e 100644
--- a/Year 4/Celestial mechanics/Project.pdf
+++ b/Year 4/Celestial mechanics/Project.pdf
Binary files differ
diff --git a/Year 4/Celestial mechanics/Project.tex b/Year 4/Celestial mechanics/Project.tex
index 8d86135..c469110 100644
--- a/Year 4/Celestial mechanics/Project.tex
+++ b/Year 4/Celestial mechanics/Project.tex
@@ -62,8 +62,8 @@
\centerline{\textit{Всички изчисления ще са с точност до 8 знака след десетичния знак.}}
-Като подготвителна стъпка ще преобразуваме нужните данни в по-удобна форма.
-Уебсайтът на NASA \cite{nasa} предоставя следните константи:
+Първо ще подготвим таблицата на орбиталните елементи.
+Уебсайтът на NASA \cite{nasa} предоставя следните константи за началото на епохата (1 Януари 2000, 00:00 часа):
\begin{table}[!h]
\begin{center}
@@ -98,9 +98,9 @@ Neptune & 30.06992276 & 0.00859048 & 1.77004347 & -55.12002969 &
\end{center}
\end{table}
-Първо, всички колони със стойности спрямо градуси ще бъдат преобразувани спрямо радиани, използвайки формулата $\rad = \deg \cdot \frac{\pi}{180}$ (с точност до 8 знака след десетичния знак).
+Всички колони със стойности спрямо градуси ще бъдат преобразувани спрямо радиани, използвайки формулата $\rad = \deg \cdot \frac{\pi}{180}$ (с точност до 8 знака след десетичния знак).
-Второ, ще сменим наименованиетa на елементите: $\mathrm{a} \rightarrow a_{2000}$, $\mathrm{e} \rightarrow e_{2000}$, $\mathrm{I} \rightarrow i_{2000}$, $\mathrm{L} \rightarrow \lambda_{2000}$, $\mathrm{long.peri.} \rightarrow \tilde{\omega}_{2000}$ и $\mathrm{long.node.} \rightarrow \theta_{2000}$.
+Ще сменим наименованията на елементите: $\mathrm{a} \rightarrow a_{2000}$, $\mathrm{e} \rightarrow e_{2000}$, $\mathrm{I} \rightarrow i_{2000}$, $\mathrm{L} \rightarrow \lambda_{2000}$, \break $\mathrm{long.peri.} \rightarrow \tilde{\omega}_{2000}$ и $\mathrm{long.node.} \rightarrow \theta_{2000}$.
Ще бележим измененията с $\Delta$.
Получаваме:
@@ -137,20 +137,20 @@ Neptune & 30.06992276 & 0.00859048 & 0.03089309 & -0.96202600 & 0.78478
\end{center}
\end{table}
-Без долен индекс и $\Delta$ ще обозначаваме стойността на съответната величина след време $t$ от началото на епохата.
-Тоест, обозначаваме $a = a_{2000} + t \cdot \Delta a$, $e = e_{2000} + t \cdot \Delta e$, ...
+Без долен индекс и $\Delta$ ще обозначаваме величина след време $t$ от началото на епохата.
+Тоест, обозначаваме $a = a_{2000} + t \cdot \Delta a$, \, $e = e_{2000} + t \cdot \Delta e$, ...
Финално, ще изчислим рожденната ми дата във векове.
-Аз съм виден на 27 Април 2002 година.
+Аз съм роден на 27 Април 2002 година.
Това е 117-ят ден в годината, което е $\frac{117}{365.25} = 0.32032854$ Юлиански години.
-Тоест, виден съм $2.32032854$ Юлиански години след началото на епохата (1 Януари 2000, 00:00 часа), което са $\frac{2.32032854}{100} = 0.02320328$ века.
+Общо излиза $2.32032854$ Юлиански години след началото на епохата, което са $\frac{2.32032854}{100} = 0.02320328$ Юлиански века.
\paragraph{1. Решение}
-Ще напишем програма на език \texttt{R}, която намира координатите и скоростите на планетите в деня на моето раждане.
-Единственият вход на програмата ще бъде горепосочената таблица и рожденната ми дата (в Юлиански векове от началото на епохата).
+Ще напишем програма на езика \texttt{R}, която намира координатите и скоростите на планетите в деня на моето раждане.
+Входните данни на програмата ще бъдат орбиталните елементи в началото на епохата и рожденната ми дата (в Юлиански векове от началото на епохата).
-Дефинираме функция \texttt{atDay}, която пресмята новата стойност на величина спрямо поддадено $t$:
+Дефинираме функция \texttt{atDay}, която пресмята новата стойност на величина след време $t$:
\begin{lstlisting}[language=R]
atDay <- function(epochConstant, rate, t) {
epochConstant + t * rate
@@ -232,7 +232,7 @@ Q <- function(theta, i, g) {
}
\end{lstlisting}
-Дефинираме функция \texttt{coordinates}, която изчислява стойността на $r$ вектора:
+Дефинираме функция \texttt{coordinates}, която изчислява стойността на $r$ вектора по горната формула:
\begin{lstlisting}[language=R]
coordinates <- function(theta, i, g, a, u, e) {
@@ -244,7 +244,7 @@ coordinates <- function(theta, i, g, a, u, e) {
}
\end{lstlisting}
-Дефинираме функция \texttt{speed}, която изчислява стойността на $v$ вектора:
+Дефинираме функция \texttt{speed}, която изчислява стойността на $v$ вектора по горната формула:
\begin{lstlisting}[language=R]
speed <- function(theta, i, g, a, u, e, n) {
@@ -270,8 +270,7 @@ g <- function(omega, theta) { omega - theta }
l <- function(lambda, omega) { lambda - omega }
\end{lstlisting}
-Величанта $n$ е "средното движение".
-Eдин от начините да го дефинираме е чрез средната аномалия:
+Eдин от начините да дефинираме средното движение $n$ е чрез средната аномалия $l$:
\begin{align*}
l = l_0 + n (t - t_0)
\qquad
@@ -298,7 +297,7 @@ Eдин от начините да го дефинираме е чрез среÐ
\end{align*}
Под тази формула, $n$ е в единици радиани за век, обаче на нас ни трябва безмерната ѝ стойност.
-Следователно, ще трябва да разделим $n$ на $100$ и $2 \pi$.
+Следователно, ще разделим $n$ на $100$ и $2 \pi$.
Имплементираме формулата във функция \texttt{n}:
\begin{lstlisting}[language=R]
n <- function(dlambda, domega) {
@@ -306,7 +305,7 @@ n <- function(dlambda, domega) {
}
\end{lstlisting}
-Ще дефинираме стойността $u$ използвайки вторият метод за решаването на уравнението на Кеплер:
+Ще дефинираме стойността $u$ използвайки вторият метод за решаване на уравнението на Кеплер:
\begin{align*}
u = l + e \cdot \sin(l + e \cdot \sin (l + e \cdot \sin( \cdots )))
\end{align*}
@@ -316,7 +315,7 @@ n <- function(dlambda, domega) {
u = l + e \cdot \sin(l + e \cdot \sin (l + e \cdot \sin(l + e \cdot \sin(l + e \cdot \sin(l + e \cdot \sin(l + e \cdot \sin(l + e \cdot \sin(l))))))))
\end{align*}
-Дефинираме функция \texttt{u}, която пресмята стойността на $u$ чрез рекурсия:
+Дефинираме функция \texttt{u}, която пресмята стойността на $u$ чрез рекурсивен алгоритъм:
\begin{lstlisting}[language=R]
u <- function(l, e, depth=8) {
if (depth <= 0) { l }
@@ -324,8 +323,8 @@ u <- function(l, e, depth=8) {
}
\end{lstlisting}
-Ще бъде нужно да пресметнем дължината на векторите $r$ и $v$.
-Дефинираме функция \texttt{length}, която приема 3-мерен вектор и връща дължината му, използвайки питагоровата формула:
+Дължината на векторите $r$ и $v$ са част от решението.
+Дефинираме функция \texttt{length}, която приема 3-мерен вектор и връща евклидовата му дължина:
\begin{lstlisting}[language=R]
length <- function(vec) { sqrt(vec[1]^2 + vec[2]^2 + vec[3]^2) }
\end{lstlisting}
@@ -335,7 +334,7 @@ length <- function(vec) { sqrt(vec[1]^2 + vec[2]^2 + vec[3]^2) }
\hfill
Вече сме готови да имплементираме кода, който обединява всичко това.
-Дефинираме функция \texttt{planetData}, която приема датата $t$ във векове от началото на епохата и елементите $a_{2000}$, $e_{2000}$, $i_{2000}$, $\lambda_{2000}$, $\tilde{\omega}_{2000}$, $\theta_{2000}$ за една планета.
+Дефинираме функция \texttt{planetData}, която приема датата $t$ във векове от началото на епохата, орбиталните елементи в началото на епохата и тяхното изменение.
Функцията пресмята координатите $x$, $y$, $z$; радиуса $|r|$; покомпонентните скорости $v_x$, $v_y$, $v_z$ и скоростта на планетата $v$:
\begin{lstlisting}[language=R]
@@ -463,12 +462,13 @@ Neptune & 0.00005151 \\
\end{table}
-Единственият вход на програмата ще бъдат данни от таблиците и рожденната ми дата (в Юлиански векове от началото на епохата).
+Входните данни на програмата ще бъдат орбиталните елементи в началото на епохата, рожденната ми дата (в Юлиански векове от началото на епохата) и съотношенията на масите $\mu$.
\hfill
-Първо ще разгледаме елементите на Делоне.
-Искаме да обновим величините от началото на епохата и да изкарваме на екрана стойности с 8 цифри прецизност.
+Първо ще разгледаме елементите на Делоне: $L$, $G$, $\Theta$, $l$, $g$, $\theta$.
+
+Искаме да обновим величините от началото на епохата спрямо време $t$ и да изкарваме на екрана стойности с 8 цифри прецизност.
Копираме функциите \texttt{atDay} и \texttt{p} от 1 задача:
\begin{lstlisting}[language=R]
@@ -476,7 +476,7 @@ atDay <- function(epochConstant, rate, t) { epochConstant + t * rate }
p <- function(x) { formatC(x, format="f", digits = 8) }
\end{lstlisting}
-Величината $\theta$ вземаме от таблицата.
+Величината $\theta$ е орбитален елемент.
За $l$ и $g$ копираме функциите \texttt{l} и \texttt{g} от задача 1:
\begin{lstlisting}[language=R]
@@ -493,7 +493,7 @@ g <- function(omega, theta) { omega - theta }
\Theta = G \cos i
\end{align*}
-Където $a$, $e$ и $i$ са дадени в таблицата.
+Където $a$, $e$ и $i$ са орбитални елементи.
За останалите величини ($m$ и $\gamma$) имаме формулите:
\begin{align*}
\gamma = 1 + \mu
@@ -523,7 +523,7 @@ Theta <- function(G, i) { G * cos(i) }
\hfill
-Обединявайки всичко, получаваме следната функция за намиране на елементите на Делоне:
+Обединявайки всичко, получаваме следната функция за намиране на елементите на Делоне по подадени време $t$, съотношение на маси $\mu$, орбитални елементи в началото на епохата и тяхното изменение за век:
\begin{lstlisting}[language=R]
delaunay <- function(t, mu, a2000, da, e2000, de, i2000, di, lambda2000, dlambda, omega2000, domega, theta2000, dtheta) {
@@ -645,6 +645,8 @@ poincare2 <- function() {
}
\end{lstlisting}
+\hfill
+
Извикваме всяка от тези функции:
\begin{lstlisting}[language=R]