Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit070183187ea3ca851e89f062f6e64f5fac0f6119 (patch)
Author
 Syndamia <kamen@syndamia.com>
2025-05-02 23:50:01 +0300
Committer
 Syndamia <kamen@syndamia.com>
2025-05-02 23:50:01 +0300
Files55173572454a363e173f169299688231474bc5c0
uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.tar
uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.tar.gz
uni-projects-070183187ea3ca851e89f062f6e64f5fac0f6119.zip
Parentc4b12c723b7b9c38d337c4bde5c371f301ee25d6 (diff)
cm: Completed exervise 2 and added bibliography
3 files changed, 411 insertions, 3 deletions
-rw-r--r--Year 4/Celestial mechanics/Exercise2.R115
-rw-r--r--Year 4/Celestial mechanics/Project.pdfbin90730 -> 116912 bytes
-rw-r--r--Year 4/Celestial mechanics/Project.tex299
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
index 76cd281..e8bc1f6 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 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