You are on page 1of 17

Laboratorio di Analisi Matematica e Geometria

con MATLAB
Grafici di campi scalari e vettoriali

Le potenzialit`
a grafiche di MATLAB possono essere utilizzate anche nel caso
di campi scalari e vettoriali
f : Rn Rm
per valori piccoli di n, m. In particolare, si possono visualizzare facilmente i luoghi di punti di curve nel piano e nello spazio descritti da equazioni parametriche,
i grafici di funzioni di due variabili, i luoghi di punti definiti implicitamente come curve di livello di un campo scalare e le componenti di campi vettoriali
bidimensionali.

Grafici di curve nel piano e nello spazio

Data una curva piana definita da equazioni parametriche f (t) = [x(t), y(t)] per
t [a, b], il luogo di punti che costituisce limmagine della curva nel piano pu`o
essere visualizzato facilmente utilizzando la funzione plot, gi`a introdotta nelle
esercitazioni precedenti, per visualizzare grafici cartesiani. Ad esempio, per visualizzare la curva (cicloide) definita dalle equazioni f (t) = [t sin t, 1 cos t]
per t [0, 6], `e sufficiente utilizzare i comandi
t=[0:0.1:6*pi]; x=t-sin(t);
y=1-cos(t);
plot(x,y)
Se la curva piana `e definita in coordinate polari da una equazione = g(), il
grafico pu`
o essere ottenuto passando alla rappresentazione cartesiana mediante
le equazioni x = g() cos (), y = g() sin () e utilizzando il comando plot come
nellesempio precedente, oppure utilizzando
il comando polar. Ad esempio per
visualizzare la spirale di equazione = si possono utilizzare i comandi
t=[0:0.1:8*pi];
polar(t,sqrt(t))

Esercizio
Visualizzare la spirale =

utilizzando il comando plot.

Esercizio
Visualizzare i luoghi di punti del piano descritti dalle curve di equazione parametrica
a) f (t) = [2 cos (t), sin (t)] per t [0, 2];
b) f (t) = [cosh (t), sinh (t)] per t [1, 1];
c) f (t) = [cos (t), sin (2t)] per t [0, 2];
d) f (t) = [sin (3t) cos (t), sin (t) cos (2t)] per t [0, ].

Esercizio
Visualizzare i luoghi di punti del piano descritti dalle curve di equazione polare
a) = exp () per [4, 0];
b) = 2 cos () per [0, 2];
2

c) = sin ()/ cos () per [/4, /4].

Se si considerano invece curve nello spazio definite da equazioni parametriche


