Slides lezione I - Dipartimento di Fisica

Laboratorio di Processi Stocastici
Alberto Sorrentino
www.fisica.unige.it/~sorrentino/Teaching
A proposito di processi stocastici...
II
Giovedì 3 Dicembre ore 11:15 aula PC2 (116/117) – 1° piano
III SMID Venerdì 4 Dicembre ore 9:30 aula MAC (114/120) – 1° piano
III MATE Giovedì 11 Dicembre ore 11:15 aula PC2 (116/117) – 1° piano
Obiettivi, metodi e piano di lavoro
Obiettivi:
• applicare la teoria,
• imparare a smanettare,
• divertirsi (...)
Metodi:
• No dimostrazioni
• Prima pensare poi fare; ma se proprio non
capite niente, almeno fate qualcosa, che
aiuta...
Piano di lavoro:
• Ripasso di MATLAB
• Creazione di istogrammi
• Generazione di numeri casuali
• Analisi dati DNA
• Simulazione processo di Poisson
• Implementazione test statistici
Parte Zero
Ripasso di MATLAB
MATLAB
Cos’è?
(Wikipedia)
“MATLAB (abbreviazione di Matrix Laboratory) è un ambiente per il calcolo numerico e
l'analisi statistica ...
... che comprende anche l'omonimo linguaggio di programmazione ...
... consente di manipolare matrici, visualizzare funzioni e dati, implementare algoritmi.”
Perché?
1. Perché lo conosco
2. Perché ”è usato da milioni di persone nell'industria, nelle università e funziona su
diversi sistemi operativi, tra cui Windows, Mac OS, GNU/Linux e Unix”.
MATLAB
Contenuto
Cartella
Finestra di
comando
principale
Lista
comandi
passati
Variabili
MATLAB non richiede di dichiarare le variabili
Provare
 2+2
a
 a=1
a
 b=1;
b
Per Credere
 MATLAB funziona come un calcolatrice
 MATLAB non sa chi sia “a”
 Per assegnare un valore ad “a” si usa “=“
 Ora MATLAB sa chi è “a”
 Se volete assegnare un valore senza visualizzare, usate “;”
 Claro?
