Discussion:
Wschody i zachody Słońca - "how to" :)
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Wojtek Borczyk
2011-03-10 20:11:09 UTC
Permalink
Zgodnie z umową, postaram się przedstawić skrócony algorytm obliczania
momentów wschodów i zachodów Słońca dla dowolnej lokalizacji i daty.

Rachunki składają się z dwóch kroków:

1) znalezienia współrzędnych równikowych równonocnych Słońca na
przybliżony momet wschodu/zachodu, oraz
2) wyliczenia na ich podstawie momentów wschodu i zachodu.

Krok 1) można przeprowadzić na wiele różnych sposobów (zależnie od
wymaganej dokładności), począwszy od wyinterpolowania współrzędnych z
"rocznika astronomicznego", poprzez ich przybliżenie analityczne
rozmaitymi szeregami jako funkcjami czasu, a skończywszy na precyzyjnym
całkowaniu numerycznym. Nie chcąc zagłębiać się zbyt szczegółowo w żadną
konkretną metodę, zacznę może od kroku 2) , a do kroku 1) wrócę jeszcze
nieco później :)

Krok 2) Zakładamy, że znamy deklinację Słońca (delta), szerokość
i długość geograficzną miejsca obserwacji (fi, lambda), oraz chwilową
wartość równania czasu (E) na przybliżony moment wschodu/zachodu.
Współrzędne powinny być wyliczone na *epokę*daty* , więc formalnie rzecz
biorąc powinniśmy dokonać ich transformacji z epoki J2000, ale w praktyce
popełnimy niewielki błąd używając współrzędnych na epokę J2000.

Rozwiązując trójkąt sferyczny z wierzchołkami w zenicie, północnym
biegunie świata i Słońcu dostajemy wyrażenie na cosinus kąta godzinnego
Słońca:

cos(t)=(sin(h)-sin(fi)*sin(delta))/(cos(fi)*cos(delta)) (1.1)

gdzie h oznacza wysokość kątową Słońca nad horyzontem.

"Zachód" lub "wschód" Słońca rozumiemy jako zniknięcie/pojawienie się
górnego brzegu jego tarczy. Odpowiada to wysokości kątowej środka tarczy
Słońca równej -(d/2+R), gdzie d jest średnicą kątową tarczy słonecznej, a
R oznacza wartość refrakcji atmosferycznej przy horyzoncie. "d" możemy
przyjąć równe ok. 32' łuku (zmienia się w niewielkich granicach w
zależności od odległości Ziemia-Słońce), natomiast nieco gorzej jest z "R"
- współczesne modele refrakcji atmosferycznej bardzo niedokładnie opisują
jej wartość w pobliżu horyzontu (zależy ona od bardzo wielu czynników,
takich jak temperatura, ciśnienie, wilgotność). Można jednak z dość dobrym
przybliżeniem założyć, że R = ok. 34' Stąd nasze h = -(32/2+34) = 50' =
-0,833(3) stopnia.

Następnie z (1.1) wyliczamy kąt godzinny Słońca "t". Ponieważ cosinus jest
funkcją parzystą, więc dostajemy dwa symetryczne rozwiązania, z których
wybieramy to, które leży po właściwej stronie południka (wschodniej dla
wschodu, zachodniej dla zachodu). Oczywiście pamiętamy o tym, że kąt
godzinny musimy wyrazić w mierze godzinnej, a nie stopniowej (360 stopni =
24 godziny) :)

Dodając do tak wyliczonego kąta godzinnego Słońca 12 godzin dostajemy
miejscowy czas słoneczny prawdziwy:

Tv = t + 12h (w razie potrzeby normalizujemy do przedziału 0h-24h, modulo
24h)

Znając wartość równania czasu "E" obliczamy teraz czas słoneczny średni
miejscowy "Tm":

Tm = Tv - E

Odejmując od czasu słonecznego średniego długość geograficzną "lambda"
(również wyrażoną w *godzinach*) dostajemy czas UT wschodu lub zachodu
Słońca:

UT = Tm - lambda

(pamiętajmy o znaku "lambda" - ja przyjąłem konwencję, że długości
wschodnie mają znak "+")

Na koniec dodajemy do tak obliczonego czasu różnicę między czasem
urzędowym a UT (+1h dla czasu zimowego, +2 godziny dla czasu letniego) - i
gotowe! :)

Na dzisiaj tyle - jutro postaram się nieco obszerniej opisać kilka różnych
metod przeprowadzenia kroku 1)

Mam nadzieję, że chociaż trochę pomogłem... :)