f (t) = [x(t), y(t), z(t)] per t [a, b], la procedura per la visualizzazione `e simile,
ma si utilizza il comando grafico plot3 come nellesempio seguente, relativo allelica cilindrica di raggio 2 e passo 1 definita da f (t) = [cos (t), sin (t), t/2] per
t [0, 6] :
t=[0:0.1:6*pi]; x=cos(t);
y=sin(t);
z=t/(2*pi);
plot3(x,y,z)

Esercizio
Visualizzare i luoghi di punti del piano descritti dalle curve di equazione parametrica
a) f (t) = [t cos (t), t sin (t), t] per t [4, 4];
b) f (t) = [t, t2 , t3 ] per t [0, 1];
c) f (t) = [cos (t), sin (t), 1 2 cos (t) 2 sin (t)] per t [0, 2];
2

d) f (t) = [cos (t)2 , sin (t) , cos (t) sin (t)] per t [0, 2];
e) f (t) = [sin (t/10) cos (t), (sin (t/10) sin (t), t/(10)] per t [10, 10].

Grafici di funzioni di due variabili

Come gi`
a nel caso di una funzione di variabile reale, per visualizzare con MATLAB il grafico di una funzione di due variabili risulta conveniente utilizzare la
notazione vettoriale per calcolare la funzione su di un opportuno insieme finito
di punti. Tali punti dovranno per`o essere distribuiti su di un dominio bidimensionale, anziche su di un intervallo. Ci`o pu`o essere ottenuto in MATLAB
mediante luso del comando meshgrid.
Se x,y sono due vettori monodimensionali, di dimensione rispettivamente
n e m, che contengono i valori delle ascisse e delle ordinate per cui si vuole
valutare la funzione considerata, con l istruzione
[X,Y] = meshgrid(x,y)
genera due matrici X e Y, entrambi di dimensione n m. La matrice X ha per
righe delle copie del vettore x, mentre le colonne di Y sono copie del vettore
y. Ne segue che, valutando puntualmente una funzione z = f (x, y) per tutti
gli elementi delle due matrici X e Y, si calcola il valore assunto da f in tutti i
punti di coordinate formate da coppie di elementi dei vettori x e y. Se si vuole
valutare ad esempio la funzione z = x2 y 2 sui punti del dominio [0, 1] [1, 1]
di coordinata x pari a 0, 0.1, . . . , 0.9, 1 e y pari a 1, 0.8, . . . , 0.8, 1 si devono
eseguire i comandi
x=[0:0.1:1];
y=[-1:0.2:1];
[X,Y] = meshgrid(x,y);
Z=X.^2-Y.^2;
Per visualizzare il grafico della funzione a partire dai valori Z calcolati nei punti
di coordinate pari ai valori in X e Y, si pu`o utilizzare il comando di grafica
tridimensionale surf(X,Y,Z). Il colore con cui la superficie viene visualizzata in
corrispondenza degli elementi X(i,j),Y(i,j) delle matrici X e Y `e proporzionale
al valore assunto da Z(i,j). Per visualizzare la scala di colori utilizzati, dopo
aver digitato il comando surf si pu`o utilizzare il comando colorbar, mentre per
cambiare la scala di colori si pu`o utilizzare il comando colormap. Per distinguere
tra di loro le due dimensioni orizzontali, si possono utilizzare i comandi xlabel,
ylabel e zlabel.

Esempio
Visualizzare il grafico della funzione z = x2 +y 2 4xy sul dominio [1, 1][1, 1]
con spaziatura di passo 0.05 nella direzione x e y.
Soluzione:
x=[-1:0.05:1];
y=[-1:0.05:1];
[X,Y] = meshgrid(x,y);
Z=X.^2+Y.^2-4*X.*Y;
surf(X,Y,Z)
colorbar
xlabel(x)
3

ylabel(y)
zlabel(z)
Altri comandi di grafica tridimensionale sono mesh, che visualizza solo un
reticolo che connette i valori calcolati della funzione immagazzinati in Z, e surfc,
che oltre al grafico della funzione visualizza alcune sue linee di livello nel piano
z = 0. Le visualizzazioni ottenute con questi comandi possono essere sovrapposte
per raffigurare pi`
u superfici nella stessa finestra grafica. Si noti che in questo caso
di dovr`
a utilizzare il comando hold on per evitare che la seconda chiamata ad
una funzione grafica cancelli completamente il risultato della prima. Inoltre, la
leggibilit`
a dei grafici sovrapposti dipender`a dalle particolari funzioni che intende
visualizzare. Si noti anche langolazione con cui i grafici sono visualizzati pu`o
essere modificata utilizzando il comando rotate3d o i comandi presenti nella
barra della finestra grafica.

Esempio
Visualizzare i grafici sovrapposti della funzione z1 = x2 y 2 e del piano z2 =
x + 2(y 1) sul dominio [2, 2] [2, 2] con spaziatura di passo 0.1 nella
direzione x e y. Utilizzare i comandi surf e mesh.
Soluzione:
x=[-2:0.1:2];
y=[-2:0.1:2];
[X,Y] = meshgrid(x,y);
Z1=X.^2-Y.^2;
Z2=-X+2*(Y-1);
surf(X,Y,Z1)
hold on
mesh(X,Y,Z2);
colorbar
xlabel(x)
ylabel(y)
zlabel(z)

Esercizio
Definire un opportuno insieme di punti sul dominio [2, 2] [2, 2] utilizzando
il comando meshgrid e valutare su di essi le seguenti funzioni, visualizzandone
i grafici con i comandi surf, mesh o surfc:
a) z = x2 + y 2 ;
p
b) z = x2 + y 2 ;
h
2
c) z = exp x2 +

y2
5

i
;

d)
z=

6y
;
2 + x2 + y 2

e) z = (x2 y 2 )2 ;
f) z = y 3 3x2 y;
g)
z=p
h)

1
(x2 + y 2 + 0.1)

x;

y
;
z=p
2
(x + y 2 + 1)

