% Questo programma costruisce due vettori linearmente dipendenti. % Successivamente perturba con valori pseudo-casuali uno dei due. % Stima quindi col metodo dei minimi quadrati i parametri del modello % lineare ed infine plotta sullo schermo dati e modello stimato (retta). % Commenti a cura di Alessandro Flati e Luigi Lunardon. % Tramite il simbolo del percento, MATLAB ignora il testo scritto alla % sua destra lungo la stessa riga. clear % clear libera (ovvero cancella dalla memoria) tutte le variabili usate finora. close all % close all chiude tutte le finestre di grafici al momento presenti sullo schermo. % I seguenti quattro comandi rendono il programma 'parametrico'. n = 30 % In questo modo assegno il valore 30 alla variabile n. % Cosi' scritto, una volta eseguito il comando, MATLAB scrivera' su % schermo 'n = 30'. a = 2.5; % Con l'aggiunta di un punto e virgola (semicolon) alla fine del % comando, MATLAB evitera' di scrivere la variabile appena memorizzata. b = 0.3; % Per indicare numeri con la virgola, si deve utilizzare la % notazione con il punto. sigma = 1.; % il blocco di comandi if 0 ... end serve per interpretare un intero blocco % di righe come commento. if 0 % Qui posso inserire qualsiasi cosa, poiche' MATLAB ignora tutti i % comandi inseriti tra l'if e l'end se la condizione nell'if e' falsa. % Lo 0 corrisponde al falso. % L' 1 corrisponde al vero. % Il seguente blocco for i=a:b ... end indica un ciclo for, dove 'a' e 'b' % sono il valore iniziale e finale della variabile 'i'. for i=1:n % Sto cominciando un ciclo che va da 1 a n, ovvero le istruzioni % contenute fino all' 'end' verranno ripetute n volte. Alla % fine di ogni ciclo i viene aumentato di un'unita'. y(i) = a*i + b; x(i)=i; % il programma assegna alla componente 'i' del vettore 'y' % il valore a*i + b. end % chiude il ciclo for. end % chiude il comando if. % Il comando seguente crea da solo un vettore x uguale a quello creato sopra. x = linspace(1 , n , n) % Il comando seguente crea da solo un vettore y uguale a quello creato sopra. y = linspace(a , a*n + b , n) % Il comando v=linspace(xx,yy,z) crea un vettore v con z componenti tali che v(1)=xx, % v(z)=yy e che v(i+1)-v(i)=(yy-xx)/(n-1), i=1,..,z-1. Esso divide un segmento in n-1 % segmenti congruenti ed assegna alle componenti del vettore i valori degli estremi: % v= [xx, (yy-xx)/(n-1), xx+2*(yy-xx)/(n-1), ... , xx+(n-2)*(yy-xx)/(n-1), yy]. y % Con questo comando semplicemente visualizzo su schermo la variabile y (vettore). % z = y + normrnd(0, sigma, 1, n); % normrnd( mu, sigma, m, n ) genera una matrice mxn, che riempie con numeri % pseudo-casuali i.i.d. relativi alla distribuzione normale (Gaussiana) di % media mu e deviazione standard (radice quadrata della varianza) sigma. z = y + rand(1,n)-0.5; % rand(m,n) genera una matrice mxn con numeri pseudo-casuali i.i.d. relativi alla distribuzione % uniforme nell'intervallo (0,1). Sottraiamo 0.5 per avere un v.a. uniforme in (-.5,.5). who % Il comando who stampa su video le variabili attualmente in memoria. size(z) % Stampa le dimensioni della variabile z (matrice). plot(x,z,'+') % Il comando plot(v,w,'+') plotta su un piano cartesiano le coppie del tipo (v(i),w(i)). % Se inseriamo anche '+', i punti saranno rappresentati da un +. In assenza di cio', matlab % congiungera' i punti con una spezzata. Per vedere dettagli di questo comando usare il % comando help plot. pause % Con questo comando, MATLAB attende un mio input, ovvero che io prema un % tasto sulla tastiera, prima di proseguire con il resto del programma. % Calcoleremo adesso la retta dei minimi quadrati tra z e x. Tale retta, della forma % z=aa*x+bb minimizza la somma dei quadrati di z(i)-aa*x(i)-bb. Per trovare i valori % di aa e bb e' sufficiente derivare rispetto ad aa e bb tale sommatoria dei quadrati % e risolvere il sistema di due equazioni lineari risultante. % L'espressione di aa risulta: % aa=[sum_i (z(i)-mean(z))*(x(i)-mean(x))] / [sum_i (x(i)-mean(x))*(x(i)-mean(x))] % Tale espressione puo' essere calcolata in matlab come aa = (z-mean(z))*(x-mean(x))'/((x-mean(x))*(x-mean(x))') % mean(z) e' la media aritmetica dei valori di z. Poiche' abbiamo scritto z-mean(z), matlab % interpreta mean(z) come se fosse una matrice delle stesse dimensioni di z. % il simbolo A' indica l'hermitiana della matrice A, ossia la coniugata della trasposta. % Per bb risulta invece bb = (mean(z) - aa*mean(x)) hold on % Tutti i grafici plottati dopo il comando hold on saranno rappresentati nella stessa finestra % dove e' stato plottato l'ultimo grafico. % Per far cessare il comando hold on ricorriamo ad hold off. % Se vogliamo aprire una nuova finestra usiamo il comando figure. zz = aa*x + bb; % Nel vettore zz ci sono i valori previsti per la variabile dipendente dal modello lineare stimato dai dati x,z. plot(x,zz) save VariabiliLezione1 x, z; % Salva le variabili x e z nel file VariabiliLezione1.mat in modo tale da % poterle ricaricare in memoria con altri programmi col comando load(VariabiliLezione1). % Se non sono specificate variabili dopo il nome del file, semplicemente salva % tutte le variabili attualmente in uso. print -dpdf GraficoLezione1.pdf % Salva un file pdf contenente l'ultimo grafico generato dal programma.