如何找到一组轴承的平均值[重复]
Posted
技术标签:
【中文标题】如何找到一组轴承的平均值[重复]【英文标题】:How to find the average of a set of bearings [duplicate] 【发布时间】:2011-07-08 12:52:17 【问题描述】:可能重复:How do you calculate the average of a set of angles?
如果我有一组轴承,范围从 1 到 360,我怎样才能找到平均值?通常要找到平均值,会将它们全部加起来并除以项目数。这里的问题是,在 [1, 359], 2 个轴承的情况下这样做会导致 180,实际上应该是 360。有什么想法吗?
【问题讨论】:
【参考方案1】:将角度表示为 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)))
注意控制分母接近零时可能发生的溢出。
【讨论】:
我不确定这一行是否正确: atan2((sin(a)+sin(b)) /(cos(a)+cos(b))) ,因为 atan2 有两个参数.【参考方案2】:从您的问题中不清楚您试图将“平均”定义为什么......对于圆圈上的方向,没有明确的平均概念。
一种解释是值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
【讨论】:
+1 或顺便说一句,平均值的任何其他定义(谐波、几何、算术等)。这取决于你想如何使用它。【参考方案3】:所以你想要的是两个轴承的中间 - 如果你有 90, 270 会发生什么?期望的答案是 0 还是 180?这是要考虑的事情.. 还有三个轴承的中间是什么?
你可以做的一件事是:
取出您的组中的前两个轴承 计算出两者在任一方向上的差异(即 [1, 359] 将在一个方向给出 2 度,在另一个方向给出 358) 如果您希望所需角度为两者中最尖锐的角度的中间,请将其作为您的差值并添加到该对中的大部分逆时针(即 359) 将此作为新轴承,将下一个(即组中的第 3 个)作为另一个轴承,并重复,直到所有轴承都处于“中间”状态。在我的脑海中,我不认为这会是公平的,但它可能会偏向一个方向(即可能会优先考虑你集合中后面的值)。
【讨论】:
以上是关于如何找到一组轴承的平均值[重复]的主要内容,如果未能解决你的问题,请参考以下文章