i) z = log (1 + x2 y 2 );
j) z = |x| + |y|;
h
i
k) z = x exp x2 + y 2 ;
l) z = sin (x y).
m) z = sin (x) sin (y);
n) z = sin (xy).

Esercizio
Ripetere lesercizio precedente visualizzando i grafici di alcune della funzioni
prima definite relativamente al dominio [0, 4] [3, 2] e utilizzando una griglia
di 100 punti nella direzione x e 200 nella direzione y.
Qualora si debbano considerare funzioni definite solo su una parte di un
dominio rettangolare come quelli per cui sono utilizzabili i comandi precedentemente introdotti, il valore della funzione nei punti in cui essa non `e definita
nellambito dei numeri reali pu`o essere posto pari alla costante predefinita NaN
(acronimo di Not a Number).

Esempio
Visualizzare il grafico della funzione
log (xy)
z=p
(x2 y 2 )
sul dominio [2, 2] [2, 2].
Soluzione: Utilizzare lo script:
5

x=[-2:0.1:2];
y=[-2:0.1:2];
[X,Y] = meshgrid(x,y);
[n,m]=size(X);
for i=1:n
for j=1:m
if (X(i,j)*Y(i,j) > 0) & (X(i,j)^2 -Y(i,j)^2) > 0
Z(i,j)=log(X(i,j)*Y(i,j))/sqrt(X(i,j)^2 -Y(i,j)^2);
else
Z(i,j)=NaN;
end
end
end
surfc(X,Y,Z)
colorbar

Esercizio
Definire un opportuno insieme di punti sul dominio [3, 3] [3, 3] utilizzando
il comando meshgrid e valutare su di essi le seguenti funzioni, visualizzandone
i grafici con i comandi surf, mesh o surfc:
p
a) z = 4 x2 y 2 ;
p
b) z = x2 + y 2 4;
p
c) z = x2 y;
d) z = 1/xy;
e) z = log (x2 y 2 );
f)
z=p

1
x2 y 2

g)
r
z=

1
x2 ;
y

h)
z=

x log (1 + x2 y 2 )
.
y

Grafici di curve di livello e di funzioni implicite

Date una funzione z = f (x, y) ed una costante c R, si chiama curva di livello


di f il luogo dei punti del piano in cui la funzione f assume il valore c. Le
curve di livello di una funzione di due variabili possono essere visualizzate in
MATLAB utilizzando il comando contour. La sintassi di tale comando `e simile
a quella degli altri comandi grafici prima per funzioni di due variabili: anche in
questo caso si deve utilizzare il comando meshgrid per costruire le matrici X,
Y che contengono i valori delle variabili indipendenti e i valori corrispondenti della funzione devono essere memorizzati in un array Z. Digitando semplicemente
contour(X,Y,Z), le linee di livello da visualizzare vengono scelte automaticamente. Si pu`
o per`
o anche specificare una ulteriore variabile L, per assegnare il
numero delle curve di livello da visualizzare o i valori che definiscono le curve
di livello stesse. Nel primo caso L `e un numero intero pari al numero di livelli
da visualizzare, mentre nel secondo deve consistere in un vettore contenente i
valori assunti dalla funzione su ciascuno dei livelli da visualizzare, in ordine
crescente. Le curve di livello sono rappresentate con colori che corrispondono
ai valori assunti su di esse dalla funzione, secondo la scala di colori scelta con il
comando colormap.

Esempio
Visualizzare 20 curve di livello della funzione z = x2 y 2 sul dominio [2, 2]
[2, 2].
Soluzione: Utilizzare lo script:
x=[-2:0.01:2];
y=[-2:0.01:2];
[X,Y] = meshgrid(x,y);
Z=X.^2-Y.^2;
contour(X,Y,Z,20)
colorbar

Esempio
Visualizzare le curve di livello della funzione z = x2 y 3 corrispondenti ai valori
1, 0.5, 0.3, 0, 0.3, 0.5, 1 sul dominio [1, 1] [1, 1].
Soluzione: Utilizzare lo script:
x=[-1:0.01:1];
y=[-1:0.01:1];
[X,Y] = meshgrid(x,y);
Z=X.^2.*Y.^3;
L=[-1,-0.5,-0.3,0.3,0.5,1];
contour(X,Y,Z,L)

