小学数学题——关于角度的平均,考考大家
虎哥2014/10/31数学 IP:四川
对一个角度进行10次测量,然后取平均数。现在问题来了,假设角度接近360度,测量误差随机但不超过90度,请讨论怎样来求这个平均数。

提示:有可能其中有1个,或者几个数跨越0度线,平均后就差得远了。例如,其中如果有5个10度左右,有5个350度左右,平均的结果是180度。

[修改于 9年3个月前 - 2015/11/03 05:20:20]

来自:数理化 / 数学
27
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
wangrui555
10年3个月前 IP:上海
728663
我忽然好想@刘武青,他最喜欢通过这种测量得出一些奇葩的定律。哈哈
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
wangrui555
10年3个月前 IP:上海
728664
5个10度左右的,应当记作370度左右的,来与5个350度左右的平均。
不过我还是想@刘武青,他有可能会借此提出关于角度与轴对称的以太理论,哈哈
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
20!Dopaminor
10年3个月前 IP:广东
728680
5个不是10度左右,是370度左右...    自动平均的程序写糊了吧
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
10年3个月前 IP:广东
728722
所有的角度,均落在圆上的一个180度扇形内,另一边的180度扇形为空。只需要找到角度a,令a位于空的180度扇形中,便可将圆周从a处展开。

if(任一项角度>a)
then 这一项角度-=360

然后
平均角度 = 求和(每一项角度)/ 项数
if(平均角度<0) then 平均角度+=360
输出 平均角度

例如,输入角度为320 350 10 20共4项。令a等于180度,从180度处展开,
将大于a的每一项减去360,得到: -40 -10 10 20. 求和再除以项数,得到平均角度为-5度。因为-5<0,加360,得到355度,即为所求平均角度。

寻找角度a很简单,将所有角度排序,并检查排序后每相邻两项的差即可。若前后两项之差大于180度,即可将较小一项设为角度a。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
沉默羔羊
10年3个月前 IP:广东
728741
我靠,楼上的,这不是小学内容了吧?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年3个月前 IP:四川
728786
kc人民的老朋友马主任说过,平均是小学的知识,但恰恰没讲角度的平均。正规的做法是求单位矢量,然后进行矢量的所谓平均,再反求角度,这是大学工程数学的知识了。

我想说,但是,在计算机上算三角函数有较大的资源开销,尤其是平均前数据速率非常高,需要厉害的硬件,这就制约了矢量天分的价格。所以咱们得用小学知识来解决这个问题。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
10年3个月前 IP:北京
728793
for 测量=1 to 10
if(角度《180)then 角度=角度+360;
end if;
角度=角度累加/10.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
10年3个月前 IP:北京
728794
话说我在公司里用数学工具算S参数时经常碰到这类问题。一般可以调用matlab函数“unwrap”来解决角度折叠问题。自己算的话,就是判断是不是角度跨越360度。每跨越一次就增或减360度。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
hambaby
10年3个月前 IP:北京
729084
前几天和几位大佬级HAM讨论关于天线旋转器的方位角问题。

西域本地,从大圆图上看,对准北美、欧洲等字头多的方向,大抵为0度附近,偏差不超过+/-30度,则旋转器的机械死点(调头点)应该设计为180度(正南方向),在0度附近,稍微晃动几度,则字头俯拾皆是……

楼主的命题,10度的测量结果,计为+10度,350度的测量结果,计为-10度,则不会得出谬误的结论。
引用
评论
1
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zxyso4
10年3个月前 IP:上海
729194
非要按小学做法的话那是不是就是在0度附近按锐角取值,按虎哥的例子10度算+10度,350度算-10度,平均了,360度减去就好了啊。意思大致相当于一个0度线附近摆动的射线的夹角取平均。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年3个月前 修改于 10年3个月前 IP:四川
729197
如果不按小学的做,就是要写出算法。

设角度为δi,i=1,2,3……

首先判断|δi-δ(i+1)|是否大于180度。

如果大于,则比较δi,δ(i+1)的大小

    然后把大的那个取出来,减360(或者取小的,加360),赋值回去

如果小于,则不做处理。

然后加起来,平均。

结果如果有负号,加360.
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
gi0001tw
10年3个月前 IP:台湾
729203
要求平均值的話,量出來是5度要以365度計算,是10度要以370度計算。
是這樣的嗎?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
10年3个月前 IP:北京
729788
引用 novakon:
所有的角度,均落在圆上的一个180度扇形内,另一边的180度扇形为空。只需要找到角度a,令a位于空的180度扇形中,便可将圆周从a处展开。

if(任一项角度>a)
then 这一项角度-=360

