fisica:informatica:201617:esercitazione3rand
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
| Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
| fisica:informatica:201617:esercitazione3rand [03/03/2017 alle 10:02 (9 anni fa)] – [Esercizio 6: Realizziamo un generatore di numeri pseudo-casuali] Susanna Pelagatti | fisica:informatica:201617:esercitazione3rand [06/02/2018 alle 08:55 (8 anni fa)] (versione attuale) – [Esercizio 7: Usiamo il generatore] Susanna Pelagatti | ||
|---|---|---|---|
| Linea 49: | Linea 49: | ||
| </ | </ | ||
| - | ===== Esercizio 2: Generazione di numero | + | ===== Esercizio 2: Generazione di numeri |
| - | Modificare l' | + | Modificare l' |
| ===== Esercizio 3: Generazione di numero casuali reali ===== | ===== Esercizio 3: Generazione di numero casuali reali ===== | ||
| Scrivere un programma C che legge dallo standard input un numero N di reali da generare e stampa sullo standard output una sequenza di N numeri casuali reali nell' | Scrivere un programma C che legge dallo standard input un numero N di reali da generare e stampa sullo standard output una sequenza di N numeri casuali reali nell' | ||
| - | // | ||
| - | ===== Esercizio | + | |
| + | ===== Esercizio | ||
| + | Per restringersi all' | ||
| + | < | ||
| + | A+(int)((B-A)*rand()/ | ||
| + | </ | ||
| + | oltre a | ||
| + | < | ||
| + | A+rand()%(B-A + 1) | ||
| + | </ | ||
| + | Utilizzare entrambe per generare sequenze di interi nell' | ||
| + | ci sono differenze nella distribuzione valori ottenuti ? | ||
| + | |||
| + | ===== Esercizio 6: Realizziamo un generatore di numeri pseudo-casuali ===== | ||
| + | Un semplice (ma efficace) generatore di sequenze di numeri pseudo-casuali utilizza il metodo della congruenza lineare. Questo metodo genera una sequenza di numeri $x_i$ a partire da un valore iniziale noto (il //seme)// $x_0$. | ||
| + | In generale, l’elemento $x_{i + 1}$ della sequenza è dato dalla formula: | ||
| + | \begin{align}\label{eq: | ||
| + | x_{i + 1} &= (a * x_i + b) \% M\\ | ||
| + | \end{align} | ||
| + | |||
| + | i parametri $a$ (motiplicatore), | ||
| + | |||
| + | Alcuni valori per $M$, $a$ e $b$ consigliati in letteratura sono: | ||
| + | * | ||
| + | * | ||
| + | * | ||
| + | * | ||
| + | |||
| + | Scrivere un programma C che inizializza i parametri $a$, $b$, $M$ (a scelta dello studente), legge in input il seme $x_0$, e stampa i primi 100 numeri pseudo casuali della sequenza. | ||
| + | |||
| + | //Nota: Attenzione all' | ||
| + | |||
| + | |||
| + | ===== Esercizio 7: Usiamo il generatore ===== | ||
| + | |||
| + | Sulla base dell' | ||
| + | |||
| + | |||
| + | ===== Esercizio 8: La macchina di Galton ===== | ||
| La macchina di Galton (Galton Board) e' un dispositivo ideato nella seconda meta dell' | La macchina di Galton (Galton Board) e' un dispositivo ideato nella seconda meta dell' | ||
| per illustrare in modo semplice il teorema del limite centrale. | per illustrare in modo semplice il teorema del limite centrale. | ||
| Linea 87: | Linea 124: | ||
| E' facile convincersi che la posizione di arrivo nel punto piu' basso puo' assumere tutti i valori tra 1 e n+1 (non con la stessa probabilita' | E' facile convincersi che la posizione di arrivo nel punto piu' basso puo' assumere tutti i valori tra 1 e n+1 (non con la stessa probabilita' | ||
| - | Realizzare un programma C che letto il numero | + | Realizzare un programma C che letto il numero |
| - | ===== Esercizio 5: Ma quanto siamo casuali ? ===== | ||
| - | Per restringersi all' | ||
| - | < | ||
| - | A+((B-A+1.0)*rand()/ | ||
| - | </ | ||
| - | oltre a | ||
| - | < | ||
| - | A+rand()%(B-A + 1.0) | ||
| - | </ | ||
| - | Utilizzare entrambe per generare sequenze di interi nell' | ||
| - | ci sono differenze nella distribuzione valori ottenuti ? | ||
| - | ===== Esercizio 6: Realizziamo un generatore di numeri pseudo-casuali ===== | ||
| - | Un semplice (ma efficace) generatore di sequenze di numeri pseudo-casuali utilizza il metodo della congruenza lineare. Questo metodo genera una sequenza di numeri $x_i$ a partire da un valore iniziale noto (il //seme)// $x_0$. | ||
| - | In generale, l’elemento $x_{i + 1}$ della sequenza è dato dalla formula: | ||
| - | \begin{align}\label{eq: | ||
| - | x_{i + 1} &= (a * x_i + b) \% M\\ | ||
| - | \end{align} | ||
| - | i parametri $a$ (motiplicatore), | ||
| - | Alcuni valori per $M$, $a$ e $b$ consigliati in letteratura sono: | + | ===== Esercizio 9: Simulazione di un moto Browniano discreto |
| - | * $M=2^{31}$, $ a = (int) (\pi * 10^8)$, $b= 453806245$ (D. Knuth) | + | |
| - | * $M=2^{31} – 1$, $a = 7^5$, $b=0$ (Goodman e Miller) | + | |
| - | * $M=2^{31}$, $a = 5^{13}$, $b=0$ (Gordon) | + | |
| - | * $M=2^{31}$, $a = 2^{16} + 3$, $b=0$ (Leormont e Lewis) | + | |
| - | + | ||
| - | Scrivere un programma C che inizializza i parametri $a$, $b$, $M$ (a scelta dello studente), legge in input il seme $x_0$, e stampa i primi 100 numeri pseudo casuali della sequenza. | + | |
| - | + | Scrivere un programma C che simula il moto di una particella che si muove di moto casuale su un piano, in un’area quadrata delimitata dagli assi $x=0$, $y=0$ e dalle rette $x=200$, $y=200$. All' | |
| - | + | All’istante $i+1$, le coordinate della particella sono calcolate come: | |
| - | + | \begin{align} | |
| - | + | x_{i+1} = x_i + A\\ | |
| + | y_{i+1} = y_i + B | ||
| + | \end{align} | ||
| + | Dove A e B sono due numeri double pseudo-casuali compresi nell’intervallo [-1,1]. Per la generazione di A e di B il programma usa separatamente due semi A0 e B0 letti da tastiera (invece, se si usa il generatore dell' | ||
| + | |||
| + | Il programma C termina quando la particella raggiunge (o supera) gli estremi dell’area, | ||
| + | |||
| + | //Nota: bisogna avere pazienza....// | ||
fisica/informatica/201617/esercitazione3rand.1488535361.txt.gz · Ultima modifica: 03/03/2017 alle 10:02 (9 anni fa) da Susanna Pelagatti
