def model(THETA, time, kplanets):
modelo = 0.0
if kplanets == 0:
return 0.0
for i in range(kplanets):
As, P, Ac, S, C = THETA[5*i:5*(i+1)]
A = As ** 2 + Ac ** 2
ecc = S ** 2 + C ** 2
w = sp.arccos(C / (ecc ** 0.5)) # longitude of periastron
phase = sp.arccos(Ac / (A ** 0.5))
### test
if S < 0:
w = 2 * sp.pi - sp.arccos(C / (ecc ** 0.5))
if As < 0:
phase = 2 * sp.pi - sp.arccos(Ac / (A ** 0.5))
###
per = sp.exp(P)
freq = 2. * sp.pi / per
M = freq * time + phase
E = sp.array([MarkleyKESolver().getE(m, ecc) for m in M])
f = (sp.arctan(((1. + ecc) ** 0.5 / (1. - ecc) ** 0.5) * sp.tan(E / 2.)) * 2.)
modelo += A * (sp.cos(f + w) + ecc * sp.cos(w))
return modelo
评论列表
文章目录