Центральная предельная теорема - PullRequest
1 голос
/ 16 августа 2011

Я хочу соблюдать центральную предельную теорему и написал эту программу. Но я запутался в том, должен ли я так наблюдать. Есть ли какая-то ошибка?

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

1 Ответ

8 голосов
/ 16 августа 2011

Очень неясно, о чем вы здесь спрашиваете, но я сделаю удар.

Ваша программа имитирует бросание 10000-гранного кубика пятьдесят раз и взятие среднего. Затем вы делаете это 5000 раз и показываете гистограмму результатов.

Центральная предельная теорема гласит, что с увеличением числа рулонов гистограмма должна более близко приближаться к гауссовскому распределению.

Если вы хотите соблюдать истинность центральной предельной теоремы, то я бы изменил вашу программу следующим образом: я бы заставил "Func" взять целое число n, число бросков, а затем получить тело Главное быть:

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

Затем замените все «50» в Func на n.

Таким образом, вы симулируете бросание 1, 2, 3, 4 ... 10 кубиков и взятие среднего. Когда вы построите гистограммы, вы увидите, что для 1 гистограмма является прямоугольной, а затем она становится все больше и больше в форме колокольчика с увеличением n. Это демонстрирует Центральную предельную теорему.

...