线性适合行星位置

时间:2010-01-14 16:12:30

标签: javascript python

2048/5/28与内部5个行星发生惊人的对齐 具有日心经度(以度为单位):   248.229,66.631,246.967,249.605,67.684。

行星距离线最多0.875度(通过Sol) 坡度67.823度。在这种情况下,寻求的方法(PA)将给出:    PA(248.229,66.631,246.967,249.605,67.684)=(67.823,0.875)

我尝试过两种简单的算法,但都失败了:    2003/9/9:340.256,180.320,346.156,342.316,150.285

一种方法给出斜率= 127.867,偏差= 51.019,另一种方法得到271.867,85.251。 我认为正确的方法会给出s = 163.466,d = 7.515。

主要问题是Sol的两侧的行星可以(几乎)在同一条线上。

Python或javascript赞赏。 我知道如何编辑!或者不是。

def score3(wList):
  wSize = len(wList)
  #print wList

  first = wList[0]
  d1 = first - 90.0
  if d1 < 0.0:    d1 += 360.0
  d2 = first + 90.0
  if d2 > 360.0:  d1 -= 360.0
  if d1 > d2:   d1,d2 = d2,d1

  sum = 0.0
  for wx in range(0,wSize):
    curr = wList[wx]
    if (curr > d1) and (curr < d2):
      new = curr
    else:
      new = (curr + 180.0) % 360.0
      wList[wx] = new
    sum += new
    #print '%7.3f --> %7.3f' % (curr, new)
  avg = sum / wSize
  #print avg, wList

  score = 0.0
  for wx in range(0,wSize):
    curr = wList[wx]
    diff = curr - avg
    if diff < 0:   diff = - diff
    score += diff
  score /= wSize

  return avg, score

1 个答案:

答案 0 :(得分:0)

愚蠢因为污垢方法因本来应该是显而易见的原因而无效:您的数据可能是任何选择要映射的半平面的病态。我将推荐一个least squares approach,但你确实需要处理径向歧义。

这意味着您希望最小化的功能是:

\sum (forceAngleIntoQuandrantI(a_i - A))^2

或类似的东西。也就是说,行星永远不会超出拟议线的90度。

现在,如果您使用我最初展示的强制例程(您仍然可以在此答案的编辑历史记录中找到),则问题不再是分析性的,您将不得不使用迭代方法(请参阅{{ 3}}一个简单的方法)。或者你可以注意到sin ^ 2(theta)在象限I,IV中单调递增,并且关于+ - 90度线对称并且最小化

\sum sin^4(a_i - A) 

不使用MathWorld链接中描述的分析方法进行裁剪(如果您愿意,可以使用Bisection Method。)