【发布时间】:2011-07-08 12:52:17
【问题描述】:
如果我有一组轴承,范围从 1 到 360,我怎样才能找到平均值?通常要找到平均值,会将它们全部加起来并除以项目数。这里的问题是,在 [1, 359], 2 个轴承的情况下这样做会导致 180,实际上应该是 360。有什么想法吗?
【问题讨论】:
标签: math geospatial average bearing
如果我有一组轴承,范围从 1 到 360,我怎样才能找到平均值?通常要找到平均值,会将它们全部加起来并除以项目数。这里的问题是,在 [1, 359], 2 个轴承的情况下这样做会导致 180,实际上应该是 360。有什么想法吗?
【问题讨论】:
标签: math geospatial average bearing
将角度表示为 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)))
注意控制分母接近零时可能发生的溢出。
【讨论】:
从您的问题中不清楚您试图将“平均”定义为什么......对于圆圈上的方向,没有明确的平均概念。
一种解释是值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
【讨论】:
所以你想要的是两个轴承的中间 - 如果你有 {90, 270} 会发生什么?期望的答案是 0 还是 180?这是要考虑的事情.. 还有三个轴承的中间是什么?
你可以做的一件事是:
在我的脑海中,我不认为这会是公平的,但它可能会偏向一个方向(即可能会优先考虑你集合中后面的值)。
【讨论】: