2011-08-16 28 views
1

我想观察中心极限定理并编写了这个程序。但是我很困惑,我必须这样观察。是否有任何错误?中心极限定理

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]++; 
     } 
    } 
} 
+4

你到底在问什么? – Jethro

+0

你的问题是什么? – CodesInChaos

+0

我问我希望这样的形状,但我观察不同,有没有错或没有? – myildirim

回答

8

这是非常不清楚你问在这里,但我会在它采取刺伤。

你的程序模拟了一个10000次模具的滚动五十次并取平均值。然后你做5000次并显示结果的直方图。

中心极限定理指出,随着卷的数量增加,直方图应该更接近高斯分布。

如果你想要做的是观察中心极限定理的真值,那么我会修改你的程序,如下所示:我会让“Func”取整数n,滚动的数量,然后让body主要是:

for(int n = 1; n < 10; ++n) 
{ 
    Func(n); 
    Console.WriteLine("-----"); 
} 

然后用n代替Func中所有的“50”。

这样你就模拟了滚动1,2,3,4 ... 10个骰子并取平均值。当你绘制直方图时,你会看到对于1,直方图是矩形的,随着n的增加,它会变得越来越钟形。这证明了中心极限定理。

+0

我记得当我在一天的数学课中感到无聊时,在TI-85上做这个。 :) –

+0

感谢很多,现在很清楚。 – myildirim

+0

格雷格,这是一个很好的娱乐。现在我很无聊,所以如果你能像这个例子那样做,我会非常高兴。 – myildirim