含噪声数据的近似最大公约数(GCD)求解方法咨询
带测量误差的近似GCD计算方法
针对带有采样误差的测量值(本应为某GCD的倍数,且X为整数、GCD可非整数),可通过以下几种方法计算近似GCD:
差值聚类与峰值检测法
真实值是GCD的倍数,因此任意两个测量值的差值理论上也应为该GCD的倍数。先计算所有两两测量值的绝对差值,对这些差值做直方图或核密度估计,分布中的峰值会对应真实GCD及其倍数,取最小的那个峰值即为近似GCD。该方法支持非整数GCD,只需将差值作为连续数值处理即可。整数X约束下的分式拟合法
已知X为整数,测量值满足 ( y_i \approx k \times x_i )(k为目标GCD),因此任意两个测量值的比值 ( y_i/y_j \approx x_i/x_j ),即接近两个整数的比值。遍历所有两两测量值的比值,找到最接近整数比的组合,通过 ( k \approx y_i/x_i \approx y_j/x_j ) 计算k的候选值,最终取所有候选值的中位数或加权平均值作为近似GCD。迭代式整数拟合优化法
将问题转化为最小化测量值与 ( k \times x_i ) 的误差(x_i为整数):- 初始化k的估计值(比如所有测量值的粗略近似GCD,或差值的中位数);
- 对每个 ( y_i ),计算最接近 ( y_i/k ) 的整数 ( x_i );
- 用新的x_i重新计算k,比如取 ( k = \frac{1}{n}\sum\frac{y_i}{x_i} );
- 重复步骤2-3,直到k的变化量小于设定阈值,此时的k即为近似GCD。
带误差容忍的连续欧几里得变种算法
对传统欧几里得算法做适配,加入误差容忍机制:- 取两个测量值y1、y2,计算m为最接近 ( y1/y2 ) 的整数,得到余数 ( r = |y1 - m \times y2| );
- 将y2和r作为新的一对数值重复步骤1;
- 当余数r小于设定的误差阈值时,当前的y2即为近似GCD。需注意设置合理的阈值,避免得到无意义的极小值。
内容的提问来源于stack exchange,提问作者Justin Olbrantz
相关产品推荐
相关产品推荐

