Attività successiva
Attività precedente
Home
Problema di carte #1
Quante carte di un mazzo di 52, in media, devo alzare per ottenere un asso?
(sappiamo inoltre che per n=1, p(n)=4/52). Come vedi, abbiamo usato il simbolo di produttoria; ad esempio il simbolo
Ora per determinare il valor medio E(X) della variabile casuale X dovremo calcolare l'espressione
Si tratta di un calcolo oneroso che volentieri deleghiamo a Derive. Vediamo, prima di tutto, come implementare la funzione p(n)
Tieni presente che il simbolo di produttoria lo trovi nella tavola dei simboli matematici di Derive oppure puoi usare il comando PRODUCT. Verifichiamo che la funzione p(n) definisce una corretta distribuzione di probabilità per la variabile casuale X (la somma dei valori p(n) con n che va da 1 a 49 deve essere 1)
Ed ecco il valor medio cercato
Dunque devo alzare in media 10,6 carte per ottenere un asso.
Il primo passo consiste nello scrivere un programma che generi un mazzo di 52 carte disposte casualmente. Ai nostri fini interessano solo due tipi di carte: gli assi, che indicheremo con A, e le altre carte, che indicheremo con B. L'algoritmo è questo:
generiamo un numero casuale j compreso tra 1 e 52 e sostituiamo nel vettore v l'elemento al posto j con la stringa "A";
ripetiamo l'operazione precedente fino a quando non avremo sostituito quattro "B" con quattro "A" (dovremo controllare prima di effettuare la sostituzione che al posto j non sia già presente una "A").
Due osservazioni sul codice. Le variabili i, j e v che compaiono come argomenti del comando mazzo sono variabili di servizio che vengono definite all'interno del programma e non dovranno essere passate quando chiameremo il comando: chiameremo semplicemente mazzo(). E' importante tuttavia indicare tali variabili come argomenti perché così saranno a tutti gli effetti variabili locali, visibili solo all'interno del programma. Nota poi che all'interno del programma (costrutto Prog) viene riutilizzato il costrutto Prog per definire un sottoprogramma (un blocco di comandi, nel nostro caso di due comandi) che sarà eseguito se la condizione del comando If è verificata. Facciamo una prova
La riga #12 è ottenuta semplificando la #11, la #13 risemplificando la #11. Come vedi, sono generate due diverse sequenze casuali di carte.
Un breve commento al codice del comando simula. Il comando Position cerca la prima occorrenza della stringa "A" nel vettore mazzo() e fornisce in output la posizione della stringa (quindi, per noi, il numero di carte necessarie per ottenere il primo asso). Il valore numerico trovato viene aggiunto al vettore w che all'inizio è vuoto. E così via, per n volte (con mazzi ogni volta diversi). Alla fine del ciclo il comando simula mette in uscita il vettore w. Facciamo una prova
Semplificando il comando della riga #15 otteniamo il vettore dei risultati di 5 prove; ad esempio la terza prova ha dato per risultato 16, e quindi alla terza prova sono state alzate 16 carte per ottenere il primo asso.
Come vedi, la sommatoria alla riga #18 ha una comoda sintassi: sono sommati tutti i valori i, con i che varia nel vettore fornito dal comando simula(n). Il risultato ottenuto semplificando la riga #18 conferma sperimentalmente il risultato teorico che avevamo determinato. Fai tu altri esperimenti: se n è sufficientemente grande, otterrai valori che oscillano attorno a 10,6.
|
Ultimo aggiornamento gennaio 2007 Versione di Derive utilizzata 6.10 p.lazzarini@tin.it |