【问题标题】: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。有什么想法吗?

【问题讨论】:

    标签: math geospatial average bearing


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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 2021-04-08
      • 2020-02-04
      • 1970-01-01
      • 2016-10-20
      • 2023-03-06
      • 2019-09-24
      • 2021-09-11
      相关资源
      最近更新 更多