gpt4 book ai didi

javascript - 随机化正态分布数字的偏差(javascript)

转载 作者:搜寻专家 更新时间:2023-11-01 04:10:00 25 4
gpt4 key购买 nike

我在生成正态分布随机数时遇到问题 (mu=0 sigma=1)使用 JavaScript。

我已经尝试过 Box-Muller 的方法和 ziggurat,但生成的数字系列的平均值为 0.0015 或 -0.0018 — 离零很远!!超过 500,000 个随机生成的数字,这是一个大问题。它应该接近于零,例如 0.000000000001。

我无法确定这是方法问题,还是 JavaScript 内置的 Math.random() 生成的数字分布不完全均匀。

有没有人发现类似的问题?

在这里你可以找到金字塔功能:

http://www.filosophy.org/post/35/normaldistributed_random_values_in_javascript_using_the_ziggurat_algorithm/

下面是 Box-Muller 的代码:

function rnd_bmt() {
var x = 0, y = 0, rds, c;

// Get two random numbers from -1 to 1.
// If the radius is zero or greater than 1, throw them out and pick two
// new ones. Rejection sampling throws away about 20% of the pairs.
do {
x = Math.random()*2-1;
y = Math.random()*2-1;
rds = x*x + y*y;
}
while (rds === 0 || rds > 1)

// This magic is the Box-Muller Transform
c = Math.sqrt(-2*Math.log(rds)/rds);

// It always creates a pair of numbers. I'll return them in an array.
// This function is quite efficient so don't be afraid to throw one away
// if you don't need both.
return [x*c, y*c];
}

最佳答案

如果生成n 个独立正态随机变量,standard deviation of the mean将是 sigma/sqrt(n)

在您的情况下,n = 500000sigma = 1,因此平均值的标准误差约为 1/707 = 0.0014。给定 0 均值的 95% 置信区间大约是这个值的两倍或 (-0.0028, 0.0028)。您的样本均值恰好在此范围内。

您对获得 0.000000000001 (1e-12) 的期望没有数学依据。要达到该精度范围内,您需要生成大约 10^24 个样本。每秒 10,000 个样本仍然需要 3 千万亿年才能完成……这正是为什么尽可能避免通过模拟进行计算的原因。

另一方面,您的算法似乎确实实现正确:)

关于javascript - 随机化正态分布数字的偏差(javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15279271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com