DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Diagrammi 2D e 3D Funzioni di ordine superiore Marco D. Santambrogio – [email protected] Ver. aggiornata al 16 Gennaio 2014 Esami DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Quando (giorno) 2do compitino: 6 Feb, 2014 Appello: 20 Feb, 2014 • Quando (ora): 12.15 • Dove 2ndo compitino: CT.40 CT.33 CT.41 Appello: BL.27.04 BL.27.03 2 Qualche ora in più DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Da Marzo a Giugno 2014 mercoledì dalle 5pm alle 7pm • Gennaio/Febbraio 2014 21.01 dalle ore 6 in L.10 30.01 dalle ore 6 in L.10 04.02 dalle ore 5 in L.10 12.02 dalle ore 5 in CT.39 18.02 dalle ore 5 in L.10 25.02 dalle ore 5 in L.10 3 Obiettivi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Diagrammi 2D e 3D • Funzioni di ordine superiore 4 Diagrammi 2D DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Diagramma = insieme di coppie rappresentanti le coordinate dei suoi punti • Si usano vettori per contenere sequenze ordinate dei valori di ognuna delle coordinate • plot(x,y) disegna diagramma cartesiano dei punti che hanno valori delle ascisse in x, delle ordinate in y e li congiunge con una linea, per dare continuità al grafico • funzioni xlabel per visualizzare nome asse ascisse, ylabel per ordinate, title per il titolo 5 Diagrammi 2D: 1mo esempio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> x = -10:0.1:10; >> y=x.^3; >> plot(x,y); >> xlabel('ascisse'); >> ylabel('ordinate'); >> title('cubica'); cubica 1000 800 600 400 ordinate 200 0 -200 -400 -600 -800 -1000 -10 -8 -6 -4 -2 0 ascisse 2 4 6 8 10 6 Diaggrami 2D: 2do esempio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> x=[-8:0.1:8]; >> y= sin (x) ./ x; >> plot(x, y); >> xlabel('ascisse'); >> ylabel('ordinate'); 1 0.8 ordinate 0.6 0.4 0.2 0 -0.2 -0.4 -8 -6 -4 -2 0 ascisse 2 4 6 8 7 Particolarità DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • plot(x,y) x non contiene necessariamente un intervallo lineare uniforme di valori y non è necessariamente funzione di x • Sia x sia y possono essere funzioni di qualche altro parametro 8 Particolarità: esempio 1 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> t=[0:pi/100:2*pi]; >> x=cos(t); >> y=sin(t); >> plot(x,y); >> xlabel('ascisse-x'); >> ylabel('ordinate-y'); 1 0.8 0.6 0.4 ordinate-y 0.2 0 -0.2 -0.4 -0.6 -0.8 -1 -1 -0.8 -0.6 -0.4 -0.2 0 0.2 ascisse-x 0.4 0.6 0.8 1 9 Particolarità: esempio 2 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> t=[0:pi/100:10*pi]; >> x=t .* cos(t); >> y=t .* sin(t); >> plot(x,y); >> xlabel('ascisse-x'); >> ylabel('ordinate-y'); 10*pi 5 giri t10*pi dist.max da origine 31,4 30 20 ordinate-y 10 0 -10 -20 -30 -30 -20 -10 0 10 20 30 40 ascisse-x 10 Diagrammi lineare a 3 dimensioni DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Generalizzazione di quello a due: insieme di terne etc… plot3(x,y,z) per digramma cartesiano con x ascisse, y ordinate, z quote funzioni xlabel, ylabel, zlabel, title … 40 30 quote >> t = 0:0.1:10*pi; >> plot3 (t.*sin(t), t.*cos(t), t); >> xlabel('ascisse'); >> ylabel('ordinate'); >> zlabel('quote'); 20 10 0 40 20 40 20 0 0 -20 ordinate -20 -40 -40 ascisse 11 Diagrammi lineare a 3 dimensioni: funzione di mesh DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Funzione reale di due variabili reali z = f (x, y) rappresentata in uno spazio cartesiano tridimensionale è una superficie • funzione mesh genera superficie, a partire da tre argomenti: matrici xx, yy, zz che contengono ascissa (valore di x), ordinata (y) e quota (z) per ogni punto di una griglia corrispondente a un rettangolo del piano xy ll rettangolo è identificato dalla coppia di matrici xx e yy • Le due matrici, xx, e yy, si ottengono, mediante la funzione meshgrid(x,y), a partire da vettori, x e y, che contengono i valori delle ascisse e delle ordinate il rettangolo nel piano è determinato da x e y l’insieme delle coordinate dei suoi punti è il prodotto cartesiano di x e y 12 meshgrid: come funziona DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • A partire da vettori, x e y, che contengono i valori delle ascisse e delle ordinate [xx,yy]=meshgrid(x,y) • genera due matrici entrambe di legth(y) righe × length(x) colonne la prima, xx, contiene, ripetuti in ogni riga, i valori di x la seconda, yy, contiene, ripetuti in ogni colonna, i valori di y’ (y trasposta) 13 meshgrid: un esempio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • funzione z = x + y • grafico in 6 punti di ascisse {1, 3, 5} e ordinate {2, 4} >> x=[1, 3, 5]; >> y=[2, 4]; >> [xx,yy]=meshgrid(x,y); >> zz=xx+yy; >> mesh(xx,yy,zz); >> xlabel('ascisse-x'); >> ylabel('ordinate-y'); >> xx xx = 1 3 1 3 5 5 >> yy yy = 2 2 4 4 9 8 2 4 7 6 5 Punti di coordinate (x,y)… (1,2) (3,2) (5,2) (1,4) (3,4) (5,4) 4 3 4 3.5 5 4 3 3 >> zz zz = 3 5 5 7 2.5 …hanno coordinate (x,y,z) 7 9 ordinate-y 2 2 1 ascisse-x (1,2,3) (3,2,5) (5,2,7) (1,4,5) (3,4,7) (5,4,9) (NB: z=x+y) 14 Vantaggi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Il vettore con le z ottenuto con espressione uguale alla forma algebrica della funzione • I vettori x e y da dare in pasto a meshgrid non si producono “a mano” si ottengono con costrutto [vmin : : vmax] o altri simili… • tipicamente si adotta una spaziatura uniforme tra i valori • attenzione a non usare valore troppo piccolo, altrimenti memoria insuffciente… 15 meshgrid: un secondo esempio DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 6 5 z >> x=[1:1:3]; >> y=x; >> [xx,yy]=meshgrid(x,y) ; >> zz=xx+yy; >> mesh(xx,yy,zz); >> xlabel('x'); >> ylabel('y'); >> zlabel('z'); 4 3 2 3 3 2.5 2.5 2 2 1.5 y 1.5 1 1 x 16 meshgrid: un paraboloide DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> x=[-4:0.05:4]; >> y=x; >> [xx,yy]=meshgrid(x,y); >> zz=xx .^ 2 + yy .^ 2; >> mesh(xx,yy,zz); >> xlabel('ascisse-x'); >> ylabel('ordinate-y'); >> zlabel('quote-z'); 17 meshgrid: il Sombrero! DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE >> tx=[-8:0.1:8]; >> ty=tx; >> [xx, yy] = meshgrid (tx, ty); >> r = sqrt (xx .^ 2 + yy .^ 2); >> tz = sin (r) ./ r; >> mesh (tx, ty, tz); >> xlabel('ascisse'); >> ylabel('ordinate'); >> zlabel('quote'); 18 Pausa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE 15’… non di più! :) 19 Variabili e funzioni di ordine superiore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Versioni recenti di Matlab definiscono in modo pieno il tipo “funzione”, permettendo di assegnare a variabili valori di tipo “funzione” definire funzioni che ricevono parametri di tipo “funzione” • Cosa si può fare con un valore di tipo funzione? assegnarlo a una variabile (quindi passarlo come parametro) applicarlo a opportuni argomenti: si ottiene una invocazione della funzione 20 / 44 handle: esempi DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Valori di tipo funzione denotati da variabili dette handle (riferimento / maniglia) • A una handle possono essere assegnati valori di tipo funzione in due modi 1. indicando il nome di una funzione esistente (definita dall’utente o predefinita) 2. mediante la definizione ex novo di una funzione anonima 21 / 44 handle (1) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Indicando il nome di una funzione esistente (definita dall’utente o predefinita) • È semplice: nome della funzione (posto dopo ‘@’) denota la funzione stessa >> f=@fact f = @fact >> f(4) ans = 24 >> seno=@sin seno = @sin >> seno(pi/2) ans = 1 22 handle (2) DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Mediante la definizione ex novo di una funzione anonima >> sq=@(x)x^2 sq = @(x)x^2 >> sq(8) ans = 64 • Espressione di tipo funzione: simbolo @ lista dei parametri di ingresso, tra parentesi tonde espressione che dà il risultato come funzione degli ingressi 23 Funzioni di ordine superiore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Se il parametro attuale di una funzione F è di tipo funzione allora il parametro formale f è una handle può essere usato per invocare la funzione passata tramite il parametro • La funzione F è una funzione di ordine superiore • È possibile realizzare funzioni di ordine superiore per realizzare funzioni parametriche rispetto a un’operazione rappresentata a sua volta da una funzione 24 Esempio di funzione di ordine superiore DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • funzione di ordine superiore maxDiFunzione Riceve come parametri • f funzione di una variabile reale • gli estremi a e b di un intervallo • valore d (da usare come passo di incremento) • Trova il valore massimo M e la sua ascissa (approssimati) della funzione f in [a..b] • applicandola in tutti i punti tra a e b, con un intervallo di scansione d 25 maxDiFunzione DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE function [M,xM]=maxDiFunzione(f, a, b, d) xM=a; M=f(xM); for x = a+d:d:b if f(x)>M xM=x; >> f=@(x)x^3-3*x; M=f(x); >> maxDiFunzione(f, -2, 2, 0.01) end; ans = 2 end; end 26 Fonti per lo studio + Credits DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Fonti per lo studio Introduzione alla programmazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio • Capitolo 4 • Credits Prof. A. Morzenti 27