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
esercizi vari durante il laboratorio
Generazione di numeri casuali
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
command windowworkspace
MATLAB come calcolatrice
è possibile definire variabili e operare su esse
x = 9 -> invio 4 + 7
invio
Operatori aritmetici: + - * / ^
Caratteri speciali: ; % : Variabili predefinite: i, pi, NaN, Inf
Funzioni elementari: sin, cos, log, exp
help mean
Comandi utili
clear a
per cancellare una variabile dal workspace
clear all
per cancellare tutte le variabili dal workspace
ans
ultima variabile memorizzata
clc
pulisce lo schermo
help <nome_funzione>
Lavorare con MATLAB
In MATLAB tutte le variabili sono trattate come matrici
scalari -> matrici 1 x 1
vettori riga -> matrici 1 x n v = (v1,…, vn)
vettori colonna -> matrici n x 1 v = (v1,…, vn)T
matrici -> matrici m x n
mn m
n
a a
a a
A
1
1 11
Vettori
Per definire un vettore riga
Per definire un vettore colonna
Usando :
a = [1 2 3 4 5]
a = [1, 2, 3, 4, 5]
a = [1; 2; 3; 4; 5]
a = [1 2 3 4 5] ’ a = 1:3:10
b = -5:5
Matrici
Per definire una matrice
2 22 1
0
3
R
A A = [3 0; 1 2]
A = [3 0 1 2]
b1 = [3;1]
b2 = [0; 2]
b3 = [3; 0]
B = [b1, b2, b3]
3 2
0 2
1
3 0
3
R
B
B(2,3)
B(2,3) = 1;
B
• per selezionare un elemento
• per modificare l’elemento
• per visualizzare B
size(A) -> dimensioni della matrice
per memorizzare le dimensioni -> [r c] = size(A)
Il comando :
Importante per la manipolazione delle matrici
estrarre la riga R2
estrarre la colonna C2
3 2
0 2
1
3 0
3
R
B
B(2,:) B(:,2)
generazione di vettori che siano delle progressione aritmetiche di passo costante
a = [1:10] o a = 1:10
b = 1: .2 : 4
c = 3:0 -> non produce niente!!!!
c = 3: -1: 1
mediante : si possono estrarre righe e colonne
Identità-zero-uno
eye(n)
eye(3)
1 0 0
0 1 0
0 0 1 I
0 0 0
0 0 Z 0
zeros(m,n) zeros(2,3)
1 1 1
1 1 Z 1
ones(m,n) ones(2,3) identità di ordine n ->
matrice nulla m x n ->
matrice m x n di 1 ->
Operazioni
Somma / Differenza A+B, A-B
Trasposta A’
Prodotto A*B #C
A= #R
BElemento per elemento
A.*B size(A) = size(B) Prodotto per uno
scalare
A*k
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
il nome del file deve essere identico a quello della funzione
La funzione può essere richiamata
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
Ciclo condizionato
Test condizionale
for i = n1:passo:n2 blocco di istruzioni end
while condizione
blocco di istruzioni end
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à
0 se la relazione è falsa
1 se la relazione è vera
Operatori logici:
& , | ,
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’)
Il comando si usa:
per rappresentare punti nel piano
per disegnare il grafico di una funzione
x e y devono essere vettori di ugual misura
Grafica
In MATLAB è possibile
disegnare funzioni in 2D e 3D
rappresentare graficamente dei dati
plot(x,y)
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”
x e y sono i vettori dei dati (ascisse e ordinate dei punti)
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
realizza il grafico del vettore y rispetto ai propri indici plot(x, y)
plot(x, y, 'opzioni')
plot(y)
Comandi utili - I
per creare (richiamare) una finestra grafica
per avere più grafici nella stessa finestra
hold off per disattivare la funzione
per riscalare il grafico
per creare diversi grafici separati
in una stessa finestra
esistono diversi comandi per “abbellire” i grafici
title, xlabel, ylabel, legend figure(num)
hold on
axis([xmin xmax ymin ymax])
sublot(righe, colonne, sottofinestra)
Risultati
usando hold on
usando subplot 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')
Esercizio
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)) , ’ . ’)
Creare l’istogramma di un
vettore
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
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
Il j-esimo intervallo ha come estremi INF+(j-1)*DELTA e INF+j*DELTA
INF DELTA SUP