You are on page 1of 85

UNIVERSIT

`
A DEGLI STUDI DI FERRARA
FACOLT
`
A DI INGEGNERIA
Corso Matlab per
Analisi Matematica II
c.d.l. Ingegneria Civile e Ambientale
1
Michele Miranda, Francesco Musacci, Cecilia Pasquini
a.a. 2010-2011
1
versione aggiornata al 21 dicembre 2010
2
Indice
1 Curve 7
1.1 Richiami di algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Alcuni disegni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Curve nel piano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.2 Curve in coordinate polari . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.3 Curve nello spazio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3 Vettori tangenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Lunghezza darco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.1 Graco di funzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.2 Curve parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5 Curvatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Funzioni di pi` u variabili 17
2.1 Funzioni e loro graci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.1 Funzioni discontinue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2 Derivate parziali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Piani tangenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Gradiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4.1 Un esempio nel piano . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.4.2 Un esempio nello spazio . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Superci 25
3.1 Superci cartesiane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Superci di rotazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.3 Superci Parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Graci di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.2 Superci di rotazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.4 Piano tangente ad una supercie parametrizzata . . . . . . . . . . . . . . . . 32
4 Integrali multipli 33
4.1 Integrali doppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Formule di riduzione per integrali doppi . . . . . . . . . . . . . . . . . . . . . 34
4.3 Integrali doppi su domini generici . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.3.1 Disegno di insiemi nel piano . . . . . . . . . . . . . . . . . . . . . . . . 36
4.4 Integrali tripli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4.1 Integrali su domini generici . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4.2 Graco di regioni solide . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3
4 INDICE
5 Punti stazionari e massimi e minimi 41
5.1 Classicazione di punti stazionari . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Massimo e minimo di una funzione . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2.1 Massimo e minimo di una funzione di due variabili su di un rettangolo 43
5.2.2 Massimi e minimi su cerchi . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3 Massimi e minimi vincolati . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6 Integrali curvilinei e di supercie 47
6.1 Integrali curvilinei . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.1.1 Integrali curvilinei per funzioni scalari . . . . . . . . . . . . . . . . . . 47
6.1.2 Rappresentazione di campi vettoriali . . . . . . . . . . . . . . . . . . . 48
6.1.3 Integrali curvilinei per funzioni vettoriali . . . . . . . . . . . . . . . . . 49
6.2 Aree di superci parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.3 Integrali di supercie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.3.1 Integrali di supercie per funzioni scalari . . . . . . . . . . . . . . . . 52
6.3.2 Rappresentazione di campi lungo una supercie . . . . . . . . . . . . . 53
6.3.3 Integrali di supercie per campi vettoriali: circuitazioni e ussi . . . . 53
7 Successioni e serie di funzioni 57
7.1 Successioni di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2 Serie di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.3 Serie di potenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
7.4 Serie di Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
7.4.1 Polinomi di Taylor simbolici . . . . . . . . . . . . . . . . . . . . . . . . 61
7.4.2 Moltiplicazione di serie e serie di Taylor di prodotti di funzione . . . . 61
7.5 Serie di Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.5.1 Fenomeno di Gibbs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8 Equazioni dierenziali 67
8.1 Linee di usso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.2 Il metodo numerico ode45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.3 Integrazione simbolica di equazioni dierenziali . . . . . . . . . . . . . . . . . 69
8.4 Sistemi di equazioni dierenziali . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.5 Equazioni di ordine superiore . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.6 Soluzioni denite implicitamente . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.7 Vibrazioni meccaniche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.7.1 Vibrazioni non smorzate . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.7.2 Vibrazioni smorzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
A Derivazione numerica 77
A.1 Derivata prima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
A.2 Derivata seconda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
B Il metodo di integrazione di Simpson 79
C Metodo di Eulero per le equazioni dierenziali 81
INDICE 5
D Integrazione di equazioni dierenziali per serie 83
D.1 Serie di Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
D.2 Serie di Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
6 INDICE
Capitolo 1
Curve
1.1 Richiami di algebra lineare
Iniziamo col disegnare il segmento che congiunge due punti dati; ricordiamo che lequazione
parametrica del segmento che congiunge i punti P, Q R
N
`e data da
x = tQ+ (1 t)P;
se i due punti sono nel piano, possiamo scrivere P = (P
1
, P
2
), Q = (Q
1
, Q
2
). Quindi un modo
semplice per disegnare nel piano un segmento che congiunge P = (1, 2) con Q = (3, 5) pu`o
essere
t=[0 1];
P=[1 2];
Q=[-3 5];
x=(1-t)*P(1)+t*Q(1);
y=(1-t)*P(2)+t*Q(2);
plot(x,y)
A tali comandi si possono aggiungere le opzioni
axis([-4 2 0 3]); grid on;
per migliorarne laspetto graco.
Il precedente graco rappresenta il segmento che congiunge i due punti, o anche il vet-
tore P Q applicato nel punto Q. Se volgiamo invece dare una rappresentazione graca di
un vettore (quindi come di un segmento che parte dallorigine e congiunge il punto dato) e
della somma tra due vettori, possiamo considerare i seguenti comandi, che danno la rapp-
resentazione nel piano dei vettore a = (4, 7), b = (2, 3), del vettore 1/2a e della somma
a +b.
t=[0 1];
xa=4*t;
ya=7*t;
xb=-2*t;
yb=3*t;
7
8 CAPITOLO 1. CURVE
plot(xa,ya,xb,yb,.5*xa,.5*ya,xa+xb,ya+yb);
axis([-4 5 -2 12]);
grid on;
legend(a,b,.5*a,a+b)
Se vogliamo disegnare vettori in dimensione 3 bisogner`a utilizzare il comando
plot3
al posto di
plot.
Ad esempio, possiamo considerare i vettori a = (2, 3, 1), b = (1, 3, 5), c = (2, 4, 1),
a b e a + 2b 3c nello spazio;
t=[0 1];
xa=2*t; ya=3*t; za=-t;
xb=t; yb=-3*t; zb=5*t;
xc=-2*t; yc=4*t; zc=-t;
xs=xa-xb; ys=ya-yb; zs=za-zb;
xx=xa+2*xb-3*xc; yy=ya+2*yb-3*yc; zz=za+2*zb-3*zc;
plot3(xa,ya,za,xb,yb,zb,xc,yc,zc,xs,ys,zs,xx,yy,zz);
grid on;
legend(a,b,c,a-b,a+2b-3c)
Possiamo anche utilizzare il prodotto scalare per calcolare langolo tra due vettori dati;
ricordiamo che vale la formula
x y
n

