Laboratorio Processi Stocastici Annalisa Pascarella Informazioni e-mail: [email protected] [email protected] Giovedì 9 Dicembre 11-13 aula Mac Lunedì 14 Dicembre 11-14 aula pc1 Martedì 15 Dicembre 11-14 aula Mac Programma MATLAB Generazione di numeri casuali esercizi vari durante il laboratorio metodo Monte Carlo, algoritmi per la generazione di numeri pseudo-casuali Simulazione processo di Poisson MATLAB MATLAB MATrix LABoratory Linguaggio di programmazione interpretato legge un comando per volta eseguendolo immediatamente Per avviarlo -> icona sul desktop workspace command window MATLAB come calcolatrice 4+7 invio è possibile definire variabili e operare su esse x = 9 -> invio Operatori aritmetici: Caratteri speciali: ; % : help mean +-*/^ Variabili predefinite: i, pi, NaN, Inf Funzioni elementari: sin, cos, log, exp Comandi utili clear a clear all ultima variabile memorizzata clc per cancellare tutte le variabili dal workspace ans per cancellare una variabile dal workspace pulisce lo schermo help <nome_funzione> Lavorare con MATLAB In MATLAB tutte le variabili sono trattate come matrici scalari vettori riga v = (v1,…, vn) vettori colonna v = (v1,…, vn)T matrici a11 a1n A a a m1 mn -> -> matrici 1 x 1 matrici 1 x n -> matrici n x 1 -> matrici m x n Vettori a = [1 2 3 4 5] a = [1, 2, 3, 4, 5] Per definire un vettore riga Per definire un vettore colonna a = [1; 2; 3; 4; 5] a = [1 2 3 4 5] ’ Usando : a = 1:3:10 b = -5:5 Matrici Per definire una matrice size(A) -> 3 0 R 22 A 1 2 dimensioni della matrice per memorizzare le dimensioni 3 0 3 R 23 B 1 2 0 B(2,3) B(2,3) = 1; B • • • A = [3 0; 1 2] A = [3 0 1 2] per selezionare un elemento per modificare l’elemento per visualizzare B -> [r c] = size(A) b1 = [3;1] b2 = [0; 2] b3 = [3; 0] B = [b1, b2, b3] Il comando : Importante per la manipolazione delle matrici generazione di vettori che siano delle progressione aritmetiche di passo costante a = [1:10] b = 1: .2 : 4 c = 3:0 -> c = 3: -1: 1 o a = 1:10 non produce niente!!!! mediante : si possono estrarre righe e colonne 3 0 3 R 23 B 1 2 0 estrarre la riga R2 B(2,:) estrarre la colonna C2 B(:,2) Identità-zero-uno identità di ordine n matrice nulla m x n matrice m x n di 1 -> eye(n) eye(3) 1 0 0 I 0 1 0 0 0 1 -> zeros(m,n) zeros(2,3) 0 0 0 Z 0 0 0 -> ones(m,n) ones(2,3) 1 1 1 Z 1 1 1 Operazioni Somma / Differenza A+B, A-B Trasposta A’ Prodotto A*B Prodotto per uno scalare A*k Elemento per elemento A.*B size(A)= size(B) #CA = #RB size(A) = size(B) Script e funzioni Script parametri in ingresso non modificabili le variabili usate sono messe nella memoria di lavoro di MATLAB Funzioni script al quale si possono passare parametri in ingresso ed ottenerne in uscita sintassi y1,…,yn -> parametri in uscita x1,…,xn –> parametri in entrata le variabili usate all’interno sono locali function [y1,…,yn] = nome_funzione(x1,…,xn) Script E’ possibile scrivere degli script in Matlab cliccando su new File -> New -> M-file Le funzioni L’m file va salvato col nome nome_funzione.m La funzione può essere richiamata il nome del file deve essere identico a quello della funzione dalla finestra di comando all’interno di uno script da altre funzioni digitando [y1,…,yn]=nome_funzione(x1,…,xn) Per poter richiamare la funzione dobbiamo essere nella directory nella quale è salvata la funzione oppure “settare” nel path di Matlab la directory nella quale la funzione è salvata. Cicli Ciclo incondizionato for i = n1:passo:n2 blocco di istruzioni end Ciclo condizionato while condizione blocco di istruzioni end Test condizionale if condizione1 blocco di istruzioni elseif condizione2 blocco di istruzioni else blocco di istruzioni end Operatori Operatori relazionali: < , <= , > , >= , == , = , = si usano per confrontare tra di loro gli elementi di 2 matrici; il risultato dell’operazione sarà Operatori logici: 0 se la relazione è falsa 1 se la relazione è vera &,|, si usano per combinare tra loro gli operatori relazionali Nota = serve per assegnare valore ad una variabile == per verificare se una variabile assume un determinato valore Input\output input sprintf n = input(‘inserisci un intero ’); disp(sprintf(‘n = %d’,n)) disp(‘stringa di caratteri’) Grafica In MATLAB è possibile disegnare funzioni in 2D e 3D rappresentare graficamente dei dati Il comando plot(x,y) si usa: per rappresentare punti nel piano per disegnare il grafico di una funzione x e y devono essere vettori di ugual misura Esempio - I Per rappresentare dei punti nel piano x = [1 2 3 7 -9 2]; y = [-2 -6 1 5 7 2]; plot(x,y) figure(2) plot(x,y,'*') Esempio - II Per “plottare” la funzione y=sin(x) x = [-pi:.01:pi]; y = sin(x); plot(x,y) definiamo l’intervallo in cui vogliamo disegnare la funzione definiamo la funzione disegniamo la funzione figure(2) plot(x,y, '-g') è possibile inserire un terzo parametro di input Sintassi del comando “plot” plot(x, y) x e y sono i vettori dei dati (ascisse e ordinate dei punti) plot(x, y, 'opzioni') x e y come sopra; opzioni è una stringa opzionale che definisce il tipo di colore, di simbolo e di linea usato nel grafico. help plot per vedere quali sono le varie opzioni plot(y) realizza il grafico del vettore y rispetto ai propri indici Comandi utili - I figure(num) per creare (richiamare) una finestra grafica hold on per avere più grafici nella stessa finestra hold off per disattivare la funzione axis([xmin xmax ymin ymax]) per riscalare il grafico sublot(righe, colonne, sottofinestra) per creare diversi grafici separati in una stessa finestra esistono diversi comandi per “abbellire” i grafici title, xlabel, ylabel, legend Risultati usando hold on figure(1); hold on; grid on y2 = cos(x); plot(x,y2,’r’) title(‘seno e coseno’) % creiamo delle sottofinestre figure(3); subplot(1,2,1); plot(x,y); title('seno') subplot(1,2,2); plot(x,y2); title('coseno') usando subplot 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)) , ’ . ’) 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’iesimo intervallo SUP Algoritmo istogramma 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