我想观察中心极限定理并写了这个程序。但是我很困惑,我必须那样观察吗。有什么不对吗?
xx
xxx
xxxx
xxxxx
xxxxxx
xxx
xxxx
xxx
x
x
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
Func();
}
public static void Func()
{
Random r = new Random();
int[] d = new int [10];
int sum;
for (int k = 0; k < 5000; k++)
{
sum = 0;
for (int i = 0; i < 50; i++)
sum += r.Next(0, 10000);
Set(d, sum/50);
}
DispResult(d);
}
private static void DispResult(int[] d)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < d[i]; j += 1000)
{
Console.Write("X");
}
Console.WriteLine();
}
}
private static void Set(int[] d, int a)
{
if (a > 9000)
d[9]++;
else if (a > 8000)
d[8]++;
else if (a > 7000)
d[7]++;
else if (a > 6000)
d[6]++;
else if (a > 5000)
d[5]++;
else if (a > 4000)
d[4]++;
else if (a > 3000)
d[3]++;
else if (a > 2000)
d[2]++;
else if (a > 1000)
d[1]++;
else
d[0]++;
}
}
}
最佳答案
目前还不清楚你在这里问什么,但我会试一试。
您的程序模拟将 10000 面的骰子滚动 50 次并取平均值。然后,您执行 5000 次并显示结果的直方图。
中心极限定理指出,随着滚动次数的增加,直方图应该更接近于高斯分布。
如果你想做的是观察中心极限定理的真实性,那么我会修改你的程序如下:我会让“Func”取一个整数 n,即掷骰子的次数,然后有正文主要是:
for(int n = 1; n < 10; ++n)
{
Func(n);
Console.WriteLine("-----");
}
然后将Func中的“50”全部替换为n。
这样您就可以模拟掷 1、2、3、4...10 个骰子并取平均值。当您绘制直方图时,您会看到对于 1,直方图是矩形的,然后随着 n 的增加它变得越来越钟形。这证明了中心极限定理。
关于c# - 中心极限定理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7077429/