Laboratorio
Processi Stocastici
Annalisa Pascarella
Informazioni
e-mail:
pascarella@dima.unige.it
annalisa.pascarella@unipr.it
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