Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 行星位置的线性拟合_Javascript_Python - Fatal编程技术网

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

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。 耶,我知道怎么编辑了!或者不是

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,将这两个组放在一起。答案是他们的平均水平,不起作用。