如果我有一套1-360的轴承,我怎样才能找到平均值?通常要找到平均值,将它们全部加起来并除以项目数。这里的问题是,在[1,359],2个轴承的情况下这样做会导致180,实际上应该是360.任何想法?
答案 0 :(得分:7)
将角度表示为Norm = 1的向量并对总和求平均值。
x1 = {cos(a),sin(a)}
x2 = {cos(b),sin(b)}
(x1+x2)/2 = {(cos(a)+cos(b))/2,(sin(a)+sin(b))/2}
表示平均值的角度为
atan2((sin(a)+sin(b)) /(cos(a)+cos(b)))
当分母接近于零时,请注意控制可能的溢出。
答案 1 :(得分:1)
从你的问题中不清楚你在试图定义“平均值”是什么......对于圆圈上的方向,没有明确的平均概念。
一种解释是值x
,它是最接近所提供值的集合,在最小二乘意义上,两个轴承之间的距离定义为它们之间的最小角度。以下是计算此平均值的代码:
In[2]:= CircDist[a_, b_] := 180 - Mod[180 + a - b, 360]
In[6]:= Average[bearings_] :=
x /. NMinimize[
Sum[CircDist[x, bearings[[i]]]^2, {i, 1, Length[bearings]}],
x][[2]]
In[10]:= Average[{1, 359}]
Out[10]= -3.61294*10^-15
答案 2 :(得分:0)
所以你想要的是两个轴承的中间 - 如果你有{90,270}会发生什么?期望的答案是0还是180?这是需要考虑的事情..还有三个轴承的中间是什么?
你可以做的一件事是:
在我的头脑中,我不认为这是公平的,但它可能会在一个方向上偏向它(即可能偏好你集合中的后期值)。