gpt4 book ai didi

python - 使用 optimize.leastsq() (Python) 在一组方程中进行最小二乘

转载 作者:行者123 更新时间:2023-11-28 18:52:17 27 4
gpt4 key购买 nike

我有两个函数和一组数据。这两个函数具有相同的 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]

非常欢迎任何形式的帮助

最佳答案

如本测试代码代码所示

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 拟合错误。

关于python - 使用 optimize.leastsq() (Python) 在一组方程中进行最小二乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10664199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com