Pozdrawiam :)

W.
Stanislaw Sidor
2011-03-10 21:35:55 UTC
Permalink
Post by Wojtek Borczyk
Zgodnie z umową, postaram się przedstawić skrócony algorytm obliczania
momentów wschodów i zachodów Słońca dla dowolnej lokalizacji i daty.
[...]
Post by Wojtek Borczyk
Mam nadzieję, że chociaż trochę pomogłem... :)
Dziekuje w imieniu tych, co sie wstydza podziekowac :)
Zapewne mozna bedzie (po doprecyzowaniu kroku 1) pokusic sie o
implementacje algorytmu i sprawdzenie, jak dziala ... no bo trzeba jakos to
zweryfikowac!
--
Śmiech, panowie, jest argumentem idiotów
przeciwko każdej nowej idei. [Frau im Mond,1929]
Szymon
2011-03-11 07:41:17 UTC
Permalink
Dziękuję bardzo!!!:)
Chodziło mi właśnie o przykład:) Bo ja te wszystkie wzory mam w książce ale
jak obliczałem to bzdury straszne mi wychodziły... Teraz sobie zaraz obliczę
i sprawdzę z kalkulatorem astronomicznym:)
_____________
Pozdrawiam
Szymon
Post by Stanislaw Sidor
Post by Wojtek Borczyk
Zgodnie z umową, postaram się przedstawić skrócony algorytm obliczania
momentów wschodów i zachodów Słońca dla dowolnej lokalizacji i daty.
[...]
Post by Wojtek Borczyk
Mam nadzieję, że chociaż trochę pomogłem... :)
Dziekuje w imieniu tych, co sie wstydza podziekowac :)
Zapewne mozna bedzie (po doprecyzowaniu kroku 1) pokusic sie o
implementacje algorytmu i sprawdzenie, jak dziala ... no bo trzeba jakos
to zweryfikowac!
--
Śmiech, panowie, jest argumentem idiotów
przeciwko każdej nowej idei. [Frau im Mond,1929]
Wojtek Borczyk
2011-03-11 11:09:06 UTC
Permalink
Zapewne mozna bedzie (po doprecyzowaniu kroku 1) pokusic sie o
implementacje algorytmu i sprawdzenie, jak dziala ... no bo trzeba jakos
to zweryfikowac!
W takim razie obiecany ciąg dalszy :)

1) Metoda dla bardzo leniwych :)

Współrzędne Słońca oraz wartość równania czasu oczywiście najłatwiej
zdobyć posługując się rocznikiem astronomicznym. Na stronie IGiK
http://www.igik.edu.pl/index.php/pl/systemy/430-rocznik-astronomiczny-2011
dostępne są roczniki z lat 2002 - 2011 w formacie pdf, ale oczywiście
można użyć dowolnego innego rocznika.

Dla przykładu spróbujmy policzyć godzinę zachodu Słońca w Poznaniu, 30
listopada 2008.

Odczytujemy wartości deklinacji Słońca i równania czasu dla dnia 30
listopada i 1 grudnia na godzinę 0h0m TT (współrzędne są na J2000, ale jak
pisałem już wcześniej, chwilowo nie będziemy się bawić w ich transformację
do epoki daty):

30.11: delta1=-21st40'00.72'' E1=11m23.214s
01.12: delta2=-21st49'29.49'' E2=11m01.023s

Interpolujemy wartości delta i E na przybliżoną godzinę zachodu Słońca
(załóżmy, że jest to godzina 16:00 TT). Przy spodziewanej dokładności
naszych rachunków (pojedynczych minut) w zupełności wystarczy, jeśli
zastosujemy interpolację liniową:

delta=delta1+(16/24)*(delta2-delta1)
E=E1+(16/24)*(E2-E1)

delta=-21st46'20''
E=11m08s

Współrzędne Poznania to fi=52st24' , lambda=1h07m30sE (16st52'30''E)

cos(t)=(sin(-0.83333st)-sin(52.4st)*sin(-21.772222st))/(cos(52.4st)*cos(-21.772222))

cos(t)=0.4929756...

Stąd t= +- 60.46365... st

Ponieważ dla zachodu kąt godzinny musi leżeć w I ćwiartce, wybieramy
rozwiązanie t=60.46365st (czyli po zamianie na godziny "okrągło" 4h02m)

Wyliczamy czas słoneczny średni miejscowy, dodając do kąta godzinnego
Słońca 12h i odejmując wartość równania czasu:

Tm = 4h02m + 12h - 11m = 15h51m

