我想计算一组循环数据的平均值。例如,我可能有几个指南针读数的样本。问题当然是如何处理环绕式。同样的算法可能对钟面也很有用。
实际的问题更复杂--在球面上或在一个“环绕”的代数空间中,统计意味着什么,例如,加法群mod n。答案可能不是唯一的,例如,359度和1度的平均值可能是0度或180度,但统计上看0看起来更好。
这对我来说是一个真正的编程问题,我试图让它看起来不仅仅是一个数学问题。
发布于 2009-01-29 14:22:48
从角度计算单位向量,并取其平均值的角度。
发布于 2009-01-29 14:58:05
这个问题在布鲁斯·卡什在http://catless.ncl.ac.uk/Risks/7.44.html#subj4上提到的“球体上的统计”一书中进行了详细的研究,杰弗里·S·沃森,阿肯色大学数学科学讲座笔记,1983年约翰·威利父子公司。
从一组角度测量值ai 0<=i估计平均角度A的好方法
sum_i_from_1_to_N sin(a[i])
a = arctangent ---------------------------
sum_i_from_1_to_N cos(a[i])
starblue给出的方法在计算上是等价的,但他的理由更清晰,可能在编程上更有效,而且在零的情况下也能很好地工作,所以称赞他。
现在对这个主题进行了更详细的on Wikipedia探索,并结合其他用途,如小数部分。
发布于 2009-01-29 14:26:19
我看到了问题--例如,如果你有一个45‘的角度和一个315’的角度,那么“自然”的平均值应该是180',但你想要的值实际上是0‘。
我觉得星蓝说对了。只需计算每个角度的(x,y)笛卡尔坐标,并将得到的向量相加。最终向量的角度偏移量应该是您需要的结果。
x = y = 0
foreach angle {
x += cos(angle)
y += sin(angle)
}
average_angle = atan2(y, x)
我现在忽略了指南针方向从北开始,顺时针方向,而“正常”笛卡尔坐标沿着X轴从零开始,然后逆时针方向。不管怎样,数学应该以同样的方式计算出来。
https://stackoverflow.com/questions/491738
复制相似问题