MATLAB: Una veloce introduzione (Parte III)

MATLAB: Una veloce introduzione
(Parte III)
Author: Luca Albergante1
Dipartimento di Matematica, Università degli Studi di Milano
21 Marzo 2011
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
1/7
Sommario
1
Numeri casuali
2
Calcolo dei tempi
3
Esercizi
L. Albergante (Univ. of Milan)
Sommario
MATLAB
21 Marzo 2011
2/7
Numeri casuali
rand e randi
A volte in un algoritmo può essere necessario ottenere un numero
casuale. Le più semplici funzioni per generare numeri casuali sono
rand e randi.
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
3/7
Numeri casuali
rand e randi
A volte in un algoritmo può essere necessario ottenere un numero
casuale. Le più semplici funzioni per generare numeri casuali sono
rand e randi. rand() restituisce un numero casuale tra 0 ed 1, randi(k)
restituisce un numero intero casuale fra 1 e k.
Mrd = rand(3,4);
Mri = randi(100, [4,5])
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
3/7
Numeri casuali
random
Molto più generica è la funzione random() che restituisce valori presi
dalle più comuni distribuzioni di probabilità:
val1 = random(’Normal’,0,1,2,4)
val2 = random(’poiss’,1,2,4)
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
4/7
Numeri casuali
Media e C.
MATLAB implementa parecchie funzioni statistiche. Di particolare
interesse per noi sono la media mean() e la deviazione standard std()
M1 = random(’Normal’,0,1,10,6)
Media = mean(M1,2);
DevStd = std(M1, 0, 2);
errorbar(Media, DevStd)
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
5/7
Calcolo dei tempi
tic toc
Durante la parte teorica del corso vedrete come stimare teoricamente
il tempo di esecuzioni di un algoritmo. Noi lo faremo in maniera
computazionale.
Per calcolare quanto tempo impiega un pezzo di codice per essere
eseguito si utilizzano le funzioni tic e toc.
tic;
for i= 1:randi(10)
pause(i);
end
time1 = toc;
disp([’Ho atteso ’ num2str(time1) ’ secondi’]);
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
6/7
Esercizi
1
2
3
4
5
6
Scrivere una funzione che prenda in input un vettore di
componenti X e produca un grafico di sin(X) con una probabilità di
0.1 ed un grafico di cos(X) con una probabilità di 0.4
Disegnare l’istogramma di una variabile casuale distribuita
normalmente con media 5 e deviazione standard 2 (hint: hist)
Scrivere una funzione iterativa ed una ricorsiva per il calcolo
dell’i-esimo numero di Fibonacci. Valutate i tempi di esecuzione
per i due metodi al crescere dell’indice e plottate i tempi.
Generate un vettore casuale di interi, ordinatelo usando la
funzione sort(). Al variare della dimensione del vettore, calcolate i
tempi di esecuzione nel caso in cui il vettore sia 1) ordinato, 2)
ordinato al contrario, 3) con numeri casuali (hint sort).
Rappresentate graficamente i valori ottenuti all’esercizio
precedente. Secondo voi è un buon algoritmo?
Generate una matrice casuale 250x250. Stimate il tempo
necessario per calcolatene la 100esima potenza con il comando
build-in e moltiplicando le matrici di volta in volta. Valutate i tempi
all’aumentare della dimensione e dell’esponente
L. Albergante (Univ. of Milan)
MATLAB
21 Marzo 2011
7/7