Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Benfordův zákon
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Teorie
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 13:21    Předmět: Benfordův zákon Citovat

Na wikipedii jsem objevil zajímavý statistický zákon.

Čtěte:
http://cs.wikipedia.org/wiki/Benford%C5%AFv_z%C3%A1kon

Rozhodl jsem se, že tvrzení ověřím, a tak jsem napsal kód v Csharpu, který generuje náhodná čísla a dívá se čím začínají. Vyšlo mi, že 51 procent všech náhodně generovaných čísel začínalo jedničkou. Velmi zajímavé a těžko vysvětlitelné.

Kód:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BenfordsLaw
{
class Program
{

static private bool StartsWithOne(int i)
{
string str = i.ToString();
if (str[0] == '1') return true;
return false;
}

static private void CountBenford()
{
const int count = 100000000;
int onecount = 0;
Random r = new Random();


for (int i = 0; i < count; i++)
{
if (StartsWithOne(r.Next())) onecount++;
}

Console.WriteLine(((double)onecount/count * 100).ToString());
}


static void Main(string[] args)
{
CountBenford();
Console.ReadKey();
}
}
}

_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 13:30    Předmět: Citovat

Tak tady mám kompletní výsledky:

1-> 51,906%
2-> 12,115%
3-> 5,15%
4-> 5,113%
5-> 5,186%
6-> 5,297%
7-> 5,129%
8-> 5,196%



Generující kód:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BenfordsLaw
{
class Program
{

static private bool StartsWithOne(int i, int x)
{
string str = i.ToString();
if (str[0] == (char)(x+0x30)) return true;
return false;
}

static private void CountBenford(int x)
{
const int count = 100000000;
int onecount = 0;
Random r = new Random();


for (int i = 0; i < count; i++)
{
if (StartsWithOne(r.Next(),x)) onecount++;
}

Console.WriteLine(x.ToString() + "-> " +((double)onecount/count * 100).ToString()+"%");
}


static void Main(string[] args)
{
for (int i = 1; i < 9; i++)
{
CountBenford(i);
}

Console.ReadKey();
}
}
}

_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
rnbw



Založen: Mar 21, 2006
Příspěvky: 34022
Bydliště: Bratislava

PříspěvekZaslal: út červenec 24 2012, 13:49    Předmět: Citovat

Dokazal si velky nezmysel. Bud mas chybu v programe (aky je rozsah generovanych cisel?) alebo ma M$ blby generator nahodnych cisel.
kód:
$ cat test.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    srandom(1234);

    for (int i = 0; i < 10000000; i++) {
        int n = (float)random() / RAND_MAX * 1000000;
        printf("%d\n", n);
    }

    return 0;
}
$ cc --std=gnu99 -Wall test.c -o test
$ ./test >asdf
$ grep ^1 asdf | wc -l
1111613
$ grep ^2 asdf | wc -l
1111853
$ grep ^3 asdf | wc -l
1110788
$ grep ^4 asdf | wc -l
1111027
$ grep ^5 asdf | wc -l
1111112
$ grep ^6 asdf | wc -l
1110697
$ grep ^7 asdf | wc -l
1110756
$ grep ^8 asdf | wc -l
1112192
$ grep ^9 asdf | wc -l
1109942
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: út červenec 24 2012, 13:58    Předmět: Citovat

To máš nějaký divný generátor náhodných čísel. V matlabu to vychází rovnoměrně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 13:59    Předmět: Citovat

to platí pro normální rozdělení, ne pro rovnoměrné
_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 14:03    Předmět: Citovat

je to C# na 64 bitovým intelu
_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 14:04    Předmět: Citovat

rnbw

Ty tam násobíš a dělíš, já ne.

_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: út červenec 24 2012, 14:57    Předmět: Citovat

DRAKE napsal(a):
rnbw

Ty tam násobíš a dělíš, já ne.

Stejnak to máš blbě ty, generuješ náhodná čísla od 0 do 255, tak to by bylo, aby tam 1 na začátku nebyla nejčastějc, pak dvojka a všechno ostatní stejně často. Rolling Eyes
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
gombik



Založen: Dec 09, 2007
Příspěvky: 19

PříspěvekZaslal: út červenec 24 2012, 15:22    Předmět: Citovat

Andrea: pokud narážíš na metodu Random.Next(), kterou použil DRAKE, tak ta generuje čísla od 0 po Int32.MaxValue

http://msdn.microsoft.com/en-us/library/9b3ta19y.aspx
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 15:53    Předmět: Citovat

Tak ten program je blbě, protože int.MaxValue je 2147483647. Čísla začínající na 1čku tvoří největší část prostoru.

Tento zákon platí pro normální rozdělní. PC generátor generuje rovnoměrné.

Skusím to s generátorem normálního rozdělení.

_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
tomasjedno



Založen: Oct 11, 2008
Příspěvky: 6106
Bydliště: ZZ9 Plural Z Alpha

PříspěvekZaslal: út červenec 24 2012, 15:55    Předmět: Citovat

DRAKE napsal(a):

Rozhodl jsem se, že tvrzení ověřím, a tak jsem napsal kód v Csharpu


Jediné, co takovým způsobem můžeš ověřit, je, zda takto generovaný soubor patří mezi ty, pro které ten "zákon" platí.
Kdybys volný čas věnoval přečtení téhož hesla na anglické Wiki, dozvěděl by ses tam, proč mezi ně nepatří.
Ten zákon platí pro soubory čísel, která jsou rovnoměrně rozeseta přes několik řádů na logaritmické škále.

Hezký příklad souboru, pro který neplatí Benfordův zákon, jsou čísla ve dvojkové soustavě. S výjimkou nuly všechna ostatní čísla začínají jedničkou Very Happy

Edit: to jsem to zkonil - právě že pro ta dvojková čísla platí (Benfordův zákon zobecněný pro nedesítkové číselné soustavy).


Naposledy upravil tomasjedno dne čt červenec 26 2012, 20:20, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
DRAKE



Založen: Sep 05, 2005
Příspěvky: 276

PříspěvekZaslal: út červenec 24 2012, 16:02    Předmět: Citovat

Tak u dvojkový je to jasný. Ale proč to u desítkové je zrovna jednička. Proč né třeba sedmička?
_________________
Ježíš na kříži zaplatil za naše hříchy a tím nás osvobodil od věčné smrti. Platí i pro bastliře Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
tomasjedno



Založen: Oct 11, 2008
Příspěvky: 6106
Bydliště: ZZ9 Plural Z Alpha

PříspěvekZaslal: út červenec 24 2012, 16:14    Předmět: Citovat

Protože na logaritmické škále je úsečka 1-2 mnohem delší, než úsečka 7-8 Very Happy

Mimochodem k tvému tvrzení o platnosti pro normální rozdělení - citace z Wiki:
Neither the normal distribution and the ratio distribution of two normal distributions (the Cauchy distribution) obey Benford's law.

Když už si budeš hrát s tím normálním rozdělením, doporučil bych ti třeba normální rozdělení se střední hodnotou 5,5 a rozptylem 1. Možná, že tu a tam na nějaké číslo začínající 1 narazíš.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mtajovsky



Založen: Sep 19, 2007
Příspěvky: 3698
Bydliště: Praha

PříspěvekZaslal: út červenec 24 2012, 19:33    Předmět: Citovat

DRAKE napsal(a):
Na wikipedii jsem objevil zajímavý statistický zákon.


Tak tohle je spíš zákon sociologický nebo nějaký biologický než statistický. To nemůžete ověřovat generátorem náhodných čísel. Trochu jsem se s tím v minulosit zábýval a dobré generátory náhodných čísel (fyzikální) mají odchylky od ideálního náhodného signálu řádu 10^-7. Testuje se to na rozdělení bitů mezi 0 a 1, na výskyt bitových posloupností délky 2-9 bitů a tak podobně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Andrea



Založen: Sep 07, 2007
Příspěvky: 9340

PříspěvekZaslal: út červenec 24 2012, 19:40    Předmět: Citovat

Co je to ideální náhoda? Nezáleží ten ideál trochu na tom, jestli jde o náhodu výhry ve Sportce nebo o náhodu zásahu meteoritem? Twisted Evil Twisted Evil Twisted Evil
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Teorie Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.13 sekund