colorbar
Si pu`
o anche utilizzare il comando affine contourf, che visualizza le curve
di livello come linee di color nero, riempiendo le zone intermedie con colori che
corrispondono ai valori assunti sulle curve di livello che le delimitano, secondo
la scala di colori scelta con il comando colormap. In particolare, il colore viene
assegnato in corrispondenza del minore dei valori assunti tra due curve di livello
definite da valori consecutivi. Se i livelli sono stati assegnati dallutente e il
valore pi`
u basso del vettore dei livelli `e superiore ai valori effettivamente assunti
dalla funzione in alcune zone del dominio che devono essere visualizzate, quelle
parti del dominio vengono visualizzate in bianco. Analogamente, vengono visualizzate come bianche le zone in cui il valore della funzione `e assegnato pari
alla costante NaN.

Esercizio
Visualizzare le curve di livello di alcune della funzioni prima definite utilizzando
i comandi contour e contourf.
Invertendo lordine delle matrici X,Y,Z nei comandi contour e contourf
possono essere visualizzate le intersezioni del grafico della funzione con piani
verticali definiti da equazioni del tipo x = costante e y = costante. In questo
caso viene visualizzato un dominio piano che ha per ascissa lintervallo di valori
contenuti nella prima matrice utilizzata nel comando contour e per ordinata
lintervallo di valori contenuti nella seconda matrice. Le curve di livello visualizzate corrispondono alle intersezioni del grafico della funzione con piani definiti
da valori costanti della variabile corrispondente alla terza matrice.

Esempio
Visualizzare le intersezioni del grafico della funzione z = 2x con i piani x =
costante corrispondenti ai valori 0.4, 0.2, 0.3, 0.5 sul dominio [1, 1] [1, 1].
Soluzione: Utilizzare lo script:
x=[-1:0.01:1];
y=[-1:0.01:1];
[X,Y] = meshgrid(x,y);
Z=2*X;
L=[-0.4 0.2 0.3 0.5];
contour(Y,Z,X,L)
colorbar

Esempio
Visualizzare in tre finestre grafiche diverse le intersezioni del grafico della funzione z = x2 y 2 con i piani z = costante, x = costante e y = costante corri-

spondenti ai valori 0.4, 0.3, 0.2, 0.2, 0.3, 0.4 sul dominio [1, 1] [1, 1].
Soluzione: Utilizzare lo script:
x=[-1:0.05:1];
y=[-1:0.05:1];
[X,Y] = meshgrid(x,y);
Z=X.^2-Y.^2;
L=[-0.4,-0.3,-0.2, 0.2,0.3, 0.4];
figure(1)
contour(X,Y,Z,L)
xlabel(x)
ylabel(y)
figure(2)
contour(Y,Z,X,L)
xlabel(y)
ylabel(z)
figure(3)
contour(X,Z,Y,L)
xlabel(x)
ylabel(z)

