diff options
| Commit | d6fe1758d7e5991a754b436ff93e5bae8366ae54 (patch) | |
|---|---|---|
| Author | 2025-05-03 07:53:12 +0300 | |
| Committer | 2025-05-03 07:53:12 +0300 | |
| Files | ea788c53a8b13bedb9142259680313d5720f416c | |
| uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.tar uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.tar.gz uni-projects-d6fe1758d7e5991a754b436ff93e5bae8366ae54.zip | ||
| Parent | 070183187ea3ca851e89f062f6e64f5fac0f6119 (diff) | |
cm: Final touches
2 files changed, 29 insertions, 27 deletions
| -rw-r--r-- | Year 4/Celestial mechanics/Project.pdf | bin | 116912 -> 117004 bytes | |||
| -rw-r--r-- | Year 4/Celestial mechanics/Project.tex | 56 |
diff --git a/Year 4/Celestial mechanics/Project.pdf b/Year 4/Celestial mechanics/Project.pdf Binary files differindex e8bc1f6..fa9fd7e 100644 --- a/Year 4/Celestial mechanics/Project.pdf +++ b/Year 4/Celestial mechanics/Project.pdf 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] |
