2011-08-16 68 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