首页 >> 大全

java 椭圆拟合_通过轨道数据拟合椭圆

2023-11-05 大全 32 作者:考证青年

我为它绕太阳运行的行星的(x,y,z)坐标生成了一堆数据 . 现在我想通过这些数据拟合椭圆 .

我试图做的:

我基于五个参数创建了一个虚拟椭圆:半长轴和偏心,定义了大小和形状以及三个旋转椭圆的欧拉角 . 由于我的数据并不总是以原点为中心,因此我还需要翻译需要额外三个变量(dx,dy,dz)的椭圆 . 一旦我用这八个变量初始化这个函数,我就得到了这个椭圆上的N个点 . (N =我正在绘制椭圆的数据点的数量)我计算这些虚拟点与实际数据的偏差,然后使用一些最小化方法最小化该偏差,以找到这八个变量的最佳拟合值 .

我的问题在于最后一部分:最小化偏差并找到变量的值 .

为了最大限度地减少偏差,我使用scipy..来尝试近似最佳拟合变量,但它只是做得不够好:

Wp3Qd.png

Here is an image我的最佳配合是什么样的,并且具有非常慷慨准确的初始猜测 . (蓝色=数据,红色=适合)

In short ,我使用这个scipy函数:

= [0.3,0.2,0.1,0.7,3,0.0,-0.1,0.0]

bnds = ((0.2, 0.5), (0.1, 0.3), (0, 2*np.pi), (0, 2*np.pi), (0, 2*np.pi), (-0.5,0.5), (-0.5,0.5), (-0.3,0.3)) # for the

_椭圆拟合法_椭圆轨道模型

= .(, , args=(data,), ='L-BFGS-B', =bnds, tol=1e-8) #

,,,,,dx,dy,dz = ["x"]

要最小化此错误(或偏差)功能:

def (, data):

"""

This the the fit and data and it

"""

= len(data[:,0])

,,,,,dx,dy,dz =

= (,,,,,,dz,dy,dz)

= np.zeros(len(data[:,0]))

= np.zeros(len(data[:,0]))

# each pair of

for j in range(len(data[:,0])):

for i in range(len(data[:,0])):

[i] = np.sqrt((data[j,0]-[i,0])**2 + (data[j,1]-[i,1])**2 + (data[j,2]-[i,2])**2)

[j] = min() # only pick the point to the data point j.

= sum()

(我的代码可能有点凌乱和低效,我是新手)

我可能在编码中犯了一些逻辑错误,但我认为它归结为scipy..函数 . 我不知道它是如何工作的以及对它的期望 . 我还建议在处理这么多变量时尝试马尔可夫链蒙特卡罗 . 我确实看了一下主持人,但现在它有点高于我的头脑 .

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了