220 likes | 350 Views
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
E N D
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: • applicare la teoria, • imparare a smanettare, • divertirsi (...) Obiettivi, metodi e piano di lavoro • 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é? 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 Per Credere • 2+2 • a • a=1 • a • b=1; • b • 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 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 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) 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*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
Functions Script Uno 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^2 end Salvare il file con script_prova.m Dalla command window, lanciare script_prova Esiste la variabile i ??? Funzione: file di testo contenente un’intestazione File New M-File function v = funzione_prova(N) for i = 1:N v(i) = i^2 end Salvare il file con funzione_prova.m Dalla command window, lanciare funzione_prova(10) 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 Punti plot( x, y, ’ . ’ ) Per mettere più oggetti nella stessa figura hold on
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 SUP 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) Non esistono domande stupide. Esistono solo risposte stupide. • 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 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 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 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)