Esercizio
Visualizzare le intersezioni del grafico della funzione z = 2x con i piani y =
costante corrispondenti ai valori 0.40.5 sul dominio [1, 1] [1, 1]
Il comando contour pu`
o essere anche utilizzato per visualizzare le curve
definite implicitamente da equazioni del tipo f (x, y) = costante.

Esempio
Visualizzare la curva definita implicitamente dallequazione y 2 x2 x3 = 0 sul
dominio [3, 3] [3, 3].
Soluzione: Utilizzare lo script:
x=[-3:0.01:3];
y=[-3:0.01:3];
[X,Y] = meshgrid(x,y);
Z=Y.^2-X.^2-X.^3;
L=[0.0 0.0];
contour(X,Y,Z,L)
colorbar

Esercizio
Utilizzare il comando contour per visualizzare le curve definite implicitamente
dalle seguenti equazioni:
a) x2 + 2y 2 = 3;
b) x2 2y 2 = 3;
2

c) y 2 (1 + ey ) + x2 (y 2 x) = 0;
d) y 2 (1 x2 )(1 + x)2 = 0;
e) x4 + y 4 2x3 3y 2 = 0;
f) (x2 + y 2 )(1 x3 y 3 ) = 0;
g) x3 (x 2) + y 2 = 0;
h) x3 y 3 + x2 + y 2 .

Grafici di campi vettoriali

Per campi vettoriali bidimensionali, definiti come f = [f1 (x, y), f2 (x, y)], `e possibile ottenere una rappresentazione grafica utilizzando il comando quiver. Tale
comando ha una sintassi simile a quella dei comandi grafici introdotti nelle funzioni di due variabili. Una volta definite delle opportune matrici di valori delle
variabili indipendenti utilizzando il comando meshgrid, le due componenti del
vettore devono essere calcolate in corrispondenza di tali valori e memorizzate
in due distinte variabili. Effettuate queste operazioni, `e possibile visualizzare il
campo come nel seguente esempio:

Esempio
Visualizzare il campo vettoriale f = [yx2 , x+y 2 ] sul dominio [3, 3][3, 3].
Soluzione: Utilizzare lo script:
x=[-3:0.2:3];
y=[-3:0.1:3];
[X,Y] = meshgrid(x,y);
F1=Y-X.^2;
F2=-X+Y.^2;
quiver(X,Y,F1,F2)
In assenza di ulteriori specificazioni, la lunghezza dei vettori visualizzata
viene riscalata automaticamente; i vettori vengono visualizzati in colore blu e
con uno spessore fissato della freccia che li rappresenta. Per ottenere che dopo
il riscalamento automatico tutti i vettori da visualizzare vengano ulteriormente
riscalati di un fattore S, si deve utilizzare la sintassi quiver(X,Y,F1,F2,S),
mentre il colore e lo spessore della freccia che rappresenta il vettore possono
essere modificati specificando opzioni analoghe a quelle del comando plot.
10

Esempio
Visualizzare il campo vettoriale f = [y x2 , x+y 2 ] sul dominio [3, 3][3, 3]
riscalando i vettori di un fattore 2 e visualizzandoli in colore rosso e con linee
di spessore 2 punti.
Soluzione: Utilizzare lo script:
x=[-3:0.2:3];
y=[-3:0.1:3];
[X,Y] = meshgrid(x,y);
F1=Y-X.^2;
F2=-X+Y.^2;
quiver(X,Y,F1,F2,2,r,LineWidth,2)

Esercizio
Utilizzare il comando quiver per visualizzare i seguenti campi vettoriali:
a) f = [y, x];
b) f = [y, x];
c) f = [x y, x + y];
d) f = [2x + y, 2x + y];
e) f = [cos (y) x2 , sin (x + y 2 )];
f)
f=

x1
[(x 1)2 + y 2 ]

g)
f=

3
2

y
[(x 1)2 + y 2 ]

i
3
2

y
x i
,
.
x2 + y 2 x2 + y 2

Operatori differenziali approssimati su campi


vettoriali bidimensionali

Nel caso di campi scalari e vettoriali calcolati in corrispondenza di valori delle


variabili indipendenti memorizzati in matrici prodotte con il comando meshgrid,
sono definiti in MATLAB dei comandi che forniscono una approssimazione numerica dei principali operatori differenziali. Richiamiamo qui la definizione di
gradiente di un campo scalare e di matrice Jacobiana, divergenza e rotore di un
campo vettoriale. Il gradiente di un campo scalare f : Rn R `e definito come
f =

 f
f 
,...,
.
x1
xn
11

La matrice Jacobiana di un campo vettoriale f : Rn Rm `e definita come


J(f ) =

 f 
i

xj

.
i=1,...,n;j=1,...,m

La divergenza di un campo vettoriale f : Rn Rn `e definita come il campo


