Метод наименьших квадратов в системе уравнений с optimise.leastsq() (Python)

У меня есть две функции и набор данных. Обе функции имеют одни и те же данные x и одни и те же параметры. Я хочу получить параметры по методу наименьших квадратов, который наилучшим образом соответствует моим данным.

Параметры: ex,ey,ez.

Данные X: RA, DE (например, 3000 точек).

Данные Y: dRA, dDE.

Я пробовал это, но получил неправильное решение:

def residuals(p, dRA, dDE, RA, DEC):
    ex,ey,ez = p
    f1 = dRA-(ex*sin(DEC)*cos(RA)+ey*sin(DEC)*sin(RA)-ez*cos(DEC))
    f2 = dDE-(-ex*sin(RA)+ey*cos(RA))
    err = np.concatenate((f1,f2))
    return err

from scipy.optimize import leastsq
p0 = [0, 0., 0.]
plsq_coord = leastsq(residuals, p0, args=(dRA, dDE, RA, DE))
print plsq_coord[0] 

Любая помощь будет очень кстати


person user1404919    schedule 19.05.2012    source источник


Ответы (1)


Как показано в этом тестовом коде

import numpy as np, numpy.random,scipy.optimize
def residuals(p, dRA, dDE, RA, DEC):
    ex,ey,ez = p
    f1 = dRA-(ex*np.sin(DEC)*np.cos(RA)+ey*np.sin(DEC)*np.sin(RA)-ez*np.cos(DEC))
    f2 = dDE-(-ex*np.sin(RA)+ey*np.cos(RA))
    err = np.concatenate((f1,f2))
    return err    
ex, ey, ez = 0.2, 0.3, 0.4
N = 100
err = 1e-3
ra, dec = np.random.uniform(0,1,N), np.random.uniform(0,.5,N)
dra = (ex*np.sin(dec)*np.cos(ra)+ey*np.sin(dec)*np.sin(ra)-ez*np.cos(dec))+np.random.normal(size=N)*err
ddec = (-ex*np.sin(ra)+ey*np.cos(ra))+np.random.normal(size=N)*err
print scipy.optimize.leastsq(residuals, p0, args=(dra, ddec, ra, dec))

ваш код должен работать нормально, если только ваша функция не написана неправильно (например, ваши ra, dec указаны в градусах, а не в радианах) или у вас есть некоторые неверные точки данных в наборе данных, которые подходят для chisq.

person sega_sai    schedule 19.05.2012
comment
Большое спасибо. Поэтому я думаю, что лучшее, что я мог сделать, это оценить ошибки. Любая идея, как это сделать? - person user1404919; 20.05.2012