Wyliczamy czas UT odejmując długość geograficzną Poznania:

UT = 15h51m - 1h07m = 14h44m

I wreszcie dodając poprawkę CET-UT (+1h) dostajemy moment zachodu Słońca:

Voila! :) T = 15h44m CET

Dla porównania - według tego samego rocznika zachód Słońca w Poznaniu
30.11.2008 roku miał miejsce o godzinie 15:43 CET, więc rozbieżność wynosi
nie więcej, niż jedna minuta, co jest zrozumiałe biorąc pod uwage
wszystkie poczynione przez nas przybliżenia i zaokrąglenia :)

2 ) Metoda dla nieco mniej leniwych :)

Współrzędne Słońca można liczyć samemu "on line", posługując się np.
gotowymi formułami analitycznymi (szeregami). Niestety, im większej
dokładności oczekujemy, tym dłuższych i bardziej skomplikowanych szeregów
musimy używać. Na początek, jeśli wystarczy nam dokładność rzędu 0.01
stopnia we współrzędnych i 0.1m w równaniu czasu, możemy wykorzystać
chociażby przybliżone formuły publikowane przez "The Astronomical
Almanac", rocznik wydawany przez USNO. Ponieważ nie chce mi się ręcznie
przepisywać kilkuset cyferek, poniżej załączam link do zeskanowanej
stronki z tego rocznika: Loading Image...
Na wejściu mamy datę juliańską (z ułamkiem doby) na którą chcemy policzyć
współrzędne. Nie spodziewajmy się jednak przesadnych cudów po tych
prostych formułkach i pamiętajmy, że działają one tylko w pobliżu daty,
dla której zostały zdefiniowane (według autorów: w okresie pomiędzy 1950 a
2050 r).

Istnieją oczywiście znacznie dokładniejsze formuły analityczne,
pozwalające wyliczyć współrzędne Słońca z dokładnością do 6 a nawet 7 cyfr
znaczących, ale ich szczegółowe omówienie zdecydowanie wykracza poza ramy
krótkiego "wprowadzenia do tematu" ;-)

3) Metoda dla ambitnych - całkowanie numeryczne Układu Słonecznego :)

Z pozoru "brzmi groźnie", ale "nie taki diabeł straszny, jak go malują" :)
Generalnie idea jest taka, że znając położenia i prędkości
oddziaływujących ze sobą ciał na chwilę "t", oraz potrafiąc zapisać siły
ich wzajemnego oddziaływania jako funkcje tych położeń (i ewentualnie
prędkości), wyliczamy nowe położenia i prędkości na chwilę t+dt, gdzie dt
jest bardzo małym interwałem czasu, nazywanym "krokiem całkowania".
Powtarzając tą czynność wielokrotnie możemy wyliczyć położenia i prędkości
naszych ciał na dowolny moment w przyszłości (lub w przeszłości).

Najprościej pokazać to na przykładzie tzw. "algorytmu Eulera". Niech r0 i
v0 oznaczają wektory położenia i prędkości początkowej danego ciała w
chwili t0. Niech a(r) oznacza przyspieszenie (np. grawitacyjne) działające
na to ciało, jako funkcję wektora jego położenia. Niech dt oznacza krok
całkowania. Spróbujmy policzyć położenia prędkości na moment t1 > t0.
Obliczany najpierw położenia i prędkości na moment t0+dt:

r1 = r0 + v0*dt
v1 = v0 + a(r0)*dt

Następnie podstawiamy r0=r1, v0=v1 i czynność powtarzamy n-razy, aż do
t=t1. Teoretycznie im mniejsza wartość kroku dt, tym lepszą dokładność
końcowego wyniku powinniśmy uzyskać, ale w praktyce nie da się niestety
dowolnie zmniejszać kroku, ze wzgledu na skończoną dokładność rachunków
numerycznych. Dlatego metoda Eulera, poza niewątpliwymi zaletami
dydaktycznymi, zupełnie nie nadaje się do praktycznego zastosowania, ze
względu na bardzo szybkie kumulowanie się błedów.

W praktyce stosuje się znacznie bardziej zaawansowane metody, oparte bądź
to o rozmaite modyfikacje metody Rungego-Kutty (jak chociażby rewelacyjny
moim zdaniem integrator Radau-Everharta, dostępny jako "public domain" w
postaci źródła FORTRAN'owego), albo tzw. "integratory symplektyczne",
wykorzystujące formalizm hamiltonowski. Ale to jest już temat na zupełnie
osobne "how to" ;-)

Pozdrawiam :)

W.

Loading...