DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Diagrammi 2D e 3D
Funzioni di ordine superiore
Marco D. Santambrogio – [email protected]
Ver. aggiornata al 24 Agosto 2015
Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Diagrammi 2D e 3D
• Funzioni di ordine superiore
2
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
3
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
4
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
5
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
6
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
7
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
t10*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
8
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
9
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
10
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)
11
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)
12
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…
13
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
14
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');
15
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');
16
Pausa
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
15’… non di più! :)
17
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
18 / 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
19 / 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
20
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
21
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
22
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
23
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
24
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
25
Scarica

PPT - V0