Post on 25-Feb-2016
description
Laboratorio di Processi Stocastici
Alberto Sorrentino
www.fisica.unige.it/~sorrentino/Teaching
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
A proposito di processi stocastici...
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 ZeroRipasso di MATLAB
MATLAB
(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.”
Cos’è?
Perché?
1. Perché lo conosco2. 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”.
Contenuto Cartella
Lista comandi passati
Finestra di comando principale
MATLAB
MATLAB non richiede di dichiarare le variabili
2+2 a a=1 a b=1; b
Provare
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?
Per Credere
Come faccio a sapere cosa ho già dichiarato? Il WORKSPACE!!
Cancellare una variabile “a” non più utile: clear aSvuotare il workspace (da fare spesso per evitare casini!!): clear all
Variabili
Vettori
Definizione “esplicita”
Vettore riga vr = [1 2 3 9 8 7]Vettore colonna 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 vettorevr(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) matrice nulla (quadrata)U = ones(5) matrice di uno (quadrata)I = eye(5) 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*IeU.*I
Cicli e condizioniCiclo for
for indice = primo_valore:incremento:ultimo_valoreIstruzioni
end
If / elseif condizione1
Istruzionielseif condizione2 (opzionale)
Istruzionielse (opzionale)
Istruzioniend
Ciclo whilewhile condizione
Istruzioniend
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>1A==0.5A==3 && (B==5 || B==7 )
Provare ad esempio
A=1If A==1 disp (‘A vale 1’)End
ScriptUno script è un file di testo che MATLAB interpreta come una sequenza di comandi.
File New M-File
N = 10;for i = 1:N v(i) = i^2end
Salvare il file con script_prova.m
Dalla command window, lanciare script_prova
Esiste la variabile i ???
FunctionsFunzione: file di testo contenente un’intestazione
File New M-File
function v = funzione_prova(N)
for i = 1:N v(i) = i^2end
Salvare il file con funzione_prova.m
Dalla command window, lanciare funzione_prova(10)
Esiste la variabile i ???
Visualizzazione - plot
plot( x )plot( y )
plot( x, y )
plot( x, y, ’ r ’ )
plot( x, y, ’ . ’ )
Mette in ascissa l’indice della componente del vettore, in ordinata il valore della componente
Mette in ascissa i valori del vettore “x”, in ordinata i valori del vettore “y”; “x” e “y” devono essere lunghi uguali!!
Rosso tratteggiato
Punti
figure Crea una figura vuota
hold on Per mettere più oggetti nella stessa figura
Definiamo due vettorix = -10:10y = x.^2
Visualizzazione – altri comandi
D = load(‘dato_per_plot.dat’);size(D)
figurebar(D)
figureimage(D)
figurecontour(D)
figurequiver(D(:,1), D(:,2), D(:,3), D(:,4))
www.fisica.unige.it/~sorrentino/Teaching
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
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)) , ’ . ’)
www.fisica.unige.it/~sorrentino/Teaching
Algoritmo istogramma
Scelta degli estremi e della larghezza intervallo
INF SUPDELTA
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
Algoritmo istogramma (semplice)
Per ogni elemento del vettore data(i)
Per ogni intervallo
Se data(i) è compreso nei valori dell’intervallo
Incrementare il contatore relativo a quell’intervallo
INF SUPDELTA
Il j-esimo intervallo ha come estremi INF+(j-1)*DELTA e INF+j*DELTA
Non esistono domande stupide. Esistono solo risposte stupide.
Algoritmo istogramma (semplice)INF = -4;SUP = 4;DELTA = 0.4; NUM_INT = (SUP-INF)/DELTA; % numero di intervallicontatore = 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
endend
VALORI = INF+DELTA/2 : DELTA : SUP-DELTA/2figurebar(VALORI, contatore)
Algoritmo istogramma (efficiente)
L’algoritmo appena scritto fa un ciclo di troppo...INF SUP
1 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 intervallicontatore = zeros(1,NUM_INT) % inizializziamo il contatore;
for i = 1:size(data,2) % per ogni datoj = ceil((data(i)-INF)/DELTA);contatore(j) = contatore(j) + 1;
end
VALORI = INF+DELTA/2 : DELTA : SUP-DELTA/2figurebar(VALORI, contatore)