Professional Documents
Culture Documents
a.a. 2014-2015
1
versione aggiornata al 5 dicembre 2014
2
Indice
1 Curve 1
1.1 Richiami di algebra lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Alcuni disegni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.1 Curve nel piano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Curve in coordinate polari . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.3 Curve nello spazio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Vettori tangenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Lunghezza darco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.1 Grafico di funzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 Curve parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Curvatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6 Applicazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3 Superfici 21
3.1 Superfici cartesiane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 Rotazione di grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Superfici parametrizzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.1 Grafici di funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.2 Superfici di rotazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4 Piano tangente ad una superficie parametrizzata . . . . . . . . . . . . . . . . 28
3
4 INDICE
5 Integrali multipli 35
5.1 Integrali doppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Formule di riduzione per integrali doppi . . . . . . . . . . . . . . . . . . . . . 36
5.3 Integrali doppi su domini generici . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3.1 Disegno di insiemi nel piano . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4 Integrali tripli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.4.1 Integrali su domini generici . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4.2 Grafico di regioni solide . . . . . . . . . . . . . . . . . . . . . . . . . . 40
8 Equazioni differenziali 63
8.1 Linee di flusso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2 Il metodo numerico ode45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.3 Integrazione simbolica di equazioni differenziali . . . . . . . . . . . . . . . . . 65
8.4 Sistemi di equazioni differenziali . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.5 Equazioni di ordine superiore . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.6 Soluzioni definite implicitamente . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.7 Vibrazioni meccaniche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.7.1 Vibrazioni non smorzate . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.7.2 Vibrazioni smorzate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
A Derivazione numerica 73
A.1 Derivata prima . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
A.2 Derivata seconda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Curve
Osserviamo che se i due punti sono nel piano, possiamo scrivere P = (p1 , p2 ), P = (q1 , q2 ).
Quindi un modo semplice per disegnare nel piano il segmento che congiunge P = (1, 2) con
Q = (3, 5) puo 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)
t=[0 1];
1
2 CAPITOLO 1. CURVE
xa=4*t;
ya=7*t;
xb=-2*t;
yb=3*t;
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)
Per disegnare invece vettori in dimensione 3 bisognera utilizzare il comando plot3
Definizione 1.1 Il comando plot3 analogo in R3 a plot e ha la seguente struttura:
plot3(x,y,z)
se x, y, z R3 sono tre vettori della stessa lunghezza
plot3(X,Y,Z)
se X, Y, Z sono tre matrici della stessa grandezza. In questo caso disegnamo le linee
ottenute dalle colonne delle matrici considerate, ossia X, Y e Z.
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
n
X
xy = xi yi = kxkkyk cos
i=1
t=[-2 2];
x1=1+2*t;
x2=-3+4*t;
plot(x1,x2);
grid on;
1. (t 2, t + sin t), t R;
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);
Disegniamo come esempio la rosa a quattro petali data %() = cos 2, [0, 2]. Useremo
la funzione linspace
theta=linspace(0,2*pi);
r=cos(2*theta);
polar(theta,r);
4 CAPITOLO 1. CURVE
C={k,b,r};
c=[-1;0.5;1];
theta=linspace(0,2*pi);
for i=1:length(c)
polar(theta,1+c(i)*sin(theta),C{i});
hold on;
end
hold off;
legend(1-sin(t), 1+\dfrac{1}{2}sin(t),1+sin(t));
theta=linspace(0,2*pi);
r1=1+sin(theta); r2=1+2*sin(theta);
polar([theta,theta], [r1,r2]);
legend(1+sin(t), 1+2sin(t));
1. % = 2a(1 + cos ), [, ];
2. % = ae , [0, /6];
3. % = 2 , [0, 3/2];
t=[-2 2];
x1=1+2*t;
x2=-3+4*t;
x3=2-t;
plot3(x1,x2,x3);
grid on;
Esercizio 1.3 Disegnare la curva nello spazio determinata dal luogo delle soluzioni del
sistema
y = x2
3z = 2xy.
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;
6 CAPITOLO 1. CURVE
tt=0:pi/4:4*pi; l=length(tt);
% definisco un vettore di valori compresi tra 0 e 4*pi
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;
plot3(tg1,tg2,tg3,-r,n1,n2,n3,-g);
pause
1.4. LUNGHEZZA DARCO 7
end
hold off;
In alernativa si puo 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)]);
% 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;
plot3(tg1,tg2,tg3,-r,n1,n2,n3,-g);
pause
end
hold off;
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)
1.4. LUNGHEZZA DARCO 9
Utilizziamo lapprossimazione poligonale dove viene suddiviso lintervallo [1, 3] in 400 parti
uguali e la poligonale ha per vertici i punti r(ti ); considereremo inoltre anche un metodo
numerico per il calcolo del seguente integrale:
Z 3 p
L = l(r, [1, 3]) = 36t4 32t2 + 16dt,
1
t=linspace(-1,3,400);
x=4*t-2*t.^3;
y=t.^2;
plot(x,y);
dx=diff(x);
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 differenza tra i due valori ottenuti; si puo 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
x2 y2
+ = 1,
4 9
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);
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 puo essere determinata utilizzando il symbolic toolbox.
1.5 Curvatura
Consideriamo qui la curva parametrizzata da
creeremo una figura divisa in due parti, dove nella prima parte tracceremo il sostegno di r,
mentre nella seconda parte disegneremo il grafico della funzione curvatura
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 grafico della
funzione f (x) = x2 , 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
|f 00 (x)| 2
k(x) = 0 2 3/2
= .
(1 + |f (x)| ) (1 + 4x2 )3/2
Per x = 1/2 otteniamo k(1/2) = 1/ 2; dato che il versore tangente in tale punto e dato da
1 (1, 1) mentre il versore normale e dato da 1 (1, 1), il cerchio osculatore avra raggio 2
2 2
1 5
e sara centrato in ( 2 , 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, t2 , t3 ), t [0, 2] sia con lapprossimazione poli-
gonale dividendo lintervallo in 1000 sottointervalli uguali, quindi usando il comando
quad.
3. Determinare k(t) per r(t) = (sin t, cos t, sin2 t), t [0, 2] e, mediante il comando
subplot, disegnare la curva e il grafico 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, t2 , t3 ), t [0, 2] e il cerchio osculatore
relativo al valore t = 1.
1.6 Applicazioni
Consideriamo i seguenti vettori: A=[1 2 3 4 5] e B=[1 2 1 3 3]. Siamo ora interessati
a trovare un polinomio che meglio approssima il nostro set di dati in R2 . Una tecnica
fondamentale della statistica parametrica sono infatti le curve di regressione, in cui si cerca
di approssimare il set di dati con un polinomio lineare del tipo
12 CAPITOLO 1. CURVE
f(x)=p1*x+p2.
A questo fine possiamo utilizzare il toolbox Matlab cftool che ci fornisce sia le stime dei
parametri p1 p2 sia alcuni indicatori sulla precisione della stima, come R2 e Adj R2 . Noi
ci occuperemo solo del primo.
Definizione 1.7 Consideriamo un insieme di n dati {yi }ni=1 ai quali associamo un modello
lineare rappresentato da n approssimazioni {yi }ni=1 . Definiamo la media dei dati come
n
1X
y = yi .
n i=1
e le seguenti quantita
n
X
SStot = (yi y)2
i=1
n
X
SSreg = (yi y)2
i=1
n
X
SSres = (yi yi )2 .
i=1
2
Il coefficiente di determinazione R e allora
SSres
R2 := 1
SStot
ed e tale che
0 R2 1.
Nel caso test preso in esame la stima dei coefficienti p1=0.5, p2=0.5 e lindice R2 assume
il valore di 0.625. Possiamo inoltre considerare polinomi di grado crescente, anche se questi
hanno una valenza statistica meno definita. Cosa succede in questo caso a R2 ?
Capitolo 2
13
14 CAPITOLO 2. FUNZIONI DI PIU VARIABILI
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 grafico della funzione
p
f (x, y) = E (x, y)(4 2x2 y 2 ), E = {(x, y) R2 : 2x2 + y 2 4}
In questo modo la funzione E (x, y)(4 2x2 y 2 ) e definita per ogni (x, y) R2 e non
abbiamo problemi a disegnarne il grafico. Concludiamo questa sezione con un commento; le
linee che sono visualizzate nel grafico ottenuto altro non sono che le restrizioni della funzione
x 7 f (x, y) e y 7 f (x, y).
for r=[0:.1:1]
plot3((1-r)*cos(theta),(1-r)*sin(theta),cos(theta).*sin(theta),r);
pause(.5);
end;
hold off;
Si provi a ripetere i comandi precedenti, cioe disegnando prima le sezioni ad angolo costante
e poi quelle a raggio costante, togliendo il comando hold off; alla fine delle sezioni ad
angolo costante.
Possiamo anche ricostruire il grafico 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 specifica quante linee di livello si desiderano disegnare;
tale parametro puo 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 puo infine 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 grafico 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);
16 CAPITOLO 2. FUNZIONI DI PIU VARIABILI
subplot(2,4,8);
[C h]=contour(x,y,z,[0.3]); clabel(C,h);
Per mettere assieme il grafico 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));
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 grafico della
funzione f e il piano verticale x = c, e da una parte il grafico della funzione f (c, y); si ripeta
ancora lesercizio con y = c e f (x, c).
Esercizio 2.1
1. Disegnare i grafici delle funzioni
xy x2 y y2 x2 y
, , , .
x2 + y2 x2 y2 x2 + y2 x4+ y2
x2 + y 2
, |x| + |y| + |z|.
z2
2.2. DERIVATE PARZIALI 17
4. Disegnare il grafico di f (x, y) = xy 3 x3 y sul dominio (x, y) [3, 3]2 ; creare poi
separatamente una mappa dei livelli di tale funzione su tale dominio. Usare infine il
comando surfc.
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));
2
Supponiamo ora di voler disegnare il grafico della funzione xy f utilizzando il comando
2
surf. Dobbiamo convertire la funzione xy f definita 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) = sin2 (2x+3y); si traccino i
2 3 3
grafici di f (x, 2), x f (x, 2), xy f (x, 2) e xyy f (x, 2). Si disegni infine il grafico di xyy f (x, y),
2
(x, y) [, ] .
z = f (x0 , y0 ) + f (x0 , y0 ) (x x0 , y y0 ).
[x,y]=meshgrid(-3:.1:3);
surf(x,y,x.^2+y.^2);
18 CAPITOLO 2. FUNZIONI DI PIU VARIABILI
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 grafico.
Possiamo anche considerare la funzione x2 y 2 nel punto (1, 2, 3). Con i seguenti co-
mandi disegneremo il grafico 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 effetti di tale comando.
[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.
[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) = 2x2 + xy + y 2 nel dominio [2, 2]
[3, 3]; tracciamo quindi nello stesso grafico 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;
x2 + y 2 = z 2 + 1,
che significa che per ogni z fissato 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;
Un problema che si nota e che la superficie copre i vettori normali; potremmo anche disegnare
solo i vettori gradiente, la superficie sottesa si dedurra 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 grafico, i livelli di f (x, y) = x2 y 2 a il campo gradiente di f .
2. Si disegni la curva x2 y 2 = 1 parametrizzandola (si usino seno e coseno iperbolico)
e si disegni nello stesso grafico il campo gradiente di f .
3. Disegnare il livello f (x, y, z) = x2 + 3y 2 + 4z 2 = 9 utilizzando le relazioni;
x = 9 4z 2 cos
y = 9 4z 2 sin
Superfici
21
22 CAPITOLO 3. SUPERFICI
Esercizio 3.1
1. Disegnare il piano passante per (1, 3, 2) determinato dai due vettori
Esercizio 3.2
[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;
z=linspace(a,b,40);
x=f(z);
[X,Y,Z]=cylinder(x,30);
surf(X,Y,Z);
Per migliorarne leffetto visivo, si puo usare il comando shading interp. Ma vediamo un
esempio concreto; ruotiamo il grafico della funzione z 2 + 1 attorno allasse z. Il grafico che
vogliamo ruotare sara il seguente;
z=linspace(1,3,50);
x=z.^2+1;
plot(x,z);
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;
24 CAPITOLO 3. SUPERFICI
Chiaramente si puo 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.
Esercizio 3.3
1. Ruotare la funzione z 1 attorno allasse x.
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;
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]:
x = R cos sin
(3.1) y = R sin sin
z = R cos
Esercizio 3.4
In modo del tutto analogo si puo 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.5
3.3. SUPERFICI PARAMETRIZZATE 25
1. Disegnare il grafico di x2 + y 2 = z 2
y2 z2
2. Disegnare il grafico di x2 + 4 9 = 1.
3. Disegnare il grafico del cilindro z = sin(3x) con x [0, 2], z [1, 1].
6. Disegnare la parte di sfera di raggio 3 la cui latitudine e compresa tra [/3, /3].
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 grafico.
[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 surfl a seconda dei casi (provare a capire le differenze tra surf e surfl utilizzando
la guida di Matlab). Un esempio di superficie parametrizzata lo abbiamo gia incontrato
come grafico di una funzione; vedremo anche esempi di superfici di rotazione.
[x,y]=meshgrid(a:.1:b,c:.1:d);
surfl(x,y,g(x,y));
[x,y]=meshgrid(-2:.1:2);
surfl(x,y,x.^3+y.^3);
con la seguente variante se si vuole modificare le coordinate della sorgente di luce:
[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 superficie; ricordiamo che il campo normale e dato da
fu (u, v) fv (u, v)
n(u, v) = ,
kfu (u, v) fv (u, v)k
dove fu e fv rappresentano le derivate parziali della parametrizzazione f . Nel caso di un
grafico avremo quindi che fu (u, v) = (1, 0, gu (u, v)) e fv (u, v) = (0, 1, gv (u, v)), da cui
1
n(u, v) = p (gu (u, v), gv (u, v), 1).
1 + kg(u, v)k2
Come esercizio, si provi ad utilizzare, come fatto nel capitolo 2, il comando quiver per
disegnare il campo normale alla superficie, cioe i vettori n(u, v).
Come esercizio, si provi a dire quali sono, nel grafico appena ottenuto, le linee u 7 f (u, v)
con v costante e quali le linee v 7 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 superficie, cioe i vettori
fu (u, v) fv (u, v)
n(u, v) = ,
kfu (u, v) fv (u, v)k
che nel nostro caso, dato che f (u, v) = ((3 + cos u) cos v, (3 + cos u) sin v, sin u), sara dato da
(sin u cos v, sin u sin v, cos u) ((3 + cos u) sin v, (3 + cos u) cos v, 0)
n(u, v) =
k(sin u cos v, sin u sin v, cos u) ((3 + cos u) sin v, (3 + cos u) cos v, 0)k
=( cos u cos v, cos u sin v. sin u).
Esercizio 3.6
1. Disegnare la superficie parametrizzata da
f (u, v) = (u sin u cos v, u cos u cos v, u sin v), (u, v) [0, 2]2 .
f (u, v) = (cos u sinh v, sin u sinh v, cosh v), u [0, 2], v [2, 2].
u2 + v 2 1
2u 2v
f (u, v) = , ,
u2 + v 2 + 1 u2 + v 2 + 1 u2 + v 2 + 1
e nella stessa figura 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).
28 CAPITOLO 3. SUPERFICI
f (u, v) = (x(u, v), y(u, v), z(u, v)), (u, v) [a, b] [c, d],
(x(s, t), y(s, t), z(s, t) = f (u0 , v0 ) + (s u0 )fu (u0 , v0 ) + (t v0 )fv (u0 , v0 ).
(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.8
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
Si deduce quindi che A ha un autovalore negativo e uno positivo, quindi A e una matrice
indefinita. Analogamente;
A=[-6 6; -6 2];
A(1,1)
det(A)
da cui si vede che i numeri ottenuti sono entrambi negativi per la prima matrice, e quindi
la matrice e indefinita, mentre
29
30 CAPITOLO 4. PUNTI STAZIONARI E MASSIMI E MINIMI
da cui si vede che tutti i determinanti dei minori principali sono positivi, e quindi A e
definita positiva.
Tipicamente il problema consiste nel cercare prima i punti stazionari e poi nel classificarli
e per questo puo essere utilizzato il symbolic toolbox. Consideriamo per semplicita la
funzione di due variabili
f (x, y) = 4x2 + 3y 2 + 12xy + 7x + 8y + 5
che, come si vedra, 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, cioe f (x, y) ha un solo
punto stazionario (xm , ym ).
xm=S.x
ym=S.y
Calcoleremo ora le derivate seconde e le valuteremo nel punto (xm , ym ) con il comando subs,
ottenendo la matrice Hessiana H(xm , ym ).
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 (xm , ym ) 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 e indefinita e (xm , ym )
e un punto di sella. Andiamo a controllare quanto detto tracciando il grafico di f :
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)
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 4.1 Si scrivano comandi Matlab che calcolino il massimo e il minimo della
funzione
x
f (x) = 2 sin(2x) 3 cos( ),
2
ed utilizzino subplot per disegnare il grafico 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.
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)).
f (x, y) = x2 + 2y 2 4y 2, x2 + 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 ce pero 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 modificato.
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 visualizza-
zione dei punti di massimo e di minimo.
Esercizio 4.2
1. Disegnare il grafico e le linee di livello della funzione
2. Utilizzare i metodi grafici (grafico e linee di livello) per individuare i punti estremali
di
f (x, y) = exy , 4x2 + y 2 2.
Utilizzare il comando text per riportare i valori massimo e minimo e i punti do-
ve vengono 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.
f (x, y) = x3 + y 3 + 3xy
[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 grafica che ci dara una buona stima dei valori estremali
di f soggetta al vincolo dato. Nel primo caso parametrizzeremo la curva e quindi tracceremo
il grafico della funzione ristretta a tale curva; gli estremali saranno individuati guardando
tale grafico. Il vincolo e una circonferenza con parametrizzazione
x = 3 + 3 cos t,
, t [0, 2].
y = 3 + 3 sin t
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);
34 CAPITOLO 4. PUNTI STAZIONARI E MASSIMI E MINIMI
Quello ottenuto e il grafico della funzione ristretta al vincolo; si potrebbe darne una visua-
lizzazione tridimensionale, considerando ad esempio il comando
plot3(x,y,f);
Come esercizio, si tracci il grafico cos ottenuto, assieme alla curva che definisce il vincolo
vista nello spazio tridimensionale. Come variante e/o abbellimento della figura, invece del
comando plot3(x,y,f) si potrebbe utilizzare il comando stem3(x,y,f).
Osservando il grafico 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 puo 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 definisce il vincolo e i livelli di f . Ov-
viamente, le limitazioni sulla griglia scelta vanno scelte in modo da contenere tutta la curva
che definisce il vincolo; anche la scelta dei livelli dovra 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 definisce 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 4.3 Si utilizzi il metodo grafico per stimare il massimo e il minimo della funzione
f (x, y) = xy
2 2
soggetta al vincolo 4x + y = 9. Inoltre, si tracci nello stesso disegno il grafico di f , la
curva che definisce il vincolo e la curva dello spazio ottenuta restringendo f al vincolo. Si
parametrizzi inoltre il vincolo e si tracci il grafico della funzione di una variabile ottenuta
restringendo la funzione al vincolo e da tale grafico 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 infine il comando text per scrivere i valori ottenuti sul grafico.
In conclusione, si usi il metodo delle linee di livello per individuare i punti di massimo e
di minimo, etichettando i livelli.
Capitolo 5
Integrali multipli
In questo capitolo trattiamo gli integrali multipli, e piu precisamente gli integrali doppi nella
sezione 5.1 e gli integrali tripli nella sezione 5.4.
h(b a) k(c d)
xh = , yk = , h = 0, . . . , N, k = 0, . . . , M.
N M
Potremmo quindi considerare i seguenti comandi
dx=(b-a)/N; dy=(c-d)/M;
[x,y]=meshgrid(a+dx/2:dx:b-dx/2,c+dy/2:dy:d-dy/2);
f=f(x,y);
Riemann=sum(sum(f))*dx*dy;
35
36 CAPITOLO 5. 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 figura. Si provi poi a ripetere
quanto fatto ora con la funzione f (x, y) = cos2 (x + 2y) sul rettangolo [0, ] [0, /2].
In Matlab esiste la funzione dblquad che fornisce una quadratura numerica dellintegrale
doppio. Vediamo come funziona con un esempio; la funzione f deve essere data in pasto
al comando dblquad o tramite il comando fcnchk oppure deve essere definita utilizzando
un mfile. In pratica, f deve essere riconosciuta da Matlab come una function, che puo
essere definita sia direttamente col comando fcnchk, oppure esternamente tramite un mfile.
Calcoliamo ad esempio lintegrale di
1
f (x, y) = p
x2 + 2y 2 + 1
Esercizio 5.1
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]);
Stima=dblquad(z,-1,1,-1,1,Puntomedio);
function [A,n]=Puntomedio(fun,a,b,E);
fun=fcnchk(fun,vectorized);
x=a:.001:b;
y=fun(x);
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 definizione della nostra funzione e a, b,
c e d sono gli estremi di integrazione, cioe nel nostro caso
funzione= 3-x.^2-2*y.^2
a=-1; b=1; c=-1; d=1;
In alternativa si puo considerare la sintassi:
dblquad(@funzione.m,a,b,c,d);
dove funzione.m e un mfile che definisce la funzione da integrare, e deve quindi essere
strutturato come segue;
function z=funzione(x,y);
...
b3 + b2 3 = 0,
ma per questo tipo di equazioni non esistono formule risolutive. Con i seguenti comandi,
individueremo tale soluzione numericamente con il comando fzero;
5.4. INTEGRALI TRIPLI 39
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 scientifici, 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
2. Disegnare il grafico 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.
4. Usare il comando dblquad per stimare lintegrale. Se il comando non funziona a causa
delle troppe discontinuita della funzione, utilizzare come metodo alternativo lmfile
Puntomedio.m o creare un mfile alternativo per il calcolo dellintegrale (ad esempio
scrivere un mfile che implementi il metodo di Simpson per il calcolo dellintegrale;
per informazioni sul metodo di Simpson, rimandiamo allappendice B).
5. Tracciare il grafico delle curve che definiscono 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).
Esercizio 5.3
Integrali curvilinei e di
superficie
In questa sezione considereremo gli integrali curvilinei di prima e seconda specie (rispetti-
vamente, per funzioni scalari e vettoriali) e gli integrali di superficie per funzioni scalari e
vettoriali. Come applicazioni considereremo le formule di GaussGreen e Stokes.
Lintervallo e la parametrizzazione sono stati calcolati tenendo conto che la lunghezza del
filo e L = 2. La massa totale del filo sara quindi data da
Z 2 p
M= 1 + s2 ds.
0
Si noti che nella formula precedente non compare kr0 (s)k, in quanto, avendo scelto s come
parametro darco, tale quantita e pari ad 1. Calcoliamo il precedente integrale usando il
symbolic toolbox;
syms s
43
44 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 filo; per effettuare questo calcolo, invece
di utilizzare il parametro darco, considereremo la parametrizzazione equivalente data da
: [0.] R2 ,
(t) = (2 cos t, 2 sin t).
Dato
che k 0 (t)k = 2, si avra che s(t) = 2t, da cui r(s) = r(2t) = (t) e la densita diventa
1 + 4t2 . Quindi le coordinate del baricentro saranno date da
Z Z
1 p
2
1 p
x = 2 cos t 1 + 4t dt, y = 2 sin t 1 + 4t2 dt.
M 0 M 0
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)
Campi nel piano Un campo di vettori nel piano e determinato da una coppia di funzioni
scalari,
F (x, y) = (F1 (x, y), F2 (x, y))
e il metodo migliore per visualizzare un campo di vettori, come gia visto nei capitoli
precedenti, e lutilizzo del comando quiver.
Ad esempio, supponiamo di voler disegnare il campo
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
piu che sufficiente.
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 45
Il comando axis image serve solamente i numeri sulle coordinate x e y (confrontare con
il comando axis equal). Se vogliamo disegnare il grafico delle direzioni del campo F ,
possiamo modificare 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
x2
y 2 xy
f (x, y) = e 2 , (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
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 definire mediante un mfile 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;
Puo succedere che la curva su cui calcolare il nostro integrale curvilineo non sia definita
in modo parametrico ma sia semplicemente descritta da una tabella di valori. Ad sempio
potremmo avere la seguente tabella di valori;
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
nel caso di una superficie cartesiana, r(u, v) = (u, v, f (u, v)), tale formula diventa
Z p
Area() = 1 + kf (u, v)k2 dudv.
D
[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 superficie laterale del toro, ottenuto ruotando la circonferenza di
raggio 2 centrata in (3, 0). Si disegni il grafico della superficie e si riportino i seguenti
valori;
2. Si trovi larea della porzione di sfera di raggio 1 con angolo [0, /4] e si riportino
sul grafico della superficie i seguenti valori:
3. Si ripeta
lesercizio
precedente con la porzione di sfera che giace sopra il quadrato
[1/ 2, 1/ 2]2 .
Se poi la superficie e cartesiana, cioe r(u, v) = (u, v, g(u, v)), la formula precedente diventa
Z Z p
f d := f (u, v, g(u, v)) 1 + kg(u, v)k2 dudv.
D
F (x, y, z) = (z, x, y)
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, cioe in modo tale che lorientazione
indotta da tale campo su induca la giusta orientazione sulla curva r. Avendo fissato la
parametrizzazione r, il versore n , ortogonale al piano z = y, deve avere componento z
positiva, quindi
1
n = (0, 1, 1),
2
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
Z 2
1 1 1 1 1 1 1 1
sin t, cos t, + sin t sin t, cos t, cos t dt
0 2 2 2 2 2 2 2 2
e lintegrale di superficie
Z
1
(6.1) (1, 1, 1) (0, 1, 1)d
2
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 superficie (6.1).
E = {(x, y, z) R3 : x2 2x + y 2 0, 0 z 1}.
Calcoleremo tale flusso in due modi differenti, verificando quindi la validita della formula di
GaussGreen Z Z
divF (x, y, z)dxdydz = F n d,
E
con n normale uscente dal cilindro. Se vogliamo calcolare lintegrale della divergenza,
abbiamo che p
divF (x, y, z) = x2 + y 2 ,
6.3. INTEGRALI DI SUPERFICIE 51
con % [0, 1], [0, 2) e t [0, 1]. Si tratta quindi di calcolare il seguente integrale;
Z Z p Z 2 Z 1 p
(6.2) divF (x, y, z)dxdydz = x2 + y 2 dxdydz = d % 1 + %2 + 2% cos d,
E E 0 0
= 1 2 3
dove
1 = {x2 2x + y 2 = 0, 0 z 1}, 2 = {z = 0, x2 2x + y 2 < 0},
3 = {z = 1, x2 2x + y 2 < 0}.
La prima superficie la parametrizziamo in coordinate cilindriche r : [0, 2) [0, 1],
La superficie 2 e il grafico z = 0 con normale n2 (x, y, 0) = (0, 0, 1); dato che F (x, y, 0) =
(y, x, 0), si vede subito che Z
f n2 d = 0.
2
Per lultimo integrale, vista 3 come grafico z = 1 con normale n3 (x, y, 1) = (0, 0, 1),
troviamo lintegrale
Z Z Z p
F n3 d = F (x, y, 1) (0, 0, 1)dxdy = x2 + y 2 dxdy,
3 {x2 2x+y 2 0} {x2 2x+y 2 0}
53
54 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
x2 x3
s3 (x) = 1 + x + + .
2 6
In Matlab, il modo di determinare un polinomio e assegnare i coefficienti del polinomio, con
la convenzione che il vettore dei coefficienti rappresenta le potenze di x in ordine decrescente
di grado. Ad esempio, il polinomio s3 (x) e determinato dal vettore [1/6 1/2 1 1]. Con
i seguenti comandi determiniamo il polinomio s10 (x) e ne disegna il grafico 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 coefficienti. Si provi come esercizio a sovrapporre al grafico precedente
il grafico, tracciato in rosso, della funzione ex ; si modifichi anche lintervallo [2, 3] con altri
intervalli.
Serie con solo termini dispari. Come ulteriore esempio possiamo considerare la serie
di potenze
X (1)n x2n+1
;
n=0
(2n + 1)!
rappresentino 0! = 1 e 1! = 1). La seconda difficolta 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 coefficienti. 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 coeffcienti di
a vengono inseriti nelle posizioni pari di b,
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 grafico della somma parziale di grado 10 della serie di potenze
X
xn
n=0
1
sullintervallo [.9, .9]. Tracciare nella stessa figura il grafico della funzione y = 1x ,
inserendo anche una legenda.
2. Disegnare la somma parziale di grado 50 della serie di potenze
X (1)n x2n+1
n=0
2n + 1
si ripeta quanto fatto per la somma parziale di grado 100, tracciando anche il grafico
della funzione cos x, considerando vari intervalli di definizione.
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);
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 grafico di sin x, che dovrebbe comparire in blu nel grafico, in realta e coper-
to completamente dal grafico della funzione y51, mostrando che il polinomio di grado 51
rappresenta quasi completamente la funzione sin x nellintervallo [2, 2].
possiamo considerare il loro prodotto h(x) = f (x)g(x) che e ancora una serie di potenze
X X
h(x) = cn xn , cn = h = 0n ah bnh .
n=0
Questo prodotto, che e il caso discreto della convoluzione tra due funzioni, viene implemen-
tato in Matlab dal comando conv;
58 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
f=[1 6 1];
g=[2 -3 5];
h=conv(f,g)
Possiamo applicare quanto appena detto per il calcolo della serie di Taylor per una
funzione prodotto; ad esempio, possiamo considerare la funzione
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 infine il comando taylortool che racchiude in una interfaccia grafica quanto
appena visto.
Esercizio 7.3
2. Nella stessa figura, si tracci il grafico di cos x e i suoi polinomi di Taylor centrati in
x0 = 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 figura, si tracci il grafico di log(x) e i suoi polinomi di Taylor centrati in
x0 = 2 di grado 1, 3, 10 e 20 nellintervallo [.1, 4] (si metta una legenda, si riscalino
gli assi se necessario).
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)
Puo essere utile creare un function mfile, che chiameremo CoeffFourier, per il calcolo
dei coefficienti di Fourier di una data funzione.
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 definizione delle variabili globali global k T omega, che quindi dovranno essere
definite prima di richiamare la funzione CoeffsFourier.
Esercizio 7.4
1. Modificare i comandi precedenti per comprendere, nel grafico delle frequenze, anche il
termine a0 /2; considerare anche la variante in cui si riportano nel piano delle frequenze
i valori di |ak | e |bk |.
2. Ripetere quanto fatto per la funzione f : (, ] R, f (x) = x
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);
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)
62 CAPITOLO 7. SUCCESSIONI E SERIE DI FUNZIONI
Capitolo 8
Equazioni differenziali
[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 grafica di quanto ottenuto ad esempio riducendo della meta la lun-
ghezza dei vettori ottenuti, considerando ad esempio il comando
quiver(t,u,dt,du,.5);
63
64 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
Un comando Matlab utile in questi casi e il comando streamline, che possiamo utilizzare
come segue. Supponiamo di partire allistante t0 = 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 grafici delle soluzioni dei Problemi di Cauchy associati.
Esercizio 8.1
1. Utilizzare il comando quiver per tracciare le linee di flusso del campo
u0 = 2t2 u3 ;
u0 = sin(t + u)
su di un rettangolo contenente lorigine (si facciano varie prove con differenti valori
per le dimensioni della finestra e degli incrementi).
[t,u]=ode45(fcnchk((t+2*cos(t))./u.^2),[0:.2:5],2);
Nel comando ode45 non e necessario utilizzare tt fcnchk, ma possiamo anche utilizzare un
function mfile, con la sintassi
[t,u]=ode45(f,[a b],u0);
function uprimo=f(x,y)
uprimo=(t+2*cos(t))./u.^2;
syms t y
g=dsolve(Dy=f(t,y),t)
syms t y
g=dsolve(Dy=f(t,y),y(a)=b,t)
syms t y
g=dsolve(Dy=t^2+y,t)
Il risultato sara 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 puo capire il valore della costante C2 per cui si ha che la soluzioni soddisfi una
cerca condizione iniziale per t = 0.
Se invece vogliamo considerare direttamente un Problema di Cauchy, ad esempio
u0 = u t
u(1.5) = 1
syms t y
g=dsolve(Dy=y-t,y(-1.5)=-1,t)
ezplot(g,[-2 2])
66 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
utilizzeremo ode45 per determinare una soluzione approssimata per t [0, 1]. Lequazione
e unequazione del primordine u0 = F (t, u), con u vettore di componenti (x, y) ed F (t, u) =
(2u1 3u2 , 2u1 + u2 ); quindi la procedura non sara molto differente da quella vista per le
equazioni del primordine. Iniziamo col creare un mfile
function xprimo=F(t,x)
xprimo=[2*x(1)-3*x(2);2*x(1)+x(2)];
e poi richiamare tale mfile 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));
con t [0, 5]. Possiamo quindi introdurre la variabile y(t) = x0 (t) ed ottenere quindi il
sistema 0
x (t) = y(t), x(0) = 1
y 0 (t) = 6x(t)y(t) + x2 (t) + sin(x(t)), y(0) = 2.
Definiamo quindi lmfile
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))
Esercizio 8.2
8.6. SOLUZIONI DEFINITE IMPLICITAMENTE 67
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
0
x (t) = 3x(t) + 4y(t), x(0) = 1
y 0 (t) = 3x(t) + 2y(t), y(0) = 2
con t [0, 1]. Disegnare nello stesso grafico le soluzioni x = x(t) e y = y(t), ed in un
secondo grafico la curva y = x.
4. Si consideri lequazione differenziale del secondo ordine
utilizzare ode45 per trovare la soluzione in t [0, 3] con i seguenti dati iniziali,
specificando per la variabile indipendente i seguenti valori t=[0:.01:3];
a) x(0) = 1, x0 (0) = 0 e si chiami tale soluzione f ;
b) x(0) = 0, x0 (0) = 1 e si chiami tale soluzione g;
c) x(0) = 2, x0 (0) = 3 e si chiami tale soluzione h.
Si noti che, dalla teoria delle equazioni differenziali lineari (a coefficienti non necessa-
riamente costanti), la soluzione generica del problema e data da una combinazione di
f e g; verificare che effettivamente la soluzione h e data da h = 2f 3g, dove 2 = h(0)
e 3 = h0 (0). Si disegni quindi il grafico di 2f 3g e di h nella stessa figura.
F (t, y(t)) = c,
per una qualche funzione F e c R. In tal caso puo essere utile utilizzare il comando
contour per lo studio di tali soluzioni.
Supponiamo ad esempio di voler risolvere lequazione
0 t t2 + 1
y (t) = ;
y(t)ey(t)
68 CAPITOLO 8. EQUAZIONI DIFFERENZIALI
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
y(t) = 1 + sin(t).
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 grafico 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 modificare il precedente caso considerando = 1/ 2; in tal caso la soluzione
sara data da
t
y(t) = 2 cos cos t + sin t;
2
siamo in presenza del fenomeno noto come battimenti, e possiamo visualizzare tale fenomeno
considerando i seguenti comandi;
70 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 grafico del termine forzante, mentre in blu abbiamo il
grafico della soluzione; si nota quindi nei battimenti unoscillazione con ampiezza variabile
me in qualche modo con ampiezza periodica. Si provi come esercizio a considerare differenti
valori di 6= 0 , considerando in particolare valori di sempre piu vicini, ma non uguali,
a quelli di 0 .
t
y(t) = sin(t) + sin(t).
2
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
y(t) = et (1 2t),
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
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 puo utilizzare Matlab per il calcolo approssimato delle derivate di una funzione data;
sostanzialmente, una funzione altro non sara che un vettore di valori. Possiamo quindi rica-
vare il valore approssimato delle derivate semplicemente utilizzando i rapporti incrementali
della funzione.
73
74 APPENDICE A. DERIVAZIONE NUMERICA
cui lunghezza e di uno inferiore rispetto alla lunghezza del vettore di partenza. Per questo
motivo abbiamo dovuto considerare, nel grafico della derivata, il vettore x(1:999).
Come varianti del comando diff si puo considerare il comando diff(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 diff(diff(x)), e servira in seguito per il calcolo delle derivate seconde. Il
comando diff(x,1) coincide con diff(x).
Allo stesso modo, si possono calcolare numericamente le derivate parziali di una funzione
di piu variabili; cos ad esempio, per una funzione di due variabili f (x, y), possiamo ottenere
le seguenti approssimazioni
f f (x + x, y) f f (x, y + y)
(x, y) , (x, y) .
x x y y
2f f (x + 2x, y) 2f (x + x, y) + f (x, y)
2
(x, y) ,
x (x)2
e
2f f (x, y + 2y) 2f (x, y + y) + f (x, y)
2
(x, y) .
y (y)2
mentre la derivata seconda mista sara data da
2f f (x + x, y + y) f (x + x, y) f (x, y + y) + f (x, y)
(x, y) .
xy xy
Come esercizio, si scrivano comandi Matlab che calcolino le derivate seconde di una fun-
zione di due variabili, dove si utilizzi il comando diff(x,2) e diff(y,2) per il calcolo delle
derivate seconde non miste.
Appendice B
Il metodo di integrazione di
Simpson
dove xk = kh, k = 0, . . . , n sono i punti estremi degli intervalli che definiscono 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 verificare una tale formula, confrontandola anche con le somme di Riemann e
con il valore esatto dellintegrale, sullintegrale
Z 2
1
dx
0 1 + x2
75
76 APPENDICE B. IL METODO DI INTEGRAZIONE DI SIMPSON
Appendice C
Consideriamo qui il metodo noto come metodo di Eulero per il calcolo approssimato delle so-
luzioni delle equazioni differenziali del primordine; prendiamo in considerazione lintervallo
[5, 5], n = 40 e il problema ai valori iniziali
0
y (t) = cos(2t + y(t))
y(5) = 4.
Si noti che il metodo si basa semplicemente sulla scrittura della derivata discreta
y(ti+1 ) y(ti )
y 0 (ti ) = cos(2ti + y(ti )).
h
Possiamo anche creare un function mfile per limplementazione del metodo di Eulero; tale
function avra in ingresso la funzionef che compare in y 0 = f (t, y), il punto iniziale t0 e il
punto finale t1 , il dato iniziale y0 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
77
78 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 file 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 definito dallequazione y 0 = 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
differenziali per serie
79
80 APPENDICE D. INTEGRAZIONE DI EQUAZIONI DIFFERENZIALI PER SERIE
Si provi con gradi maggiori, come ad esempio 30 o 100 e si notera che la velocita di calcolo
e comunque elevata.
Esercizio D.1
2
dove = T , in modo tale che
00 a0 X
y (t) + 02 y(t) = b(t) = + [ak cos(kt) + bk sin(kt )] ,
2
k=1
con Z T /2
2
ak = b(t) cos(kt)dt, k 0,
T T /2
Z T /2
2
bk = b(t) sin(kt)dt, k 1.
T T /2
D.2. SERIE DI FOURIER 81
ak bk
k = , k = .
02 k 2 2 02 k 2 2
Se infine esiste m 1 per cui 02 = m2 2 , allora siamo nella situazione in cui va trovata la
soluzione particolare dellequazion2
dove su [, ) la funzione b e data da b(t) = t[0,) (t) + t2 [,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 sara
a0 a1 b1
y(t) = t cos t + t sin t+
2 2 2
X ak bk
+ cos(kt) + sin(kt) .
1 k2 1 k2
k=2
Come esercizio, si scriva in Matlab dei comandi che calcolino i coefficienti di y e si disegni
il grafico della soluzione particoalre cos ottenuta.