diff options
| Commit | 070183187ea3ca851e89f062f6e64f5fac0f6119 (patch) | |
|---|---|---|
| Author | 2025-05-02 23:50:01 +0300 | |
| Committer | 2025-05-02 23:50:01 +0300 | |
| Files | 55173572454a363e173f169299688231474bc5c0 | |
| uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.tar uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.tar.gz uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.zip | ||
| Parent | c4b12c723b7b9c38d337c4bde5c371f301ee25d6 (diff) | |
cm: Completed exervise 2 and added bibliography
3 files changed, 411 insertions, 3 deletions
| -rw-r--r-- | Year 4/Celestial mechanics/Exercise2.R | 115 | ||||
| -rw-r--r-- | Year 4/Celestial mechanics/Project.pdf | bin | 90730 -> 116912 bytes | |||
| -rw-r--r-- | Year 4/Celestial mechanics/Project.tex | 299 |
diff --git a/Year 4/Celestial mechanics/Exercise2.R b/Year 4/Celestial mechanics/Exercise2.R new file mode 100644 index 0000000..5e98ada --- /dev/null +++ b/Year 4/Celestial mechanics/Exercise2.R @@ -0,0 +1,115 @@ +# Изменя величината спрямо подадено изменение и дата във векове от началото на епохата +atDay <- function(epochConstant, rate, t) { + epochConstant + t * rate +} + +# Принтира аргументът, така че всички цифри да имат 8 знака прецизност +p <- function(x) { + formatC(x, format="f", digits = 8) +} + +# Аргумент на перихелия +g <- function(omega, theta) { + omega - theta +} + +# Средна аномалия +l <- function(lambda, omega) { + lambda - omega +} + +gamma <- function(mu) { 1 + mu } +m <- function(mu) { mu / (1 + mu) } +L <- function(m, gamma, a) { m * sqrt(gamma) * sqrt(a) } +G <- function(L, e) { L * sqrt(1 - e^2) } +Theta <- function(G, i) { G * cos(i) } + +# Елементи на Делоне по подадени константи +delaunay <- function(t, mu, a2000, da, e2000, de, i2000, di, lambda2000, dlambda, omega2000, domega, theta2000, dtheta) { + a <- atDay(a2000, da, t) + e <- atDay(e2000, de, t) + i <- atDay(i2000, di, t) + lambda <- atDay(lambda2000, dlambda, t) + omega <- atDay(omega2000, domega, t) + theta <- atDay(theta2000, dtheta, t) + + m <- m(mu) + gamma <- gamma(mu) + + L <- L(m, gamma, a) + G <- G(L, e) + Theta <- Theta(G, i) + l <- l(lambda, omega) + g <- g(omega, theta) + + c(L, G, Theta, l, g, theta) +} + +# Елементи на Делоне в моета дата на раждане +delaunayAtBirth <- function() { + birthDate <- 0.02320328 + rbind( + delaunay(birthDate, 0.00000016, # Меркурии + 0.38709927, 0.00000037, 0.20563593, 0.00001906, 0.12225995, -0.00010380, + 4.40259868, 2608.79030501, 1.35189358, 0.00280085, 0.84353100, -0.00218761), + delaunay(birthDate, 0.00000244, # Венера + 0.72333566, 0.00000390, 0.00677672, -0.00004107, 0.05924827, -0.00001377, + 3.17613446, 1021.32854958, 2.29689636, 0.00004683, 1.33831572, -0.00484668), + delaunay(birthDate, 0.00000304, # EM Bary + 1.00000261, 0.00000562, 0.01671123, -0.00004392, -0.00000027, -0.00022596, + 1.75343756, 628.30757790, 1.79660147, 0.00564219, 0.0, 0.0), + delaunay(birthDate, 0.00000032, # Марс + 1.52371034, 0.00001847, 0.09339410, 0.00007882, 0.03228321, -0.00014192, + -0.07947238, 334.06130168, -0.41789517, 0.00775643, 0.86497713, -0.00510637), + delaunay(birthDate, 0.00095479, # Юпитер + 5.20288700, -0.00011607, 0.04838624, -0.00013253, 0.02276602, -0.00003206, + 0.60033114, 52.96631189, 0.25706047, 0.00370929, 1.75360053, 0.00357253), + delaunay(birthDate, 0.00028588, # Сатурн + 9.53667594, -0.00125060, 0.05386179, -0.00050991, 0.04338874, 0.00003379, + 0.87186604, 21.33653879, 1.61615531, -0.00731244, 1.98378354, -0.00503838), + delaunay(birthDate, 0.00004366, # Уран + 19.18916464, -0.00196176, 0.04725744, -0.00004397, 0.01348507, -0.00004240, + 5.46703627, 7.47842217, 2.98371499, 0.00712187, 1.29183904, 0.00074012), + delaunay(birthDate, 0.00005151, # Нептун + 30.06992276, 0.00026291, 0.00859048, 0.00005105, 0.03089309, 0.00000617, + -0.96202600, 3.81283674, 0.78478315, -0.00562720, 2.30006864, -0.00008878) + ) +} + +# Елементи на Поанкаре от първи род в моета дата на раждане +poincare1 <- function() { + data <- delaunayAtBirth() + result <- c() + for (planet in 1:8) { + L <- data[planet,1]; G <- data[planet,2]; Theta <- data[planet,3] + l <- data[planet,4]; g <- data[planet,5]; theta <- data[planet,6] + result <- rbind( + result, + c(L, L - G, G - Theta, l + g + theta, - g - theta, - theta) + ) + } + result +} + +# Елементи на Поанкаре от втори род в моета дата на раждане +poincare2 <- function() { + data <- delaunayAtBirth() + result <- c() + + for (planet in 1:8) { + L <- data[planet,1]; G <- data[planet,2]; Theta <- data[planet,3] + l <- data[planet,4]; g <- data[planet,5]; theta <- data[planet,6] + + result <- rbind( + result, + c(L, sqrt(2*(L-G)) * cos(g + theta), sqrt(2*(G-Theta)) * cos(theta), + l + g + theta, -sqrt(2*(L-G)) * sin(g + theta), sqrt(2*(G-Theta)) * sin(theta)) + ) + } + + result +} + +p(delaunayAtBirth()) +p(poincare1()) +p(poincare2())
\ No newline at end of file diff --git a/Year 4/Celestial mechanics/Project.pdf b/Year 4/Celestial mechanics/Project.pdf Binary files differindex 76cd281..e8bc1f6 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 5800627..8d86135 100644 --- a/Year 4/Celestial mechanics/Project.tex +++ b/Year 4/Celestial mechanics/Project.tex @@ -63,7 +63,7 @@ \centerline{\textit{Всички изчисления ще са с точност до 8 знака след десетичния знак.}} Като подготвителна стъпка ще преобразуваме нужните данни в по-удобна форма. -Уебсайтът на NASA (\url{https://ssd.jpl.nasa.gov/planets/approx_pos.html}) предоставя следните константи: +Уебсайтът на NASA \cite{nasa} предоставя следните константи: \begin{table}[!h] \begin{center} @@ -141,9 +141,9 @@ Neptune & 30.06992276 & 0.00859048 & 0.03089309 & -0.96202600 & 0.78478 Тоест, обозначаваме $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$ Юлиански години след началото на епохата (1 Януари 2000, 00:00 часа), което са $\frac{2.32032854}{100} = 0.02320328$ века. \paragraph{1. Решение} @@ -422,4 +422,297 @@ Neptune & 18.92712374 & -23.39768921 & 0.04565204 & 30.09468321 & 0.14091098 & \paragraph{2. Решение} +Ще напишем програма на езика \texttt{R}, която намира елементите на Делоне и Поанкаре (от първи и втори вид) в деня на моето раждане. +За целта се нуждаем и от масите на всички планети. + +В допълнението към астрономическия алманах, глава 8, страници 19-20 \cite{mass}, намираме: + +\begin{table}[!h] +\begin{center} +\begin{tabular}{c|c|c} +GMs/GM1 & 6023600.0 & $mass^{−1}$ for Mercury \\ +GMs/GM2 & 408523.71 & $mass^{−1}$ for Venus \\ +GMs/GMB & 328900.5614 & $mass^{−1}$ for EM-Bary \\ +GMs/GM4 & 3098708.0 & $mass^{−1}$ for Mars \\ +GMs/GM5 & 1047.3486 & $mass^{−1}$ for Jupiter \\ +GMs/GM6 & 3497.898 & $mass^{−1}$ for Saturn \\ +GMs/GM7 & 22902.98 & $mass^{−1}$ for Uranus \\ +GMs/GM8 & 19412.24 & $mass^{−1}$ for Neptune \\ +\end{tabular} +\end{center} +\end{table} + +Ще се нуждаем от $\mu = \frac{m_\mathrm{планета}}{m_\mathrm{слънце}}$. +Преобразуваме таблицата по формулата $\mu = \frac{1}{\mathrm{GMs/GMX}}$: + +\begin{table}[!h] +\begin{center} +\begin{tabular}{c||c} +& $\mu$ \\ +\hline\hline +Mercury & 0.00000016 \\ +Venus & 0.00000244 \\ +EM Bary & 0.00000304 \\ +Mars & 0.00000032 \\ +Jupiter & 0.00095479 \\ +Saturn & 0.00028588 \\ +Uranus & 0.00004366 \\ +Neptune & 0.00005151 \\ +\end{tabular} +\end{center} +\end{table} + + +Единственият вход на програмата ще бъдат данни от таблиците и рожденната ми дата (в Юлиански векове от началото на епохата). + +\hfill + +Първо ще разгледаме елементите на Делоне. +Искаме да обновим величините от началото на епохата и да изкарваме на екрана стойности с 8 цифри прецизност. +Копираме функциите \texttt{atDay} и \texttt{p} от 1 задача: + +\begin{lstlisting}[language=R] +atDay <- function(epochConstant, rate, t) { epochConstant + t * rate } +p <- function(x) { formatC(x, format="f", digits = 8) } +\end{lstlisting} + +Величината $\theta$ вземаме от таблицата. +За $l$ и $g$ копираме функциите \texttt{l} и \texttt{g} от задача 1: + +\begin{lstlisting}[language=R] +l <- function(lambda, omega) { lambda - omega } +g <- function(omega, theta) { omega - theta } +\end{lstlisting} + +За величините $L$, $G$ и $\Theta$ знаем следните формули по теорема: +\begin{align*} + L = m \sqrt{\gamma}\sqrt{a} + \qquad + G = L \sqrt{1 - e^2} + \qquad + \Theta = G \cos i +\end{align*} + +Където $a$, $e$ и $i$ са дадени в таблицата. +За останалите величини ($m$ и $\gamma$) имаме формулите: +\begin{align*} + \gamma = 1 + \mu + \qquad + m = \frac{\mu}{\gamma} = \frac{\mu}{1 + \mu} +\end{align*} + +Имплементираме функции по формулите за всяка велична: + +\begin{lstlisting}[language=R] +gamma <- function(mu) { 1 + mu } +m <- function(mu) { mu / (1 + mu) } +L <- function(m, gamma, a) { + m * sqrt(gamma) * sqrt(a) +} +G <- function(L, e) { + L * sqrt(1 - e^2) +} +Theta <- function(G, i) { G * cos(i) } +\end{lstlisting} + +\newpage + +\hfill + +\hfill + +\hfill + +Обединявайки всичко, получаваме следната функция за намиране на елементите на Делоне: + +\begin{lstlisting}[language=R] +delaunay <- function(t, mu, a2000, da, e2000, de, i2000, di, lambda2000, dlambda, omega2000, domega, theta2000, dtheta) { + a <- atDay(a2000, da, t) + e <- atDay(e2000, de, t) + i <- atDay(i2000, di, t) + lambda <- atDay(lambda2000, dlambda, t) + omega <- atDay(omega2000, domega, t) + theta <- atDay(theta2000, dtheta, t) + + m <- m(mu) + gamma <- gamma(mu) + + L <- L(m, gamma, a) + G <- G(L, e) + Theta <- Theta(G, i) + l <- l(lambda, omega) + g <- g(omega, theta) + + c(L, G, Theta, l, g, theta) +} +\end{lstlisting} + +Дефинираме функцията \texttt{delaunayAtBirth}, която връща всички елементи на Делоне за всички планети с подадени константи: + +\begin{lstlisting}[language=R] +delaunayAtBirth <- function() { + birthDate <- 0.02320328 + rbind( + delaunay(birthDate, 0.00000016, # Меркурии + 0.38709927, 0.00000037, 0.20563593, 0.00001906, 0.12225995, -0.00010380, + 4.40259868, 2608.79030501, 1.35189358, 0.00280085, 0.84353100, -0.00218761), + delaunay(birthDate, 0.00000244, # Венера + 0.72333566, 0.00000390, 0.00677672, -0.00004107, 0.05924827, -0.00001377, + 3.17613446, 1021.32854958, 2.29689636, 0.00004683, 1.33831572, -0.00484668), + delaunay(birthDate, 0.00000304, # EM Bary + 1.00000261, 0.00000562, 0.01671123, -0.00004392, -0.00000027, -0.00022596, + 1.75343756, 628.30757790, 1.79660147, 0.00564219, 0.0, 0.0), + delaunay(birthDate, 0.00000032, # Марс + 1.52371034, 0.00001847, 0.09339410, 0.00007882, 0.03228321, -0.00014192, + -0.07947238, 334.06130168, -0.41789517, 0.00775643, 0.86497713, -0.00510637), + delaunay(birthDate, 0.00095479, # Юпитер + 5.20288700, -0.00011607, 0.04838624, -0.00013253, 0.02276602, -0.00003206, + 0.60033114, 52.96631189, 0.25706047, 0.00370929, 1.75360053, 0.00357253), + delaunay(birthDate, 0.00028588, # Сатурн + 9.53667594, -0.00125060, 0.05386179, -0.00050991, 0.04338874, 0.00003379, + 0.87186604, 21.33653879, 1.61615531, -0.00731244, 1.98378354, -0.00503838), + delaunay(birthDate, 0.00004366, # Уран + 19.18916464, -0.00196176, 0.04725744, -0.00004397, 0.01348507, -0.00004240, + 5.46703627, 7.47842217, 2.98371499, 0.00712187, 1.29183904, 0.00074012), + delaunay(birthDate, 0.00005151, # Нептун + 30.06992276, 0.00026291, 0.00859048, 0.00005105, 0.03089309, 0.00000617, + -0.96202600, 3.81283674, 0.78478315, -0.00562720, 2.30006864, -0.00008878) + ) +} +\end{lstlisting} + +\newpage + +\hfill + +\hfill + +\hfill + +Елементите на Поанкаре от първи вид са следната редица стойности по дефиниция: +\begin{align*} + L, \quad L - G, \quad G - \Theta, \quad l + g + \theta, \quad - g - \theta, \quad - \theta +\end{align*} + +Изполвайки вече дефинираната \texttt{delaunayAtBirth}, можем итеративно да конвертираме всеки ред с елементи на Делоне към елементите на Поанкаре: + +\begin{lstlisting}[language=R] +poincare1 <- function() { + data <- delaunayAtBirth() + result <- c() + + for (planet in 1:8) { + L <- data[planet,1]; G <- data[planet,2]; Theta <- data[planet,3] + l <- data[planet,4]; g <- data[planet,5]; theta <- data[planet,6] + + result <- rbind( + result, + c(L, L - G, G - Theta, l + g + theta, - g - theta, - theta) + ) + } + + result +} +\end{lstlisting} + +Елементите на Поанкаре от втори вид са следната редица стойности по дефиниция: +\begin{align*} + \begin{matrix} + L, & \xi = \sqrt{2(L - G)} \cos(g + \theta), & p = \sqrt{2(G - \Theta)} \cos(\theta), \\ + l + g + \theta, & \eta = - \sqrt{2(L - G)} \sin(g + \theta), & q = \sqrt{2(G - \Theta)} \sin(\theta) + \end{matrix} +\end{align*} + +Напълно аналогично на \texttt{poincare1}, дефинираме \texttt{poincare2}: + +\begin{lstlisting}[language=R] +poincare2 <- function() { + data <- delaunayAtBirth() + result <- c() + + for (planet in 1:8) { + L <- data[planet,1]; G <- data[planet,2]; Theta <- data[planet,3] + l <- data[planet,4]; g <- data[planet,5]; theta <- data[planet,6] + + result <- rbind( + result, + c(L, sqrt(2*(L-G)) * cos(g + theta), sqrt(2*(G-Theta)) * cos(theta), + l + g + theta, -sqrt(2*(L-G)) * sin(g + theta), sqrt(2*(G-Theta)) * sin(theta)) + ) + } + + result +} +\end{lstlisting} + +Извикваме всяка от тези функции: + +\begin{lstlisting}[language=R] +p(delaunayAtBirth()) +p(poincare1()) +p(poincare2()) +\end{lstlisting} + +И получаваме следните резултати: + +\break + +\begin{table}[!h] +\begin{center} +\begin{tabular}{c|c|c|c|c|c|c} +Делоне & $L$ & $G$ & $\Theta$ & $l$ & $g$ & $\theta$ \\ +\hline\hline +Mercury & 0.00000010 & 0.00000010 & 0.00000010 & 63.58313202 & 0.50847833 & 0.84348024 \\ +Venus & 0.00000208 & 0.00000208 & 0.00000207 & 24.57740932 & 0.95869419 & 1.33820326 \\ +EM Bary & 0.00000304 & 0.00000304 & 0.00000304 & 14.53550183 & 1.79673239 & 0.00000000 \\ +Mars & 0.00000040 & 0.00000039 & 0.00000039 & 8.08956074 & -1.28257384 & 0.86485865 \\ +Jupiter & 0.00217682 & 0.00217427 & 0.00217371 & 1.57217677 & -1.49653689 & 1.75368342 \\ +Saturn & 0.00088271 & 0.00088143 & 0.00088060 & -0.24904191 & -0.36768100 & 1.98366663 \\ +Uranus & 0.00019125 & 0.00019104 & 0.00019102 & 2.65667995 & 1.69202403 & 1.29185621 \\ +Neptune & 0.00028245 & 0.00028244 & 0.00028231 & -1.65820826 & -1.51541400 & 2.30006658 \\ +\end{tabular} +\end{center} +\end{table} + +\begin{table}[!h] +\begin{center} +\begin{tabular}{c|c|c|c|c|c|c} +Поанкаре 1 вид & $L$ & $L - G$ & $G - \Theta$ & $l + g + \theta$ & $-g - \theta$ & $-\theta$ \\ +\hline\hline +Mercury & 0.00000010 & 0.00000000 & 0.00000000 & 64.93509059 & -1.35195857 & -0.84348024 \\ +Venus & 0.00000208 & 0.00000000 & 0.00000000 & 26.87430677 & -2.29689745 & -1.33820326 \\ +EM Bary & 0.00000304 & 0.00000000 & 0.00000000 & 16.33223422 & -1.79673239 & -0.00000000 \\ +Mars & 0.00000040 & 0.00000000 & 0.00000000 & 7.67184554 & 0.41771520 & -0.86485865 \\ +Jupiter & 0.00217682 & 0.00000255 & 0.00000056 & 1.82932331 & -0.25714654 & -1.75368342 \\ +Saturn & 0.00088271 & 0.00000128 & 0.00000083 & 1.36694372 & -1.61598564 & -1.98366663 \\ +Uranus & 0.00019125 & 0.00000021 & 0.00000002 & 5.64056019 & -2.98388024 & -1.29185621 \\ +Neptune & 0.00028245 & 0.00000001 & 0.00000013 & -0.87355568 & -0.78465258 & -2.30006658 \\ +\end{tabular} +\end{center} +\end{table} + +\begin{table}[!h] +\begin{center} +\begin{tabular}{c|c|c|c|c|c|c} +Поанкаре 2 вид & $L$ & $\xi$ & $p$ & $l + g + \theta$ & $\eta$ & $q$ \\ +\hline\hline +Mercury & 0.00000010 & 0.00001416 & 0.00002536 & 64.93509059 & -0.00006367 & 0.00002849 \\ +Venus & 0.00000208 & -0.00000648 & 0.00001967 & 26.87430677 & -0.00000730 & 0.00008304 \\ +EM Bary & 0.00000304 & -0.00000653 & 0.00000001 & 16.33223422 & -0.00002840 & 0.00000000 \\ +Mars & 0.00000040 & 0.00005371 & 0.00001313 & 7.67184554 & 0.00002384 & 0.00001540 \\ +Jupiter & 0.00217682 & 0.00218380 & -0.00019305 & 1.82932331 & -0.00057427 & 0.00104380 \\ +Saturn & 0.00088271 & -0.00007230 & -0.00051683 & 1.36694372 & -0.00159886 & 0.00117985 \\ +Uranus & 0.00019125 & -0.00064559 & 0.00005131 & 5.64056019 & -0.00010267 & 0.00017917 \\ +Neptune & 0.00028245 & 0.00010218 & -0.00034594 & -0.87355568 & -0.00010203 & 0.00038713 \\ +\end{tabular} +\end{center} +\end{table} + +\vfill + +\begin{thebibliography}{9} +\bibitem{nasa} Solar System Dynamics. (2025, Май 1). \textit{Approximate Positions of the Planets.} Jet Propultion Laboratory, National Aeronautics and Space Administration. \url{https://ssd.jpl.nasa.gov/planets/approx_pos.html} +\bibitem{mass} Williams, James G., \& Standish, Myles E. (2006). Orbital Ephemerides of the Sun, Moon, and Planets. In Seidelmann, P. K. (Eds.), \textit{Explanatory Supplement to the Astronomical Almanac}. \url{https://www.researchgate.net/publication/232203657_Orbital_Ephemerides_of_the_Sun_Moon_and_Planets} +\end{thebibliography} + \end{document}
\ No newline at end of file |
