NUMERI CASUALI E SIMULAZIONE

Documenti analoghi
Laboratorio di Calcolo I. Applicazioni : Metodo Monte Carlo

CALCOLO NUMERICO. Prof. Di Capua Giuseppe. Appunti di Informatica - Prof. Di Capua 1

Approfondimento : numeri pseudocasuali

Laboratorio di Calcolo B 68

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Università degli Studi di Brescia. Vettori di variabili. ! Sono variabili aggregate in grado di memorizzare una collezione (organizzata) di oggetti

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017

Generazione di numeri casuali

Algoritmi in C++ (prima parte)

Laboratorio di Programmazione: Linguaggio C Lezione 9 del 27 novembre 2013

Programmazione I - Laboratorio

Generazione di numeri random. Distribuzioni uniformi

Simulazione dei dati

Numeri pseudocasuali. Olga Scotti

Uso delle funzioni della libreria GSL

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Generatori di numeri casuali

Numeri Random. D.E.I.S. Università di Bologna DEISNet

Funzioni di libreria. KP pp , , , 589, DD pp , , ,

Metodi Computazionali della Fisica Secondo Modulo: C++

- noise di conteggio ; f[m] è un numero intero che è la realizzazione di una variabile aleatoria con valor medio (valore atteso) f 0 [m].

Le variabili casuali o aleatorie

Teoria dei Fenomeni Aleatori AA 2012/13

PROBABILITA. Distribuzione di probabilità

2.3.1 Generazione di numeri pseudocasuali con distribuzione uniforme

LA DISTRIBUZIONE NORMALE o DI GAUSS

Introduzione alla probabilità. Renato Mainetti

Il generatore di numeri casuali

Esercitazione 6. Array

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Confidenzialità e crittografia simmetrica. Contenuto. Scenario tipico. Corso di Sicurezza su Reti Uso della crittografia simmetrica

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Laboratorio di informatica Ingegneria meccanica

Corso di Laboratorio 2 Programmazione C++ Silvia Arcelli. 9 Novembre 2015

1 PANORAMICA SUL LINGUAGGIO C

Analisi statistica della bontà di un programma di simulazione del lancio di dadi

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

Il metodo Monte Carlo. Esempio di transizione al caos. Numeri (pseudo)casuali. λ 1. Analisi dati in Fisica Subnucleare

Campionamento di variabili aleatorie. Andrea Marin Università Ca' Foscari Venezia Corso di Probabilità e Statistica a.a. 2009/2010

Espressione di chiamata di funzione

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

INFORMATICA DI BASE Linguaggio C Prof. Andrea Borghesan

Ulteriori Conoscenze di Informatica e Statistica

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Metodo di Monte Carlo

Indovina la lettera...

Algoritmi in C++ (seconda parte)

Metodi Computazionali. Generazione di numeri pseudocasuali

La programmazione in linguaggio C

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

ALGORITMI E STRUTTURE DATI

Esercitazione 4. Comandi iterativi for, while, do-while

Gli array. impone al programma, in fase di esecuzione, di riservare dello spazio in memoria per 10 variabili di tipo int

Algoritmi di ordinamento: Array e ricorsione

Struct, enum, Puntatori e Array dinamici

Esercitazione 11. Liste semplici

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Laboratorio di Informatica

Generatori di numeri pseudocasuali

Generatori di sequenze pseudocasuali. Manuela Aprile Maria Chiara Fumi

1 (4) 2 (4) 3 (12) 4 (6) 5 (6)

Le funzioni, e le istruzioni di input/output

Esercizi di programmazione in C

IL PRIMO PROGRAMMA IN C

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

PROBABILITÀ ELEMENTARE

VARIABILI CASUALI CONTINUE

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

PROBABILITÀ - SCHEDA N. 3 VARIABILI ALEATORIE CONTINUE E SIMULAZIONE

Tempo di vita e scope delle variabili

$QDOLVLGHOSURJUDPPDTXDGUDWR

Sperimentazioni di Fisica I mod. A Statistica - Lezione 2

Teorema del limite centrale TCL

Perché il linguaggio C?

Cenni di teoria dell informazione

Esplorazione dei dati

Numeri casuali. Randomness by obscurity. Generazione Deterministica? Caratteristiche del sistema. Caratteristiche del sistema

Variabile casuale E 6 E 5 E 4. R S x1 E 2

Modelli e Metodi per la Simulazione (MMS)

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

L'Allocazione Dinamica della Memoria nel linguaggio C

La simulazione con DERIVE Marcello Pedone LE SIMULAZIONI DEL LANCIO DI DADI CON DERIVE

Primi passi col linguaggio C

Sommario. Capitolo 1 I dati e la statistica 1. Capitolo 2 Statistica descrittiva: tabelle e rappresentazioni grafiche 25

Tipi di dato semplici

MODELLISTICA DI IMPIANTI E SISTEMI Syllabus e Testi di Riferimento Prof. Giuseppe Iazeolla

Probabilità e numeri casuali Teoria e programmazione Pascal e C++

PROGRAMMAZIONE: ESERCITAZIONE N. 6

Rappresentazione binaria delle variabili (int e char)

Studio dell aleatorietà: : proprietà di indipendenza ed uniformità. Daniela Picin

Distribuzioni di probabilità e principi del metodo di Montecarlo. Montecarlo

Stringhe e allocazione dinamica della memoria

Variabili aleatorie: parte 1. 1 Definizione di variabile aleatoria e misurabilitá

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Tipi di variabili. Indici di tendenza centrale e di dispersione

Dati aggregati. Violetta Lonati

LA DISTRIBUZIONE NORMALE. La distribuzione Gaussiana. Dott.ssa Marta Di Nicola

Modulo Simulazione Parte 1. Simulazione ad Eventi Discreti: Concetti Base. Organizzazione del modulo

Transcript:

NUMERI CASUALI E SIMULAZIONE NUMERI CASUALI Usati in: statistica programmi di simulazione... Strumenti: - tabelle di numeri casuali - generatori hardware - generatori software

DESCRIZIONE DEL PROBLEMA Un programma che usa numeri casuali richiede un generatore software una macchina virtuale software è deterministica, quindi non può generare numeri veramente casuali È possibile ideare algoritmi per la generazione di numeri apparentemente casuali In questo caso otteniamo un generatore di numeri pseudo-casuali REQUISITI PER UN PROGRAMMA GENERATORE L'obiettivo teorico è generare serie infinite di numeri statisticamente indipendenti all'interno di un dato intervallo, ad esempio (0,1), intervallo aperto Il generatore deve essere: efficiente - ripetibile - programmi di simulazione possono doverlo attivare milioni di volte la stessa sequenza deve poter essere rigenerata a piacere Nel 1951 D.H. Lehmer ha proposto un algoritmo parametrico che, per una opportuna scelta dei parametri, ha superato numerosi test empirici di casualità Numeri casuali e simulazione 2

Generatore di Lehmer Siano dati: i) modulo: m intero, primo, grande ii) moltiplicatore: a intero, 1 < a < m iii) funzione f(z): z n+1 = a * z n mod m iv) seme: z 1 intero, 1 z 1 m-1 v) normalizzazione u n = z n / m poichè m è primo, la funzione non produce mai 0 per 1 z m-1, quindi la sequenza non collassa mai a 0 (diversamente sarebbe possibile a1 * m1 * z1 * m2 mod m1 * m2 = 0) la normalizzazione v) non influenza l'apparente casualità della sequenza la sequenza non ha, ovviamente, nulla di casuale, ma per una opportuna scelta di a ed m non è distinguibile da una vera sequenza casuale fissati a ed m, risulta fissata la lunghezza del periodo p (p<=m), tale che z p =z 1 definiamo sequenza a periodo completo una permutazione dei numeri 1,...,m-1 esistono coppie di valori a ed m che generano sequenze a periodo completo il seme influenza soltanto il punto di partenza della sequenza, ma non l'ordine i valori di u saranno 1/m, 2/m,..., (m-1)/m, con media 1/2 e σ 1/ 12 Esempio: f(z) = 6z mod 13...1,6,10,8,9,2,12,7,3,5,4,11,1... Numeri casuali e simulazione 3

UNA SOLUZIONE EFFICACE occorre trovare coppie di parametri a ed m a periodo completo con periodo sufficientemente lungo: per m = 2 31-1 esistono 534 milioni di moltiplicatori adatti occorre implementare la funzione f(z) in modo efficiente e coerente con le possibilità di rappresentazione numerica di una specifica macchina a=16807 ed m = 2 31-1 generano sequenze a periodo completo che hanno superato numerosi test statistici di casualità, ma, per una implementazione diretta della funzione di generazione, richiedono l'utilizzo di interi a 46 bit per contenere il massimo valore del prodotto a * z ogni sequenza deve essere inizializzata attribuendo un valore al seme la libreria stdlib.h del linguaggio C mette a disposizione la funzione rand() che produce un numero intero pseudo-casuale compreso fra 0 e RAND_MAX (costante pre-definita anch essa in stdlib.h) Numeri casuali e simulazione 4

ESEMPIO DI UTILIZZO DI rand() #include <stdlib.h> #include <stdio.h> #define N 10 int main(){ int i,r; printf( %d numeri a caso fra 0 e %d \n,n,rand_max); for (i=0;i<n;i++){ /* genera N numeri casuali */ r = rand(); printf( %d\n,r); return 0; si noti che successive esecuzioni di questo programma producono sempre lo stesso numero, perche all avvio del programma il seme viene sempre reinizializzato a 1 Numeri casuali e simulazione 5

se si vogliono generare sequenze diverse a ogni esecuzione è possibile utilizzare la funzione srand() per assegnare un valore al seme si può riottenere la stessa sequenza, per riprodurre uno stesso esperimento, riassegnando lo stesso valore #include <stdlib.h> #include <stdio.h> #define N 10 int main(){ int i,r; unsigned int s; /* seme */ printf( Inserire un numero per inizializzare la sequenza: ); scanf( %d,&s); srand(s); printf( %d numeri a caso fra 0 e %d \n,n,rand_max); for (i=0;i<n;i++){ /* genera N numeri casuali */ r = rand(); printf( %d\n,r); return 0; Numeri casuali e simulazione 6

Generazione di un numero intero con distribuzione uniforme fra 0 e 1 è sufficiente dividere il risultato di random per RAND_MAX double randr(){ return (double)rand()/rand_max; Generazione di uno fra n eventi con probabilità discreta p i sia P k = k " p i,1! k! n, probabilità cumulativa, P n = 1 i=1 si genera l'evento e i se P i-1 < randr P i (P 0 =0) la probabilità dell'evento e i è pari all'ampiezza dell'intervallo P i - P i-1 = p i Numeri casuali e simulazione 7

Distribuzione normale (cfr. teorema del limite centrale) È noto che una distribuzione normale è il limite della somma di variabili casuali con distribuzione uniforme date DN variabili indipendenti con distribuzione uniforme, media m e deviazione standard σ, la funzione z = (x 1 +...+x DN -DN*m)/σ *sqrt(12) approssima una variabile con distribuzione normale, valore medio 0 e deviazione standard 1 la somma di 12 valori ottenuti da RandR approssima una distribuzione normale con media 6 e σ=1 Osservazione: randnorm produce valori nell'intervallo m ± 6 σ Numeri casuali e simulazione 8