1 / 25

Diagrammi 2D e 3D Funzioni di ordine superiore

Diagrammi 2D e 3D Funzioni di ordine superiore. Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 13 Agosto 2014. Obiettivi. Diagrammi 2D e 3D Funzioni di ordine superiore. Diagrammi 2D. Diagramma = insieme di coppie rappresentanti le coordinate dei suoi punti

Download Presentation

Diagrammi 2D e 3D Funzioni di ordine superiore

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Diagrammi 2D e 3DFunzioni di ordine superiore Marco D. Santambrogio – marco.santambrogio@polimi.it Ver. aggiornata al 13 Agosto 2014

  2. Obiettivi • Diagrammi 2D e 3D • Funzioni di ordine superiore

  3. Diagrammi 2D • 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

  4. Diagrammi 2D: 1mo esempio >> x = -10:0.1:10; >> y=x.^3; >> plot(x,y); >> xlabel('ascisse'); >> ylabel('ordinate'); >> title('cubica');

  5. Diaggrami 2D: 2do esempio >> x=[-8:0.1:8]; >> y= sin (x) ./ x; >> plot(x, y); >> xlabel('ascisse'); >> ylabel('ordinate');

  6. Particolarità • 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

  7. Particolarità: esempio 1 >> t=[0:pi/100:2*pi]; >> x=cos(t); >> y=sin(t); >> plot(x,y); >> xlabel('ascisse-x'); >> ylabel('ordinate-y');

  8. Particolarità: esempio 2 >> 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 t10*pi  dist.max da origine 31,4

  9. Diagrammi lineare a 3 dimensioni • 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 … >> t = 0:0.1:10*pi; >> plot3 (t.*sin(t), t.*cos(t), t); >> xlabel('ascisse'); >> ylabel('ordinate'); >> zlabel('quote');

  10. Diagrammi lineare a 3 dimensioni: funzione di mesh • 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

  11. meshgrid: come funziona • 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)

  12. meshgrid: un esempio • funzionez = 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 5 1 3 5 >> yy yy = 2 2 2 4 4 4 Punti di coordinate (x,y)… (1,2) (3,2) (5,2) (1,4) (3,4) (5,4) >> zz zz = 3 5 7 5 7 9 …hanno coordinate (x,y,z) (1,2,3) (3,2,5) (5,2,7) (1,4,5) (3,4,7) (5,4,9) (NB: z=x+y)

  13. Vantaggi • 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…

  14. meshgrid: un secondo esempio >> x=[1:1:3]; >> y=x; >> [xx,yy]=meshgrid(x,y); >> zz=xx+yy; >> mesh(xx,yy,zz); >> xlabel('x'); >> ylabel('y'); >> zlabel('z');

  15. meshgrid: un paraboloide >> 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');

  16. meshgrid: il Sombrero! >> 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');

  17. Pausa 15’… non di più! :)

  18. Variabili e funzioni di ordine superiore • 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

  19. handle: esempi • Valori di tipo funzione denotati da variabili dette handle (riferimento / maniglia) • A una handle possono essere assegnati valori di tipo funzione in due modi • indicando il nome di una funzione esistente (definita dall’utente o predefinita) • mediante la definizione ex novo di una funzione anonima

  20. handle (1) • Indicando il nome di una funzione esistente (definita dall’utente o predefinita) • È semplice: nome della funzione (posto dopo ‘@’) denota la funzione stessa >> seno=@sin seno = @sin >> seno(pi/2) ans = 1 >> f=@fact f = @fact >> f(4) ans = 24

  21. handle (2) • Mediante la definizione ex novo di una funzione anonima • Espressione di tipo funzione: • simbolo @ • lista dei parametri di ingresso, tra parentesi tonde • espressione che dà il risultato come funzione degli ingressi >> sq=@(x)x^2 sq = @(x)x^2 >> sq(8) ans = 64

  22. Funzioni di ordine superiore • 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

  23. Esempio di funzione di ordine superiore • 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

  24. maxDiFunzione 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; M=f(x); end; end; end >> f=@(x)x^3-3*x; >> maxDiFunzione(f, -2, 2, 0.01) ans = 2

  25. Fonti per lo studio + Credits • Fonti per lo studio • Introduzioneallaprogrammazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio • Capitolo4 • Credits • Prof. A. Morzenti

More Related