对于蒙特卡罗模拟,Excel中的RAND()函数有多好?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

我正在Excel中的3个变量中实现蒙特卡罗模拟。我使用了RAND()函数从Weibull分布(带有长尾)进行采样。应用于样本的函数是非线性的,但光滑的(如exp,ln,cos等).。每个样本的结果是通过/失败,总体结果是失败的概率。

我还在MathCad中通过数值积分和MonteCarlo实现了这一点,两次都得到了相同的结果。MathCad使用(我认为)一个MersenneTwister随机数生成器。

我的Excel电子表格的结果总是不一样(总是比较大的)。我已经核对过了,方程是一样的。

Excel使用什么随机数生成器,它有多好?这有可能是我问题的根源吗?我已经假设exp、cos等的Excel实现是可以的。

最后,是否有一种方法可以实现蒙特卡罗,以减轻特定随机数生成器(已知的)不良性质?(我听说过马尔可夫链、随机游走等,但对它们了解不多)

非常感谢。

提问于
用户回答回答于

引用原文:

随机数发生器一直都不够用。使用Excel 2003,微软试图实现威奇曼-希尔生成器,但未能正确实现.。大固定版本出现在Excel 2007中,但是固定做得不对。微软两次未能正确实现构成Wichmann-Hill生成器的十几行代码;这是任何计算机专业本科生都应该能够做到的事情。Excel随机数生成器不满足用于科学目的的随机数生成器的基本要求:

  1. 不知道它是否通过了标准的随机性测试,
  2. 它不知道产生的数字大约是独立的一个中等数量的维度;
  3. 它有一个未知的周期长度;
  4. 这是不可复制的。
用户回答回答于

Excel 2010对于VBA随机数生成器和数据分析工具包中的rng仍然使用了两种完全不同的算法。这两种情况仍然很糟糕,实际上VBA每次使用相同的种子数,因此产生相同的数字。

我对Excel中随机数的最大抱怨是

  • 你不能设置种子,所以数字是不可复制的
  • 每次按Enter/DELETE键时,随机数字都会更新,即使将计算选项设置为手动,保存Excel文件时仍会更新这些随机数

扫码关注云+社区