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