1

我在 Excel 中有一个小范围传播的要求;即便士,货币舍入误差在我的俱乐部成员中公平。

当我向会员扣款时出现错误;例如,30 英镑在 21 名成员之间分配为 1.428571 英镑……需要从每个成员中扣除 1.43 英镑,总计 30.03 英镑,才能达到 30 英镑的目标。

继续上面的例子,我想采取的方法是从每个成员那里扣除 1.42 英镑,总计 29.82 英镑,然后使用误差扩散技术从 21 位成员中的 18 位中随机抽取额外的 0.18 英镑。 .

这立即让我想到了 Reservoir Sampling,我使用了这里的信息:随机选择,在这里构建测试 Excel 电子表格:https ://www.dropbox.com/s/snbkldt6e8qkcco/ErrorSpreading.xls ,在 Dropbox 上,为你小伙伴们一起玩...

我遇到的问题是,该电子表格的每一行都独立地计算了其他每一行的误差分布,这导致一些成员的贡献超过了他们应得的额外便士份额。

我正在寻找的是对 Resevoir Sampling 技术的修改,或者我不知道的另一种平衡/二维误差传播方法,这将最大限度地减少跨许多“误差传播”行的成员之间的总体误差。

我认为这是具有大量其他用途的具有挑战性的问题之一,所以我希望各位天才有一些好主意!

感谢您分享的任何见解:)

将要

4

1 回答 1

0

我找到了解决方案。不是很优雅,通过。你必须使用两个矩阵。在第一个你得到完全随机数,用 =RANDOM() 选择,在第二个你选择 n 更大的值说在 F30 你有第一个

=随机()

细胞。(我已经用你的床单做了实验。)

只需在 A 列中复制 n 列(在您的工作表 8 中))在单元格 F52 中输入:

=IF(等级(F30,$F30:$Z30)<=$A52, 1, 0)

到目前为止,如果您向左和向下拖动公式,您的工作表中的情况相同(只是不太优雅且效率较低)。

但是从随机数的第二行开始,您可以补偿所支付的一分钱。

在单元格 F31 中,您输入:

=随机()-总和(F$52:F52)*0.5

(注意 $,每个随机数都应该根据已经花费的便士进行修正。)如果 $ 没问题,您应该可以左右拖动公式。您还可以将 0.5 参数化并尝试其他值。使用 0,5 我有一个介于 1 和 2 之间的错误因子(相当于您的单元格 AB24)

于 2013-06-08T21:34:54.250 回答