Strumenti Utente

Strumenti Sito


fisica:informatica:201617:esercitazione3rand

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima 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 Pelagattifisica: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:
 </code> </code>
  
-===== Esercizio 2: Generazione di numero casuali con seed diversi =====+===== Esercizio 2: Generazione di numeri casuali con seed diversi =====
  
-Modificare l'esercizio 1 in modo da generare un //seed// diverso ad ogni esecuzione utilizzando la funzione time() come spiegato nei lucidi.+Modificare l'esercizio 1 in modo da generare un //seed// diverso ad ogni esecuzione utilizzando la funzione time().
  
 ===== 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'intervallo ''[0,1)'' utilizzando le funzioni ''srand()'' e ''rand()'' introdotte nell'esercizio precedente. 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'intervallo ''[0,1)'' utilizzando le funzioni ''srand()'' e ''rand()'' introdotte nell'esercizio precedente.
  
-//Suggerimento//: Utilizzare ''RAND_MAX'' e la divisione fra reali. 
  
-===== Esercizio 4: La macchina di Galton =====+ 
 +===== Esercizio 5: Ma quanto siamo casuali ? ===== 
 +Per restringersi all'intervallo [A,B] intero possiamo utilizzare anche la seguente formula 
 +<code> 
 +A+(int)((B-­A)*rand()/(RAND_MAX+1.0)) 
 +</code> 
 +oltre a 
 +<code> 
 +A+rand()%(B-A + 1) 
 +</code> 
 +Utilizzare entrambe per generare sequenze di interi nell'intervallo ''[0,20)'', 
 +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:generatore} 
 +  x_{i + 1} &= (a * x_i + b) \% M\\ 
 +\end{align} 
 + 
 +i parametri $a$ (motiplicatore), $b$ (incremento) e $M$ (modulo) sono parametri interi e sono definiti a priori. Questo metodo genera una sequenza pseudo-casuale di numeri interi compresi tra 0 e $M$. Normalmente si fissa M come il massimo intero rappresentabile. 
 + 
 +Alcuni valori per $M$, $a$ e $b$ consigliati in letteratura sono: 
 +  *           $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. 
 + 
 +//Nota: Attenzione all'overflow .....// 
 + 
 + 
 +===== Esercizio 7: Usiamo il generatore =====  
 +  
 +Sulla base dell'esercizio 6, scrivere un programma C che genera 100 numeri double casuali e li stampa su stdout. I numeri devono essere compresi nell’intervallo [0,1) e stampati con precisione limitata alla quarta cifra decimale e partire da un seme $x_0$ letto da tastiera. 
 +  
 +  
 +===== Esercizio 8: La macchina di Galton =====
 La macchina di Galton (Galton Board) e' un dispositivo ideato nella seconda meta dell'Ottocento La macchina di Galton (Galton Board) e' un dispositivo ideato nella seconda meta dell'Ottocento
 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 dipassi da standard input igeneri e visualizzi sullo schermo possibili percorsi della pallina. Si puo' utilizzare una grafica a piacere o quella della Figura 1.+Realizzare un programma C che letto il numero di passi da standard input generi e visualizzi sullo schermo possibili percorsi della pallina. Si puo' utilizzare una grafica a piacere o quella della Figura 1.
  
-===== Esercizio 5: Ma quanto siamo casuali ? ===== 
-Per restringersi all'intervallo [A,B] possiamo utilizzare anche la seguente formula 
-<code> 
-A+((B-­A+1.0)*rand()/(RAND_MAX+1.0)) 
-</code> 
-oltre a 
-<code> 
-A+rand()%(B-A + 1.0) 
-</code> 
-Utilizzare entrambe per generare sequenze di interi nell'intervallo ''[0,20]'', 
-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:generatore} 
-  x_{i + 1} &= (a * x_i + b) \% M\\ 
-\end{align} 
  
-i parametri $a$ (motiplicatore), $b$ (incremento) e $M$ (modulo) sono parametri interi e sono definiti a priori. Questo metodo genera una sequenza pseudo-casuale di numeri interi compresi tra 0 e $M$. Normalmente si fissa M come il massimo intero rappresentabile. 
  
-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)$, $b453806245$ (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'istante 0 la particella è posta alle coordinate $x_0=100, y_0=100$. 
- +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'esercizio 6, i parametri $a,b, M$ per la generazione delle due sequenze di numeri pseudo casuali sono gli stessi). 
 +  
 +Il programma C termina quando la particella raggiunge (o supera) gli estremi dell’area, e stampa la posizione raggiunta dalla particella. 
 +  
 +//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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki