Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0...

21
Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017 Palermo 24 - 28 Luglio 2017 L.2.1. Numeri Pseudocasuali www.u4learn.it Arianna Pipitone

Transcript of Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0...

Page 1: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017Palermo 24 - 28 Luglio 2017

L.2.1. Numeri Pseudocasuali

www.u4learn.it Arianna Pipitone

Page 2: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Introduzione alla probabilità

MATLAB mette a disposizione degli utenti una serie di funzioni per la gestione dei numeri pseudocasuali che ci consentono di avvicinarci al mondo della probabilità in modo semplice ed intuitivo.

Nel dettaglio, in quanto segue mostreremo come sia possibile utilizzare le funzioni di MATLAB per simulare semplici esperimenti relativi al lancio di:

• monete

• dadi

Page 3: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

La legge dei grandi numeri

La legge dei grandi numeri, detta anche Teorema di Bernoulli, descrive il comportamento della media di una sequenza di n variabili casuali, indipendenti e caratterizzate dalla stessa distribuzione di probabilità (per esempio, n misure della stessa grandezza, n lanci della stessa monete, ecc…) al tendere ad infinito della numerosità della sequenza stessa (n).

Page 4: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Testa o croce?

Vogliamo realizzare una funzione in MATLAB che ci consenta di simulare il processo di lancio di una moneta ed analizzarne l’esito

Per questo, ci viene in aiuto la funzione MATLAB rand

Il comando help permette di comprendere il comportamento di questa funzione.

>> help rand

Uniformly distributed pseudorandom numbers

Digitando il comando:

otteniamo un numero pseudocasuale compreso in (0, 1) intervallo aperto

MATLAB, in pratica, suddivide l’intervallo compreso tra 0 e 1 uniformemente, restituendo un valore appartenente a questo intervallo. Tutti i sotto intervalli sono equiprobabili

>> rand

Page 5: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Cosa vuol dire pseudo-casuali?

I numeri sono detti pseudo-casuali perché sono generati

da metodi deterministici ben definiti e con passi precisi, a

partire da un determinato valore iniziale (seme o seed)

Partendo da un particolare seed, tali procedure generano,

con calcoli precisi e noti, sequenze di numeri che

sembrano casuali, pur in realtà non essendolo. La

casualità può essere determinata modificando a piacere il

seed.

Normalmente MATLAB all’avvio imposta il seed a 0

Page 6: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Vettori di valori pseudo-casuali

Per vedere l’attuale valore del seed si utilizza il comando rng:

• Type indica la strategia di generazione dei numeri a partire dal Seed

• State rappresenta il vettore dei numeri pseudo-casuali generato

La pseudocasualità (che può essere eliminata) è utile per poter assicurare la ripetibilità degli esperimenti e il controllo del codice

>>rng

ans =

Type: ‘twister’

Seed: 0

State: [625x1 unit32]

Page 7: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Vettori di valori pseudo-casuali

Il seed è un numero intero minore di 232 e, come visto, di default è pari 0 per tutti i metodi di estrazione

Si può variare sia il metodo per generare numeri pseudocasuali sia il valore del seed usato dagli algoritmi mediante il comando RandStream

Per esempio:

Le istruzioni seguenti permettono di inizializzare il seed sul valore di clock (orologio interno del computer) permettendo la generazione di numeri casuali non ripetibili

Il comando clock restituisce un vettore [yyyy mm dd hh mm ss]

per versioni < 7.7

per versioni ≥ 7.7

>> s = RandStream('mt19937ar', 'seed', 1);

>> RandStream.setGlobalStream(s);

>> rand('seed',sum(100*clock))

>> RandStream.setDefaultStream(RandStream...

('mt19937ar','seed',sum(100*clock)))

Page 8: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Vettori di valori pseudo-casuali

Il seed può essere modificato anche tramite

Inizializzando il seed si riporta la procedura di estrazione dei numeri

ad uno stato iniziale ben definito

Ogni volta che si esegue un’estrazione, si ottiene un numero casuale e

si modifica lo stato interno del processo in maniera deterministica per

l’estrazione del numero successivo

Quando il seed viene inizializzato ad uno specifico valore, si otterrà

sempre la stessa sequenza di estrazioni; ad ogni seed corrisponde

una ben definita sequenza di numeri

>> rng(1)

Page 9: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Approcci alla modellazione di eventi reali

Dopo aver visto come estrarre una sequenza di numeri pseudocasuali compresi tra 0 e 1, vediamo come è possibile trasformare ogni evento di estrazione in un risultato corrispondente ad un evento reale, qualequellodel lancio di una moneta.

Come facciamo a fare corrispondere Testa o Croce all’estrazione di un numero pseudocasuale?

Page 10: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Funzione moneta

Un possibile approccio è testare su ogni elemento del vettore/matrice creato se il numero estratto ricade in certi sotto-intervalli che corrispondono ai possibili esiti esterni. Il numero dei sotto-intervalli deve essere uguale al numero degli esiti

Per esempio, nel lancio della moneta ci sono 2 esiti:

1. Testa

2. Croce

Si divide pertanto l’intervallo in 2 sotto-intervalli e si sceglie, arbitrariamente che, per esempio, a valori compresi tra 0 e 0.5 corrisponde Testa, a valori compresi tra 0.5 e 1 corrisponde Croce

Basterà poi verificare se il numero estratto è maggiore o minore di 0.5 per avere simulato l’evento reale del lancio di una moneta

Page 11: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Funzione moneta

Per simulare il lancio di una moneta, vasterà quindi estrarre un numero causale compreso tra 0 e 1 tramite il comando rand

e poi controllare se il valore estratto è maggiore o minore di 0.5 ricorrendo, per esempio, ad una funzione booleana

>> estrazione = rand;

>> risultato = estrazione > 0.5

Page 12: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Varianti della funzione rand

In base alla specifica di una serie di parametri, la funzione rand genera output diversi

rand Genera un numero pseudocasuale nell’intervallo (0,1)

rand(n) Costruisce una matrice quadrata nxn di numeri pseudocasuali uniformemente distribuiti nell’intervallo (0,1)

rand(m,n,t,…) Costruisce una matrice mxnxtx… di numeri pseudocasuali uniformemente distribuit nell’intervallo (0,1)

Page 13: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Numeri pseudocasuali interi

MATALB dispone anche di un generatore di numeri interi positivi pseudocasuali

randi(b) Genera un numero intero positivo pseudocasuale nell’intervallo [1,b]

randi(b,n) Costruisce una matrice quadrata nxn di numeri interi positivi pseudocasuali uniformemente distribuiti nell’intervallo [1,b]

randi(b,m,n,t,…) Costruisce una matrice mxnxtx… di numeri interi positivi pseudocasuali uniformemente distribuiti nell’intervallo [1,b]

Page 14: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Numeri pseudocasuali interi

A volte torna utile generare numeri pseudocasuali che abbiano una media e una deviazione standard assegnata

randn Genera un numero pseudocasuale con media 0 e deviazione standard 1

randn(n) Costruisce una matrice quadrata nxn di numeri pseudocasuali con media 0 e deviazione standard 1

randn(m,n,t,…) Costruisce una matrice mxnxtx… di numeri pseudocasuali con media 0 e deviazione standard 1

Page 15: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Funzioni di approssimazione di MATLAB

NOTA: tutte le funzioni di approssimazione operano anche sulle matrici (elemento per elemento)

round(x) Approssima il numero x all’intero positivo o negativo più vicino

floor(x) Approssima il numero x all’intero positivo o negativo più piccolo. Corrisponde alla parte intera inferiore ( )

ceil(x) Approssima il numero x all’intero positivo o negativo più grande. Corrisponde alla parte intera superiore ( )

fix(x) Approssima il numero x all’intero positivo o negativo più vicino allo zero

MATLAB offre diverse funzioni per l’approssimazione di numeri

Page 16: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Funzioni di approssimazione di MATLAB

>> round(3.1)

ans =

3

>> round(3.7)

ans =

4

>> round(3.5)

ans =

4

>> floor(3.7)

ans =

3

>> floor(-3.1)

ans =

-4

>> floor(-3.7)

ans =

-4

>> ceil(3.1)

ans =

4

>> ceil(-3.1)

ans =

-3

>> ceil(-3.7)

ans =

-3

>> fix(3.7)

ans =

3

>> fix(-3.1)

ans =

-3

>> fix(-3.7)

ans =

-3

Page 17: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Testa o Croce?

Proviamo a modellare lo stesso evento del lancio della moneta tramite la funzione round

Perché basta questo?

>> help round

rounds towards nearest decimal or integer

round(X) rounds each element of X to the nearest integer.

>> risultato = round(estrazione)

Page 18: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Lancio dei dadi

Si può provare ad analizzare empiricamente le probabilità legate all’evento di lancio dei dadi

La funzione round non va bene in questo caso

Perché?

Qual è la funzione più opportuna?

Possiamo pure combinare alcune delle funzioni viste per risolvere diversamente il problema

Page 19: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Lancio dei dadi

Con la funzione floor

Con la funzione ceil

Page 20: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Problema 10: Numeri pseudocasuali

1. Si generi una matrice A 6x9 contenente nelle prime 6 colonne numeri casuali uniformemente distribuiti in (0 , 1) e nelle ultime 3 il valore 10

2. Si generi una matrice quadrata B di dimensioni 10x10 contenente numeri casuali uniformemente distribuiti nell'intervallo (-3 , 11)

3. Si generi una matrice C 8x10 avente 0 sulle colonne pari e 1 su quelle dispari

4. Si generi una matrice D di dimensioni 7x4 contenente zeri sulle righe pari e numeri interi uniformemente distribuiti in [30 , 52] sulle righe dispari

5. Si generi un numero intero casuale maggiore di 251

6. Si generi una matrice F di dimensioni 9 x 5 avente nelle righe 2, 3 e 5 numeri casuali distribuiti con media 10 e deviazione standard 1 e nelle restanti righe numeri uniformemente distribuiti minori di zero

Page 21: Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017...2017/06/02  · Type: ‘twister’ Seed: 0 State: [625x1 unit32] L.2.1. Numeri Pseudocasuali Vettori di valori pseudo-casuali

L.2.1. Numeri Pseudocasuali

Problema 11: Numeri pseudocasuali e funzioni di appros.

1. Si generi una matrice quadrata A 9x9 contenente 1 nella diagonale secondaria e 0 altrove

2. Si generi una matrice triangolare superiore B di dimensioni 8x8 contenente numeri interi casuali uniformemente distribuiti nell'intervallo [-9 , 11)

3. Si generi una matrice quadrata C 10x10 che abbia 0 sulla diagonale principale e 4 altrove

4. Si generi una matrice D 8x10 avente numeri complessi sulla diagonale principale e numeri interi uniformemente distribuiti in [-4 , 4] altrove

5. Si generi una matrice quadrata E 7x7 che abbia -1 sulla diagonale principale e su quella secondaria e 3 altrove

6. Date due matrici M 4x6 ed N 6x4 di numeri interi minori di 100, verificare che (M * N)T = NT * NT

7. Calcolare il determinante della matrice magica di ordine 8 ed invertire la matrice B costruita al punto 2