我想观察中心极限定理并写下这个程序.但是我很困惑,我必须这样观察.有什么不对吗?
xx
xxx
xxxx
xxxxx
xxxxxx
xxx
xxxx
xxx
x
x
Run Code Online (Sandbox Code Playgroud)
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]++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
目前还不清楚你在这里问的是什么,但我会捅它.
你的程序模拟滚动10000面模具五十次并取平均值.然后,您执行5000次并显示结果的直方图.
中心极限定理指出,随着滚动次数的增加,直方图应更接近于高斯分布.
如果你想要做的是观察中心极限定理的真实性,那么我会修改你的程序如下:我会让"Func"取一个整数n,滚动的数量然后得到Main的主体:
for(int n = 1; n < 10; ++n)
{
Func(n);
Console.WriteLine("-----");
}
Run Code Online (Sandbox Code Playgroud)
然后用n替换Func中的所有"50".
这样你就可以模拟滚动的1,2,3,4 ... 10个骰子并取平均值.绘制直方图时,您会看到直方图为1,直方图为矩形,然后随着n的增加,它会变得越来越钟形.这证明了中心极限定理.
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |