(1a) Script: probabiltà 1
Ecco la parte dello script, modificabile, in cui è descritto l'evento, seguita da alcuni esempi di uscite (la probabilità in questo caso sappiamo essere 16.666...%).
function ValVer()
{ with(Math) {
/// evento attuale e' uscita 7 con 2 dadi equi
/// se vuoi cambia evento e salva con un nuovo nome
U1 = floor(random()*6+1);
U2 = floor(random()*6+1);
if (U1+U2==7)
{ V = 1}
else
{ V = 0}
}} |
Ecco alcune uscite:
n = 300000 16.675333333333334% +/- 0.2041669333995811 n = 100000 16.774% +/- 0.3544632838563058 n = 50000 16.882% +/- 0.5025740794093005 n = 20000 17.015% +/- 0.7971368578283816 n = 12000 16.975% +/- 1.0281537447905884 n = 11000 16.936363636363634% +/- 1.0729023794123182 n = 10000 16.82% +/- 1.122187493459559 n = 2000 16.2% +/- 2.4722613207383657 n = 1000 15.6% +/- 3.444070501836689
(1b) Ovvero con R:
Pr <- function(n) {f <- 0 for (i in 1:n) if ( floor(runif(1)*6)+floor(runif(1)*6)+2 == 7) f <- f+1 fr <- f/n; S <- sqrt(fr*(1-fr)/(n-1)) print(c(fr, "+/-", 3*S), quote=FALSE)} Pr(1e2) [1] 0.17 +/- 0.113257550420591 Pr(1e3) [1] 0.157 +/- 0.0345304409376908 Pr(1e4) [1] 0.1644 +/- 0.0111197005703426 Pr(1e5) [1] 0.16841 +/- 0.00355027499153589 Pr(1e6) [1] 0.166135 +/- 0.00111660588516437 # Posso concludere che è tra 0.1650 e 0.1672
(2a)
Qual è la probabilità, pescando 10 carte da un mazzo da 40, di ottenere almeno un tris (cioè 3 o 4 carte dello stesso valore)?
Il calcolo teorico non è facile. Con una simulazione è facile trovare che è del 38%±1% (ma ci vogliono molte prove per arrivare a 3 cifre significative: 38.5%±0.1%).
Script: probabiltà 2
///c[seme][valore] matrice in cui segno le carte uscite
c=new Array(4); for (seme=1; seme<5; seme++) {c[seme]=new Array(10)}
for (seme=1; seme<5; seme++)
{for (valore=1; valore<11; valore++) {c[seme][valore]=0}}
///matrice in cui conto le uscite di ogni valore
n = new Array(10);
for (valore=1; valore<11; valore++) {n[valore]=0}
///genero 10 carte e pongo V=1 se trovo un tris
tris=0;
for (var i=1; i<11; i=i+1)
{ripeti=1;
while (ripeti==1)
{seme=floor(random()*4)+1; valore=floor(random()*10)+1;
if (c[seme][valore]==0) {ripeti=0}}
c[seme][valore]=1; n[valore]=n[valore]+1}
for (valore=1; valore<11; valore++)
{if (n[valore]==3 || n[valore]==4) {tris=1; valore=10}}
if (tris==1) {V=1} else {V=0}
}} |
Ecco alcune uscite:
n = 1600000 38.4720625% +/- 0.11539056836443596% n = 800000 38.406625% +/- 0.16313479670944772% n = 400000 38.40725% +/- 0.23070829283563846% n = 200000 38.4825% +/- 0.32639110952127953% n = 100000 38.417% +/- 0.4614403528756373% n = 50000 38.362% +/- 0.6524023027667002% n = 10000 38.33% +/- 1.4586441492959916%
(2b) Ovvero con R:
Pr <- function(n) {f <- 0 for (prove in 1:n) { ca <- array(rep(0,40),dim=c(4,10)) nu <- array(rep(0,10),dim=10) tris <- 0 for (i in 1:10) {ripeti <- 1; while(ripeti==1) {seme <- floor(runif(1)*4)+1; valore <- floor(runif(1)*10)+1; if (ca[seme,valore]==0) ripeti <- 0} ca[seme,valore] <- 1; nu[valore] <- nu[valore]+1; for(valore in 1:10) if (nu[valore]==3 | nu[valore]==4) {tris <- 1; valore <- 10}; V <- ifelse(tris==1,1,0) } f <- f+V} fr <- f/n; S <- sqrt(fr*(1-fr)/(n-1)); print(c(fr, "+/-", 3*S), quote=FALSE)} Pr(1e3) [1] 0.374 +/- 0.0459263021070195 Pr(1e4) [1] 0.386 +/- 0.0146056472808722 Pr(1e5) [1] 0.38415 +/- 0.00461435834087785 Pr(1e6) [1] 0.385536 +/- 0.00146016576676077 ...
Nota: da queste e dalle uscite precedenti si deduce che (probabilmente) il valore è tra 0.38407 e 0.38588, ovvero è 0.385±0.001, ovvero (38.5±0.1)%.