gpt4 book ai didi

Java 正态分布,均值不同于 0,标准差不同于 1

转载 作者:行者123 更新时间:2023-11-30 04:48:17 27 4
gpt4 key购买 nike

我的教授正在模拟客户到达银行的情况。它表示客户到达时遵循均值 3.5 和标准偏差 1.3 的正态分布。

问题是我很难理解为什么使用这段代码。我相信他提供的代码正在接收一个流、平均值和标准差来生成随机数

代码

public class Random {

private static double second=0;

static double normal(int stream, double mean, double std){
double v1=0, v2=0, y1, y2, x1, x2, w=2;

if (second!=0 ){
return second;
}

while(w>1){
v1=2*RandomGenerator.rand(stream)-1;
v2=2*RandomGenerator.rand(stream)-1;
w=Math.pow(v1,2)+Math.pow(v2,2);
}

y1=v1*Math.pow((-2*Math.log(w))/w, 0.5);
y2=v2*Math.pow((-2*Math.log(w))/w, 0.5);
x1=mean+y1*std;
x2=mean+y2*std;
second=x2;
return x1;
}

}

我的数学课是很多年前的事了,所以理解这个正态分布有点困难,在互联网上搜索如何计算正态分布后,我找不到任何类似于给定代码的公式。

所以,这些是我的问题。

  1. second 的作用是什么?这是某种保护吗?
  2. 这段代码如何使用正态分布?似乎无法弄清楚...

最佳答案

我将以相反的顺序回答问题。该方法的核心部分是一种标准技术,用于将从 [0, 1] 上的均匀分布抽取的两个随机变量转换为从具有给定均值和标准差的正态分布抽取的两个随机变量。 (它称为 Box-Muller transform 。)while 循环使用生成和测试技术从单位圆上的二维均匀分布生成随机点 (v1, v2)。从 (v1, v2) 到 (y1, y2) 的映射将均匀分布转换为均值为零且单位标准差的二维正态分布。然后对其进行平移和缩放以获得具有所需平均值和标准差的 (x1, x2)。

现在有了生成正态分布变量对的方法,其余代码的工作方式如下:如果second == 0,则这是需要生成新值的信号,因此它通过 if 并生成一对值。然后它将其中一个值保存在 second 中并返回另一个值。下次调用该方法时,它会注意到 second 中有一个有效值,并立即返回该值,而不是生成更多值。

代码中存在一个重大错误:second 在返回其值之前应重置为零;否则它将始终继续返回第二个随机值(在第二次调用后看起来不会那么随机)。即使这个缺陷得到纠正,还会出现第二个问题。每个其他返回值的值为 0 的概率为零。理论上,这并不算太糟糕,因为正态分布的随机样本的值为 0 的概率是...零!不过,这仍然是一个缺陷。

我将重写代码如下:

public class Random {

private static double second;
private static boolean secondValid = false;

static double normal(int stream, double mean, double std) {
double v1, v2, y1, y2, x1, x2, w;

if (secondValid) {
secondValid = false;
return second;
}

do {
v1 = 2 * RandomGenerator.rand(stream) - 1;
v2 = 2 * RandomGenerator.rand(stream) - 1;
w = v1 * v1 + v2 * v2;
} while (w > 1);

y1 = v1 * Math.sqrt(-2 * Math.log(w) / w);
y2 = v2 * Math.sqrt(-2 * Math.log(w) / w);
x1 = mean + y1 * std;
x2 = mean + y2 * std;
second = x2;
secondValid = true;
return x1;
}

}

关于Java 正态分布,均值不同于 0,标准差不同于 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416578/

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