Доски Гальтона - Теорема предела центральный


причина заключается в том, изучение/обучение. Знать/применять методы и понятия программирования, превращая что-то "материал" в "приложения".


Получил видео в Whatsapp, где цветные шары смешанные были, разделенных цветов, проходя через контактный разъем. Или было много механической технологии или видео fake. В конце концов, именно видео fake, где графический дизайн воспроизвел Доске Гальтона для работы изучение.

, Желающих узнать больше, я нашел Wikipedia, и я хотел бы превратить его в "программы".

Tabuleiro de Galton


доску, в основном имитирует "Теорема предела центральный" (link): теорема описывает распределение среднего случайная выборка населения с дисперсией конечной.

Teorema


Идея:

, Начиная с доски, я решил создать массив, где у меня есть malhas и pinos, образуя линию:

-------Malha------->
[P1][P2][P3][P4][P5]...

Значения штырей:

шансы на спуск шариков всегда больше, от центра к бокам, создал кегли значения, причем, чем больше, больше шансов, "продолжить", там. Но также, как штыри "слияния", а не вертикально, также считал этот факт.

Создавая трикотаж:

// Definicoes
$qtdMalhas = 15;
$qtdPinos = 15;

// Auxiliares malhas/pinos
$am = $ap = 0;

// Criando as malhas e seus pinos
while ($am <= $qtdMalhas) {

    while ($ap < $qtdPinos) {

        if ($ap < ($qtdPinos/2)) {

            if ($am % 2 == 0) {
                $m[$am][$ap] = $ap;
            } else {
                $m[$am][$ap] = $ap+1;
            }
        } else {

            if ($am % 2 == 0) {
                $m[$am][$ap] = $qtdPinos-$ap-1;
            } else {
                $m[$am][$ap] = $qtdPinos-$ap;
            }
        }

        $ap++;      
    }

    $ap = 0;
    $am++;  
}

Структура сетка:

Учитывая массив в основном в следующем формате:

$m[0][0]-$m[0][1]-$m[0][2]-$m[0][3]-$m[0][4]...
$m[1][0]-$m[1][1]-$m[1][2]-$m[1][3]-$m[1][4]...
$m[2][0]-$m[2][1]-$m[2][2]-$m[2][3]-$m[2][4]...
$m[3][0]-$m[3][1]-$m[3][2]-$m[3][3]-$m[3][4]...
$m[4][0]-$m[4][1]-$m[4][2]-$m[4][3]-$m[4][4]...
...

Печать сетка:

// Zera auxiliares malhas/pinos
$am = $ap = 0; 

// Imprime a malha
while ($am < $qtdMalhas) {

    echo '<br>|';

    while ($ap < $qtdPinos) {

        echo $m[$am][$ap].'|';

        $ap++;
    }

    $ap = 0;
    $am++;
}

Результат:

|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|
|1|2|3|4|5|6|7|8|7|6|5|4|3|2|1|
|0|1|2|3|4|5|6|7|6|5|4|3|2|1|0|

Могли бы сделать сетку из других форм ?

Да, с помощью нуля и для выводов, но я считаю, что было бы больше работы, определяться как вероятность того, что каждый штырь. Среди других способов.


, сетка готова, как я могу сделать, чтобы "пройти между горошек, она" ?

идеей было бы сделать розыгрыше между значениями, контактный ниже, учитывая, что , шансы на ее оставаться всегда ближе к контакту большую ценность, то есть тиража разные коэффициенты, и таким образом получить результат в виде "Доски Гальтона".


они воли оставьте свой способ это сделать.

 20
Author: rbz, 2018-04-13

1 answers

Сделал так:

<?php
    function cai_bolinha($linhas) {
        $sorteio = mt_rand() % (1 << $linhas);
        return substr_count(decbin($sorteio), '1');
    }

    $linhas = 15;
    $bolinhas = 100000;

    $casas = [];
    for ($i = 0; $i <= $linhas; $i++) {
        $casas[$i] = 0;
    }

    for ($i = 0; $i < $bolinhas; $i++) {
        $casa_resultante = cai_bolinha($linhas);
        $casas[$casa_resultante]++;
    }

    for ($i = 0; $i <= $linhas; $i++) {
        echo $i . "->" . $casas[$i] . "\n";
    }
?>

Вот вывод (может меняться, очевидно):

0->5
1->35
2->310
3->1459
4->4079
5->9071
6->15089
7->19622
8->19771
9->15366
10->9265
11->4136
12->1409
13->334
14->46
15->3

См. здесь работает на ideone.

Хитрость заключается В том, что mt_rand() будет генерировать случайное число любого. Это число, в двоичном представлен нули и единицы, где ноль означает, падать слева и значит, падать вправо. % (1 << $linhas) служит для результата, имеет количество бит, который нас интересует, представленного переменной $linhas, что соответствует количество линий выводов, которые шарик должен пройти, что это же количество розыгрыши "влево или вправо", с 50% вероятность для каждой стороны.

С тем, число $sorteio - это число, где каждый бит описывается, что стороны маленький шарик был. Если это число равно нулю (все биты равны нулю), то во всех розыгрышах, она была слева. Если все биты равны 1, то во всех розыгрышах, он был вправо. Обратите внимание, что эти два случая очень редких и маловероятных и больше вероятность, что получившееся число состоит из смеси нулей и единиц.

После этого, имея такое $sorteio, подсчитывая, сколько бит 1 есть в нем, оказывается, в которой дома маленький шарик упал, где дом нулевой является крайняя левая и дом - $linhas справа.

Второй петли for, обнаружено 100000 лотереи (переменная $bolinhas), шарики падают, чтобы наблюдать за распределением. Обратите внимание на то, что распределение в результате аппроксимации нормального распределения (на самом деле-это распределение биномиальное), и, как и ожидалось, домов, центральных (7 и 8), которые накопили самые большие цифры в горошек, в то время как дома экстремальных (0 и 15) меньших чисел.

Пожалуйста, не стесняйтесь попробовать другие значения для переменных $linhas и $bolinhas.

 13
Author: Victor Stafusa, 2018-04-23 20:04:15