Con il precedente post ho mostrato come si puo' ottenere un metodo di calcolo delle posizioni planetarie basato sulle VSOP87. Rimane da fare la verifica di quanto questa metodologia sia accurata in relazione ad altri metodi. Se i risultati sono soddisfacenti, possiamo ritenere il metodo utile per le finalità di calcolo astrologico che sono l'obiettivo fondamentale di questo lavoro.
Nel frattempo ho inserito anche il Sole tra i corpi celesti misurabili e ho modificato opportunamente il programma planets.py nella directory vsop87c rinominandolo planets_sun.py. Come già detto trovate tutto in github/zdomjus60/astrometry. Nella directory principale ho inserito uno script per mettere a confronto tre diverse librerie in linguaggio Python: pyephem di Brandon Rhodes, la mia libreria vsop87c e le pyswisseph di Stanislas Marquis.
Riporto di seguito il testo integrale dello script di verifica, di cui trovate copia in github sotto il nome di test_vsop87.py, nella directory principale.
from time_func import * import math import random import ephem import numpy import time, datetime import swisseph from vsop87c.planets import Planet planets = {'Earth': ephem.Sun, 'Mercury':ephem.Mercury, 'Venus':ephem.Venus, 'Mars':ephem.Mars, 'Jupiter':ephem.Jupiter, 'Saturn':ephem.Saturn, 'Uranus':ephem.Uranus, 'Neptune':ephem.Neptune} swe_plan = {'Earth': 0, 'Mercury':2, 'Venus':3, 'Mars':4, 'Jupiter':5, 'Saturn':6, 'Uranus':7, 'Neptune':8} c = []; d = []; e = [] for n in range(1000): year = random.randrange(-3000,3000) doty = random.randrange(1,365) date = cal2jul(year,1,1)+doty cal_date = jul2cal(date) year = cal_date[0] month = cal_date[1] day = cal_date[2] # print "\njulian date: %d calendar_date %s" % (date , str(cal_date)) # print "%20s %12s %12s %12s %12s %12s %12s" % ('body','ephem','vsop87c','swisseph','diff1-2','diff2-3', 'diff1-3') for body in planets: body_selected = planets[body](str(year)+"/"+str(month)+"/"+str(day), epoch = str(year)+"/"+str(month)+"/"+str(day)) pos1 = math.degrees(ephem.Ecliptic(body_selected).lon) vsop87c_body = Planet(body, year, month, day) pos2 = vsop87c_body.calc()[1] diff12 = (pos2 - pos1)*3600 pos3 = swisseph.calc(date, swe_plan[body])[0] diff23 = (pos3 - pos2)*3600 diff13 = (pos3 - pos1)*3600 # print "%20s %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f" % (body, pos1, pos2, pos3, diff12, diff23, diff13) c.append(diff12) d.append(diff23) e.append(diff13) print "\n" * 2 print "mean(stdev) ephem-vsop87c %12.4f(%12.4f)" % (numpy.mean(c), numpy.std(c)) print "mean(stdev) vsop87c-swisseph %12.4f(%12.4f)" % (numpy.mean(d), numpy.std(d)) print "mean(stdev) ephem-swisseph %12.4f(%12.4f)" % (numpy.mean(e), numpy.std(e))
Il test procede con l'estrazione casuale di 1000 date tra gli anni 3000 a.c. e 3000 d.c. e con il calcolo di posizione in longitudine di 8 corpi celesti, con l'esclusione di Luna e Plutone. Le differenze di risultato tra i tre metodi sono riportate in linea con le posizioni planetarie e al termine del computo sono calcolate medie e deviazioni standard delle differenze
Noterete che le righe di stampa dei risultati sono commentate con #, per escluderle dall'esecuzione. Questo perchè, ai fini della verifica, la stampa di 1000*8 risultati puo' risultare eccessivamente lenta. Al termine vengono presentate le statistiche relative all'elaborazione, distintamente per le differenze tra coppie di metodi
Un estratto di stampa completo delle longitudini è riportato di seguito:
julian date: 2024877 calendar_date (831, 10, 25, 0, 0, 0) body ephem vsop87c swisseph diff1-2 diff2-3 diff1-3 Mercury 207.3747 207.3312 207.3156 -156.6550 -56.0983 -212.7533 Jupiter 205.3468 205.3423 205.3313 -16.1494 -39.5695 -55.7188 Uranus 329.9765 329.9781 329.9698 5.5322 -29.8444 -24.3122 Mars 273.3969 273.3770 273.3673 -71.5360 -35.0396 -106.5756 Earth 215.4045 215.3728 215.3642 -114.1573 -30.7234 -144.8807 Venus 221.3751 221.3423 221.3272 -118.2600 -54.3486 -172.6085 Saturn 167.9982 167.9971 167.9892 -4.0064 -28.2423 -32.2487 Neptune 254.1742 254.1743 254.1742 0.4144 -0.2400 0.1744 julian date: 978435 calendar_date (-2034, 10, 24, 0, 0, 0) body ephem vsop87c swisseph diff1-2 diff2-3 diff1-3 Mercury 209.0923 213.0602 213.0497 14284.4955 -37.6671 14246.8284 Jupiter 9.8841 330.6850 330.6922 1154883.3028 25.9853 1154909.2881 Uranus 261.2739 257.3849 257.3680 -14000.5191 -60.9418 -14061.4609 Mars 35.8908 180.2785 180.2819 519795.8213 11.9315 519807.7528 Earth 194.0403 193.7273 193.7197 -1126.8160 -27.3218 -1154.1377 Venus 152.5836 185.1803 185.1658 117347.8506 -51.8912 117295.9594 Saturn 42.1960 26.6255 26.6088 -56053.7974 -60.0905 -56113.8879 Neptune 81.9239 79.7036 79.7322 -7993.3666 103.2981 -7890.0685 julian date: 2730409 calendar_date (2763, 7, 5, 0, 0, 0) body ephem vsop87c swisseph diff1-2 diff2-3 diff1-3 Mercury 113.3284 113.3347 113.3312 22.7658 -12.7297 10.0361 Jupiter 169.3535 169.3514 169.3422 -7.6423 -32.8086 -40.4509 Uranus 359.6431 359.6444 359.6370 4.5214 -26.5551 -22.0336 Mars 24.3008 24.2813 24.2726 -70.0481 -31.3619 -101.4100 Earth 103.0054 102.9741 102.9637 -112.4822 -37.6763 -150.1585 Venus 143.7745 143.7400 143.7283 -124.2814 -42.2936 -166.5750 Saturn 30.6450 30.6448 30.6358 -0.8895 -32.2358 -33.1253 Neptune 182.0906 182.0913 182.0795 2.4104 -42.4343 -40.0239 julian date: 2294341 calendar_date (1569, 7, 26, 0, 0, 0) body ephem vsop87c swisseph diff1-2 diff2-3 diff1-3 Mercury 159.0758 159.0753 159.0686 -1.9116 -23.8803 -25.7919 Jupiter 273.5696 273.5723 273.5738 9.5099 5.3463 14.8562 Uranus 266.0435 266.0449 266.0466 4.8892 6.0567 10.9460 Mars 87.9991 88.0019 87.9939 9.9529 -28.8656 -18.9127 Earth 132.0953 132.0938 132.0879 -5.6827 -21.1337 -26.8164 Venus 124.1023 124.0967 124.0973 -20.2555 2.2533 -18.0022 Saturn 185.7830 185.7847 185.7794 5.9762 -18.9236 -12.9475 Neptune 80.6680 80.6690 80.6667 3.6657 -8.1534 -4.4877
E infine una delle possibili statistiche dopo mille estrazioni casuali:
mean(stdev) ephem-vsop87c -1672.3936( 231441.6349) mean(stdev) vsop87c-swisseph -5.0075( 84.1484) mean(stdev) ephem-swisseph -1677.4011( 231440.8876)
Per quanto ci riguarda, è interessante l'accuratezza relativa del metodo vsop87c rispetto al metodo swisseph.
La libreria pyephem fornisce risultati un po' differenti, sia pure contenuti (per i secoli più vicini al nostro tempo). D'altronde tutti i metodi forniscono un'accuratezza a priori che è relativa a intervalli di date ben definite. Quindi non siamo in alcun modo autorizzati a ritenere un metodo più o meno valido dell'altro, tanto più che c'è, nella rappresentazione delle posizioni planetarie, da considerare il sistema di riferimento e l'apparenza della posizione rispetto alla geometria pura e semplice. Per l'astronomo che deve puntare un telescopio è importante sapere dove trovare il pianeta, la cui posizione apparente risente del tempo di percorrenza della luce nello spazio e di vari fattori modificanti, relativistici e di aberrazione luminosa. L'astrologo normalmente non guarda il cielo ma i suoi grafici astrologici, per cui è interessato a collocare le longitudini dei pianeti dove si presume che le leggi del moto li portino fisicamente. Lo scarto medio di soli 5 arcsecondi con elevata precisione tra le longitudini calcolate con la nostra libreria VSOP87C rispetto alle swiss ephemerides è incoraggiante per le finalità che ci siamo proposti. Rimane il problema plutone, che affronteremo in un post successivo
No comments:
Post a Comment