scalare
n
X
fi
.
div(f ) =
xi
i=1
Il rotore di un campo vettoriale f : R3 R3 `e definito come il campo vettoriale
rot(f ) =

 f

x2

f2 f1
f3 f2
f1 
,

.
x3 x3
x1 x1
x2

Nel caso di un campo vettoriale f : R2 R2 , tale espressione risulta ancora


valida ma fornisce un campo vettoriale la cui unica componente non nulla `e
quella parallela allasse z. Per semplicit`a, si considereranno nel seguito sono
campi vettoriali f : R2 R2 .
Le approssimazioni numeriche di cui viene visualizzato il grafico sono ottenuta sostituendo le derivate con corrispondenti rapporti incrementali tra i
valori calcolati sulle griglie discrete di punti definite dal comando meshgrid.
Ad esempio, se si `e calcolato il campo scalare z = x exp (x2 y 2 ) come visto
nel capitolo precedente, il campo vettoriale dato dal suo gradiente pu`o essere approssimato numericamente con il comando gradient e poi visualizzato
utilizzando il comando quiver.

Esempio
Calcolare una approssimazione del gradiente della funzione z = y exp (x2 y 2 )
sul dominio [2, 2] [2, 2] e visualizzare congiuntamente linee di livello della
funzione e campo vettoriale del gradiente.
Soluzione: Utilizzare lo script:
x=[-2:0.2:2];
y=[-2:0.2:2];
[X,Y] = meshgrid(x,y);
Z=Y.*exp(-X.^2-Y.^2);
[GX,GY]=gradient(Z,0.2,0.2);
contour(X,Y,Z,20);
hold on
quiver(X,Y,GX,GY,k)
Si noti il secondo e il terzo argomento del comando gradient devono contenere
i valori utilizzati per lincremento delle variabili indipendenti x e y nellapprossimazione delle derivate prime con rapporti incrementali. Per semplicit`a qui tali
valori sono stati posti uguali alla spaziatura della griglia su cui `e calcolata la
funzione.

12

Esercizio
Calcolare e visualizzare lapprossimazione numerica del gradiente per le funzioni
a) f = cosh (2x) tanh (3y);
b) f = sin (x2 4y 3 );
c) f = x2 + y 2 x4 y 3 .
I comandi divergence e curl funzionano in modo del tutto analogo, a partire
da un campo vettoriale f : R2 R2 bidimensionale opportunamente definito.
In questo caso vengono visualizzate le curve di livello del campo scalare della
divergenza (approssimata) di f e della componente non nulla del rotore (approssimato) di f .
(Per il rotore di un campo tridimensionale, fare riferimento allhelp di Matlab)

Esempio
Calcolare una approssimazione della divergenza del campo vettoriale f = [x2
y 2 , x2 + 2y 2 ] sul dominio [2, 2] [2, 2] e visualizzare congiuntamente linee
di livello della divergenza e del campo vettoriale f .
Soluzione: Utilizzare lo script:
x=[-2:0.2:2];
y=[-2:0.2:2];
[X,Y] = meshgrid(x,y);
F1=X.^2-Y.^2;
F2=X.^2+2*Y.^2;
div=divergence(X,Y,F1,F2);
contour(X,Y,div);
hold on
quiver(X,Y,F1,F2,k)

Esercizio
Confrontare le approssimazioni della divergenza e del rotore del campo vettoriale
f = [x2 y 2 , x2 + 2y 2 ] ottenute con i comandi divergence e curl con i valori
esatti degli operatori differenziali applicati ad f .

Esercizio
Calcolare e visualizzare su due finestre grafiche distinte lapprossimazione numerica della divergenza e del rotore per i seguenti campi vettoriali, sovrapponendo
a ciascun grafico la visualizzazione del campo stesso:
a) f = [y cosh (2x), 2x2 tanh (3y)];
13

b) f = [y sin (x2 4y), x log (10 + x2 + y 2 )];


c) f = [sin (xy) cos (x3 y), x2 + y 2 x4 y 3 ].

Studio grafico di funzioni di due variabili

Data una funzione di due variabili z = f (x, y) per cui esistono le derivate parziali
in un punto (x0 , y0 ) del piano, `e noto che lequazione del piano tangente alla
superficie in (x0 , y0 ) e della retta normale a tale piano passante per (x0 , y0 ) sono
date rispettivamente da
z = f (x0 , y0 ) +

f
f
(x0 , y0 )(x x0 ) +
(x0 , y0 )(y y0 )
x
y

h
i
f
f
r(t) = x0 +
(x0 , y0 )t, y0 +
(x0 , y0 )t, f (x0 , y0 ) t .
x
y
Utilizzando i comandi grafici MATLAB `e possibile visualizzare congiuntamente il grafico dinteresse e tali oggetti ad esso collegati, allo scopo di studiare
qualitativamente le propriet`
a della funzione in un intorno di un punto dato.

Esempio
Visualizzare il piano tangente e la retta normale al grafico di z = x2 y 2 in
(x0 , y0 ) = (1, 1/2).
Soluzione: Lequazione del piano tangente `e z = 3/4 + 2(x 1) (y 1/2),
mentre la rappresentazione cartesiana della retta normale `e data da x(t) =
1 + 2t, y(t) = 1/2 t, z = 3/4 t. Ci si pu`o limitare a visualizzare un segmento
della retta normale, ad esempio quello definito da valori t [1, 1]. Per la visualizzazione si pu`
o utilizzare lo script:
x=[0:0.2:2];
y=[0:0.2:2];
[X,Y] = meshgrid(x,y);
Z=X.^2-Y.^2;
PT=0.75+2*(X-1)-(Y-0.5);
t=[-1:0.05:1];
XRN=1+2*t;
YRN=0.5-t;
ZRN=0.75-t;
mesh(X,Y,PT);
hold on
surf(X,Y,Z)
hold on
plot3(XRN,YRN,ZRN).

