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
答案 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。)