i=1
x
i
y
i
= |x||y| cos
per ogni x, y R
N
, da cui
= arccos
x y
|x||y|
.
Osserviamo che questultima formula restituisce sempre un angolo compreso tra 0 e ; quindi
degli angoli individuati dai due vettori x e y, con la formula precedente si sta determinando
il minore dei due, mentre il secondo sar`a dato da 2 . Un semplice esempio `e dato dai
seguenti comandi, in cui si determina langolo tra i due vettori (2, 3, 1) e (1, 3, 2).
a=[2 3 -1];
b=[1 -3 5];
La=sqrt(sum(a.*a));
Lb=sqrt(sum(b.*b));
theta=acos(sum(a.*b)/(La*Lb))
1.2 Alcuni disegni
1.2.1 Curve nel piano
Possiamo cominciare col disegnare un segmento, determinato da un punto di partenza e da
una direzione. Come punto di partenza prendiamo x = (1, 3) e come direzione ssiamo il
vettore v = (2, 4); disegniamo quindi il segmento x +tv con t [2, 2];
1.2. ALCUNI DISEGNI 9
t=[-2 2];
x1=1+2*t;
x2=-3+4*t;
plot(x1,x2);
grid on;
Si provi a modicare linsieme di denizione di t, tracciando alcuni esempi.
Esercizio 1.1 Disegnare le seguenti curve piane;
1. (t 2, t + sin t), t R;
2. (te
t
, log(1 +t)), t (1, +);
3. (t[t[, t cos t), t R;
4. (t
2
, t
3
), t [1, 1];
5. (cos
3
t, sin
3
t), t [0, 2];
6. (Rt r sin t, R r cos t), t [0, 4] con diversi valori di R e r (R > r, R = r, R < r);
1.2.2 Curve in coordinate polari
Le curve in coordinate polari, cio`e le curve in cui si pone il raggio in funzione dellangolo
= (), possono essere disegnate semplicemente considerando la parametrizzazione
r() = ()(cos , sin ).
In Matlab esiste per`o anche un comando speciale, polar; disegniamo come esempio la rosa
a quattro petali data () = cos 2, [0, 2].
theta=linspace(0,2*pi);
r=cos(2*theta);
polar(theta,r);
Possiamo anche disegnare una curva in coordinate polari denita da un parametro c per
due dierenti valori di c, ad esempio c = 1 e c = 2; disegniamo quindi la curva () =
1 +c sin , [0, 2].
theta=linspace(0,2*pi);
polar(theta,1+sin(theta),c);
hold on;
polar(theta,1+2*sin(theta),r:);
hold off;
legend(1+sen(t), 1+2sen(t));
Purtroppo, il comando polar non formatta bene il disegno, in quanto scala il graco
basandosi solo sul primo disegno. Possiamo ovviare questo problema nel modo seguente.
theta=linspace(0,2*pi);
r1=1+sin(theta); r2=1+2*sin(theta);
polar([theta,theta], [r1,r2]);
legend(1+sen(t), 1+2sen(t));
10 CAPITOLO 1. CURVE
Esercizio 1.2 Disegnare le seguenti curve piane;
1. = 2a(1 + cos ), [, ];
2. = ae

, [0, /6];
3. =
2
, [0, 3/2];
4. = (1 cos ), [0, 2].
1.2.3 Curve nello spazio
Segmento Possiamo considerare la generalizzazione naturale dellesempio considerato nel-
la sezione 1.2.1 disegnando un segmento, determinato dal punto di partenza x = (1, 3, 2) e
direzione data dal vettore v = (2, 4, 1); disegniamo quindi il segmento x+tv con t [2, 2];
t=[-2 2];
x1=1+2*t;
x2=-3+4*t;
x3=2-t;
plot3(x1,x2,x3);
grid on;
Si provi a modicare linsieme di denizione di t, tracciando alcuni esempi.
Elica cilindrica Lelica o spirale cilindrica `e descritta dellequazione parametrica
r(t) = (a cos t, a sin t, kt), t R
e a, k che descrivono il raggio e il passo dellelica rispettivamente. Disegniamo lelica con
a = 2 e k = 3;
a=2; k=3;
t=linspace(0,4*pi);
plot3(a*cos(t),a*sin(t),k*t);
grid on;
Possiamo anche disegnare il sostegno dellelica di raggio 2 e passo 1/2 e contemporanea-
mente disegniamo la sua proiezione sul piano xy.
a=2; k=1/2;
t=linspace(0,4*pi);
x=a*cos(t); y=a*sin(t); z=k*t;
plot3(x,y,z,r,x,y,0*t,y);
grid on;
Il precedente graco puo essere anche arricchito nel seguente modo:
hold on;
s=linspace(0,4*pi,30);
x=a*cos(s); y=a*sin(s); z=k*s;
stem3(x,y,z,b);
hold off;
1.3. VETTORI TANGENTI 11
Esercizio 1.3 Disegnare la curva nello spazio determinata dal luogo delle soluzioni del
sistema
_
y = x
2
3z = 2xy.
1.3 Vettori tangenti
Possiamo disegnare la curva piana r(t) = (4 cos t, 2 sin t), t [0, 2], e il vettore tangente
alla curva in r(/6), dato da r

(/6). Disegneremo anche i vettori secanti la curva


r(/6 +h) r(/6)
h
con h = 0.1, 0.05, 0.01.
t=linspace(0,2*pi);
x=4*cos(t); y=2*sin(t);
xp=-4*sin(pi/6); yp=2*cos(pi/6);
s=[0 1];
v1=4*cos(pi/6)+s.*xp;
v2=2*sin(pi/6)+s.*yp;
plot(x,y,v1,v2,r);
hold on;
for h=[.1 .05 .01];
u1=4*cos(pi/6)+s.*(4*cos(pi/6+h)-4*cos(pi/6))./h;
u2=2*sin(pi/6)+s.*(2*sin(pi/6+h)-2*sin(pi/6))./h;
plot(u1,u2);
end
hold off;
legend(curva,vettore tangente,vettori secanti,2);
Riprendiamo ora lesempio dellelica cilindrica e disegniamo il vattore tangente alla curva
in alcuni suoi punti; disegniamo al contempo anche il vettore normale principale, denito
dalla formula
T

(t)
|T

(t)|
,
dove T(t) = r(t)/|r(t)| denisce il versore tangente. Possiamo quindi considerare i seguenti
comandi:
clear
a=2; k=3;
t=linspace(0,4*pi);
x=a*cos(t); y=a*sin(t); z=k*t;
plot3(x,y,z);
grid on; axis equal; hold on;
xlabel(x);ylabel(y);zlabel(z);
% grafico dellelica
tt=0:pi/4:4*pi; l=length(tt);
% definisco un vettore di valori compresi tra 0 e 4*pi
12 CAPITOLO 1. CURVE
xx=a*cos(tt); yy=a*sin(tt); zz=k*tt;
% calcolo r(t), r(t) e r(t) per questi valori
dxx=-a*sin(tt); dyy=a*cos(tt); dzz=k*ones(l);
ddxx=-a*cos(tt); ddyy=-a*sin(tt); ddzz=zeros(l);
s=[0 1];
for i=1:l
tg=norm([dxx(i) dyy(i) dzz(i)]);
% per i valori in tt calcolo il vettore tangente normalizzato
tg1=xx(i)+s.*dxx(i)./tg;
% cioe il versore tangente
tg2=yy(i)+s.*dyy(i)./tg;
tg3=zz(i)+s.*dzz(i)./tg;
n=norm([ddxx(i) ddyy(i) ddzz(i)]);
% calcolo inoltre il vettore normale normalizzato
n1=xx(i)+s.*ddxx(i)./n;
% cioe il versore normale
n2=yy(i)+s.*ddyy(i)./n;
n3=zz(i)+s.*ddzz(i)./n;
plot3(tg1,tg2,tg3,-r,n1,n2,n3,-g);
pause
end
hold off;
In alernativa si pu`o considerare un solo giro delica, come segue;
clear
a=2; k=3;
t=linspace(0,2*pi);
x=a*t.*cos(t); y=a*t.*sin(t); z=k*t;
plot3(x,y,z);
grid on; axis equal; hold on;
xlabel(x);ylabel(y);zlabel(z);
% grafico dellelica
tt=0:pi/8:4*pi; l=length(tt);
% definisco un vettore di valori compresi tra 0 e 4*pi
xx=a*tt.*cos(tt); yy=a*tt.*sin(tt); zz=k*tt;
% calcolo r(t), r(t) e r(t) per questi valori
dxx=a*(cos(tt)-tt.*sin(tt));
dyy=a*(sin(tt)+tt.*cos(tt));
dzz=k*ones(l);
ddxx=-a*(2*sin(tt)+tt.*cos(tt));
ddyy=a*(2*cos(tt)-tt.*sin(tt));
ddzz=zeros(l);
s=[0 1];
for i=1:l
tg=norm([dxx(i) dyy(i) dzz(i)]);
1.4. LUNGHEZZA DARCO 13
% per i valori in tt calcolo il vettore tangente normalizzato
tg1=xx(i)+s.*dxx(i)./tg;
% cioe il versore tangente
tg2=yy(i)+s.*dyy(i)./tg;
tg3=zz(i)+s.*dzz(i)./tg;
n=norm([ddxx(i) ddyy(i) ddzz(i)]);
% calcolo inoltre il vettore normale normalizzato
n1=xx(i)+s.*ddxx(i)./n;
% cioe il versore normale
n2=yy(i)+s.*ddyy(i)./n;
n3=zz(i)+s.*ddzz(i)./n;
plot3(tg1,tg2,tg3,-r,n1,n2,n3,-g);
pause
end
hold off;
1.4 Lunghezza darco
Come primo esempio di calcolo di una lunghezza, vediamo come la lunghezza di una polig-
onale inscritta in una semicirconferenza pu`o essere usata per approssimare il valore di .
Consideriamo quindi i seguenti comandi;
t=linspace(0,pi);
for i=[1,2,3,4];
s=linspace(0,pi,3^i+1);
x=cos(s); y=sin(s);
dx=diff(x); dy=diff(y);
ds=sqrt(dx.^2+dy.^2);
L=sum(ds);
plot(cos(t),sin(t));
hold on;
plot(x,y);
T=[Lunghezza della Poligonale= ,num2str(L)];
text(-40,4,T);
hold off;
pause;
end;
1.4.1 Graco di funzione
In questa sezione calcoliamo la lunghezza di una curva cartesiana, cio`e la lunghezza del
graco di una funzione y = f(x), x [a, b]. Ricordiamo che tale lunghezza `e data dalla
formula
L = l(r, [a, b]) =
_
b
a
_
1 +f

(x)
2
dx,
14 CAPITOLO 1. CURVE
dove r : [a, b] R
2
`e la parametrizzazione r(x) = (x, f(x)). Solitamente, lintegrale
precedente non si riesce a calcolare analiticamente; se ad esempio consideriamo la funzione
f(x) = x
3
+ 3x
2
5x + 2, x [1, 2], ci ritroviamo col seguente integrale
L =
_
2
1
_
36x
4
+ 36x
3
+ 6x
2
60x + 26dx.
Determineremo il valore di L considerando le approssimazioni del graco di f mediante
poligonali; tali poligonali avranno vertici nei punti di coordinate (x, f(x)); procederemo
quindi con la suddivisione dellintervallo [1, 2] in segmenti della medesima ampiezza. Tale
calcolo viene eettuato ad esempio dal seguente semplice script.
x=linspace(-1,2,400);
y=x.^3+3*x.^2-5*x+2;
dx=diff(x);
dy=diff(y);
ds=sqrt(dx.^2+dy.^2);
L=sum(ds)
In tale modo si ottiene il valore L = 20.8314; dire cosa si ottiene se lultimo comando
viene sostituito con
L=cumsum(ds)
Il vantaggio dellapprossimazione poligonale `e quello di ottenere in modo abbastanza
semplice un valore approssimato del valore della lunghezza della curva; non si ha per`o nes-
suna informazione sullerrore commesso nellapprossimazione. Come vedremo nel prossimo
paragrafo, questo errore pu`o essere anche consistente.
1.4.2 Curve parametrizzate
Iniziamo con il calcolo approssimato del numero ;
Vediamo ora col seguente esempio quanto lapprossimazione poligonale pu`o non essere
accurata. Consideriamo la curva
r(t) = (4t 2t
3
, t
2
), t [1, 3].
Utilizziamo lapprossimazione poligonale dove viene suddiviso lintervallo [1, 3] in 400 parti
uguali e la poligonale ha per vertici i punti r(t
i
); considereremo inoltre anche un metodo
numerico per il calcolo del seguente integrale:
L = l(r, [1, 3]) =
_
3
1
_
36t
4
32t
2
+ 16dt,
che `e la formula per il calcolo della lunghezza di una curva regolare.
t=linspace(-1,3,400);
x=4*t-2*t.^3;
y=t.^2;
plot(x,y);
dx=diff(x);
1.4. LUNGHEZZA DARCO 15
dy=diff(y);
ds=sqrt(dx.^2+dy.^2);
L1=sum(ds);
L2=quad(fcnchk(sqrt(36*t.^4-32*t.^2+16)),-1,3,.0001);
T1=[Lunghezza poligonale approssimante= ,num2str(L1)];
T2=[Lunghezza approssimata al decimillesimo= ,num2str(L2)];
text(-40,4,T1);
text(-40,3.5,T2);
Si noti la dierenza tra i due valori ottenuti; si pu`o provare a sostituire il valore 400
con altri valori e vedere per quale valore di tale parametro la lunghezza della poligonale `e
paragonabile col valore L2.
Una variante del precedente esercizio puo essere la determinazione della lunghezza del-
lellisse di equazione
x
2
4
+
y
2
9
= 1,
che si puo parametrizzare mediante r(t) = (2 cos t, 3 sin t), t [0, 2].
t=linspace(0,2*pi,1001);
x=2*cos(t); y=3*sin(t);
plot(x,y);
dx=diff(x); dy=diff(y); ds=sqrt(dx.^2+dy.^2);
L=sum(ds);
qT=[Lunghezza poligonale approssimante= ,num2str(L)];
text(-1.5,.2,T);
Ovviamente, come prima, possiamo approssimare il valore dellintegrale
_
2
0
_
6 5 sin
2
tdt
utilizzando metodi numerici; useremo qui il comando quad8. Possiamo quindi aggiungere
ai precedenti comandi i seguenti;
L2=quad8(fcnchk(sqrt(9-5*sin(t).^2)),0,2*pi);
text(-1.5,.2,Valore approssimato integrale= ,num2str(L2));
Esercizio 1.4 Provare a ripetere i conti precedenti per le seguenti curve; si provi anche a
vedere se la lunghezza della curva pu`o essere determinata utilizzando il symbolic toolbox.
1. y = sen x per x [0, /2];
2. x = cot t, y = sen
2
t per t [/4, /2];
3. y = x
3
per x [0, 2];
4. x = t cos t, y = t sen t per t [0, 2].
16 CAPITOLO 1. CURVE
1.5 Curvatura
Consideriamo qui la curva parametrizzata da
r(t) = (2 sin(t), cos t, cos t);
creeremo una gura divisa in due parti, dove nella prima parte tracceremo il sostegno di r,
mentre nella seconda parte disegneremo il graco della funzione curvatura
k(t) =
|r

(t) r

(t)|
|r

(t)|
3
=
1
(1 + cos
2
t)
3/2
.
t=linspace(0,2*pi,200);
subplot(2,1,1);
plot3(2*sin(t),cos(t),cos(t));
grid on;
text(0,1,1-.2,\uparrow t=0)
text(2,0,0-.2,\uparrow t=\pi/2)
text(-2,0,0-.2,\uparrow t=3\pi/2)
subplot(2,1,2);
plot(t,1./(1+cos(t).^2).^(3/2));
set(gca,XTick,[0:pi/2:2*pi])
Tramite il calcolo della curvatura, possiamo anche ricavare il cerchio osculatore alla
curva. Prenderemo in considerazione il caso di una curva piana descritta come graco della
funzione f(x) = x
2
, x [2, 2]. Disegneremo il sostegno della curva e il cerchio osculatore
la curva nel punto (1/2, 1/4). La curvatura per una curva cartesiana e data da
k(x) =
[f

(x)[
(1 +[f

(x)[
2
)
3/2
=
2
(1 + 4x
2
)
3/2
.
Per x = 1/2 otteniamo k(1/2) = 1/

2; dato che il versore tangente in tale punto e dato da


1

2
(1, 1) mentre il versore normale `e dato da
1

2
(1, 1), il cerchio osculatore avr`a raggio

2
e sar`a centrato in (
1
2
,
5
4
).
x=linspace(-2,2,400);
t=linspace(0,2*pi,600);
plot(x,x.^2,-.5+sqrt(2)*cos(t),1.25+sqrt(2)*sin(t));
axis equal;
Esercizio 1.5 1. Far variare il cerchio osculatore nellultimo esempio considerato.
2. Si approssimi la lunghezza di r(t) = (t, t
2
, t
3
), t [0, 2] sia con lapprossimazione polig-
onale dividendo lintervallo in 1000 sottointervalli uguali, quindi usando il comando
quad.
3. Determinare k(t) per r(t) = (sin t, cos t, sin
2
t), t [0, 2] e, mediante il comando
subplot, disegnare la curva e il graco della sua curvatura.
4. Disegnare la curva cartesiana y = log x, x [2, 4] e il cerchio osculatore alla curva nel
punto relativo ad x = 2.
5. Disegnare il sostegno della curva r(t) = (t, t
2
, t
3
), t [0, 2] e il cerchio osculatore
relativo al valore t = 1.
Capitolo 2
Funzioni di pi` u variabili
2.1 Funzioni e loro graci
Iniziamo col disegnare il graco di alcune funzioni di due variabili z = f(x, y); possiamo
ad esempio considerare la funzione z =
_
4 2x
2
y
2
, denita nella regione 2x
2
+ y
2
4
(ellisse di semiassi

2 e 2). Per denire quindi il dominio nelle variabili (x, y) tramite il


comando meshgrid abbiamo dei problemi; conviene quindi passare alle coordinate polari
x = r

2 cos , y = 2r sin , con (r, [0, 1] [0, 2], regione rettangolare). Se si prova
per`o a far variare r no al valore 1 si riscontrano problemi, in quanto la funzione si annulla
e Matlab genera problemi; per questo faremo variare r no a 0.95.
[r,theta]=meshgrid(0:.05:.95,0:2*pi/30:2*pi);
x=sqrt(2)*r.*cos(theta);
y=2*r.*sin(theta);
z=sqrt(4-2.*x.^2-y.^2);
surf(x,y,z); axis equal;
Le righe che si vedono in gura altro non sono che le restrizioni della funzione sulle curve a
r costante e costante. In particolare le linee che dividono le regioni con colori dierenti (i
paralleli) sono ottenute tramite

f(r, ), con

f(r, ) = f(

2r cos , 2r sin ), mentre


le linee che escono a raggiera dal punto di massima elevazione (i meridiani) sono ottenuti
tramite r

f(r, ).
Se non si volessero utilizzare le coordinate polari, si pu`o restare nelle coordinate (x, y),
moltiplicando la funzione per 0 quando 4 2x
2
y
2
< 0. Si pu`o procedere come segue.
[x,y]=meshgrid(-sqrt(2):.1:sqrt(2),-2:.1:2);
z=sqrt((4-2.*x.^2-y.^2 >= 0).*(4-2.*x.^2-y.^2));
surfl(x,y,z);
Notiamo qui che loperazione (4 2. x.
2
y.
2
>= 0) `e un operatore logico, che restituisce
il valore 1 se la condizione `e vericata, altrimenti restituisce 0. Otteniamo quindi una
matrice di valori che sono o 1 o 0 a seconda che il punto (x, y) appartenga o meno allellisse.
Loperazione consiste quindi semplicemente nel disegnare il graco della funzione
f(x, y) =
_

E
(x, y)(4 2x
2
y
2
), E = (x, y) R
2
: 2x
2
+y
2
4
17
18 CAPITOLO 2. FUNZIONI DI PI
`
U VARIABILI
e
E
`e la funzione caratteristica dellinsieme E, cio`e

E
(x, y) =
_
_
_
1 se (x, y) E
0 se (x, y) , E.
In questo modo la funzione
E
(x, y)(4 2x
2
y
2
) `e denita per ogni (x, y) R
2
e non
abbiamo problemi a disegnarne il graco. Concludiamo questa sezione con un commento; le
linee che sono visualizzate nel graco ottenuto altro non sono che le restrizioni della funzione
x f(x, y) e y f(x, y).
2.1.1 Funzioni discontinue
Iniziamo con una funzione che abbiamo gi`a visto durante il corso di teoria, e cio`e la funzione
f(x, y) =
xy
x
2
+y
2
, (x, y) ,= (0, 0).
Utilizziamo le coordinate polari per disegnare tale graco;
[r,theta]=meshgrid(0:.02:1,0:2*pi/50:2*pi);
x=r.*cos(theta);
y=r.*sin(theta);
z=x.*y./(x.^2+y.^2);
surf(x,y,z); axis equal;
Dal graco si intuisce la discontinuit`a della funzione. Possiamo visualizzare meglio questo
fenomeno tramite le restrizioni y = mx, che corrisponde in coordinate polari, alle sezioni
r

f(r, ), dove

f(r, ) = f(r cos , r sin ).
Le sezioni ad angolo costante si ottiene mediante;
r=linspace(0,1);
plot3(r,r.*0,r.*0);
grid on;
axis([-1 1 -1 1 -.5 .5]);
hold on;
for i=[0:2*pi/50:2*pi]
plot3(r.*cos(i),r.*sin(i),r.^2.*cos(i)*sin(i)./r.^2);
pause(.1)
end;
hold off;
mentre le sezioni a raggio ssato si ottengono tramite;
theta=linspace(0,2*pi);
plot3(cos(theta),sin(theta),cos(theta).*sin(theta),r); grid on;
hold on
for r=[0:.1:1]
plot3((1-r)*cos(theta),(1-r)*sin(theta),cos(theta).*sin(theta),r);
pause(.5);
end;
hold off;
2.1. FUNZIONI E LORO GRAFICI 19
Si provi a ripetere i comandi precedenti, cio`e disegnando prima le sezioni ad angolo costante
e poi quelle a raggio costante, togliendo il comando hold o; alla ne delle sezioni ad angolo
costante.
Possiamo anche ricostruire il graco della funzione utilizzando il metodo degli insiemi di
livello. Ad esempio possiamo scrivere;
[x,y]=meshgrid(-2:.1:2);
contour(x,y,x.*y./(x.^2+y.^2+eps),10);
Il numero 10 nel comando precedente specica quante linee di livello si desiderano disegnare;
tale parametro pu`o essere omesso. La variabile eps serve per evitare la divisione per 0; `e
una variabile Matlab. Possiamo mettere anche le etichette sui livelli; ad esempio possiamo
considerare:
[x,y]=meshgrid(-2:.1:2);
[C h]=contour(x,y,x.*y./(x.^2+y.^2+eps));
clabel(C,h);
Si pu`o inne selezionare il livello o mettere letichetta solo al livello che si desidera. Vedremo
questo nel prossimo paragrafo.
Possiamo visualizzare il comando contour come sezione del graco della funzione con i
piano orizzontali z = c; possiamo ad esempio considerare i seguenti comandi.
[x,y]=meshgrid(-2:.1:2);
z=x.*y./(x.^2+y.^2+eps);
[u,v]=meshgrid([-2 2]);
subplot(2,4,1);
surf(x,y,z); hold on; surf(u,v,-0.3*ones(2,2)); title(z=-0.3);
subplot(2,4,2);
[C h]=contour(x,y,z,[-0.3]); clabel(C,h);
subplot(2,4,3);
surf(x,y,z); hold on; surf(u,v,-0.1*ones(2,2)); title(z=-0.1);
subplot(2,4,4);
[C h]=contour(x,y,z,[-0.1]); clabel(C,h);
subplot(2,4,5);
surf(x,y,z); hold on; surf(u,v,0.1*ones(2,2)); title(z=0.1);
subplot(2,4,6);
[C h]=contour(x,y,z,[0.1]); clabel(C,h);
subplot(2,4,7);
surf(x,y,z); hold on; surf(u,v,0.3*ones(2,2)); title(z=0.3);
subplot(2,4,8);
[C h]=contour(x,y,z,[0.3]); clabel(C,h);
Per mettere assieme il graco della funzione e il disegno dei livelli, possiamo considerare
i seguenti comandi:
[x,y]=meshgrid(-2:.05:2);
surfc(x,y,x.*y./(x.^2+y.^2+eps));
20 CAPITOLO 2. FUNZIONI DI PI
`
U VARIABILI
Si provi per esercizio a ripetere la procedura precedente considerando le sezioni a x = c
e y = c. Si creino quindi dei subplot in cui da una parte viene disegnato il graco della
funzione f e il piano verticale x = c, e da una parte il graco della funzione f(c, y); si ripeta
ancora lesercizio con y = c e f(x, c).
Un secondo esempio Proseguiamo ora disegnando il graco della funzione, discontinua
in (0, 0), denita da
f(x, y) =
xy
2
x
2
+y
4
.
Possiamo provare direttamente a disegnare il graco di f:
[x,y]=meshgrid(-2:.1:2);
surf(x,y,(x.*y.^2)./(x.^2+y.^4));
Il disegno viene comunque prodotto, anche se con un buco attorno allorigine (0, 0). Tale
buco pu`o essere eliminato mediante la variabile eps, che `e il pi` u piccolo numero macchina
positivo Matlab.
[x,y]=meshgrid(-2:.1:2);
surf(x,y,(x.*y.^2)./(x.^2+y.^4+eps));
Con i seguenti comandi disegneremo alcuni livelli della funzione data e metteremo letichetta
solo ad una selezione speciale di livelli:
[x,y]=meshgrid(-2:.05:2);
L=[-.45:.05:.45];
[C,h]=contour(x,y,(x.*y.^2)./(x.^2+y.^4+eps),L);
v=[-.4:.2:.4]; clabel(C,h,v);
Si ripetano inne come esercizio le cose viste nella sezione precedente.
Esercizio 2.1 1. Disegnare i graci delle funzioni
xy
x
2
+y
2
,
x
2
y
x
2
y
2
,
y
2
x
2
+y
2
,
x
2
y
x
4
+y
2
.
2. Tracciare le curve di livello delle precedenti funzioni.
3. Scrivere le superci di livello delle funzioni di tre variabili
x
2
+y
2
z
2
, [x[ +[y[ +[z[.
4. Disegnare il graco di f(x, y) = xy
3
x
3
y sul dominio (x, y) [3, 3]
2
; creare poi
separatamente una mappa dei livelli di tale funzione su tale dominio. Usare inne il
comando surfc.
5. Usare il comando contour per disegnare la curva denita implicitamente dallequazione:
2x
2
+xy +y
4
=
1
2
.
2.2. DERIVATE PARZIALI 21
2.2 Derivate parziali
Possiamo utilizzare il symbolic toolbox di Matlab per calcolare le derivate parziali di
una funzione. Useremo ad esempio il comando ezplot (su veda anche lappendice A per
maggiori dettagli sulla derivazione numerica); i comandi seguenti calcolano le derivate di
f(x, y) = sin(x
2
+y
2
) e tracciamo il graco di f(1, y),
x
f(x, 1),
2
xx
f(1, y) e
2
xy
f(x, 1).
syms x y
f=sin(x^2+y^2); fx=diff(f,x);
fxx=diff(f,x,2); fxy=diff(fx,y);
subplot(2,2,1); ezplot(subs(f,x,1));
subplot(2,2,2); ezplot(subs(fx,y,1));
subplot(2,2,3); ezplot(subs(fxx,x,1));
subplot(2,2,4); ezplot(subs(fxy,y,1));
Supponiamo ora di voler disegnare il graco della funzione
2
xy
f utilizzando il comando
surf. Dobbiamo convertire la funzione
2
xy
f denita precedentemente come una espressione
simbolica in una funzione buona per poter utilizzare surf. Possiamo procedere, a partire dai
comandi precedenti, come segue;
Fxy=fcnchk(char(fxy),x,y,vectorized);
[x,y]=meshgrid(-pi:2*pi/40:pi);
z=Fxy(x,y);
figure(2); clf; surf(x,y,z);
Esercizio 2.2 Si ripeta quanto fatto ora per la funzione f(x, y) = sin
2
(2x+3y); si traccino i
graci di f(x, 2),
x
f(x, 2),
2
xy
f(x, 2) e
3
xyy
f(x, 2). Si disegni inne il graco di
3
xyy
f(x, y),
(x, y) [, ]
2
.
2.3 Piani tangenti
Vediamo ora come disegnare il graco di una funzione e del piano tangente al graco in un
punto ssato; consideriamo ad esempio la funzione f(x, y) = x
2
+ y
2
e il punto (1, 2, 5); la
formula per il piano tangente `e data da
z = f(x
0
, y
0
) +f(x
0
, y
0
) (x x
0
, y y
0
).
Possiamo quindi considerare i seguenti comandi:
[x,y]=meshgrid(-3:.1:3);
surf(x,y,x.^2+y.^2);
hold on;
[u,v]=meshgrid(-2:2:2);
L=5+2*u+4*v;
surf(u+1,v+2,L); hold off;
view(-121,20);
Si noti che la griglia per le variabili (u, v) `e meno dettagliata; infatti, essendo L un piano,
servono meno punti per avere un buon graco.
Possiamo anche considerare la funzione x
2
y
2
nel punto (1, 2, 3). Con i seguenti co-
mandi disegneremo il graco della funzione per (x, y) [3, 3]
2
assieme al suo piano tangente
in (1, 2, 3) ed attiveremo il comando rotate3d; si provino gli eetti di tale comando.
22 CAPITOLO 2. FUNZIONI DI PI
`
U VARIABILI
[x,y]=meshgrid(-3:.1:3);
surf(x,y,x.^2-y.^2); hold on;
[u,v]=meshgrid(-2:2:2);
L=-3+2*u-4*v;
surf(1+u,2+v,L); hold off;
rotate3d on;
2.4 Gradiente
Consideriamo in questa sezione il campo gradiente, che come si `e visto `e un campo ortogonale
agli insiemi di livello della funzione. Inizieremo con una funzione di due variabili per passare
poi ad una funzione di tre variabili.
2.4.1 Un esempio nel piano
Data la funzione f(x, y) = x
2
+ 5y
2
con (x, y) [2, 2]
2
, tracceremo le sue curve di livello
e nello stesso disegno tracceremo il campo gradiente utilizzando la funzione quiver;
[x,y]=meshgrid(-2:.05:2);
L=5*[0:.2:2].^2; % questo vettore definisce la scelta dei livelli
[c,h]=contour(x,y,x.^2+5*y.^2,L); hold on;
[x,y]=meshgrid(-2:.2:2);
dx=2*x; dy=10*y;
quiver(x,y,dx,dy); hold off;
Un secondo esempio `e dato dalla funzione f(x, y) = 2x
2
+xy +y
2
nel dominio [2, 2]
[3, 3]; tracciamo quindi nello stesso graco il campo gradiente di f e un insieme di livello;
[x,y]=meshgrid(-2:.2:2,-3:.2:3);
fx=4*x+y; fy=x+2*y;
quiver(x,y,fx,fy); hold on;
contour(x,y,2*x.*y+y.^2); hold off;
2.4.2 Un esempio nello spazio
Consideriamo qui la funzione f(x, y, z) = x
2
+ y
2
z
2
e vogliamo disegnare il livello E
1
=
f = 1; nello stesso disegno considereremo il campo gradiente di f dato da f(x, y, z) =
(2x, 2y, 2z). Il livello E
1
`e descritto dallequazione
x
2
+y
2
= z
2
+ 1,
che signica che per ogni z ssato i punti (x, y) appartengono ad una circonferenza di raggio

z
2
+ 1,
[theta,z]=meshgrid(0:pi/20:2*pi,-2:.1:2);
x=sqrt(z.^2+1).*cos(theta);
y=sqrt(z.^2+1).*sin(theta);
surf(x,y,z); hold on;
quiver3(x,y,z,2*x,2*y,-2*z); hold off;
rotate3d on;
2.4. GRADIENTE 23
Un problema che si nota `e che la supercie copre i vettori normali; potremmo anche disegnare
solo i vettori gradiente, la supercie sottesa si dedurr`a dai punti di applicazione di tali vettori;
[theta,z]=meshgrid(0:pi/20:2*pi,-2:.1:2);
x=sqrt(z.^2+1).*cos(theta);
y=sqrt(z.^2+1).*sin(theta);
quiver3(x,y,z,2*x,2*y,-2*z);
rotate3d on;
Esercizio 2.3 1. Si disegni, nello stesso graco, i livelli di f(x, y) = x
2
y
2
a il campo
gradiente di f.
2. Si disegni la curva x
2
y
2
= 1 parametrizzandola (si usino seno e coseno iperbolico)
e si disegni nello stesso graco il campo gradiente di f.
3. Disegnare il livello f(x, y, z) = x
2
+ 3y
2
+ 4z
2
= 9 utilizzando le relazioni;
_
x =

9 4z
2
cos
y =

9 4z
2
sin
e nello stesso graco si disegni il campo gradiente di f.
24 CAPITOLO 2. FUNZIONI DI PI
`
U VARIABILI
Capitolo 3
Superci
Iniziamo con un semplice esempio e disegniamo un piano nello spazio; considereremo il piano
di equazione x+2y+z = 3, che pu`o essere considerato come il graco z = 3x2y = f(x, y)
di una funzione di due variabili. Disegneremo il graco di questa funzione sul dominio
rettangolare x [4, 4], y [2, 2]; per fare questo utilizzeremo il comando meshgrid.
[x,y]=meshgrid(-4:8:4,-2:4:2);
z=3-x-2*y;
surf(x,y,z); view(120,20);
Il comando view serve per modicare il punto da cui viene visualizzata la supercie (i valori
di default sono 37.5
o
di azimuth, 30
o
di elevazione). In alternativa al comando surf per la
visualizzazione si pu`o utilizzare il mesh, come mostra il seguente esempio;
[x,y]=meshgrid(-4:4:4,-2:2:2);
z=3-x-2*y;
mesh(x,y,z); view(120,20);
Per visualizzare un piano possiamo anche utilizzare lequazione parametrica del pi-
ano; disegniamo quindi il piano che passa per il punto (1, 3, 2) e determinato dai vettori
(1/5, 3/10, 1/2) e (2/5, 1/3,

2), con i parametri s, t [2, 2]. Possiamo quindi scrivere:


[s,t]=meshgrid(-2:4:2);
x=1+.2*s+.4*t;
y=3+.3*s-1/3*t;
z=-2-.5*s+sqrt(2)*t;
figure(1); mesh(x,y,z); view(120,60);
figure(2); surf(x,y,z); view(120,60);
Per aiutare la visualizzazione, si provi ad utilizzare il comando rotate3d invece di utilizzare
il comando view.
Visualizziamo inoltre il graco di due piani; con i seguenti comandi determiniamo anche
langolo con cui i due piani si incontrano.
[x,y]=meshgrid(-2:.1:2,-1:.1:1);
z1=1-x-y; z2=(1-x+2*y)/3;
surf(x,y,z1); hold on;
25
26 CAPITOLO 3. SUPERFICI
surf(x,y,z2); hold off;
view(110,20);
n1=[1 1 1]; n2=[1 -2 3];
L1=sqrt(sum(n1.*n1)); L2=sqrt(sum(n2.*n2));
angle=acos(sum(n1.*n2)/L1/L2);
text(3,-1,-3,[Angolo tra i due piani= ,num2str(angle)]);
Esercizio 3.1 1. Disegnare il piano passante per (1, 3, 2) determinato dai due vettori
(1, 2, 1/2), (3, 1, 2).
2. Disegnare il piano determinato dallequazione x +y z = 2.
3. Disegnare nello stesso graco i piani x + y + z = 2 e 3x 4y + 5z = 8, calcolando
langolo con cui tali piani si incontrano.
3.1 Superci cartesiane
Tra le superci possiamo ovviamente considerare le superci cartesiane, cio`e le superci che
sono graci di funzioni di due variabili. Richiamiamo quindi alcuni concetti gi`a visti nel
capitolo 2.
Disegniamo ad esempio il graco della funzione f(x, y) = 2x
2
y
2
, (x, y) [2, 2]
[4, 4]; di tale funzione ne considereremo anche le sezioni lungo i piani x = c, y = c e z = c,
con c una costante ssata. Tracciamo anzitutto il graco;
[x,y]=meshgrid(-2:.1:2,-4:.1:4);
surf(x,y,2*x.^2-y.^2);
shading interp;
Le sezioni con x = c o y = c si possono visualizzare semplicemente passando il parametro
shading faceted;
Le linee che si vedono altro non sono che le intersezioni del graco di f con i piani verticali
x = c e y = c. Per ottenere le intersezioni con i piani z = c baster`a considerare il comando
countour3.
Il seguente esempio `e dato da una supercie che `e cartesiana ma come funzione y =
f(x, z) = x
2
; tale supercie `e un cilindro la cui base `e descritta dalla parabola y = x
2
;
[x,z]=meshgrid(-2:.1:2,[-2,2]);
surf(x,x.^2,z);
Disegniamo inne il piano verticale x + 3y = 3, che `e una supercie cartesiana se vista
nella forma y = 1 x/3 oppure x = 3 3y.
[y,z]=meshgrid(-1:2,-1:1);
x=3-2*y;
surf(x,y,z);
Esercizio 3.2 1. Disegnare il graco di f(x, y) = (x
2
y
2
)
2
, tracciando anche i livelli
di tale funzione.
2. Disegnare il graco di f(x, y) = xe
x
2
y
2
; aancare a tale graco il graco costituito
da 25 curve di livello.
3.2. SUPERFICI DI ROTAZIONE 27
3.2 Superci di rotazione
Lesempio pi` u semplice di supercie di rotazione `e dato dalla sfera; utilizziamo qui il comando
sphere per disegnare la sfera x
2
+y
2
+z
2
= 9.
[x,y,z]=sphere(30);
surf(3*x,3*y,3*z);
axis equal;
shading interp;
Il comando sphere crea la sfera di raggio 1 centrata nellorigine; possiamo quindi utilizzare
la stessa funzione per disegnare un ellissoide;
[x,y,z]=sphere(30);
surf(4*x,3*y,2*z);
axis equal;
Possiamo utilizzare il comando cylinder per disegnare la supercie ottenuta ruotando
una funzione x = f(z) attorno allasse z, con z [a, b]. La sintassi sar`a la seguente:
z=linspace(a,b,40);
x=f(z);
[X,Y,Z]=cylinder(x,30);
surf(X,Y,Z);
Per migliorarne leetto visivo, si pu`o usare il comando shading interp. Ma vediamo un
esempio concreto; ruotiamo il graco della funzione z
2
+ 1 attorno allasse z. Il graco che
vogliamo ruotare sar`a il seguente;
z=linspace(1,3,50);
x=z.^2+1;
plot(x,z);
La rotazione si ottiene quindi nel seguente modo;
z=linspace(1,3,50);
x=z.^2+1;
[X,Y,Z]=cylinder(x,50);
figure(1);
surf(X,Y,Z);
zlabel(z); xlabel(x); ylabel(y);
figure(2);
surf(X,Y,Z);
shading interp;
Chiaramente si pu`o ottenere anche la rotazione della stessa funzione ruotandola attorno
allasse x invece che attorno allasse z. Per far questo si ricava z in funzione di x e si ripetono
i comandi precedenti.
z=linspace(2,10,50);
x=sqrt(z-1);
[X,Y,Z]=cylinder(z,50);
surf(X,Y,Z);
zlabel(z); xlabel(x); ylabel(y);
28 CAPITOLO 3. SUPERFICI
Si pu`o provare a sostituire il comando
surf(X,Y,Z);
col comando
surf(Z,Y,X);
e vedere cosa succede (si provi a commentare il risultato).
Possiamo anche disegnare superci di rotazione utilizzando le coordinate cilindriche e
sferiche, a seconda delle simmetrie della supercie che si vuole disegnare. Ad esempio, il
cono stesso z
2
= a
2
(x
2
+y
2
), a > 0 arbitrario, pu`o essere disegnato ponendo z = ar, r 0
e [0, 2] (di seguito consideriamo il caso a = 1/4).
a=.25;
[r,theta]=meshgrid(0:.2:2,0:2*pi/20:2*pi);
x=a*r.*cos(theta);
y=a*r.*sin(theta);
z=a*r;
surf(x,y,z); axis equal;
Analogamente, possiamo disegnare la supercie laterale di un cilindro come segue;
a=2;
[theta,z]=meshgrid(0:2*pi/30:2*pi,-3:6:3);
x=2*cos(theta); y=2*sin(theta);
surf(x,y,z); axis equal;
Per disegnare una sfera di raggio R possiamo invece utilizzare le coordinate sferiche, con
angoli [0, ], [0, 2];
R=2;
[theta,phi]=meshgrid(0:2*pi/30:2*pi,0:2*pi/30:pi);
x=R*cos(theta).*sin(phi);
y=R*sin(theta).*sin(phi);
z=R*cos(phi);
surf(x,y,z); axis equal;
ed in modo del tutto analogo si pu`o anche disegnare unellissoide; i seguenti comandi
disegnano lellissoide di semiassi 5, 10 e 5/3 centrato in (1, 1, 0).
[theta,phi]=meshgrid(0:2*pi/30:2*pi,0:2*pi/30:pi);
x=1+5*cos(theta).*sin(phi);
y=-1+10*sin(theta).*sin(phi);
z=5/3*cos(phi);
surf(x,y,z); axis equal;
Esercizio 3.3 1. Disegnare il graco di x
2
+y
2
= z
2
2. Disegnare il graco di x
2
+
y
2
4

z
2
9
= 1.
3. Disegnare il graco del cilindro z = sin(3x) con x [0, 2], z [1, 1].
3.3. SUPERFICI PARAMETRIZZATE 29
4. Disegnare la supercie ottenuta ruotando la funzione
z = 1 +
1
2
sin
2
x, x [0, ],
attorno allasse x.
5. Disegnare la supercie ottenuta ruotando la funzione
z =
1
x
, x [0.1, 2],
attorno allasse z.
6. Disegnare la parte di sfera di raggio 3 la cui latitudine `e compresa tra [/3, /3].
7. Disegnare il cono z
2
=
1
9
(x
2
+y
2
) e il cilindro y
2
+z
2
= 1 nello stesso graco.
8. Disegnare la sfera di raggio 3 centrata in (1, 1, 0); usare hold on e quindi disegnare
lellissoide (x 1)
2
+ (y + 1)
2
/4 + 9z
2
= 25 nello stesso graco.
3.3 Superci Parametrizzate
Disegneremo qui superci denite parametricamente, cio`e tramite funzioni
f(u, v) = (f
1
(u, v), f
2
(u, v), f
3
(u, v)),
dove f : [a, b] [c, d] R
3
. Utilizzeremo i seguenti comandi
[u,v]=meshgrid(a:du:b,c:dv:d);
surf(f1(u,v),f2(u,v),f3(u,v));
dove tipicamente du e dv sono presi pari a .1 o .2; in alternativa, potremo usare anche il
comando sur a seconda dei casi (provare a capire le dierenze tra surf e sur utilizzando
la guida di Matlab). Un esempio di supercie parametrizzata lo abbiamo gi`a incontrato
come graco di una funzione; vedremo anche esempi di superci di rotazione.
3.3.1 Graci di funzioni
Siamo qui nel caso gi`a visto di z = g(x, y), cio`e con parametrizzazione data da f(u, v) =
(u, v, g(u, v)), g : [a, b] [c, d] R; avremo quindi
[x,y]=meshgrid(a:.1:b,c:.1:d);
surf(x,y,g(x,y));
Ad esempio, se consideriamo la funzione g(x, y) = x
3
+ y
3
sul dominio (x, y) [2, 2]
2
,
avremo
[x,y]=meshgrid(-2:.1:2);
surfl(x,y,x.^3+y.^3);
con la seguente variante se si vuole modicare le coordinate della sorgente di luce:
30 CAPITOLO 3. SUPERFICI
[x,y]=meshgrid(-2:.1:2);
S=[120,30];
surfl(x,y,x.^3+y.^3,S);
Si potrebbe aggiungere ai precedenti comandi alcuni comandi che disegnano il campo di
vettori normali alla supercie; ricordiamo che il campo normale `e dato da
n(u, v) =
f
u
(u, v) f
v
(u, v)
|f
u
(u, v) f
v
(u, v)|
,
dove f
u
e f
v
rappresentano le derivate parziali della parametrizzazione f. Nel caso di un
graco avremo quindi che f
u
(u, v) = (1, 0, g
u
(u, v)) e f
v
(u, v) = (0, 1, g
v
(u, v)), da cui
n(u, v) =
1
_
1 +[g(u, v)[
2
(g
u
(u, v), g
v
(u, v), 1).
Come esercizio, si provi ad utilizzare, come fatto nel capitolo 2, il comando quiver per
disegnare il campo normale alla supercie, cio`e i vettori n(u, v).
3.3.2 Superci di rotazione
Ricordiamo che una supercie di rotazione pu`o essere ottenuta ruotando attorno allasse z
il graco di una funzione z = g(x), x [a, b], oppure ruotando una curva parametrizzata
(x, z) = r(t), t [a, b]. La parametrizzazione della supercie si ottiene quindi mediante
f : [a, b] [0, 2] data da, nel primo caso
f(u, v) = (ucos v, usin v, g(u)),
mentre nel secondo caso
f(u, v) = (r
1
(u) cos v, r
1
(u) sin v, r
2
(v)).
Utilizzeremo quindi in generale i seguenti comandi:
[t,theta]=meshgrid(a:.1:b,0:2*pi/30:2*pi);
x=r1(t).*cos(theta);
y=r1(t).*sin(theta);
z=r2(t);
surf(x,y,z);
Possiamo ad esempio considerare il toro, ottenuto ruotando attorno allasse z la cir-
conferenza (x(t), z(t)) = (3 + cos t, sin t), t [0, 2]. Fissiamo il punto di vista tramite il
comando view e imponiamo che gli assi di riferimento siano uguali mediante axis equal.
[t,theta]=meshgrid(0:2*pi/30:2*pi);
x=(3+cos(t)).*cos(theta);
y=(3+cos(t)).*sin(theta);
z=sin(t);
surfl(x,y,z);
view(-10,20);
axis equal;
3.3. SUPERFICI PARAMETRIZZATE 31
Come esercizio, si provi a dire quali sono, nel graco appena ottenuto, le linee u f(u, v)
con v costante e quali le linee v f(u, v) con u costante. Si usino inoltre i comandi shading
interp e shading faceted.
Come esercizio, si utilizzi anche in questo caso il comando quiver per disegnare il campo
normale alla supercie, cio`e i vettori
n(u, v) =
f
u
(u, v) f
v
(u, v)
|f
u
(u, v) f
v
(u, v)|
,
che nel nostro caso, dato che f(u, v) = ((3 +cos u) cos v, (3 +cos u) sin v, sin u), sar`a dato da
n(u, v) =
(sin ucos v, sin usin v, cos u) ((3 + cos u) sin v, (3 + cos u) cos v, 0)
|(sin ucos v, sin usin v, cos u) ((3 + cos u) sin v, (3 + cos u) cos v, 0)|
=(cos ucos v, cos usin v. sin u).
Esercizio 3.4 1. Disegnare la supercie parametrizzata da
f(u, v) = (usin ucos v, ucos ucos v, usin v), (u, v) [0, 2]
2
.
Si individuino le curve u = costante e v = costante.
2. Disegnare il graco del cilindro circolare x
2
+y
2
= 1 di altezza 5 e si aggiustino gli assi
in modo da farlo apparire circolare e si modichi il punto di vista in modo da vedere
linterno del cilindro.
3. Disegnare il nastro di Mobius parametrizzato da
f(u, v) = (2 cos v +ucos
v
2
, 2 sin v +ucos
v
2
, usin
v
2
), u [1/2, 1/2], v [0, 2].
Utilizzare il comando rotate3d per aiutare la visualizzazione della supercie. Individ-
uare, anche tracciando un secondo graco, le curve con r = 1/2 e r = 1/2.
4. Disegnare il graco della porzione di iperboloide x
2
y
2
+ z
2
= 1 individuata da
x [2, 2] e y [3, 3].
5. Possiamo utilizzare le funzioni iperboliche per parametrizzare liperboloide del punto
precedente; si disegni la supercie parametrizzata da
f(u, v) = (cos usinh v, sin usinh v, cosh v), u [0, 2], v [2, 2].
6. Modicare il punto precedente per disegnare liperboloide x
2
+y
2
z
2
= 1.
Esercizio 3.5 Si rappresenti la proiezione stereograca della sfera, cio`e si consideri la
parametrizzazione della sfera f : R
2
R
3
data da
f(u, v) =
_
2u
u
2
+v
2
+ 1
,
2v
u
2
+v
2
+ 1
,
u
2
+v
2
1
u
2
+v
2
+ 1
_
e nella stessa gura si disegni la sfera di raggio 1, il piano z = 0 e alcuni punti di tale piano
(u, v, 0) insieme al segmento che li congiunge col punto di coordinate (0, 0, 1).
32 CAPITOLO 3. SUPERFICI
3.4 Piano tangente ad una supercie parametrizzata
Ricordiamo che data una supercie parametrizzata da
f(u, v) = (x(u, v), y(u, v), z(u, v)), (u, v) [a, b] [c, d],
lequazione del piano tangente la supercie in f(u
0
, v
0
) `e data da
(x(s, t), y(s, t), z(s, t) = f(u
0
, v
0
) + (s u
0
)f
u
(u
0
, v
0
) + (t v
0
)f
v
(u
0
, v
0
).
Prendiamo ad esempio liperboloide parametrizzato da
f(u, v) = (cos usinh v, sin usinh v, cosh v)
e il punto f(0, 1). Il piano tangente sar`a quindi dato da
(x(s, t), y(s, t), z(s, t) = (sinh 1 +t cosh 1, s sinh 1, cosh 1 +t sinh 1).
I seguenti comandi disegnano liperboloide per u [0, 2], v [2, 2] e il suo piano tangente.
[u,v]=meshgrid(0:pi/40:2*pi,-2:.1:2);
x=cos(u).*sinh(v); y=sin(u).*sinh(v); z=cosh(v);
surf(x,y,z); hold on;
[s,t]=meshgrid(-2:2:2);
X=sinh(1)+cosh(1)*t;
Y=sinh(1)*s;
Z=cosh(1)+sinh(1)*t;
surf(X,Y,Z); hold off;
Esercizio 3.6 1. Disegnare il graco di z = sin(x
2
+ y
2
) e il suo piano tangente in
(1, 1, sin 2).
2. Disegnare il graco di
f(u, v) = (2 cos usin v, sin usin v, 3 cos v)
e il suo piano tangente nel punto f(0, /3).
3. Disegnare il toro
f(u, v) = ((3 + cos u) cos v, (3 + cos u) sin v, sin u), (u, v) [0, 2]
2
e il suo piano tangente nel punto f(/4, 0) (utilizzare anche il comando axis equal).
Capitolo 4
Integrali multipli
In questo capitolo trattiamo gli integrali multipli, e pi` u precisamente gli integrali doppi nella
sezione 4.1 e gli integrali tripli nella sezione 4.4.
4.1 Integrali doppi
Ricordiamo che lintegrale doppio di una funzione denita su di un rettangolo f : [a, b]
[c, d] R `e dato passando al limite nelle somme di Riemann

h,k
f(x

h
, y

k
)(x
h+1
x
h
, y
k+1
y
k
)
dove a x
0
x
N
b, c y
0
y
M
d induce una partizione del rettangolo
in rettangolini [x
h
, x
h+1
] [y
k
, y
k+1
] e (x

h
, y

k
) [x
h
, x
h+1
] [y
k
, y
k+1
] (sar`a il punto di
minimo di f su tale rettangolino se stiamo costruendo le somme integrali inferiori, mentre
sar`a il massimo di f sul rettangolino se stiamo considerando le somme integrali superiori).
Il punto (x

h
, y

k
) pu`o essere preso arbitrario nel caso in cui f sia una funzione continua (e
questo sar`a il caso per tutte le funzioni che qui considereremo).
Tale costruzione si adatta molto bene a Matlab, in quanto possiamo considerare par-
tizioni del rettangolo fatte da rettangoli congruenti, cio`e ad esempio
x
h
=
h(b a)
N
, y
k
=
k(c d)
M
, h = 0, . . . , N, k = 0, . . . , M.
Potremmo quindi considerare i seguenti comandi
dx=(b-a)/N; dy=(c-d)/M;
[x,y]=meshgrid(a+dx2:dx:b-dx/2,c+dy/2:dy:d-dy/2);
f=f(x,y);
Riemann=sum(sum(f))*dx*dy;
Ad esempio, se f(x, y) = sin(x + y) e il rettangolo `e dato da [0, /2]
2
, allora possiamo
considerare i seguenti comandi, dove si disegna il graco di sin(x +y) e si calcola la somma
di Riemann;
33
34 CAPITOLO 4. INTEGRALI MULTIPLI
[x,y]=meshgrid(0:pi/60:pi/2);
surf(x,y,sin(x+y));
N=50; M=50; dx=pi/100; dy=dx;
[x,y]=meshgrid(0+dx/2:dx:pi/2-dx/2);
f=sin(x+y); R=sum(sum(f))*dx*dy;
R=num2str(R); text(.1,.1,1.4,[Somma di Riemann= ,R]);
Si utilizzi il comando rotate3d per visualizzare meglio la gura. Si provi poi a ripetere
quanto fatto ora con la funzione f(x, y) = cos
2
(x + 2y) sul rettangolo [0, ] [0, /2].
4.2 Formule di riduzione per integrali doppi
Vediamo qui una applicazione della formula di riduzione di un integrale doppio con f :
[a, b] [c, d] R
_
[a,b][c,d]
f(x, y)dxdy =
_
b
a
dx
_
d
c
f(x, y)dy.
In Matlab esiste la funzione dblquad che da una quadratura numerica dellintegrale doppio.
Vediamo come funziona con un esempio; la funzione f deve essere data in pasto al comando
dblquad o tra il comando fcnchk oppure deve essere denita utilizzando un mle. In
pratica, f deve essere riconosciuta da Matlab come una function, che pu`o essere denita
sia direttamente col comando fcnchk, oppure esternamente tramite un mle. Calcoliamo
ad esempio lintegrale di
f(x, y) =
1
_
x
2
+ 2y
2
+ 1
con (x, y) [0, 1] [0, 2]; useremo il comando fcnchk.
Stima=dblquad(fcnchk(1./sqrt(x.^2+2*y.^2+1)),0,1,0,2);
Stm=num2str(Stima);
[x,y]=meshgrid(0:.5:1,0:.1:2);
z=1./sqrt(x.^2+2*y.^2+1); surf(x,y,z);
rotate3d;
axis([0 1 0 2 0 1]);
text(.2,1.5,.2,[Integrale= ,Stm]);
Si pu`o anche usare il comando Matlab del symbolic toolbox int; tale comando serve per
calcolare gli integrali di funzioni di una variabile, quindi per il calcolo di un integrale doppio
andr`a utilizzato due volte.
syms x y real
Int1=int(1/sqrt(x^2+2*y^2+1),x,0,1);
R=int(Int1,y,0,2);
Si noti che con tali comandi il risultato esplicito non si riesce ad ottenere (il compilatore
o restituisce unespressione complicata o scrive un messaggio di attenzione comunicando
che lintegrale non si riesce a calcolare esplicitamente). Possiamo per`o ottenere il risultato
numerico dellintegrazione mediante il comando;
R=double(R);
4.3. INTEGRALI DOPPI SU DOMINI GENERICI 35
Esercizio 4.1 1. Si utilizzi sia lintegrale iterato che il comando dblquad per calcolare
_
[0,/6][0,/3]
xsin(x +y)dxdy.
Si tracci anche il graco della funzione integranda e mediante il comando text si riporti
il valore delle integrazioni eettuate.
2. Trovare il volume del solido sottostante il graco delliperboloide
z = x
2
y
2
, (x, y) [1, 1] [1, 3].
Si disegni il graco della funzione f(x, y) = x
2
y
2
e si riportino i valori delle
integrazioni eettuate sia con il dblquad che con lintegrazione iterata.
4.3 Integrali doppi su domini generici
Per poter integrare funzioni su domini limitati generici, procederemo in analogia a quanto si
`e fatto nel corso della teoria; pi` u precisamente, si considerer`a un rettangolo che contiene il
nostro dominio ed estenderemo la funzione ponendola zero nella regione del rettangolo che
non appartiene al dominio.
Prendiamo ad esempio la funzione f(x, y) = 3x
2
2y
2
sul dominio E = x
2
+y
2
1;
lintegrale di f su E rappresenta il volume del sottograco di f che `e un cilindro compreso
tra il piano z = 0 e il paraboloide z = f(x, y). Calcoleremo lintegrale utilizzando le somme
di Riemann e anche il comando dblquad.
z=fcnchk((x.^2+y.^2<=1).*(3-x.^2-2*y.^2));
dx=2/50; dy=2/50;
[x,y]=meshgrid(-1+dx/2:dx:1-dx/2);
Riemann=sum(sum(z(x,y)))*dx*dy;
R=num2str(Riemann);
Stima=dblquad(z,-1,1,-1,1);
S=num2str(Stima);
[x,y]=meshgrid(-1:.2:1);
surf(x,y,z(x,y));
text(-1,.8,3.2,[Somma di Riemann= ,R]);
text(-1,.8,3.6,[Integrazione numerica= ,S]);
text(-1,.8,4,[Valore preciso=9*pi/4=7.0686]);
Una variazione ai comandi precedenti si pu`o eettuare quando si richiama la funzione
dblquad: pi` u precisamente, la funzione pu`o essere denita tramite un mle. Cos` ad
esempio potremmo considerare il comando
Stima=dblquad(z,-1,1,-1,1,Puntomedio);
dove Puntomedio.m `e un mle descritto ad esempio dai seguenti comandi;
function [A,n]=Puntomedio(fun,a,b,E);
fun=fcnchk(fun,vectorized);
x=a:.001:b;
y=fun(x);
36 CAPITOLO 4. INTEGRALI MULTIPLI
y2=diff(y,2)/.001^2;
K=max(abs(y2));
n=ceil(sqrt(K*(b-a)^3/E/24));
h=(b-a)/n;
xstart=a+h/2:h:b-h/2;
f=fun(xstart);
A=sum(f)*h;
Atri modi per passare la funzione da integrare al comando dblquad possono essere i seguenti;
dblquad(@(x,y) funzione,a,b,c,d);
dove al posto della stringa funzione va inserita la denizione della nostra funzione e a, b, c
e d sono gli estremi di integrazione, cio`e nel nostro caso
funzione= 3-x.^2-2*y.^2
a=-1; b=1; c=-1; d=1;
In alternativa si pu`o considerare la sintassi:
dblquad(@funzione.m,a,b,c,d);
dove funzione.m `e un mle che denisce la funzione da integrare, e deve quindi essere
strutturato come segue;
function z=funzione(x,y);
...
4.3.1 Disegno di insiemi nel piano
A volte pu`o essere utile, prima di calcolare un integrale, avere unidea della regione su cui
si vuole calcolare lintegrale. Ad esempio, se si chiede di integrare f(x, y) = xy sul dominio
limitato dai graci y = x
4
e y = 3x x
3
, possiamo preliminarmente utilizzare i seguenti
comandi;
x=linspace(-2,2);
plot(x,x.^4,x,3*x-x.^3);
Si nota quindi che i due graci si incontrano per x = 0 e in un secondo punto x = b compreso
tra 1 e 1.5; avremo che lintegrale sar`a quindi dato da
_
b
0
_
3xx
3
x
4
xydy =
1
2
_
b
8
8
+
9b
4
4

b
10
10
b
6
_
.
Il punto b andrebbe determinato come soluzione dellequazione
b
3
+b
2
3 = 0,
ma per questo tipo di equazioni non esistono formule risolutive. Con i seguenti comandi,
individueremo tale soluzione numericamente con il comando fzero;
4.4. INTEGRALI TRIPLI 37
x=linspace(-2,2); plot(x,x.^4,x,3*x-x.^3);
axis([-.25 1.5 -1 4]); grid on;
b=fzero(x.^4-3*x+x.^3,1);
syms x y real
syms x y real;
A=int(int(x*y,y,x^4,3*x-x^3),x,0,b);
A=num2str(double(A));
T=[\int_D xy dx dy= ,A];
text(.01,3.25,T); text(.7,1,D);
set(gca,XTick,[0:.5:1 b]);
text(-.1,3*(-.1)-(-.1)^3,\leftarrow 3x-x^3);
text(1,1,\leftarrow x^4);
Qui i comandi nellambiente text che vengono preceduti da un backslash sono riconosciuti
dal formattatore LaTeX, che `e un formattatore per testi scientici, molto usato in ambito
matematico. Si provi ad esempio ad inserire dentro un comando text i seguenti comandi
\frac{x^2}{\sqrt{1-x}}
\int_0^2 e^\sqrt{5-6x^2} dx
Esercizio 4.2 Si consideri lintegrale
_
D
_
x
3
+ 1dxdy
con D dominio limitato dai graci y = x
2
, x = 1 e lasse delle x.
1. Calcolare le somme di Riemann con N = M = 50 ed usare il comando fcnchk per
estendere f(x, y) =

x
3
+ 1 nulla allesterno di D.
2. Disegnare il graco di f, estesa a zero fuori da D, sul quadrato (x, y) [0, 1]
2
ed usare
il comando text per riportare il valore della somma di Riemann.
3. Calcolare a mano lintegrale.
4. Usare il comando dblquad per stimare lintegrale. Se il comando non funziona a causa
delle troppe discontinuit`a della funzione, utilizzare come metodo alternativo lmle
Puntomedio.m o creare un mle alternativo per il calcolo dellintegrale (ad esempio
scrivere un mle che implementi il metodo di Simpson per il calcolo dellintegrale;
per informazioni sul metodo di Simpson, rimandiamo allappendice B).
5. Tracciare il graco delle curve che deniscono il dominio D ed usare il comando text
per mettere le etichette sulle curve, sul dominio D e per riportare il valore delle somme
di Riemann ottenute, del valore esatto calcolato a mano e il valore numerico ottenuto
con dblquad (o con un qualsiasi altro metodo adottato per il calcolo).
4.4 Integrali tripli
La somma di Riemann per un integrale triplo sar`a denita mediante una griglia tridimen-
sionale, cos` possiamo considerare comandi come segue;
38 CAPITOLO 4. INTEGRALI MULTIPLI
dx=(b-a)/N; dy=(c-d)/M; z=(e-f)/P;
[x,y,z]=meshgrid(a:dx:b,c:dy:d,e:dz:f);
dove si `e preparata la griglia per il calcolo di un integrale triplo su di un parallelepipedo
[a, b] [c, d] [e, f].
Se ad esempio vogliamo calcolare lintegrale della funzione f(x, y, z) = x
2
+ yz su E =
[0, 2] [3, 0] [1, 1] con N = M = P = 30, possiamo considerare i seguenti comandi,
dove a anco della somma di Riemann utilizziamo anche lintegrazione iterata, cio`e il fatto
che E `e un insieme semplice e
_
E
f(x, y, z)dxdydz =
_
2
0
dx
_
0
3
dy
_
1
1
(x
2
+yz)dz.
dx=2/30; dy=3/30; dz=2/30;
px=dx/2:dx:2-dx/2;
py=-3+dy/2:dy:-dy/2;
pz=-1+dz/2:dz:1-dz/2;
[x,y,z]=meshgrid(px,py,pz);
Riemann=sum(sum(sum(x.^2+y.*z)))*dx*dy*dz
syms x y z real
A=int(int(int(x^2+y*z,z,-1,1),y,-3,0),x,0,2)
4.4.1 Integrali su domini generici
Consideriamo ora il problema dellintegrazione della funzione f(x, y, z) = e
x
sullinsieme
E = (x, y, z) : 0 y 1, 0 x y, 0 z x +y;
possiamo considerare i comandi seguenti;
w=fcnchk((0<=y).*(y<=1).*(0<=x).*(x<=y).*(0<=z).*(z<=x+y).*exp(x));
dx=1/50; dy=dx; dz=2/100;
[x,y,z]=meshgrid(dx/2:dx:1-dx/2,dy/2:dy:1-dy/2,dz/2:dz:2-dz/2);
Riemann=sum(sum(sum(w(x,y,z))))*dx*dy*dz;
syms x y z real;
A=int(int(int(exp(x),z,0,x+y),0,y),0,1)
Si noti come sono stati utilizzati gli operatori logici di confronto. Inne, si noti che il risultato
viene riportato scritto in forma esponenziale decimale; per convertirlo in un numero decimale
basta inserire la seguente riga di comando;
double(A);
4.4.2 Graco di regioni solide
Pu`o essere utile prima di calcolare un integrale triplo a mano avere unidea di come `e fatto il
dominio di integrazione, in modo da avere un aiuto per la scelta del metodo di integrazione.
Possiamo quindi utilizzare Matlab per questo scopo, disegnando i bordi dellinsieme di
integrazione. Se ad esempio volessimo disegnare la regione solida della sezione precedente
descritta analiticamente da
E = (x, y, z) : 0 y 1, 0 x y, 0 z x +y,
potremmo procedere come segue;
4.4. INTEGRALI TRIPLI 39
y=linspace(0,1); x=0*y; z=0*y;
plot3(x,y,z);
hold on; grid on;
x=0*y; z=y; plot3(x,y,z);
x=y; z=0*y; plot3(x,y,z);
x=y; z=x+y; plot3(x,y,z);
x=linspace(0,1); y=1+0*x; z=0*x; plot3(x,y,z);
z=x+1; plot3(x,y,z);
z=linspace(0,2); x=1+0*z; y=1+0*z;
plot3(x,y,z);
z=linspace(1,0); x=0*z; y=1+0*z;
plot3(x,y,z); hold off;
Esercizio 4.3 1. Si scriva lintegrale triplo
_
E
e

3
dxdydz
con E = (x, y, z) : x
2
+ y
2
+ z
2
1 in coordinate sferiche; qui si intende =
_
x
2
+y
2
+z
2
. Si scrivano le somme di Riemann per tale integrale triplo con N =
M = P = 40 e si riporti il risultato ottenuto in un graco dove viene rappresentata la
sfera di raggio 1. Si riporti inoltre il risultato del valore esatto dellintegrale ottenuto
a mano o con il calcolo simbolico di Matlab.
2. Si calcolino le somme di Riemann per lintegrale
_
E
ydxdydz
con E = 0 z x + 2y, 0 x 1, 0 y x
2
. Si disegni la regione solida E.
40 CAPITOLO 4. INTEGRALI MULTIPLI
Capitolo 5
Punti stazionari e massimi e
minimi
5.1 Classicazione di punti stazionari
Il problema della classicazione dei punti stazionari consiste nella classicazione di una
forma quadratica; il primo metodo per la classicazione di una forma quadratica consiste
nello studio del segno degli autovalori di una matrice. Possiamo quindi utilizzare il comando
eig che, data una matrice, restituisce come risultato due matrici, una che contiene, nelle
colonne, gli autovettori, e una seconda in forma diagonale sulla cui diagonale sono contenuti
gli autovalori. Cos` ad esempio possiamo considerare i seguenti comandi;
A=[-6 -6; -6 2];
[V,D]=eig(A)
Si deduce quindi che A ha un autovalore negativo e uno positivo, quindi A `e una matrice
indenita. Analogamente;
A=[6 0 -2; 0 4 0; -2 0 2];
[V,D]=eig(A)
da cui si deduce che A `e denita positiva.
La verica si pu`o anche fare applicando il Teorema di Sylvestre, e cio`e calcolando i
determinanti dei minori principali; possiamo quindi considerare i seguenti comandi
A=[-6 6; -6 2];
A1(1,1)
det(A)
da cui si vede che i numeri ottenuti sono entrambi negativi per la prima matrice, e quindi
la matrice `e indenita, mentre
A=[6 0 -2; 0 4 0; -2 0 2];
A(1,1)
det([6 0; 0 4])
det(A)
41
42 CAPITOLO 5. PUNTI STAZIONARI E MASSIMI E MINIMI
da cui si vede che tutti i determinanti dei minori principali sono positivi, e quindi A `e
denita positiva.
Tipicamente il problema consiste nel cercare prima i punti stazionari e poi nel classicarli
e per questo pu essere utilizzato il symbolic toolbox. Consideriamo per semplicit la funzione
di due variabili
f(x, y) = 4x
2
+ 3y
2
+ 12xy + 7x + 8y + 5
che, come si vedr, ha un solo punto stazionario.
syms x y real
f = 4*x^2+3*y^2+12*x*y+7*x+8*y+5;
e calcoliamone i punti stazionari attraverso il comando solve applicato alle derivate parziali
fx=diff(f,x); fy=diff(f,y);
S=solve(fx,fy,x,y)
Si ottiene una struttura S che contiene un valore di x e uno di y, cio f(x, y) ha un solo
punto stazionario (x
m
, y
m
).
xm=S.x
ym=S.y
Calcoleremo ora le derivate seconde e le valuteremo nel punto (x
m
, y
m
) con il comando subs,
ottenendo la matrice Hessiana H(x
m
, y
m
).
fxx=diff(fx,x); fxy=diff(fx,y);
fyx=diff(fy,x); fyy=diff(fy,y);
H=[subs(fxx,{x,y},{xm,ym}) subs(fxy,{x,y},{xm,ym});
subs(fyx,{x,y},{xm,ym}) subs(fyy,{x,y},{xm,ym})]
Per determinare se (x
m
, y
m
) un punto di minimo, di massimo o di sella, troviamo gli
autovalori di H;
eig(H)
Gli autovalori sono di segno opposto, dunque la matrice Hessiana indenita e (x
m
, y
m
)
un punto di sella. Andiamo a controllare nel graco:
x=linspace(-1,.5);
[X,Y]=meshgrid(x);
f = 4.*X.^2+3.*Y.^2+12.*X.*Y+7.*X+8.*Y+5;
surf(X,Y,f)
5.2 Massimo e minimo di una funzione
I massimi e i minimi, assieme ai loro punti di massimo e di minimo di una funzione possono
essere individuati utilizzando i comandi Matlab min e max; laccuratezza del calcolo dei
massimi e dei minimi dipende dalla griglia scelta per denire la funzione.
Iniziamo con un esempio di una funzione di una variabile; supponiamo di voler deter-
minare il massimo e il minimo della funzione
f(x) = 2 cos(2x) 3 cos x, x [0, 2].
Possiamo considerare molto semplicemente i seguenti comandi;
5.2. MASSIMO E MINIMO DI UNA FUNZIONE 43
x=linspace(0,2*pi,700);
y=2*cos(2*x)-3*cos(x);
M=max(y)
m=min(y)
Si provi a calcolare analiticamente il massimo e il minimo della funzione data e si commentino
i risultati ottenuti.
Esercizio 5.1 Si scrivano comandi Matlab che calcolino il massimo e il minimo della
funzione
f(x) = 2 sin(2x) 3 cos(
x
2
),
ed utilizzino subplot per disegnare il graco della funzione e della sua derivata (calcolata
numericamente utilizzando incrementi pari a .001) nellintervallo [0, 2]. Come variante di
questo esercizio, si ripeta il procedimento utilizzando il comando subplot per disegnare la
funzione assieme alle sue derivate prima e seconda calcolata analiticamente.
5.2.1 Massimo e minimo di una funzione di due variabili su di un
rettangolo
Supponiamo ora di voler determinare il massimo e il minimo di
f(x, y) = sin x + sin y + sin(x +y), (x, y) [/4, /4]
2
.
Possiamo quindi considerare i seguenti comandi, in cui la determinazione del massimo e
del minimo viene fatta sia guardando il graco della funzione, sia studiando le sue linee di
livello.
[x,y]=meshgrid(-pi/4:pi/80:pi/4);
z=sin(x)+sin(y)+sin(x+y);
figure(1); surf(x,y,z);
figure(2); [C,h]=contour(x,y,z,20);
clabel(C,h);
Studiando i due graci ottenuti, si deduce subito che il massimo viene assunto nel punto
(/4, /4), mentre il punto di minimo viene assunto in (/4, /4); possiamo modicare
i precedenti comandi in modo da individuare i valori ed i punti di massimo e minimo della
funzione;
[x,y]=meshgrid(-pi/4:pi/80:pi/4);
z=sin(x)+sin(y)+sin(x+y);
figure(1); surf(x,y,z);
[M,ind]=max(z(1:prod(size(z))));
Mx=num2str(x(ind)); My=num2str(y(ind));
M=num2str(M);
TM=[Massimo= ,M,, assunto in (,Mx,,,My,)];
text(-1,1,5,TM);
Si provi a modicare i precedenti comandi in modo da individuare anche il minimo e il punto
di minimo. Si provi quindi ad usare il comando help per capire come funzionano i comandi
max e min, sia nel caso in cui largomento `e un vettore, che nel caso in cui largomento `e una
44 CAPITOLO 5. PUNTI STAZIONARI E MASSIMI E MINIMI
matrice. Se ne dovrebbe dedurre che nel caso in cui z `e una matrice, max(z) `e un vettore
riga, i cui elementi sono determinati dai massimi di z in ogni colonna. In questo modo,
il valore massimo `e individuato semplicemente con il comando max(max(z)). Nei comandi
considerati sopra, quello che `e stato fatto `e stato praticamente ridurre la matrice z ad un
vettore di lunghezza il prodotto delle dimensioni della matrice z; in questo modo fare max
una volta sola coincide con il comando max(max(z)).
5.2.2 Massimi e minimi su cerchi
Supponiamo ora di voler calcolare il massimo e il minimo della funzione
f(x, y) = x
2
+ 2y
2
4y 2, x
2
+y
2
4.
Ci sono sostanzialmente due modi di procedere; uno `e lutilizzo delle coordinate polari, il
secondo `e estendere la funzione su di un dominio rettangolare ponendola zero allesterno del
cerchio mediante gli operatori logici; in questo secondo metodo c`e per`o da tener presente
che se la funzione `e tutta strettamente positiva o strettamente negativa nel cerchio, allora
la risposta ottenuta sarebbe incorretta, e quindi il metodo andrebbe modicato.
Il primo metodo viene trattato con i seguenti comandi;
[r,theta]=meshgrid(0:.1:2,0:pi/20:2*pi);
x=r.*cos(theta); y=r.*sin(theta);
f=x.^2+2*y.^2-4*y-2; surfl(x,y,f);
[m,imin]=min(f(1:prod(size(f))));
m=num2str(m);
mx=num2str(x(imin)); my=num2str(y(imin));
Tm=[Minimo= ,m,, assunto in (,mx,,,my,)];
text(0,2,10,Tm);
Nel secondo caso possiamo considerare i seguenti comandi:
[x,y]=meshgrid(-2:.05:2);
f=(x.^2+y.^2<=4).*(x.^2+2*y.^2-4*y-2);
surfl(x,y,f);
[M,imax]=max(f(1:prod(size(f))));
M=num2str(M);
Mx=num2str(x(imax)); My=num2str(y(imax));
TM=[Massimo= ,M,, assunto in (,Mx,,,My,)];
text(0,2,10,TM);
Provare ad impostare il punto di vista con view(-100,10) per avere una buona visualizzazione
dei punti di massimo e di minimo.
Esercizio 5.2 1. Disegnare il graco e le linee di livello della funzione
f(x, y) = 2x
3
+xy
2
+ 5x
2
+y
2
nel rettangolo 2.5 x 0.6, 3 y 3; inserire a mano nel graco i punti
stazionari ed etichettarli come punti di sella o punti di massimo o minino locali.
5.3. MASSIMI E MINIMI VINCOLATI 45
2. Utilizzare i metodi graci (graco e linee di livello) per individuare i punti estremali
di
f(x, y) = e
xy
, 4x
2
+y
2
2.
Utilizzare il comando text per riportare i valori massimo e minimo e i punti dove ven-
gono assunti. Si ripeta lesercizio utilizzando le coordinate polari (ellittiche). Si utilizzi
anche il metodo di estensione di f ad un dominio rettangolare mediante operatori logici
e si commenti il risultato ottenuto.
5.3 Massimi e minimi vincolati
Quando il vincolo `e parametrizzabile, possiamo individuare il massimo e il minimo per
via graca; il graco del vincolo e delle linee di livello possono inoltre essere utilizzati per
lindividuazione dei punti estremali (saranno individuati dai punti di tangenza tra il vincolo
e il livello della funzione), dando cos` una visualizzazione del metodo dei moltiplicatori di
Lagrange.
Supponiamo ad esempio di voler trovare gli estremi della funzione
f(x, y) = x
3
+y
3
+ 3xy
soggetta al vincolo (x 3)
2
+ (y 3)
2
= 9. Tracciamo quindi il graco di f, la curva che
denisce il vincolo e la curva nello spazio che si ottiene restringendo la funzione al vincolo:
[x,y]=meshgrid(-1:.1:7);
z=x.^3+y.^3+3*x.*y;
surf(x,y,z); hold on;
t=linspace(0,2*pi,300);
x=3+3*cos(t); y=3+3*sin(t);
f=x.^3+y.^3+3*x.*y;
plot3(x,y,f,r);
plot3(x,y,0*f);
hold off;
Si utilizzi il comando rotate3d per avere una visualizzazione migliore del risultato ottenuto.
Utilizzeremo ora una procedura graca che ci dar`a una buona stima dei valori estremali
di f soggetta al vincolo dato. Nel primo caso parametrizzeremo la curva e quindi tracceremo
il graco della funzione ristretta a tale curva; gli estremali saranno individuati guardando
tale graco. Il vincolo `e una circonferenza con parametrizzazione
_
_
_
x = 3 + 3 cos t,
y = 3 + 3 sin t
, t [0, 2].
Possiamo quindi utilizzare tale parametrizzazione per ottenere una funzione di una variabile,
e possiamo quindi individuare il massimo e il minimo utilizzando i comandi max e min.
t=linspace(0,2*pi,300);
x=3+3*cos(t); y=3+3*sin(t);
f=x.^3+y.^3+3*x.*y; plot(t,f);
46 CAPITOLO 5. PUNTI STAZIONARI E MASSIMI E MINIMI
Quello ottenuto `e il graco della funzione ristretta al vincolo; si potrebbe darne una visual-
izzazione tridimensionale, considerando ad esempio il comando
plot3(x,y,f);
Come esercizio, si tracci il graco cos` ottenuto, assieme alla curva che denisce il vincolo
vista nello spazio tridimensionale. Come variante e/o abbellimento della gura, invece del
comando plot3(x,y,f) si potrebbe utilizzare il comando stem3(x,y,f).
Osservando il graco ottenuto, si intuisce che il massimo `e circa 350 ed `e ottenuto per
t = 0.8, mentre il minimo `e pari a 0 ottenuto circa per t = 3.95. Per avere una stima
migliore di tali risultati, si pu`o aggiungere la seguente lista di comandi a quanto fatto
precedentemente;
[m,mt]=min(f); tmin=num2str(t(mt));
m=num2str(m);
T=[Minimo= ,m, ottenuto per t= ,tmin];
text(3.5,50,T);
Con il secondo metodo, disegneremo la curva che denisce il vincolo e i livelli di f. Ovvi-
amente, le limitazioni sulla griglia scelta vanno scelte in modo da contenere tutta la curva
che denisce il vincolo; anche la scelta dei livelli dovr`a essere fatta in maniera opportuna ed
in genere si procede per tentativi successivi.
[x,y]=meshgrid(-1:.1:7);
f=x.^3+y.^3+3*x.*y;
L=[0:10 20:10:100 150:50:350];
[C,h]=contour(x,y,f,L);
v=[0:2:10 150:50:350];
clabel(C,h,v); hold on;
t=linspace(0,2*pi,300);
x=3+3*cos(t); y=3+3*sin(t);
plot(x,y); hold off;
Come variante, per una visualizzazione del metodo dei moltiplicatori di Lagrange, si potreb-
be disegnare il campo gradiente della funzione che denisce il vincolo
g(x, y) = (x 3)
2
+ (y 3)
2
9
assieme al campo gradiente della funzione f; tali campi gradiente vanno disegnati sulla curva
g(x, y) = 0. I punti estremali si avranno in corrispondenza dei punti nei quali tali campi
gradiente sono paralleli tra loro.
Esercizio 5.3 Si utilizzi il metodo graco per stimare il massimo e il minimo della funzione
f(x, y) = xy
soggetta al vincolo 4x
2
+ y
2
= 9. Inoltre, si tracci nello stesso disegno il graco di f, la
curva che denisce il vincolo e la curva dello spazio ottenuta restringendo f al vincolo. Si
parametrizzi inoltre il vincolo e si tracci il graco della funzione di una variabile ottenuta
restringendo la funzione al vincolo e da tale graco si dia una stima del massimo e del
minimo della funzione. Si utilizzino quindi i comandi max e min per la determinazione dei
punti estremali; usare inne il comando text per scrivere i valori ottenuti sul graco.
In conclusione, si usi il metodo delle linee di livello per individuare i punti di massimo e
di minimo, etichettando i livelli.
Capitolo 6
Integrali curvilinei e di
supercie
In questa sezione considereremo gli integrali curvilinei di prima e seconda specie (rispetti-
vamente, per funzioni scalari e vettoriali) e gli integrali di supercie per funzioni scalari e
vettoriali. Come applicazioni considereremo le formule di GaussGreen e Stokes.
6.1 Integrali curvilinei
6.1.1 Integrali curvilinei per funzioni scalari
Una prima applicazione degli integrali curvilinei di prima specie, come visto nelle lezioni di
teoria, `e ad esempio il calcolo della massa di un lo la cui densit`a di massa sia descritta da
una data funzione. Una volta calcolata la massa totale del lo, `e possibile calcolare quindi
le coordinate del baricentro del lo. Supponiamo ad esempio di avere un lo della forma
di una semicirconferenza di raggio 2 nel piano la cui densit`a di massa sia descritta dalla
funzione
f(s) =
_
1 +s
2
;
qui stiamo supponendo che il parametro s sia il parametro darco calcolato a partire dal
punto (2, 0). Stiamo quindi considerando la parametrizzazione r : [0, 2] R
2
,
r(s) = (2 cos(s/2), 2 sin(s/2)).
Lintervallo e la parametrizzazione sono stati calcolati tenendo conto che la lunghezza del
lo `e L = 2. La massa totale del lo sar`a quindi data da
M =
_
2
0
_
1 +s
2
ds.
Si noti che nella formula precedente non compare |r

(s)|, in quanto, avendo scelto s come


parametro darco, tale quantit`a `e pari ad 1. Calcoliamo il precedente integrale usando il
symbolic toolbox;
syms s
47
48 CAPITOLO 6. INTEGRALI CURVILINEI E DI SUPERFICIE
densita=sqrt(1+s^2);
int(densita,0,2*pi)
massa=double(ans)
Calcoliamo ora le coordinate del baricentro del lo; per eettuare questo calcolo, invece
di utilizzare il parametro darco, considereremo la paremtrizzazione equivalente data da
: [0.] R
2
,
(t) = (2 cos t, 2 sin t).
Dato che |

(t)| = 2, si avr`a che s(t) = 2t, da cui r(s) = r(2t) = (t) e la densit`a diventa

1 + 4t
2
. Quindi le coordinate del baricentro saranno date da
x =
1
M
_

0
2 cos t
_
1 + 4t
2
dt, y =
1
M
_

0
2 sin t
_
1 + 4t
2
dt.
Per il calcolo di tali coordinate utilizziamo il comando quad8, in quanto il calcolo simbolico
non si riesce a fare.
f=inline(4*sqrt(1+4*t.^2).*cos(2*t));
g=inline(4*sqrt(1+4*t.^2).*sin(2*t));
xbar=(1/massa)*quad8(f,0,pi)
ybar=(1/massa)*quad8(g,0,pi)
6.1.2 Rappresentazione di campi vettoriali
Prima di arontare il problema del calcole di integrali curvilinei per funzioni vettoriali,
proviamo a dare una rappresentazione graca dei campi di vettori che vogliamo integrare.
Campi nel piano Un campo di vettori nel piano `e determinato da una coppia di funzioni
scalari,
F(x, y) = (F
1
(x, y), F
2
(x, y))
e il metodo migliore per visualizzare un campo di vettori, come gi`a visto nei capitoli
precedenti, `e lutilizzo del comando quiver.
Ad esempio, supponiamo di voler disegnare il campo
F(x, y) = (1, x +y
2
), (x, y) [2, 3] [1, 2].
La cosa importante `e non disegnare troppi vettori del campo in considerazione, altrimenti il
disegno rischia di diventare illeggibile. Una griglia divisa tra le 10 e le 15 parti `e solitamente
pi` u che suciente.
f1=inline(0*x+1,x,y);
f2=inline(x+y.^2,x,y);
x=linspace(-2,3,11);
y=linspace(-1,2,11);
[X,Y]=meshgrid(x,y);
F1=f1(X,Y); F2=f2(X,Y);
quiver(X,Y,F1,F2)
axis image
6.1. INTEGRALI CURVILINEI 49
Il comando axis image serve solamente i numeri sulle coordinate x e y (confrontare con
il comando axis equal). Se vogliamo disegnare il graco delle direzioni del campo F,
possiamo modicare i comandi precedenti, semplicemente normalizzando il vettore F(x, y).
f1=F1./sqrt(F1.^2+F2.^2);
f2=F2./sqrt(F1.^2+F2.^2);
quiver(X,Y,f1,f2)
axis image
Potremmo anche disegnare il campo gradiente di una funzione assegnata; se prendiamo
ad esempio la funzione
f(x, y) = e

x
2
2
y
2
xy
, (x, y) [2, 2];
[x,y]=meshgrid(-2:.2:2);
f=exp(-x.^2/2-y.^2+x.*y);
[fx,fy]=gradient(f,.2,.2);
quiver(x,y,fx,fy);
Campi nello spazio In modo analogo possiamo disegnare campi vettoriali nello spazio;
ad esempio, consideriamo il campo
F(x, y, z) = (1, x +y
2
, z), (x, y, z) [2, 3] [1, 2] [1, 1].
u=inline(1+0*x,x,y,z);
v=inline(x+y.^2,x,y,z);
w=inline(z,x,y,z);
x=linspace(-2,3,6);
y=linspace(-1,2,6);
[X,Y]=meshgrid(x,y);
for z = -1:.4:1
Z=z+0*X;
V=v(X,Y,Z);
W=w(X,Y,Z);
quiver3(X,Y,Z,U,V,W)
hold on
end
hold off
6.1.3 Integrali curvilinei per funzioni vettoriali
Ricordiamo che data una funzione F : D R
3
R
3
e una curva r : [a, b] D, si denisce
lintegrale curvilineo di seconda specie come:
_
r
Fdr :=
_
b
a
F(r(t)) r

(t)dt.
Cos` ad esempio se consideriamo la funzione F(x, y, z) = (x, z, e
x+y
) e la curva
r(t) = (t cos t, t sin t, t
2
), t [0, 2],
possiamo calcolare lintegrale curvilineo come segue;
50 CAPITOLO 6. INTEGRALI CURVILINEI E DI SUPERFICIE
u=inline(x,x,y,z);
v=inline(z,x,y,z);
w=inline(exp(x+y),x,y,z);
n=200;
t=linspace(0,2*pi,n+1); dt=2*pi/n;
s=simpvec(n);
x=t.*cos(t); y=t.*sin(t); z=t.^2;
xdot=cos(t)-t.*sin(t);
ydot=sin(t)+t.*cos(t);
zdot=2*t;
I1=u(x,y,z).*xdot;
I2=v(x,y,z).*ydot;
I3=w(x,y,z).*zdot;
integrale=dot(s,(I1+I2+I3))*dt/3
Qui il comando simpvec `e una functions che possiamo denire mediante un mle come
segue;
function s=simpvec(n)
s=2*ones(1,n+1);
s(2:2:n)=4*ones(1,n/2);
s(1)=1; s(n+1)=1;
Pu`o succedere che la curva su cui calcolare il nostro integrale curvilineo non sia denita
in modo parametrico ma sia semplicemente descritta da una tabella di valori. Ad sempio
potremmo avere la seguente tabella di valori;
x 0 .1 .25 .4 .54 .76 .82 .93 1
y 0 .005 .0312 .0800 .1458 .2888 .3362 .4352 .5
Se la funzione da integrare `e data da F(x, y) = (xcos y, x+y), per il calcolo dellintegrale
curvilineo utilizziamo lapprossimazione che considera come curva la poligonale che conginge
i punti (P
j
)
j=1,...,n
deniti dalla precedente tabella (quindi con n = 9):
_
r
F dr =
n

j=1
_
1
0
F(r
j
(t)) r

j
(t)dt
con r
j
(t) = (1 t)P
j
+tP
j+1
x=[0 .1 .25 .4 .54 .76 .82 .93 1];
y=[0 .005 .0312 .0800 .1458 .2888 .3362 .4352 .5];
u=inline(x.*cos(y),x,y);
v=inline(x+y,x,y);
n=50;
s=simpvec(n);
dt=1/n;
lavoro=0;
for j=1:8
xx=linspace(x(j),x(j+1),n+1);
yy=linspace(y(j),y(j+1),n+1);
6.2. AREE DI SUPERFICI PARAMETRIZZATE 51
I=(x(j+1)-x(j))*u(xx,yy)+(y(j+1)-y(j))*v(xx,yy);
integrale=dot(s,I)*dt/3;
lavoro=lavoro+integrale;
end
lavoro
6.2 Aree di superci parametrizzate
Ricordiamo che la formula per il calcolo dellarea di una supercie = r(D) parametrizzata
da r : D R
2
R
3
`e data dalla formula
Area() =
_
D
|r
u
(u, v) r
v
(u, v)|dudv;
nel caso di una supercie cartesiana, r(u, v) = (u, v, f(u, v)), tale formula diventa
Area() =
_
D
_
1 +|f(u, v)|
2
dudv.
Se volessimo ad esempio calcolare larea di un elicoide
r(u, v) = (ucos(2v), usin(2v), v), (u, v) [0, 1] [0, ],
larea da calcolare diventa
Area() =
_

0
dv
_
1
0
_
1 + 4u
2
du.
Per il calcolo di tale area utilizzeremo il symbolic toolbox come segue;
[u,v]=meshgrid(0:.05:1,0:pi/20:pi);
surf(u.*cos(2*v),u.*sin(2*v),v);
du=1/50; dv=pi/50;
[u,v]=meshgrid(du/2:du:1-du/2,dv/2:dv:pi-dv/2);
Riemann=sum(sum(sqrt(1+4*u.^2)))*du*dv;
T2=[Somma di Riemann= ,num2str(Riemann)];
text(-.9,1,3.4,T2);
Stima=pi*quad(fcnchk(sqrt(1+4*u)),0,1);
T3=[Area stimata= ,num2str(Stima)];
text(-.9,1,3,T3);
syms u real
Area=pi*int(sqrt(1+4*u^2),u,0,1);
T1=[Area= ,num2str(double(Area))];
text(-.9,1,3.8,T1)
Se invece volessimo calcolare larea della supercie cartesiana data dal graco della
funzione
f(x, y) = x
2
+y
2
, (x, y) [0, 1]
2
,
lintegrale da calcolare diventa
Area() =
_
[0,1]
2
_
1 + 4x
2
+ 4y
2
dxdy.
Possiamo considerare i seguenti comandi;
52 CAPITOLO 6. INTEGRALI CURVILINEI E DI SUPERFICIE
[x,y]=meshgrid(0:.05:1);
surfl(x,y,x.^2+y.^2);
dx=1/50; dy=1/50;
[x,y]=meshgrid(dx/2:dx:1-dx/2);
Riemann=sum(sum(sqrt(1+4*x.^2+4*y.^2)))*dx*dy;
T1=[Somma di Riemann= ,num2str(Riemann)];
text(0,1,2.3,T1);
Stima=dblquad(fcnchk(sqrt(1+4*x+4*y)),0,1,0,1);
T2=[Area mediante dblquad= ,num2str(Stima)];
text(0,1,2.1,T2);
Esercizio 6.1 1. Calcolare larea della supercie laterale del toro, ottenuto ruotando la
circonferenza di raggio 2 centrata in (3, 0). Si disegni il graco della supercie e si
riportino i seguenti valori;
(a) larea calcolata mediante lintegrale e il valore ottenuto calcolandola esplicita-
mente a mano;
(b) la somma di Riemann con m = n = 50 usando il metodo del punto medio;
(c) una stima dellarea ottenuta mediante dblquad.
2. Si trovi larea della porzione di sfera di raggio 1 con angolo [0, /4] e si riportino
sul graco della supercie i seguenti valori:
(a) larea ottenuta calcolando a mano lintegrale;
(b) una stima dellarea ottenuta mediante integrazione numerica;
(c) la somma di Riemann ottenuta con n = m = 50 mediante il metodo del punto
medio.
3. Si ripeta lesercizio precedente con la porzione di sfera che giace sopra il quadrato
[1/

2, 1/

2]
2
.
4. Si disegni il graco della supercie denita parametricamente in coordinate sferiche
da
(, ) = 1 +
1
5
sin(6) cos(5)
utilizzando i vari metodi visti sopra, in particolare dblquad e le somme di Riemann.
6.3 Integrali di supercie
Cos` come per gli integrali curvilinei, anche per gli integrali di supercie si distinguono due
casi, il caso scalare e il caso vettoriale.
6.3.1 Integrali di supercie per funzioni scalari
Se `e una supercie regolare parametrizzata da una funzione r : D R
2
R
3
, si denisce
lintegrale di una funzione continua f : R ponendo
_

fd :=
_
D
f(r(u, v))|r
u
(u, v) r
v
(u, v)|dudv.
6.3. INTEGRALI DI SUPERFICIE 53
Se poi la supercie `e cartesiana, cio`e r(u, v) = (u, v, g(u, v)), la formula precedente diventa
_

fd :=
_
D
f(u, v, g(u, v))
_
1 +|g(u, v)|
2
dudv.
Quindi, se ad esempio volessimo esempio calcolare lintegrale di f(x, y, z) = x +y +z sulla
supercie graco della funzione g(x, y) = sin(x + y
2
), (x, y) [0, 2]
2
, possiamo considerare
i seguenti comandi;
f=fcnchk(x+y+sin(+y.^2).*sqrt(1+cos(x+y.^2).^2.*(1+4*y.^2)),x,y);
dblquad(f,0,2,0,2)
Come esercizio, seguendo linterpretazione di f come una densit`a di massa, si calcoli il
baricentro della supercie appena considerata.
6.3.2 Rappresentazione di campi lungo una supercie
Tracciamo ora il graco del campo vettoriale F(x, y, z) = (y, z, x) lungo la supercie x +
y +z = 0. Useremo un meshgrid per denire [x,y] e ricaveremo la z di conseguenza;
[x,y]=meshgrid(-2:2:2);
surfl(x,y,-x-y); hold on
[x,y]=meshgrid(-2:.5:2);
z=-x-y;
quiver3(x,y,z,y,z,x);
hold off
Potremmo anche solo disegnare il campo senza disegnare la supercie,
[x,y]=meshgrid(-2:.5:2);
z=-x-y;
quiver3(x,y,z,y,z,x);
6.3.3 Integrali di supercie per campi vettoriali: circuitazioni e
ussi
Rotore e Teorema di Stokes Una prima applicazione pu`o essere il calcolo della cir-
cuitazione di un campo; come esempio considereremo il campo
F(x, y, z) = (z, x, y)
e come curva considereremo lintersezione del paraboloide z = x
2
+y
2
e il piano z = y. Tale
curva pu`o essere parametrizzata da
r(t) =
_
1
2
cos t,
1
2
+
1
2
sin t,
1
2
+
1
2
sin t
_
, t [0, 2].
Vogliamo quindi vericare che vale la seguente identit`a;
_
r
F dr =
_

rotF n

d,
54 CAPITOLO 6. INTEGRALI CURVILINEI E DI SUPERFICIE
dove `e la porzione del piano z = y contenuta allinterno della curva r. Nella formula prece-
dente il versore n

deve essere preso in maniera coerente, cio`e in modo tale che lorientazione
indotta da tale campo su induca la giusta orientazione sulla curva r. Avendo ssato la
parametrizzazione r, il versore n

, ortogonale al piano z = y, deve avere componento z


positiva, quindi
n

=
1

2
(0, 1, 1),
Con i seguenti comandi, disegneremo la curva r, il piano z = y assieme al versore normale
n

(0, 1/2, 1/2) e calcoliamo lintegrale curvilineo


_
2
0
_

1
2

1
2
sin t,
1
2
cos t,
1
2
+
1
2
sin t
_

1
2
sin t,
1
2
cos t,
1
2
cos t
_
dt
e lintegrale di supercie
(6.1)
_

(1, 1, 1)
1

2
(0, 1, 1)d
con = (x, y, z) R
3
: z = y, x
2
+y
2
y. Con i seguenti comandi calcoliamo lintegrale
curvilineo;
syms t real
Ft=[-1/2-1/2*sin(t) 1/2*cos(t) 1/2+1/2*sin(t)];
T=[-1/2*sin(t) 1/2*cos(t) 1/2*cos(t)];
fz_int=dot(Ft,T);
I=double(int(fz_int,0,2*pi))
Si scrivano come esercizio i comandi che servono a calcolare lintegrale di supercie (6.1).
Divergenza e ussi Chiudiamo questo capitolo con il calcolo di un usso di un campo
vettoriale. Consideriamo quindi il campo
F(x, y, z) = (y, x, z
_
x
2
+y
2
)
e come supercie consideriamo il bordo del cilindro
E = (x, y, z) R
3
: x
2
2x +y
2
0, 0 z 1.
Calcoleremo tale usso in due modi dierenti, vericando quindi la validit`a della formula di
GaussGreen
_
E
divF(x, y, z)dxdydz =
_

F n

d,
con n

normale uscente dal cilindro. Se vogliamo calcolare lintegrale della divergenza,


abbiamo che
divF(x, y, z) =
_
x
2
+y
2
,
mentre il dominio di integrazione in coordinate cilindriche
x = 1 + cos , y = sin , z = t
con [0, 1], [0, 2) e t [0, 1]. Si tratta quindi di calcolare il seguente integrale;
(6.2)
_
E
divF(x, y, z)dxdydz =
_
E
_
x
2
+y
2
dxdydz =
_
2
0
d
_
1
0

_
1 +
2
+ 2 cos d,
che cacleremo utilizzando Matlab tramite i seguenti comandi.
6.3. INTEGRALI DI SUPERFICIE 55
f=fcnchk(sqrt(1+rho.^2+2*rho.*cos(theta)).*rho,rho,theta);
dblquad(f,0,1,0,2*pi)
Lintegrale di supercie va invece diviso in tre parti, tenendo conto la decomposizione
=
1

2

3
dove

1
= x
2
2x +y
2
= 0, 0 z 1,
2
= z = 0, x
2
2x +y
2
< 0,

3
= z = 1, x
2
2x +y
2
< 0.
La prima supercie la parametrizziamo in coordinate cilindriche r : [0, 2) [0, 1],
r(, t) = (1 + cos , sen , t),
da cui si ricava che
n

1
(, t) = (cos , sen , 0).
Otteniamo quindi che
_

1
F n

1
d =
_
2
0
d
_
1
0
( sen , 1 + cos ,

1 + 2 cos ) (cos , sen , 0)dt


=
_
2
0
(2 sen cos + sen )d = 0.
La supercie
2
`e il graco z = 0 con normale n

2
(x, y, 0) = (0, 0, 1); dato che F(x, y, 0) =
(y, x, 0), si vede subito che
_

2
f n

2
d = 0.
Per lultimo integrale, vista
3
come graco z = 1 con normale n

3
(x, y, 1) = (0, 0, 1),
troviamo lintegrale
_

3
F n

3
d =
_
{x
2
2x+y
2
0}
F(x, y, 1) (0, 0, 1)dxdy =
_
{x
2
2x+y
2
0}
_
x
2
+y
2
dxdy,
che `e lo stesso integrale in (6.2).
56 CAPITOLO 6. INTEGRALI CURVILINEI E DI SUPERFICIE
Capitolo 7
Successioni e serie di funzioni
In questo capitolo considereremo le successioni e le serie di funzioni, tra cui principalmente
tratteremo le serie di potenze, le serie di Taylor e le serie di Fourier.
7.1 Successioni di funzioni
Cominciamo con una successione di funzione data da
f
n
(x) =
nx
n
2
x
2
+ 1
,
denite su tutto R. Possiamo considerare i seguenti comandi, che servono per disegnare i
graci delle prime dieci funzioni della successione;
x=linspace(-.5,.5,100);
[X,N]=meshgrid(x,n);
fn=(N.*X)./(N.^2.*X.^2);
plot(x,fn)
h=legend(n=0,n=1,n=2,n=3,n=4,n=5,n=6,...
n=7,n=8,n=9,n=10);
Possiamo anche inserire un ciclo for per vedere levoluzione dei graci della successione
data;
for cnt=1:length(n)
plot(x,fn(cnt,:))
hold on
pause(.5)
end
hold off
Possiamo ripetere le operazioni precedenti nel caso delle due funzioni
f
n
(x) =
sin(nt)
n
, g
n
(x) =
_
x
2
+
1
n
.
Prendiamo in considerazione la seconda funzione, lasciando come esercizio il caso della
prima.
57
58 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
x=linspace(-1,1,100);
n=[0:20];
[X,N]=meshgrid(x,n);
gn=sqrt(X.^2+1./N);
plot(x,abs(x),r);
legend(|x|)
hold on
for cnt=1:length(n)
plot(x,gn(cnt,:))
pause(.5)
end
hold off
7.2 Serie di funzioni
Consideriamo qui lesempio della serie di funzioni associata alla successione di funzioni
u
n
(x) =
1
1 +x
2n
;
le funzioni date sono pari, quindi considereremo solo il caso x 0. Possiamo considerare i
seguenti comandi;
x=linspace(0,4,100);
n=[0:5];
[X,N]=meshgrid(x,n);
un=1./(1+x.^(X*N));
serie=cumsum(un);
subplot(2,1,1);
plot(x,un,LineWidth,2);
set(gca,FontSize,14);
xlabel(Asse x,FontSize,14);
ylabel(Asse y,FontSize,14);
h=legend(n=0,n=1,n=2,n=3,n=4,n=5)
grid on
subplot(2,1,2)
plot(X,serie,LineWidth,2)
set(gca,FontSize,14)
xlabel(Asse x,FontSize,14);
ylabel(Asse y,FontSize,14);
h=legend(n=0,n=1,n=2,n=3,n=4,n=5)
Esercizio 7.1 1. Si ripeta lesercizio con la serie associata alla successione
u
n
(x) = n
x
x
n
.
2. Si consideri la serie associata alla successione
u
n
(x) =
x
n
(1 +x
2
)
n
,
discutendone, riportandola ad una serie geometrica, la convergenza.
7.3. SERIE DI POTENZE 59
7.3 Serie di potenze
Formalmente una serie di potenze `e un polinomio di grado eventualmente innito e viceversa,
i polinomi sono serie di potenze in cui i coecienti sono denitivamente nulli. Vediamo come
trattare il caso della serie di potenze

n=0
x
n
n!
;
per ogni k N, la somma parziale di grado k di tale serie, data da
s
k
(x) =
k

n=0
x
n
n!
;
`e un polinomio di grado k. Cos` ad esempio se k = 3 otteniamo
s
3
(x) = 1 +x +
x
2
2
+
x
3
6
.
In Matlab, il modo di determinare un polinomio `e assegnare i coecienti del polinomio, con
la convenzione che il vettore dei coecienti rappresenta le potenze di x in ordine decrescente
di grado. Ad esempio, il polinomio s
3
(x) `e determinato dal vettore [1/6 1/2 1 1]. Con
i seguenti comandi determiniamo il polinomio s
10
(x) e ne disegna il graco sullintervallo
[2, 3].
n=[1 1:10];
a=1./cumprod(n); % coefficienti dei primi 11 termini della serie
b=a(length(a):-1:1); % b e il vettore a letto da destra a sinistra
% e rappresenta il polinomio somma parziale
% di grado 10 della serie
x=linspace(-2,3);
plot(x,polyval(b,x))
Il comando polyval(b,x) serve in Matlab per costruire il polinomio, nella variabile x che
ha il vettore b come coecienti. Si provi come esercizio a sovrapporre al graco precedente
il graco, tracciato in rosso, della funzione e
x
; si modichi anche lintervallo [2, 3] con altri
intervalli.
Serie con solo termini dispari. Come ulteriore esempio possiamo considerare la serie
di potenze

n=0
(1)
n
x
2n+1
(2n + 1)!
;
determineremo il polinomio di grado 101 ne tracceremo il graco sullintervallo [0, 7]. La
somma parziale di grado 101 si ottiene considerando la somma parziale con n = 50. Si
presenta qualche dicolt`a; la prima consiste nel fatto che il fattoriale (2n + 1)! non `e
semplicemente cumprod(2*n+1), in quanto questo prodotto mancherebbe i termini pari, che
vanno quindi aggiunti (inoltre tale vettore va modicato in modo che i primi due termini
rappresentino 0! = 1 e 1! = 1). La seconda dicolt`a consiste nel fatto che nelle somme
parziali relative alla serie data, le potenze pari sono tutte nulle e tali zeri vanno inseriti nel
vettore dei coecienti. Possiamo procedere come segue, semplicemente costruendo il vettore
b che sia lungo il doppio del vettore a e che inizialmente contenga tutti 0, e i coecienti di
a vengono inseriti nelle posizioni pari di b,
60 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
n=[0:50];
a=(-1).^n./(cumprod(2*n+1).*cumprod([1 2*n(2:51)]));
b=zeros(1,2*length(a));
b(2:2:length(b))=a;
c=b(length(b):-1:1); % c e il vettore che definisce il polinomio
% somma parziale di grado 101
x=0:.01:7;
plot(x,polyval(c,x))
Esercizio 7.2 1. Tracciare il graco della somma parziale di grado 10 della serie di
potenze

n=0
x
n
sullintervallo [.9, .9]. Tracciare nella stessa gura il graco della funzione y =
1
1x
,
inserendo anche una legenda.
2. Disegnare la somma parziale di grado 50 della serie di potenze

n=0
(1)
n
x
2n+1
2n + 1
sullintervallo [.5, 1].
3. Disegnare la somma parziale di grado 6 della serie di potenze

n=0
(1)
n
x
2n
(2n)!
;
si ripeta quanto fatto per la somma parziale di grado 100, tracciando anche il graco
della funzione cos x, considerando vari intervalli di denizione.
7.4 Serie di Taylor
Disegnamo ora nella gura il graco di sin x e i suoi polinomi di Taylor di grado 1, 3, 11 e
51 nellintervallo [2, 2]; possiamo considerare i seguenti comandi;
n=[0:25]; % length(n)=26
a=(-1).^n./(cumprod(2*n+1).*cumprod([1 2*n(2:length(n))])); %length(a)=26
b=zeros(1,2*length(a)); % length(b)=52
b(2:2:length(b))=a;
c51=b(length(b):-1:1); % length(c51)=52
c11=c51(41:52); % length(c11)=12
c3=c11(9:12); % length(c3)=4
c1=c3(3:4); % length(c1)=2
x=-2*pi:.01:2*pi;
y51=polyval(c51,x);
y11=polyval(c11,x);
y3=polyval(c3,x);
7.4. SERIE DI TAYLOR 61
y1=polyval(c1,x);
plot(x,sin(x),x,y1,x,y3,x,y11,x,y51);
legend(sin x,Grado 1,Grado 3,Grado 11,Grado 51);
axis([-2*pi 2*pi -1.5 1.5])
Si noti che il graco di sin x, che dovrebbe comparire in blu nel graco, in realt`a `e coper-
to completamente dal graco della funzione y51, mostrando che il polinomio di grado 51
rappresenta quasi completamente la funzione sin x nellintervallo [2, 2].
7.4.1 Polinomi di Taylor simbolici
Possiamo anche utilizzare il symbolic toolbox per trovare lespansione di Taylor di una data
funzione attorno ad un arbitrario punto x
0
. A tal proposito `e comodo il comando Matlab
taylor; possiamo cos` trovare il polinomio di Taylor di grado 8 di sin x attorno a x
0
= 0 e
quello di grado 10 attorno a x
0
= /4;
syms x
T7=taylor(sin(x),8)
T10=taylor(sin(x),pi/4,10)
Possiamo utilizzare il comando sym2poly per convertire una espressione simbolica di un
polinomio nel vettore dei suoi coecienti;
t7=sym2poly(T7)
t10=sym2poly(T10)
e viceversa possiamo anche utilizzare il comando poly2sym per il viceversa.
7.4.2 Moltiplicazione di serie e serie di Taylor di prodotti di fun-
zione
Se abbiamo due serie di potenze
f(x) =

n=0
a
n
x
n
, g(x) =

n=0
b
n
x
n
,
possiamo considerare il loro prodotto h(x) = f(x)g(x) che `e ancora una serie di potenze
h(x) =

n=0
c
n
x
n
, c
n
=

h = 0
n
a
h
b
nh
.
Questo prodotto, che `e il caso discreto della convoluzione tra due funzioni, viene implemen-
tato in Matlab dal comando conv;
f=[1 6 1];
g=[2 -3 5];
h=conv(f,g)
Questo esempio ha come risultato i coecienti della seguente espressione:
h(x) = f(x)g(x) = (x
2
+ 6x + 1)(2x
2
3x + 5) = 2x
4
+ 9x
3
11x
2
+ 27x + 5.
62 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
Possiamo applicare quanto appena detto per il calcolo della serie di Taylor per una
funzione prodotto; ad esempio, possiamo considerare la funzione
h(x) = (x
2
2x + 1) sin x
e ne calcoliamo il polinomio di Taylor attorno ad x
0
= 0 di grado 51, tracciando i graci in
[2, 2].
n=[0:25];
a=(-1).^n./(cumprod(2*n+1).*cumprod([1 2*n(2:26)]));
b=zeros(1,2*length(a));
b(2:2:length(b))=a;
c51=b(length(b):-1:1); % Polinomio di Taylor di sin(x)
p=[1 -2 1]; % il polinomio x^2-2x+1
c=conv(p,c51); % il polinomio del prodotto, pero troppo lungo
q=c(length(c)-51:length(c)); % fino al grado 51
plot(-2:.01:2,polyval(q,-2:.01:2))
Si provi inne il comando taylortool che racchiude in una interfaccia graca quanto
appena visto.
Esercizio 7.3 1. Nella stessa gura, tracciare il graco di e
x
e i suoi polinomi di Taylor
di grado 1, 3, 8 e 12 attorno ad x
0
= 0 nellintervallo [2, 2] (si metta una legenda, si
riscalino gli assi se necessario).
2. Nella stessa gura, si tracci il graco di cos x e i suoi polinomi di Taylor centrati in
x
0
= 0 di grado 2, 6, 12 e 50 nellintervallo [2, 2] (si metta una legenda, si riscalino
gli assi se necessario, si inserisca una griglia).
3. Nella stessa gura, si tracci il graco di log(x) e i suoi polinomi di Taylor centrati in
x
0
= 2 di grado 1, 3, 10 e 20 nellintervallo [.1, 4] (si metta una legenda, si riscalino
gli assi se necessario).
4. Utilizzare il symbolic toolbox per determinare il polinomio di grado 9 attorno a x
0
= 0
della funzione arctan x; si utilizzi il comando sym2poly per convertire quanto trovato
nella rappresentazione vettoriale del polinomio. Tracciare inne nella stessa gura il
graco di arctan x e del polinomio trovato nellintervallo [1.3, 1.3].
5. Trovare il polinomio di grado 15 attorno a x
0
= 0 di (x
2
1) sin xcos x e si tracci il
graco di quanto ottenuto nellintervallo [2, 2].
7.5 Serie di Fourier
Ricordiamo che data una funzione f : [0, T] R (estesa poi Tperiodica a tutto R, possiamo
costruire la serie di Fourier associata denendo i coecienti
a
k
=
2
T
_
T
0
f(x) cos(kx)dx, k 0,
b
k
=
2
T
_
T
0
f(x) sin(kx)dx, k 1,
7.5. SERIE DI FOURIER 63
con =
2
T
frequenza o pulsazione della funzione. La serie sar`a data da
S
f
(x) =
a
0
2
+

k=1
(a
k
cos(kx) +b
k
sin(kx)) .
Come esercizio, calcoliamo il polinomio di Fourier di grado 7 associato alla funzione
f(x) = x
[0,)
(x) +x
2

[,0)
(x),
denita in [, ) e prolungata 2periodica. Possiamo ad esempio considerare i seguenti
comandi;
x=linspace(-pi,pi,100);
fx=x.^2.*(x<0)+x.*(x>=0);
k=[1:7];
[X,K]=meshgrid(x,k);
[FX,K]=meshgrid(fx,k);
a0=1/pi*trapz(x,fx);
ak=FX.*cos(K.*X);
ak=trapz(x,ak);
ak=ak./pi;
bk=FX.*sin(K.*X);
bk=trapz(x,bk);
bk=bk./pi;
[FX,AK]=meshgrid(fx,ak);
[FX,BK]=meshgrid(fx,bk);
SF=a0/2*ones(size(x));
SF(2:(length(k)+1),:)=AK.*cos(K.*X)+BK.*sin(K.*X);
SF=sum(SF);
subplot(2,1,1)
p=plot(x,fx,b,x,SF,r,...
x-2*pi,fx,b,x-2*pi,SF,r,...
x+2*pi,fx,b,x+2*pi,SF,r);
set(p,LineWidth,2);
grid on;
set(gca,FontSize,14)
title(f(x) e Serie di Fourier,FontSize,14);
xlabel(Asse x,FontSize,14)
ylabel(Asse y,FontSize,14)
legend(f(x),SF)
subplot(2,1,2)
bar([ak;bk])
grid on
set(gca,FontSize,14)
title(Piano delle frequenze,FontSize,14)
xlabel(k,FontSize,14)
ylabel(ak,bk,FontSize,14);
legend(ak,bk)
Pu`o essere utile creare un function mle, che chiameremo CoeffFourier, per il calcolo
dei coecienti di Fourier di una data funzione.
64 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
function [a0,ak,bk]=CoeffFourier(x,fx)
%
global T omega k
%
%
[X,K] = meshgrid(x,k);
[FX,K] = meshgrid(fx,k);
%
a0 = 2/T * trapz(x,fx);
%
ak = FX .* cos(omega*X.*K);
ak = trapz(x,ak);
ak = 2/T * ak;
%
bk = FX .* sin(omega * X.*K);
bk = trapz(x,bk);
bk = 2/T * bk;
Si noti la denizione delle variabili globali global k T omega, che quindi dovranno essere
denite prima di richiamare la funzione CoeffsFourier.
Esercizio 7.4 1. Modicare i comandi precedenti per comprendere, nel graco delle
frequenze, anche il termine a
0
/2; considerare anche la variante in cui si riportano nel
piano delle frequenze i valori di [a
k
[ e [b
k
[.
2. Ripetere quanto fatto per la funzione f : (, ] R, f(x) = x
7.5.1 Fenomeno di Gibbs
Il fenomeno di Gibbs e quel fenomeno che si verica in prossimita delle discontinuita di una
funzione; quello che si nota, anche visivamente osservandone i graci, e che in prossimita di
un salto della funzione (in prossimita di una discontinuita), si nota che la serie di Fourier
produce un errore che si sposta sempre pi u vicino al punto di discontinuita, ma che in
intensita non diminuisce se si aumenta il grado di approssimazione. Tale errore resta sempre
pari ad un decimo il salto della funzione. Verichiamo questo fenomeno con un esempio.
Consideriamo la funzione f : [, ] R denita da
f(x) =
[/2,/2]
(x)
ed introduciamo lerrore relativo
E
n
(x) =
1
[f(x)[

f(x)
a
0
2

n

k=1
(a
k
cos kx +b
k
sin kx)

.
x=linspace(-pi,pi,100);
fx=1.*(x>=-pi/2 & x<=pi/2);
k=[1:30];
[X,K]=meshgrid(x,k);
[FX,K]=meshgrid(fx,k);
7.5. SERIE DI FOURIER 65
a0=1/pi*trapz(x,fx);
ak=FX.*cos(K.*X);
ak=trapz(x,ak);
ak=ak./pi;
bk=FX.*sin(K.*X);
bk=trapz(x,bk);
bk=bk./pi;
[FX,AK]=meshgrid(fx,ak);
[FX,BK]=meshgrid(fx,bk);
SF=a0/2*ones(size(x));
SF(2:(length(k)+1),:)=AK.*cos(K.*X)+BK.*sin(K.*X);
SF=sum(SF);
En=abs((SF-fx))./abs(fx);
subplot(2,1,1);
p=plot(x,fx,b,x,SF,r,...
x-2*pi,fx,b,x-2*pi,SF,r,...
x+2*pi,fx,b,x+2*pi,SF,r);
set(p,LineWidth,2);
grid on;
set(gca,FontSize,14)
title(f(x) e Serie di Fourier,FontSize,14);
xlabel(Asse x,FontSize,14)
ylabel(Asse y,FontSize,14)
legend(f(x),SF)
axis([0,1.6,.5,1.2]) % ci concentriamo sul salto
subplot(2,1,2);
plot(x,En,g,Linewidth,2)
axis([0,1.6,0,.1])
grid on
set(gca,FontSize,14)
title(Errore relativo,FontSize,14)
xlabel(Asse x,FontSize,14)
ylabel(Asse y,FontSize,14)
66 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
Capitolo 8
Equazioni dierenziali
In questo capitolo considereremo alcune equazioni dierenziali ordinare e vedremo alcuni
metodi per lo studio delle soluzioni, anche in casi in cui il calcolo esplicito della soluzione
non si puo fare.
8.1 Linee di usso
Possiamo utilizzare il comando quiver per disegnare le linee di usso di una equazione
dierenziale. Lidea sostanziale risiede nella considerazione che cercare una funzione u :
I R soluzione dellequazione
u

(t) = f(t, u(t))


equivale a carcare una funzione per la quale nel punto (t, u(t)) la direzione tangente al
graco sia determinata da f, cioe nel punto (t, u(t)) sia assengata la direzione tangente
(1, u

(t)) = (1, f(t, u(t))).


Possiamo ad esempio considerare lequazione
u

(t) = cos(2t +u(t))


con t [5, 5] e u [.5, 4.5];
[t,u]=meshgrid(-5:.5:5,.5:.5:4.5);
dt=ones(size(t));
du=cos(2*t+u);
quiver(t,u,dt,du);
title(u=cos(2t+u));
Per migliorare la resa graca di quanto ottenuto ad esempio riducendo della meta la lunghez-
za dei vettori ottenuti, considerando ad esempio il comando
quiver(t,u,dt,du,.5);
Possiamo anche considerare il Problema di Cauchy associato allequazione dierenziale data;
_
u

(t) = cos(2t +u(t))


u(t
0
) = u
0
67
68 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
Un comando Matlab utile in questi casi `e il comando streamline, che possiamo utilizzare
come segue. Supponiamo di partire allistante t
0
= 2 e di cercare le quattro soluzioni
associate ai valori iniziali 1, 2, 3, 4; possiamo quindi aggiungere ai comandi precedenti quanto
segue;
hold on
u0=[1,2,3,4];
t0=-2*ones(size(u0));
S=streamline(t,u,dt,du,t0,u0);
set(S,Color,r)
Le linee in rosso saranno quindi i graci delle soluzioni dei Problemi di Cauchy associati.
Esercizio 8.1 1. Utilizzare il comando quiver per tracciare le linee di usso del campo
u

= 2t
2
u
3
;
si utilizza la nestra [1, 1]
2
con incrementi .2 in ogni direzione.
2. Utlizzare il comando
tt quiver per tracciare le linee di usso di
u

= sin(t +u)
su di un rettangolo contenente lorigine (si facciano varie prove con dierenti valori
per le dimensioni della nestra e degli incrementi).
8.2 Il metodo numerico ode45
In Matlab esistono vari pacchetti per risolvere le equazioni dierenziali, tra questi segna-
liamo qui il pacchetto ode45. Come esempio consideriamo il Problema di Cauchy
_
y

(t) =
t+2 cos t
y
2
(t)
y(0) = 2
la cui soluzione analitica `e data da u(t) =
3
_
3
2
t
2
+ 6t + 8. Per la soluzione numerica, che
sar`a una soluzione approssimata, possiamo procedere come segue;
[t,u]=ode45(fcnchk((t+2*cos(t))./u.^2),[0 5],2);
U=(3*t.^2/2+6*sin(t)+8).^(1/3);
plot(t,u,b,t,U,r)
[u(length(t)),U(length(t))]
I precedenti comandi danno le soluzioni numerica ed analitica in [0, 5] e ne disegna il graco;
i due graci sono sovrapposti, mostrando quanto la soluzione numerica sia accurata. Lul-
timo comando confronta infatti le due soluzioni in t = 5. Nelleventualit`a che la soluzione
numerica non sia cos` accurata, si pu`o anche modicare la griglia di calcolo, che nei coman-
di precedenti viene scelta di default dal comando ode45; possiamo ad esempio sostituire la
prima riga di comando con la seguente;
[t,u]=ode45(fcnchk((t+2*cos(t))./u.^2),[0:.2:5],2);
8.3. INTEGRAZIONE SIMBOLICA DI EQUAZIONI DIFFERENZIALI 69
Nel comando ode45 non `e necessario utilizzare tt fcnchk, ma possiamo anche utilizzare un
function mle, con la sintassi
[t,u]=ode45(f,[a b],u0);
dove la funzione f viene denita in un mle che avr`a la forma
function uprimo=f(x,y)
uprimo=(t+2*cos(t))./u.^2;
8.3 Integrazione simbolica di equazioni dierenziali
In Matlab esiste anche il symbolic toolbox dsolve per trovare la soluzione generale di una
equazione dierenziale, che viene utilizzato con la seguente sintassi
syms t y
g=dsolve(Dy=f(t,y),t)
per lintegrale generale, mentre useremo la sintassi
syms t y
g=dsolve(Dy=f(t,y),y(a)=b,t)
per la soluzione del Problema di Cauchy.
Ad esempio, se vogliamo risolvere lequazione y

= t
2
+y, possiamo considerare;
syms t y
g=dsolve(Dy=t^2+y,t)
Il risultato sar`a una funzione con un parametro C2; se vogliamo determinare la soluzione in
un dato punto, ad esempio t = 0, possiamo considerare il comando
a=subs(g,0)
da cui si pu`o capire il valore della costante C2 per cui si ha che la soluzioni soddis una
cerca condizione iniziale per t = 0.
Se invece vogliamo considerare direttamente un Problema di Cauchy, ad esempio
_
u

= u t
u(1.5) = 1
possiamo considerare i seguenti comandi;
syms t y
g=dsolve(Dy=y-t,y(-1.5)=-1,t)
ezplot(g,[-2 2])
70 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
8.4 Sistemi di equazioni dierenziali
Si possono anche considerare sistemi di equazioni dierenziali, come ad esempio
_
x

(t) = 2x(t) 3y(t), x(0) = 1


y

(t) = 2x(t) +y(t), y(0) = 1;


utilizzeremo ode45 per determinare una soluzione approssimata per t [0, 1]. Lequazione
`e unequazione del primordine u

= F(t, u), con u vettore di componenti (x, y) ed F(t, u) =


(2u
1
3u
2
, 2u
1
+ u
2
); quindi la procedura non sar`a molto dierente da quella vista per le
equazioni del primordine. Iniziamo col creare un mle
function xprimo=F(t,x)
xprimo=[2*x(1)-3*x(2);2*x(1)+x(2)];
e poi richiamare tale mle coi seguenti comandi;
t0=0; t1=1;
[t,x]=ode45(F,[t0 t1], [1,-1]);
figure(1); clf;
plot(x(:,1),x(:,2));
n=length(t);
T=[(,num2str(x(n,1)),, ,num2str(x(n,2)),)];
text(x(n,1),x(n,2),T);
figure(2); clf;
plot(t,x(:,1),t,x(:,2));
legend(x(t),y(t));
8.5 Equazioni di ordine superiore
Possiamo utilizzare quanto visto per i sistemi per risolvere equazioni di ordine superiore al
primo; ad esempio, supponiamo di voler risolvere lequazione
x

(t) + 6x(t)x

(t) x
2
(t) = sin(x(t)), x(0) = 1, x

(0) = 2
con t [0, 5]. Possiamo quindi introdurre la variabile y(t) = x

(t) ed ottenere quindi il


sistema
_
x

(t) = y(t), x(0) = 1


y

(t) = 6x(t)y(t) +x
2
(t) + sin(x(t)), y(0) = 2.
Deniamo quindi lmle
function xprimo=higher(t,x)
xprimo=[x(2); -6*x(1).*x(2)+sin(x(1))];
e quindi costruiamo la soluzione;
[t,x]=ode45(higher,[0 5], [1 2]);
plot(t,x(:,1),t,x(:,2));
legend(x(t),y(t))
8.6. SOLUZIONI DEFINITE IMPLICITAMENTE 71
Esercizio 8.2 1. Si determini la soluzione dellequazione dierenziale;
y

(t) =
ty(t) + 2t
t
2
+ 1
e tra queste si trovi quella che soddisfa y(1) = 2. Utilizzare ode45 per trovare la
soluzione approssimata con t [1, 6], disegnando in blu la soluzione esatta ed in
rosso quella approssimata (si usi anche il comando text per dare i valori esatti ed
approssimati della soluzione in t = 6).
2. Si utilizzi ode45 per determinare la soluzione del problema
y[(t) = t y(t) + 1, y(0) = 3
con t [0, 3]. Si disegni la soluzione, indicando il valore della soluzione per t = 3.
3. Si utilizzi ode45 per trovare una soluzione approssimata del sistema
_
x

(t) = 3x(t) + 4y(t), x(0) = 1


y

(t) = 3x(t) + 2y(t), y(0) = 2


con t [0, 1]. Disegnare nello stesso graco le soluzioni x = x(t) e y = y(t), ed in un
secondo graco la curva y = x.
4. Si consideri lequazione dierenziale del secondo ordine
x

(t) +tx

(t) +t
2
x(t) = 0;
utilizzare ode45 per trovare la soluzione in t [0, 3] con i seguenti dati iniziali,
specicando per la variabile indipendente i seguenti valori t=[0:.01:3];
a) x(0) = 1, x

(0) = 0 e si chiami tale soluzione f;


b) x(0) = 0, x

(0) = 1 e si chiami tale soluzione g;


c) x(0) = 2, x

(0) = 3 e si chiami tale soluzione h.


Si noti che, dalla teoria delle equazioni dierenziali lineari (a coecienti non necessari-
amente costanti), la soluzione generica del problema `e data da una combinazione di f
e g; vericare che eettivamente la soluzione h `e data da h = 2f 3g, dove 2 = h(0)
e 3 = h

(0). Si disegni quindi il graco di 2f 3g e di h nella stessa gura.


8.6 Soluzioni denite implicitamente
Pu`o succedere a volte che la soluzione di unequazione dierenziale la si trova ma non denita
in modo esplicito, ma implicitamente nella forma
F(t, y(t)) = c,
per una qualche funzione F e c R. In tal caso pu`o essere utile utilizzare il comando
contour per lo studio di tali soluzioni.
Supponiamo ad esempio di voler risolvere lequazione
y

(t) =
t

t
2
+ 1
y(t)e
y(t)
;
72 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
la soluzione di tale equazione si trova in modo diretto (lequazione `e a variabili separabili)
ed `e determinata da
(8.1) (y(t) 1)e
y(t)

(t
2
+ 1)
3
2
3
= c,
con c che dipende dalle condizioni iniziali. Disegneremo nel quadrato [3, 3]
2
le curve che
sono i graci di tale equazione con c che assume i valori da 4 a 2 saltando di 1/2;
[t,y]=meshgrid(-3:.1:3);
z=(y-1).*exp(y)-1/3.*(t.^2+1).^(3/2);
c=[-4:.5:2]; % i livelli
contour(t,y,z,c)
Possiamo aggiungere anche le etichette al graco precedente, sostituendo lultima riga con
[C,h]=contour(t,y,z,c);
clabel(C,h);
Se abbiamo un Problema di Cauchy, cio`e se imponiamo una condizione iniziale y(t
0
) = y
0
,
allora il livello c sar`a univocamente determinato; ad esempio, se nellesempio precedente
imponiamo y(0) = 1/10, allora da (8.1) ricaviamo che c =
9
10
e
1/10

1
3
;
[t,y]=meshgrid(-3:.1:3);
z=(y-1).*exp(y)-1/3.*(t.^2+1).^(3/2);
c=-.9*exp(.1)-1/3;
contour(t,y,z,[c c]);
Si noti che vengono disegnate due curve; si provi a capire come mai e soprattutto, quale
delle due curve `e quella che denisce il graco della funzione.
Esercizio 8.3 Trovare la soluzione generale dellequazione
t
2
y

(t) =
t
2
+ 1
3y
2
(t) + 1
ed utilizzare il comando contour per tracciare il graco di dieci curve che deniscono le
soluzioni; in un altra gura, si tracci il graco della curva che denisce la soluzione del
problema y(1) = 2.
8.7 Vibrazioni meccaniche
In questa sezione considereremo il problema delle vibrazioni meccaniche; con questo in-
tendiamo il problema della determinazione e dello studio delle soluzioni dellequazione
dierenziale del secondo ordine a coecienti costanti
(8.2) y

(t) + 2y

(t) +
2
0
y(t) = Bcos(t),
dove R rappresenta un fattore di smorzamento,
0
la frequenza propria del sistema,
e B rispettivamente la frequenza e lintensit`a del termine forzante. Nel caso B = 0 si parla
di vibrazioni libere, mentre per B ,= 0 si parla di vibrazioni forzate; il caso = 0 siamo nel
caso di vibrazioni non smorzate, con ,= 0 di vibrazioni smorzate. Tratteremo prima il caso
di vibrazioni non smorzate, quindi il caso delle vibrazioni smorzate.
8.7. VIBRAZIONI MECCANICHE 73
8.7.1 Vibrazioni non smorzate
Vibrazioni libere Possiamo considerare ad esempio il problema di Cauchy associato a
(8.2) con B = 0 e dati iniziali y(0) = y

(0) = 1, la cui soluzione `e data da


y(t) = cos(
0
t) sin(
0
t);
per disegnare il graco della soluzione possiamo considerare i seguenti comandi:
t=linspace(0,40,100);
y0=1;
v0=1;
omega0=1;
A=sqrt(y0^2+v0^2/omega0^2);
c=y0/A;
s=-v0/(A*omega0);
yt=A*(c*cos(omega0*t)-s*sin(omega0*t));
plot(t,yt)
grid on
Vibrazione forzata; caso ,=
0
e battimenti Come variazione del problema prece-
dente consideriamo il caso in (8.2) con B = 1 e = 0; i dati iniziali che consideriamo sono
sempre y(0) = y

(0) = 1, e quindi la soluzione sar`a data, se


0
= 1, da
y(t) = 1 + sin(t).
Tracciamo il graco di tale soluzione nel caso di
0
= 1;
t=linspace(0,40,100);
y0=1;
v0=1;
omega0=1;
B=1;
A=sqrt((y0-B/omega0^2)^2+v0^2/omega0^2);
c=(y0-B/omega0^2)/A;
s=-v0/(A*omega0);
yt=A*(c*cos(omega0*t)-s*sin(omega0*t))+B/omega0^2;
ht=B*ones(length(t));
plot(t,yt,t,ht,r);
grid on
Qui si `e disegnato in rosso il graco del termine forzante, mentre in blu si ha la soluzione; si
nota quindi semplicemente unoscillazione libera, traslata di uno rispetto alla posizione di
equilibrio.
Possiamo modicare il precedente caso considerando = 1/

2; in tal caso la soluzione


sar`a data da
y(t) = 2 cos
_
t

2
_
cos t + sin t;
siamo in presenza del fenomeno noto come battimenti, e possiamo visualizzare tale fenomeno
considerando i seguenti comandi;
74 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
t=linspace(0,200,1000);
y0=1;
v0=1;
omega0=1;
B=1;
A=sqrt((y0-(B/omega0)^2)^2+(v0^2/omega0)^2);
c=(y0-(B/omega0)^2)/A;
s=-v0/(A*omega0);
omega=1/sqrt(2);
yt=A*(c*cos(omega0*t)-s*sin(omega0*t))+B*cos(omega*t)/(omega0^2-omega^2);
ht=B*cos(omega*t);
plot(t,yt,t,ht,r);
grid on
Ancora, in rosso abbiamo disegnato il graco del termine forzante, mentre in blu abbiamo il
graco della soluzione; si nota quindi nei battimenti unoscillazione con ampiezza variabile
me in qualche modo con ampiezza periodica. Si provi come esercizio a considerare dierenti
valori di ,=
0
, considerando in particolare valori di sempre pi` u vicini, ma non uguali,
a quelli di
0
.
Vibrazione forzata; caso =
0
e risonanza Se il termine forzante `e ha una pulsazione
=
0
, allora si vericare il fenomeno della risonanza; in questo caso, la soluzione particolare
va moltiplicata per t, e quindi la soluzione di (8.2) con y(0) = y

(0) = 1 `e data da
y(t) = sin(t) +
t
2
sin(t).
t=linspace(0,250,1000);
y0=1;
v0=1;
omega0=1;
B=1;
A=sqrt((y0-B/omega0^2)^2+v0^2/omega0^2);
c=(y0-B/omega0^2)/A;
s=-v0/(A*omega0);
yt=A*(c*cos(omega0*t)-s*sin(omega0*t))+B*t.*sin(omega0.*t)/(2*omega0);
hx=B*cos(omega0*t);
plot(t,yt,t,ht,r)
grid on
8.7.2 Vibrazioni smorzate
Trattiamo qui il caso in cui ,= 0; il polinomio caratteristico associato sar`a dato da p() =

2
+ 2 +
2
0
e il comportamento delle soluzioni dipender`a dal valore del discriminante
/4 =
2

2
0
. Si parla di smorzamento supercritico se [[ >
0
(in questo caso il polinomio
caratteristico avr`a due radici reali distinte), smorzamento critico se =
0
(una sola radice
reale del polinomio caratteristico) ed inne smorzamento subcritico se [[ <
0
(avremo qui
due radici complesse coniugate).
8.7. VIBRAZIONI MECCANICHE 75
Vibrazione smorzata: caso supercritico Consideriamo lequazione (8.2) con = 1.2,

0
= 1, B = 0 e il problema di Cauchy con dati iniziali y(0) = 1, y

(0) = 3; in tal caso la


soluzione `e data da
y(t) =
9

11
2

11
e
t
_
e
2

11
10
t
e

11
10
t
_
e il suo graco lo possiamo disegnare come segue;
t=linspace(0,10,100);
y0=1;
v0=-3;
omega0=1;
delta=1.2;
r1=-delta-sqrt(delta^2-omega0^2);
r2=-delta+sqrt(delta^2-omega0^2);
c1=(v0-y0*r2)/(r1-r2);
c2=y0-c1;
yt=c1*exp(r1*t)+c2*exp(r2*t);
plot(t,yt);
grid on
Vibrazione smorzata: caso critico Consideriamo come esempio il caso
0
= = 1,
B = 0 e il problema di Cauchy con dati iniziali y(0) = 1, y

(0) = 3; la soluzione `e data da


y(t) = e
t
(1 2t),
il cui graco sar`a dato da
t=linspace(0,10,100);
y0=1;
v0=-3;
omega0=1;
yt=y0*exp(-omega0*t)+(v0+omega0*y0)*t.*exp(-omega0*t);
plot(t,yt);
grid on
Vibrazione smorzata: caso subcritico Consideriamo il caso
0
= 1, = 0.1, B = 0
con dati iniziali y(0) = y

(0) = 1; la soluzione `e
y(t) = e
t
_
cos(t)

11
3
sin(t)
_
,
dove =
_

2
0

2
. Il graco di tale soluzione sar`a dato da
t=linspace(0,80,1000);
y0=1;
v0=1;
omega0=1;
delta=0.1;
omega=sqrt(omega0^2-delta^2);
76 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
A=sqrt(y0^2+((v0+delta*y0)/omega)^2);
c=y0/A;
s=-(omega0+delta*y0)/(A*omega);
yt=A*exp(-delta*t).*(c*cos(omega*t)+s*sin(omega*t));
plot(t,yt);
grid on
Vibrazione smorzata forzata Chiudiamo con un esempio di vibrazione smorzata con
termine forzante; consideriamo solo il caso subcritico con
0
= 1, = 0.1, termine forzante
con B = 1/2, = 1/3 e risolviamo il problema di Cauchy con dati iniziali y(0) = y

(0) = 1.
La soluzione `e data da
y(t) = Ae
t
(c cos(t) +s sin(t)) +
2B
a
2
sin(t) +
B(
2
0

2
)
a
2
cos(t)
dove
a =
_
(
2
0

2
)
2
+ 4
2

2
, =
_

2
0

2
, A =

1 +
_
1 +

_
2
,
c =
1
A
, s =
1
A
+c

;
tracciamo il graco di y(t) assieme al graco del termine forzante (in rosso);
t=linspace(0,80,1000);
y0=1;
v0=1;
omega0=1;
delta=0.1;
omega=1/3;
B=1/2;
a=sqrt((omega0^2-omega^2)^2+4*delta^2*omega^2);
nu=sqrt(omega0^2-delta^2);
A=sqrt(y0^2+((v0+delta*y0)/nu)^2);
c=y0/A;
s=-(v0/A+c*delta)/nu;
yt=A*exp(-delta*t).*(c*cos(nu*t)+...
s*sin(nu*t))+(2*delta*omega*B/a^2)*sin(omega*t)...
+(B*(omega0^2-omega^2)/a^2)*cos(omega*t);
plot(t,yt,t,B*cos(omega*t),r);
grid on
Si noti come la soluzione ha un certo andamento per un certo intervallo di tempo, mentre
poi a regime si comporta come il termine forzante.
Appendice A
Derivazione numerica
Si pu`o utilizzare Matlab per il calcolo approssimato delle derivate di una funzione data;
sostanzialmente, una funzione altro non sar`a che un vettore di valori. Possiamo quindi ri-
cavare il valore approssimato delle derivate semplicemente utilizzando i rapporti incrementali
della funzione.
A.1 Derivata prima
Per il calcolo della derivata prima della funzione f possiamo utilizzare la formula;
f
x
(x) =
f(x + x) f(x)
x
.
Il valore ottenuto sar`a necessariamente un valore approssimato di f

(x) e tale errore sar`a


tanto pi` u piccolo quanto pi` u piccolo sar`a il valore di x. Si pu`o quindi calcolare la derivata
di sin x in [0, 2] mediante questo metodo:
x=linspace(0,2*pi,1000);
y=sin(x);
deltax=diff(x); deltay=diff(y);
derivata=deltay./deltax;
Ovviamente, dato che x `e costante lungo la griglia, avremmo anche potuto considerare il
comando;
derivata=deltay/(2*pi*1000):
Possiamo comparare il risultato ottenuto tracciando il graco del vettore derivata assieme
al graco della funzione cos x;
plot(x(1:999),derivata,-,x,cos(x),:);
legend(Derivazione Numerica,Derivata);
title(Derivazione numerica ed analitica di y=sin(x));
xlabel(x); ylabel(y);
Il comando di non fa altro che ottenere da un vettore dato un vettore che contiene
le dierenze tra due entrate consecutive del vettore, e viene quindi prodotto un vettore la
77
78 APPENDICE A. DERIVAZIONE NUMERICA
cui lunghezza `e di uno inferiore rispetto alla lunghezza del vettore di partenza. Per questo
motivo abbiamo dovuto considerare, nel graco della derivata, il vettore x(1:999).
Come varianti del comando di si puo considerare il comando di(x,2), che, dato ad
esempio il vettore x=[a,b,c,d], produce il vettore [c-2b+a,d-2c+b]; tale comando coincide
col comando di(di(x)), e servir`a in seguito per il calcolo delle derivate seconde. Il comando
di(x,1) coincide con di(x).
Allo stesso modo, si possono calcolare numericamente le derivate parziali di una funzione
di pi` u variabili; cos` ad esempio, per una funzione di due variabili f(x, y), possiamo ottenere
le seguenti approssimazioni
f
x
(x, y)
f(x + x, y)
x
,
f
y
(x, y)
f(x, y + y)
y
.
A.2 Derivata seconda
Per il calcolo della derivata seconda si pu`o procedere essenzialmente come nella sezione
precedente, e cio`e utilizzando il rapporto incrementale della derivata prima approssimata
f

(x)
f

(x + x) f

(x)
x

f(x+2x)f(x+x)
x

f(x+x)f(x+)
x
x
=
f(x + 2x) 2f(x + x) +f(x)
(x)
2
.
Quindi, se volessimo ad esempio calcolare la derivata seconda numerica di f(x) = e
x
in [0, 3]
potremmo considerare i seguenti comandi;
x=linspace(0,3,1000);
deltax=3/1000;
derivata2=diff(exp(x),2)/(deltax)^2;
Ovviamente, allo stesso modo potremmo ottenere le derivate seconde numeriche per una
funzione di due variabili;

2
f
x
2
(x, y)
f(x + 2x, y) 2f(x + x, y) +f(x, y)
(x)
2
,
e

2
f
y
2
(x, y)
f(x, y + 2y) 2f(x, y + y) +f(x, y)
(y)
2
.
mentre la derivata seconda mista sar`a data da

2
f
xy
(x, y)
f(x + x, y + y) f(x + x, y) f(x, y + y) +f(x, y)
xy
.
Come esercizio, si scrivano comandi Matlab che calcolino le derivate seconde di una fun-
zione di due variabili, dove si utilizzi il comando di(x,2) e di(y,2) per il calcolo delle
derivate seconde non miste.
Appendice B
Il metodo di integrazione di
Simpson
Con tale nome di denota il metodo di approssimazione dellintegrale di una funzione f :
[a, b] R ottenuto suddividendo lintervallo in n = 2m parti uguali, prendendo cio`e h =
ba
n
come lunghezza dei sottointervalli e sostituendo le somme di Riemann con le somme
S
n
=
h
3
_
f(a) + 4
m

k=1
f(x
2k1
) + 2
m1

k=1
f(x
2k
) +f(b)
_
dove x
k
= kh, k = 0, . . . , n sono i punti estremi degli intervalli che deniscono la partizione.
Le somme di Simpson possono quindi essere calcolate utilizzando in Matlab i seguenti
comandi;
h=(b-a)/n;
xdispari=a+h:2*h:b-h;
xpari=a+2*h:2*h:b-2*h;
Sn=h/3*(f(a)+4*sum(f(xdispari))+2*sum(f(xpari))+f(b));
Si potrebbe vericare una tale formula, confrontandola anche con le somme di Riemann e
con il valore esatto dellintegrale, sullintegrale
_
2
0
1
1 +x
2
dx
con n = 20. Una possibile successione di comandi diventa quindi;
a=0; b=2; n=20;
h=(b-a)/n;
xdispari=a+h:2*h:b-h;
xpari=a+2*h:2*h:b-2*h;
fdispari=1./(1+xdispari.^2);
fpari=1./(1+xpari.^2);
S20=h/3*(1/(1+a^2)+4*sum(fdispari)+2*sum(fpari)+1/(1+b^2));
79
80 APPENDICE B. IL METODO DI INTEGRAZIONE DI SIMPSON
Appendice C
Metodo di Eulero per le
equazioni dierenziali
Consideriamo qui il metodo noto come metodo di Eulero per il calcolo approssimato delle
soluzioni delle equazioni dierenziali del primordine; prendiamo in considerazione linter-
vallo [5, 5], n = 40 e il problema ai valori iniziali
_
y

(t) = cos(2t +y(t))


y(5) = 4.
Si usa quindi il seguente metodo:
t0=-5; y0=5; tf=5;
n=40; % numero di passi
h=(tf-t0)/n; % ampiezza del passo
t=t0:h:tf;
y=y0*ones(size(t));
for i=1:n
y(i+1)=y(i)+h*cos(2*t(i)+y(i));
end
plot(t,y)
Si noti che il metodo si basa semplicemente sulla scrittura della derivata discreta
y(t
i+1
) y(t
i
)
h
y

(t
i
) = cos(2t
i
+y(t
i
)).
Possiamo anche creare un function mle per limplementazione del metodo di Eulero; tale
function avr`a in ingresso la funzionef che compare in y

= f(t, y), il punto iniziale t


0
e il
punto nale t
1
, il dato iniziale y
0
e il numero di passi n. Possiamo quindi scrivere
function [t,y]=Euler(f,t0,t1,y0,n)
% Metodo di Eulero per il problema
%
% y=f(t,y)
% y(t0)=y0
81
82 APPENDICE C. METODO DI EULERO PER LE EQUAZIONI DIFFERENZIALI
%
% nellintervallo [t0,t1] con n passi
%
% Utilizzo; si scrivere
%
% y=Euler(f,t0,t1,y0,n)
%
% dove f deve essere una funzione \textsc{Matlab} built-in
% o il nome, racchiuso tra apici, di un function m--file.
% In uscita si ottiene un vettore t dei valori della variabile
% indipendente e il vettore y dei valori della variabile dipendente.
% Il comando plot(t,y) produce il grafico della soluzione.
if nargin<5
error(Mancano dei parametri. Usare: y=Euler(f,t0,t1,y0,n))
end
f=fcnchk(f,vectorized);
h=(t1-t0)/n;
t=t0:h:t1;
y=y0*ones(size(t));
for i=1:n
y(i+1)=y(i)+h*f(t(i),y(i));
end
A questo punto, se vogliamo utilizzare il le appena creato per risolvere il problema di
Cauchy precedente, possiamo semplicemente considerare
[t,y]=Euler(cos(2*t+y),-5,5,4,40);
plot(t,y)
Come variante, possiamo anche considerare disegnare la soluzione trovata in rosso sul
campo direzionale denito dallequazione y

= cos(2t +y);
[t,y]=meshgrid(-5:.5:5,.5:.5:4.5);
dt=ones(size(t));
dy=cos(2*t+y);
quiver(t,y,dt,dy);
hold on;
[t,y]=Euler(cos(2*t+y),-5,5,4,40);
plot(t,y,r); hold off;
title(y=cos(2t+y));
Appendice D
Integrazione di equazioni
dierenziali per serie
Si possono utilizzare anche le serie di funzioni per determinare le soluzioni di determinate
equazioni dierenziale; presentiamo qui due esempi, uno in cui utilizziamo le serie di Taylor,
ed uno in cui utilizzeremo le serie di Fourier.
D.1 Serie di Taylor
A volte pu` o essere utile la teoria delle serie di Taylor per la determinazione di una soluzione
di unequazione dierenziale; infatti, se ad esempio consideriamo lequazione
(D.1) y

(t) 2ty

(t) +y(t) = 0, y(0) = 1, y

(0) = 0,
con t [0, 1], allora possiamo cercare la soluzione nella forma
(D.2) y(t) =

n=0
a
n
t
n
.
Le condizioni iniziali sono condizioni sui primi due coecienti, a
0
= 1, a
1
= 0; per la
determinazione degli altri coecienti, basta inserire (D.2) in (D.1) per trovare lequazione
algebrica
a
n+2
=
2n 1
(n + 1)(n + 2)
a
n
, n 0.
Si noti che quindi a partire da a
0
si costruiranno tutti i cecienti di indice pari, mentre
partendo da a
1
si costruiranno quelli di indice dispari. Possiamo quindi considerare i seguenti
comandi, che ci daranno il polinomio di Taylor di grado 10; lunica accortezza `e che nella
costruzione dei coecienti col comando a=b(11:-1:1), avremo la relazione a(n) = a
n1
b=[1 0]; % Condizioni iniziali
% coefficienti di indice pari
for n=0:2:8
b(n+3)=(2*n-1)/((n+1)*(n+2))*b(n+1);
end
83
84 APPENDICE D. INTEGRAZIONE DI EQUAZIONI DIFFERENZIALI PER SERIE
% coefficienti di indice dispari
for n=1:2:7
b(n+3)=(2*n-1)/((n+1)*(n+2))*b(n+1);
end
a=b(11:-1:1); % invertiamo i coefficienti
plot(-2:.01:2,polyval(a,-2:.01:2))
Si provi con gradi maggiori, come ad esempio 30 o 100 e si noter`a che la velocit`a di calcolo
`e comunque elevata.
Esercizio D.1 1. Disegnare il polinomio di Taylor di grado 10 della soluzione del prob-
lema di Cauchy
_
y

(t) 2ty

(t) +y(t) = 0,
y(0) = 0, y

(0) = 1,
con t [2, 2].
2. Disegnare il polinomio di Taylor di grado 10 della soluzione del problema di Cauchy
_
y

(t) 2ty

(t) +y(t) = 0,
y(0) = 1, y

(0) = 1,
con t [2, 2].
D.2 Serie di Fourier
Supponiamo di voler risolvere la seguente equazione dierenziale lineare del secondo ordine
a coecienti costanti
y

(t) +
2
0
y(t) = b(t)
e supponiamo che b sia una funzione Tperiodica sviluppabile in serie di Fourier; allora possi-
amo cercare la soluzione particolare dellequazione utilizzando le serie di Fourier. Cerchiamo
quindi una funzione y sviluppata in serie di Fourier mediante
y(t) =

0
2
+

k=1
[
k
cos(kt) +
k
sin(kt)] ,
dove =
2
T
, in modo tale che
y

(t) +
2
0
y(t) = b(t) =
a
0
2
+

k=1
[a
k
cos(kt) +b
k
sin(k
t
)] ,
con
a
k
=
2
T
_
T/2
T/2
b(t) cos(kt)dt, k 0,
b
k
=
2
T
_
T/2
T/2
b(t) sin(kt)dt, k 1.
D.2. SERIE DI FOURIER 85
Siamo ricondotti quindi ad un sistema (innito) che coinvolge i coecienti in quanto la
richiesta che y sia soluzione particolare si traduce nellequazione

2
0
2
+

k=1
_

k
(
2
0
k
2

2
) cos(kt) +
k
(
2
0
k
2

2
) sin(kt)

=
a
0
2
+

k=1
[a
k
cos(kt) +b
k
sin(k
t
)] .
Troviamo quindi che

0
=
a
0

2
0
,
mentre per k 1, se
2
0
,= k
2

2
, allora

k
=
a
k

2
0
k
2

2
,
k
=
b
k

2
0
k
2

2
.
Se inne esiste m 1 per cui
2
0
= m
2

2
, allora siamo nella situazione in cui va trovata la
soluzione particolare dellequazion2
y

(t) +
2
0
y(t) = a
m
cos(
0
t) +b
m
sin(
0
t);
tale soluzione `e data da

a
m
2
0
t cos(
0
t) +
b
m
2
0
t sin(
0
t).
In denitiva avremo che la soluzione particolare sar`a data da
y(t) =
a
0
2
2
0

a
m
2
0
t cos(
0
t) +
b
m
2
0
t sin(
0
t)+
+

k=1,k=m
_
a
k

2
0
k
2

2
cos(kt) +
b
k

2
0
k
2

2
sin(kt)
_
.
Come esempio possiamo considerare la funzione b : [, ) R studiata nella Sezione
7.5 associata allequazione dierenziale
y

(t) +y(t) = b(t),


dove su [, ) la funzione b `e data da b(t) = t
[0,)
(t) + t
2

[,0)
(t), e poi viene estesa
2periodica. Abbiamo quindi T = 2 e = 1. Abbiamo anche
0
= 1, e quindi lo sviluppo
in serie di Fourier della soluzione sar`a
y(t) =
a
0
2

a
1
2
t cos t +
b
1
2
t sin t+
+

k=2
_
a
k
1 k
2
cos(kt) +
b
k
1 k
2
sin(kt)
_
.
Come esercizio, si scriva in Matlab dei comandi che calcolino i coecienti di y e si disegni
il graco della soluzione particoalre cos` ottenuta.

You might also like