14

Esercizio
Visualizzare piano tangente e retta normale rispetto ai grafici delle seguenti funzioni nei punti assegnati:
a) z = x2 + 2y 2 ,
2

b) z = x 2y

(x0 , y0 ) = (0, 1);


(x0 , y0 ) = (1, 0);

c) z = y 2 (1 x2 )(1 + x)2
4

d) z = x + y 2x 3y

(x0 , y0 ) = (1, 0);


(x0 , y0 ) = (1, 1);

e) z = (x2 + y 2 )(1 x3 y 3 )
3

f) z = x (x 2) + y

(x0 , y0 ) = (1, 1);

(x0 , y0 ) = (2, 0).

Calcolo simbolico con funzioni di pi`


u variabili

Tutte le istruzioni MATLAB di calcolo simbolico possono essere utilizzate anche


per funzioni di due (o pi`
u) variabili reali. In particolare, utilizzando il comando
diff `e possibile calcolare in modalit`a simbolica le derivate di funzioni di due
variabili, come nellesempio seguente:
syms x y f
f=x^2+x*y-y^2
diff(f,x,1)
ans =
2*x+y
diff(f,y,1)
ans =
x-2*y
diff(f,x,2)
ans=
2

Esercizio
Calcolare tutte le derivate prime e seconde rispetto alle variabili x, y delle
funzioni
a) f = sin (3x) cos (5y);
b) f = cos (x uy);
c)
x2 + y 2 
.

Si noti che u, devono essere considerate come costanti.


f = exp

15

Esercizio
Verificare che la funzione u = x3 xy + exp (xy) risolve lequazione

2u 2u
2 = 6x (x2 + y 2 ) exp (xy).
x2
y

Utilizzando il comando diff e la capacit`a di MATLAB di definire vettori e


matrici (anche a partire da grandezze simboliche) `e quindi possibile ad esempio
calcolare direttamente il gradiente e la matrice Hessiana di una funzione data.
Si possono inoltre calcolare le derivate delle componenti di un campo vettoriale
f : Rn Rm , ottenendo cos` delle espressioni simboliche per operatori differenziali quali la matrice jacobiana. Una utile estensione del comando diff `e
costituita dal comando jacobian. Tale comando calcola direttamente la matrice jacobiana di un campo vettoriale vettoriale, secondo la sintassi
syms x y f
f=[x^2-y^2, x*y];
jacobian(f)
ans =
[2*x,-2*y]
[y,x].
Se applicato ad una funzione scalare di pi`
u variabili, il comando jacobian calcola direttamente il gradiente, e si riduce al comando diff se applicato a
funzioni di una sola variabile. Per default, le variabili indipendenti rispetto alle
quali jacobian calcola le derivate sono denominate x, y . . . ; variabili con nomi
diversi possono essere utilizzate come nel seguente esempio: syms a b,c f
f=[a^2-c^2, a*b];
jacobian(f,[a,b,c])
ans =
[2*a,0,-2*c]
[b,a,0].

Esercizio
Calcolare matrice jacobiana, divergenza e rotore dei seguenti campi vettoriali:
a) f = [2y, 3x];
b) f = [y, x];
c) f = [4x y, x + 3y];
d) f = [2x + y, 2x + y];
e) f = [cos (2y) x2 , sin (x + y 2 )];

16

f)
f=

x3
[(x 3)2 + y 2 ]

g)
f=

3
2

,2

y
[(x 3)2 + y 2 ]

i
3
2

x i
y
,
.
x2 + y 2 x2 + y 2

Si osservi infine che, data una funzione di pi`


u variabili scalare, `e possibile calcolare simbolicamente la matrice Hessiana, applicando due volte il comando
jacobian.

Esempio
syms x y
z=x^2-y^2-x+y+3*x*y
J=jacobian(z)
H=jacobian(J)

17