如何找到一组轴承的平均值[重复]

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 个)作为另一个轴承,并重复,直到所有轴承都处于“中间”状态。

在我的脑海中,我不认为这会是公平的,但它可能会偏向一个方向(即可能会优先考虑你集合中后面的值)。

【讨论】:

以上是关于如何找到一组轴承的平均值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用熊猫对行进行分组并找到平均值[重复]

从命令行获取一组数字的平均值的最快方法是啥?

如何计算另一组的平均值?

如何根据一组 k 最近邻计算平均值?

从大小为 10 的数组中生成 1000 个随机数并找到数字的平均值并将它们打印在屏幕上 [重复]

如何使用 while 循环填充矩阵(按块)?