Come faccio a sapere cosa ho già dichiarato? Il WORKSPACE!!
Cancellare una variabile “a” non più utile: clear a
Svuotare il workspace (da fare spesso per evitare casini!!): clear all
Vettori
Definizione “esplicita”
Vettore riga
Vettore colonna
vr = [1 2 3 9 8 7]
vc = [1; 2; 3; 9; 8; 7]
Definizione “implicita”
Vettore riga
VR = 1:3:16 (primo_valore : incremento : estremo_superiore)
Vettore colonna
VC = (5:-2:-3)’ (primo_valore : incremento : estremo_superiore)’
L’apice indica la trasposizione
Il k-esimo elemento del vettore “vr” si trova con vr(k)
Per selezionare un sottoinsieme (sotto-vettore) di un vettore
vr(indice_iniziale : indice_finale)
Matrici
Definizione “esplicita”
Come per i vettori si va a capo con “;”
M = [1 2 3 ; 4 5 6]
La i-esima riga della matrice è M( i , : )
La j-esima colonna della matrice è M( : , j )
Il “:” serve a selezionare un intervallo; se gli estremi non sono
indicati, seleziona tutti i valori
Comandi per matrici “predefinite”
Z = zeros(5)
U = ones(5)
I = eye(5)
matrice nulla (quadrata)
matrice di uno (quadrata)
matrice identica
Operazioni con vettori e matrici
Le operazioni “naturali” di somma e sottrazione vengono
eseguite con i simboli normali (+/-)
Il prodotto standard tra vettori e matrici (o tra vettori e vettori,
o tra matrici e matrici) è il prodotto riga per colonna
Per moltiplicare ELEMENTO PER ELEMENTO si usa “ .* “
Verificare la differenza tra
U*I
e
U.*I
Cicli e condizioni
Ciclo for
for indice = primo_valore:incremento:ultimo_valore
Istruzioni
end
Ciclo while
while condizione
Istruzioni
end
If / else
if condizione1
Istruzioni
elseif condizione2 (opzionale)
Istruzioni
else (opzionale)
Istruzioni
end
Condizioni
RICORDARE SEMPRE:
Il segno “=“ serve per ASSEGNARE un valore a una variabile.
Per CONFRONTARE una variabile con un valore (o con un’altra variabile),
si usa “==“.
Esempi di condizioni valide:
A>1
A==0.5
A==3 && (B==5 || B==7 )
Provare ad esempio
A=1
If A==1
disp (‘A vale 1’)
End
Script
Uno script è un file di testo che MATLAB
interpreta come una sequenza di
comandi.
Functions
Funzione: file di testo contenente
un’intestazione
File  New  M-File
File  New  M-File
function v = funzione_prova(N)
N = 10;
for i = 1:N
v(i) = i^2
end
for i = 1:N
v(i) = i^2
end
Salvare il file con script_prova.m
Salvare il file con funzione_prova.m
Dalla command window, lanciare
script_prova
Dalla command window, lanciare
funzione_prova(10)
Esiste la variabile i ???
Esiste la variabile i ???
Visualizzazione - plot
x = -10:10
y = x.^2
Definiamo due vettori
figure
Crea una figura vuota
plot( x )
plot( y )
Mette in ascissa l’indice della componente del vettore, in ordinata
il valore della componente
plot( x, y )
Mette in ascissa i valori del vettore “x”, in ordinata i valori del
vettore “y”; “x” e “y” devono essere lunghi uguali!!
plot( x, y, ’ r ’ ) Rosso tratteggiato
plot( x, y, ’ . ’ ) Punti
hold on
Per mettere più oggetti nella stessa figura
Visualizzazione – altri comandi
www.fisica.unige.it/~sorrentino/Teaching
D = load(‘dato_per_plot.dat’);
size(D)
figure
bar(D)
figure
image(D)
figure
contour(D)
figure
quiver(D(:,1), D(:,2), D(:,3), D(:,4))
Panico...
Non ricordate l’utilizzo di un comando?
help comando
Non sapete come fare qualcosa? Volete saperne di più?
helpwin
Primo esercizio:
creare l’istogramma
di un vettore
www.fisica.unige.it/~sorrentino/Teaching
Caricare il vettore dei dati nella variabile
“data”:
data = load(‘dato_per_istogramma.dat’);
size(data)
Osserviamo i dati
plot(data)
plot(data, ones(size(data)) , ’ . ’)
Algoritmo istogramma
Scelta degli estremi e della larghezza intervallo
INF
DELTA
Contiamo quanti elementi del vettore cadono
in ogni intervallo: creiamo un vettore il cui
valore i-esimo rappresenti il numero di
conteggi nell’i-esimo intervallo
SUP
Algoritmo istogramma (semplice)
Per ogni elemento del vettore data(i)
Non esistono domande stupide.
Esistono solo risposte stupide.
Per ogni intervallo
Se data(i) è compreso nei valori dell’intervallo
Incrementare il contatore relativo a quell’intervallo
INF
DELTA
SUP
Il j-esimo intervallo ha come estremi INF+(j-1)*DELTA e INF+j*DELTA
Algoritmo istogramma (semplice)
INF = -4;
SUP = 4;
DELTA = 0.4;
NUM_INT = (SUP-INF)/DELTA; % numero di intervalli
contatore = zeros(1,NUM_INT) % inizializziamo il contatore;
for i = 1:size(data,2) % per ogni dato
for j = 1: NUM_INT % per ogni intervallo
if data(i)>INF+(j-1)*DELTA && data(i)<INF+j*DELTA
contatore(j) = contatore(j)+1;
end
end
end
VALORI = INF+DELTA/2 : DELTA : SUP-DELTA/2
figure
bar(VALORI, contatore)
Algoritmo istogramma (efficiente)
L’algoritmo appena scritto fa un ciclo di troppo...
INF
1
SUP
2
k
Osserviamo che il singolo valore data(i)
INF < data(i) < SUP
0 < data(i)-INF < SUP-INF=DELTA*NUM_INT
0 < (data(i)-INF)/DELTA < NUM_INT
Non esistono domande stupide.
Esistono solo risposte stupide.
Algoritmo istogramma (efficiente)
INF = -4;
SUP = 4;
DELTA = 0.4;
NUM_INT = (SUP-INF)/DELTA; % numero di intervalli
contatore = zeros(1,NUM_INT) % inizializziamo il contatore;
for i = 1:size(data,2) % per ogni dato
j = ceil((data(i)-INF)/DELTA);
contatore(j) = contatore(j) + 1;
end
VALORI = INF+DELTA/2 : DELTA : SUP-DELTA/2
figure
bar(VALORI, contatore)