El Saros es el período de tiempo para el mes dracónico ( = 27,212220815 días), mes sinódico ( = 29,530588861 días) y mes anómalo ( = 27,554549886 días) para que coincida aproximadamente. Más específicamente, establece que
Considere un caso más simple, en el que queremos obtener aproximaciones enteras para solo 2 períodos. Tome el mes sinódico y el año tropical ( = 365,24219 días). Por lo tanto,
Sin embargo, no veo una buena manera de extender este método por 3 períodos o más.
Puede probar el algoritmo de reducción de base de celosía de Lenstra–Lenstra–Lovász (LLL) para calcular un vector corto en una celosía. Yo uso Pari GP (p. 382, sección 3.10.62 qflll) para el cálculo.
Definimos una red con una base formada por las columnas de la Matriz
es de pequeña longitud, si y es pequeño y también son pequeños. En este caso
Con Pari/GP en línea obtengo el siguiente resultado
\p20
Td= 27.212220815;
Ts = 29.530588861;
Ta = 27.554549886;
m=1000
M=[1/m,0,0;0,1/m,0;0,0,1/m;Td,Ts,0;Td,0,Ta]
s=qflll(M)
[s[,1],[s[1,1]*Td+s[2,1]*Ts, s[1,1]*Td+s[3,1]*Ta, s[2,1]*Ts-s[3,1]*Ta]]
%2 = [[242, -223, -239]~, [0.036121227000000000000, -0.17998552400000000000, 0.21610675100000000000]]
Los coeficientes son , las diferencias son .
Agregué la duración del mes tropical ( ) y el mes sideral ( ), de Wiki y obtuve, para m=100000
? \p20
Td= 27.212220815;
Ts = 29.530588861;
Ta = 27.554549886;
Tt=27.321582252
Ti=27.321661554
m=100000
M=[1/m,0,0,0,0;0,1/m,0,0,0;0,0,1/m,0,0;0,0,0,1/m,0;0,0,0,0,1/m;Td,Ts,0,0,0;Td,0,Ta,0,0;Td,0,0,Tt,0;Td,0,0,0,Ti]
s=qflll(M)
[s[,1],[s[1,1]*Td+s[2,1]*Ts, s[1,1]*Td+s[3,1]*Ta, s[1,1]*Td+s[4,1]*Tt, s[1,1]*Td+s[5,1]*Ti]]
%27 = [[4993, -4601, -4931, -4973, -4973]~, [0.37917983400000000000, -0.86695857100000000000, 0.38999009900000000000, -0.0043787470000000000000]]
sqrt(2)
o pi
, en el data
cuadro.Invertir el problema, con etc. Entonces estamos buscando números enteros que satisfacen
Esto se puede hacer mediante algún tipo de algoritmo euclidiano, similar a cómo se relaciona con él el cálculo de la fracción continua. En el campo de las motivaciones también se encuentra el algoritmo L3.
Iterar
Como medida de error, use el residuo de la tarea de minimización, o estrechamente relacionado, una medida de cuán paralelo y son.
En el siguiente script de python se realizan estas ideas. Se imprime un informe para el caso de que el residual mejore sustancialmente.
T = [ 27.212220815, 29.530588861, 27.554549886 ]
def largest(F):
k0=0; k1=1
if F[0]<F[1]: k0=1; k1=0
for k in range(2,len(F)):
if F[k]>F[k0]: k1=k0; k0=k; continue
if F[k]>F[k1]: k1=k
return k0,k1
def defect(a):
n2_F=n2_a=0
s_Fa=0
for ak, Tk in zip(a,T): n2_F+=1/Tk**2; n2_a+=ak**2; s_Fa+=ak/Tk
delta = s_Fa/n2_a
return (sum((1/Tk-delta*ak)**2 for ak, Tk in zip(a,T))/n2_F)**0.5
F = [ 1/Ta for Ta in T ]
tol=1e-1
max_F = max(F)
M = np.eye(len(F), dtype=int)
while True:
k0,k1 = largest(F)
err = defect(M[k0])
if err < tol:
tol=0.2*err
print(" a: ",list(M[k0]))
print("a*T: ",[a*Ta for a,Ta in zip(M[k0],T)])
print(" ^F: ",[Fk/F[k0] for Fk in F])
print(f"angle (deg): {np.rad2deg(np.arcsin(err)):.5g}°\n")
if err < 5e-10: break
q = int(round(F[k0]/F[k1]))
F[k0] -= q*F[k1]
M[k1] += q*M[k0]
if F[k0]<0: F[k0]=-F[k0]; M[k0]=-M[k0]
Esto da el registro
a: [1, 1, 1]
a*T: [27.212220815, 29.530588861, 27.554549886]
^F: [0.013482132197497906, 1.0, 0.07171370910340992]
angle (deg): 2.035°
a: [15, 14, 15]
a*T: [408.18331222499995, 413.42824405399995, 413.31824829]
^F: [0.18799937091605323, 0.055664774527038254, 1.0]
angle (deg): 0.34535°
a: [76, 70, 75]
a*T: [2068.12878194, 2067.14122027, 2066.59124145]
^F: [1.0, 0.29609021698213056, 0.31916673511916593]
angle (deg): 0.018052°
a: [242, 223, 239]
a*T: [6585.35743723, 6585.321316003, 6585.537422754]
^F: [0.14353663918949092, 1.0, 0.0779374555912061]
angle (deg): 0.00082299°
a: [3783, 3486, 3736]
a*T: [102943.831343145, 102943.63276944599, 102943.798374096]
^F: [0.15830991529461017, 0.06102937657324801, 1.0]
angle (deg): 4.7152e-05°
a: [20928, 19285, 20668]
a*T: [569497.35721632, 569497.406184385, 569497.437043848]
^F: [1.0, 0.3855057117532664, 0.3167237386175655]
angle (deg): 3.3867e-06°
a: [66325, 61118, 65501]
a*T: [1804850.545554875, 1804850.530006598, 1804850.572082886]
^F: [0.49417557377594934, 0.21716709153510322, 1.0]
angle (deg): 5.4577e-07°
a: [285986, 263534, 282433]
a*T: [7782314.18199859, 7782314.204894774, 7782314.187952638]
^F: [0.2755545984556782, 1.0, 0.05364004447339751]
angle (deg): 6.9819e-08°
a: [1255666, 1157087, 1240066]
a*T: [34169460.46188779, 34169460.4734079, 34169460.458932474]
^F: [1.0, 0.3709551370058305, 0.19466212784696205]
angle (deg): 1.0192e-08°
donde efectivamente el resultado de referencia está en el 4º registro.
Para periodos
Dividir en casos más simples: y .
Resulta que
La continuación apropiada se puede demostrar mejor con un ejemplo.
Considere el caso provisto donde y .
Encontramos aproximaciones apropiadas para y usando el método de fracción continua descrito en la pregunta, obteniendo
Ahora podemos multiplicar apropiadamente para hacer el denominador en igual al numerador en como sigue:
Ahora podemos igualar
Por eso
Por lo tanto, .
Obviamente, estos números son más grandes que y pero eso es porque elegí truncar la fracción continua más allá de cierto punto. Si lo desea, también puede tomar los valores encontrados para y encontrar aproximaciones enteras más pequeñas para .
Para periodos
El argumento anterior se puede generalizar fácilmente de la siguiente manera:
Considerar .
simplemente toma , conseguir
Luego multiplica cada una de las fracciones apropiadamente para que coincidan los numeradores y denominadores necesarios. Después de eso, encuentra el valor de igualando los numeradores. A continuación, considere la relación , multiplica para que todo sea un número entero y listo, ¡tu respuesta está lista!
PM 2 Anillo