Javascript 行星位置的线性拟合
2048年5月28日,一个惊人的排列发生在五颗行星的内部 具有日心经度(以度为单位): 248.229、66.631、246.967、249.605、67.684 行星与直线(通过太阳系)的夹角最多为0.875度 坡度为67.823度。在这种情况下,所寻求的方法(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 主要问题是太阳系两侧的行星可能(几乎)在同一条线上 喜欢Python或javascript。 耶,我知道怎么编辑了!或者不是Javascript 行星位置的线性拟合,javascript,python,Javascript,Python,2048年5月28日,一个惊人的排列发生在五颗行星的内部 具有日心经度(以度为单位): 248.229、66.631、246.967、249.605、67.684 行星与直线(通过太阳系)的夹角最多为0.875度 坡度为67.823度。在这种情况下,所寻求的方法(PA)将给出: 帕(248.229,66.631,246.967,249.605,67.684)=(67.823,0.875) 我尝试了两种简单的算法,但都失败了: 2003/9/9:340.256、180.320、346.156、34
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
def评分3(wList):
wSize=len(wList)
#打印列表
first=wList[0]
d1=第一个-90.0
如果d1<0.0:d1+=360.0
d2=第一个+90.0
如果d2>360.0:d1-=360.0
如果d1>d2:d1,d2=d2,d1
总和=0.0
对于范围(0,wSize)内的wx:
curr=wList[wx]
如果(电流>d1)和(电流%7.3f%”(当前,新)
平均值=总和/wSize
#打印平均值,wList
分数=0.0
对于范围(0,wSize)内的wx:
curr=wList[wx]
差异=当前-平均值
如果差异<0:diff=-diff
分数+=差异
分数/=wSize
返回平均值,分数
Dumb as dirt方法不起作用的原因本应是显而易见的:您的数据可能是病态的,可以选择映射到任何半平面。我会推荐一个,但你们需要处理径向模糊性
这意味着您希望最小化的功能是:
\sum (forceAngleIntoQuandrantI(a_i - A))^2
或者类似的东西。也就是说,这颗行星永远不可能与拟议的直线呈90度以上的夹角
现在,如果您使用我最初展示的强制例程(您仍然可以在这个答案的编辑历史记录中找到),那么问题不再是分析性的,您将不得不使用迭代方法(有关简单方法,请参阅)。或者你可以注意到sin^2(θ)在象限I,IV中单调增加,并且关于+-90度线对称,并且最小化
\sum sin^4(a_i - A)
不必使用MathWorld链接中描述的分析方法(或者如果您愿意的话)进行裁剪。数学问题应转到mathoverflow.net。发布您尝试过的内容,然后您可以获得对该方法的评论也许你应该展示你失败的算法,然后有人可以指出问题所在。嗯……如果你能够手工计算期望值,为什么你不能在代码中使用相同的方法呢?哈哈,我已经40年没有交作业了。代码对于box太长。我试图通过选择一个元素并将其添加到列表中,将第一个选项的-90和+90范围内的任何内容分开。然后,我在列表中未列出的所有内容中添加180,将这两个组放在一起。答案是他们的平均水平,不起作用。