2010-01-14 3 views
0

Удивительное выравнивание происходит 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 оценили. Yay Я понял, как отредактировать! Или нет.

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

Это может быть домашнее задание? – Bobby

+0

Математические вопросы должны идти в mathoverflow.net. – kennytm

+0

Опубликовать то, что вы пробовали, тогда вы можете получить критические замечания по методу (-ам) – KevinDTimm

ответ

0

Тупой как метод грязи не работает по причинам, которые должны были очевидны: ваши данные могут быть патологическими при любом выборе полуплоскости для сопоставления. Я порекомендую least squares approach, но вам нужно иметь дело с радиальной двусмысленностью.

Это означает функцию, которую вы ищете, чтобы минимизировать это:

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

или чего-то подобного. То есть, планета никогда не может лежать более чем на 90 градусов от предлагаемой линии.

Теперь, если вы используете подпрограмму форсирования, как я показал изначально (вы все еще можете найти, что в истории изменений для этого ответа) проблема уже не аналитическая, и вам придется использовать итеративный подход (см. Bisection Method для простого подхода). Или вы можете заметить, что грех^2 (тета) монотонно возрастает в квадранте I, IV и симметричны относительно + - 90 градусов линий и минимизировать

\sum sin^4(a_i - A) 

без отсечения с использованием аналитических методов, описанных в ссылке MathWorld (или look at wikipdia если хотите).

Смежные вопросы