您如何计算一组循环数据的平均值?

我想计算一组循环数据的平均值。例如,我可能从罗盘的读取中获得了一些样本。当然,问题在于如何处理环绕。相同的算法可能对表盘有用。

实际的问题更加复杂-统计在“环绕”的球体或代数空间(例如加性群mod n)中意味着什么。答案可能不是唯一的,例如359度和1度的平均值可以是0度或180度,但从统计学上讲0更好。

对我来说,这是一个真正的编程问题,我试图使它看起来不只是一个数学问题。


一只甜甜圈
浏览 1229回答 3
3回答

慕田峪4524236

我看到了问题-例如,如果您有一个45'角和315'角,则“自然”平均值将为180',但您想要的值实际上是0'。我认为Starblue正在发展。只需计算每个角度的(x,y)笛卡尔坐标,然后将这些结果矢量相加即可。最终矢量的角度偏移应该是您所需的结果。x = y = 0foreach angle {    x += cos(angle)    y += sin(angle)}average_angle = atan2(y, x)我现在暂时忽略指南针的航向是从北开始,然后顺时针旋转,而“常规”笛卡尔坐标沿X轴从零开始,然后逆时针旋转。无论如何,数学应该以相同的方式计算。

墨色风雨

对于两个角度的特殊情况:答案((a + b)mod 360)/ 2是错误的。对于角度350和2,最接近的点是356,而不是176。单位向量和trig解可能太昂贵。我从一点点修补中得到的是:diff = ( ( a - b + 180 + 360 ) mod 360 ) - 180angle = (360 + b + ( diff / 2 ) ) mod 3600,180-> 90(对此有两个答案:该方程式采用a的顺时针答案)180,0-> 270(请参见上文)180,1-> 90.51,180-> 90.520、350-> 5350、20-> 5(以下所有示例也可以正确反向)10、20-> 15350,2-> 356359,0-> 359.5180、180-> 180
打开App,查看更多内容
随时随地看视频慕课网APP