然后
平均角度 = 求和(每...
不能这样吧我认为应该线取10个数据然后看是350多还是10多确定这个角是在360度那边
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
1176764177
10年3个月前 IP:北京
729789
引用 hambaby:
前几天和几位大佬级HAM讨论关于天线旋转器的方位角问题。

西域本地,从大圆图上看,对准北美、欧洲等字头多的方向,大抵为0度附近,偏差不超过+/-30度,则旋转器的机械死点(调头点)应该设计为180度(正南方向),在0度附近,稍微晃动几度,...
但是鬼知道实值是多少啊测量只能知道我测到的是多少实际值不知道啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
novakon
10年2个月前 IP:广东
730807
我提一个意见。



应该将具体应用情景展现给大家,这样会得到更多的建设性的建议。


例如,如果输入角度基本不会分布在+180度附近,可直接从180度处展开(对大于180度的角度做-360处理),并直接求平均,可免去排队比较,处理速度提升很多倍。


又例如,如果输入的多个角度总是分布在较小的一个扇形内,则可直接取其中一个角度,如果该角度更靠近0度,则直接从180度处展开(对大于180度的角度做-360处理);如果该角度更靠近180度,则可直接从0度处展开(不需处理)。


又例如,不使用0到360的角度系统,而使用0到65536(或者别的某个方便的整数)的角度系统,整数运算加速。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年2个月前 IP:四川
730810
数学嘛,就是要抽象,解决普适问题。
这个已经搞进FPGA了,实践证明可行。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年0个月前 IP:四川
742798
想起一件事情,我在11楼写出的算法,经过FPGA实际验证,有重大问题。

而乃们——居然都不说话。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年0个月前 IP:四川
742799
什么样的重大问题呢?那就是只有当正负值交替出现的时候,结果才正确。

如果δ1,δ2满足处理条件,而δi,i=3,4,5…都是350多度,则平均的结果将为330度左右,显然是不正确的。

算法修正如下:

设角度为δi,i=1,2,3……

首先,依次判断|δi-δ(i+1)|,i=1,2,3……是否大于180度。

只要有一次得到大于180度的结果,则认为整组数据需要处理(此时原始角度数据一定远离180度)。

依次判断每个角度是否满足

δi>180

对所有大于180度的角度,减360度。

然后加起来,平均。

结果如果有负号,加360.

如果整组角度没有任何两个之差大于180度,则不需处理,直接平均。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
立棍
10年0个月前 修改于 10年0个月前 IP:辽宁
743055
既然小学专场。就有我用武之地了。
事先采用两套或多套标注,来表示数据, 比较哪一套距离零最远,就用哪一组来运算。 随后转换成统一标注。



Screenshot_2015-01-26-18-13-28-662.png
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
10年0个月前 IP:四川
743355
18楼的计算过程,经程序验证,是可行的。

但是这个算法不严谨。它只对数据比较集中的情况有效。

当数据不集中时,例如,30度,60度,90度……时,必须增加比较首尾两个数。

事实上,应当进行交叉比对才严谨。

楼上的方法是非常有效的。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
yks
9年10个月前 IP:河南
758959
概念错误。应以0度线为基准。逆时针为正,顺时针为付,再计算平均值才对。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
小卜冒
9年10个月前 IP:北京
759145
5个10度,已经超过一个圆周了。不知道楼主10度是否另有它意‘。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
refinder
9年10个月前 IP:德国
759172
引用 立棍:
既然小学专场。就有我用武之地了。
事先采用两套或多套标注,来表示数据, 比较哪一套距离零最远,就用哪一组来运算。 随后转换成统一标注。
这个算法也不行,只是把0和360的问题转化到了90和270上去了。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
refinder
9年10个月前 IP:德国
759173
你们楼上的算法都不对,无法具体问题具体应对。看我的:
1. 如果有一些数据落在Y轴左侧和右侧,那么分别找出左侧和右侧离中心0度(即笛卡尔坐标系中0,1矢量的方向)最远的角度。记录为theta1和theta2
1.5 如果abs(theta1)+abs(theta2)>180度,不做处理。否则:
2. 比较这两个角度谁离0度更近,记录为delta_min
3. 如果最近的角度在Y轴左侧,所有角度均加上这个abs(delta_min);如果在右侧,所有角度减去delta_min,然后把结果转成0-360的范围。
4. 所有数据做平均。
5. 平均结果根据第三步所做的加减还原结果。

6. 自恋一下,我好聪明
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
kensun
9年9个月前 IP:广东
765866
不错,哈哈,支持啊~~~~
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥作者
9年3个月前 IP:四川
795427
引用 refinder:
你们楼上的算法都不对,无法具体问题具体应对。看我的:
1. 如果有一些数据落在Y轴左侧和右侧,那么分别找出左侧和右侧离中心0度(即笛卡尔坐标系中0,1矢量的方向)最远的角度。记录为theta1和theta2
1.5 如果abs(thet...
不好意思没看懂,请问:
2,比较两个角度谁离0更近,
这句是啥意思。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}