Equazione di Poisson.
Alvise Sommariva
Universit`
a degli Studi di Padova
Dipartimento di Matematica
18 maggio 2021
Equazione di Poisson, caso bivariato.
Da
∆u(x
i, y
j) ≈
u(x
i +1, y
j) + u(x
i −1, y
j) + u(x
i, y
j +1) + u(x
i, y
j −1) − 4u(x
i, y
j)
h
2(1)
ricaviamo la discretizzazione dell’equazione
∆u(x , y ) = f (x , y ), (x , y ) ∈ Ω = (0, 1) × (0, 1)
u(x , y ) = g (x , y ), (x , y ) ∈ ∂Ω
(2)
nei punti (x
i, y
j), x
i= ih, y
j= jh, h=1/(n+1)
u(xi +1, yj) + u(xi −1, yj
) + u(xi
, yj +1) + u(xi
, yj −1) − 4u(xi
, yj) = h
2f (xi
, yj),
(3)
per i , j = 1, . . . , n, con le condizioni al contorno
u(x
i, y
j)
=
g (x
i, y
j), i = 0, j = 1, . . . , n
(4)
u(x
i, y
j)
=
g (x
i, y
j), i = n + 1, j = 1, . . . , n
(5)
Equazione di Poisson, caso bivariato.
Il sistema lineare ottenuto pu`
o essere descritto matricialmente. Sia
B la matrice n × n
B =
−4
1
0
. . .
0
1
−4
1
0
. . .
0
1
−4
1
. . .
. . .
. . .
. . .
. . .
. . .
0
. . .
0
1
−4
ed I la matrice identica di ordine n del tipo
I =
1
0
0
. . .
0
0
1
0
. . .
0
0
0
0
. . .
1
.
Equazione di Poisson, caso bivariato.
Allora
se b `
e il vettore ottenuto dai contributi dei termini dovuti a f
e g in (2) e (3),
A la matrice a blocchi
A =
B
I
0
. . .
I
B
I
. . .
. . .
. . .
. . .
. . .
. . .
0
I
B
si ricava che il sistema da risolvere `
e Au = b, usando ad esempio
il metodo di Jacobi, o
Equazione di Poisson: un esempio bivariato.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 P 1 P2 P 3 P4Figura:
Una griglia avente passo h = 1/3 relativamente al quadrato
[0, 1] × [0, 1].
.
Equazione di Poisson: un esempio bivariato.
Facciamo un esempio sulla risoluzione dell’equazione di Poisson via
metodo alle differenze con 5 punti.
Sia Ω = [0, 1] × [0, 1], h = 1/3 e siano
P
i ,j
= (ih, jh), i , j = 0, 1, 2, 3.
E’ chiaro che per
per i = 0 i punti P
0,j
sono sull’asse x = 0 (cio`
e l’asse y ),
per i = 3 i punti P
3,j
sono sull’asse x = 1,
per j = 0 i punti P
i ,0
sono sull’asse y = 0 (cio`
e l’asse x )
per j = 3 i punti P
i ,3
sono sull’asse y = 1.
Equazione di Poisson: un esempio bivariato.
I rimanenti punti P
i ,j, con i , j = 1, 2 sono interni a Ω ed `
e
u(x
i +1, y
j) + u(x
i −1, y
j) + u(x
i, y
j +1) + u(x
i, y
j −1) − 4u(x
i, y
j) = h
2f (x
i, y
j),
(7)
Poniamo ora
b
1:= h
2f (x
1, y
1) − g (x
0, y
1) − g (x
1, y
0),
b
2:= h
2f (x
1, y
2) − g (x
0, y
2) − g (x
1, y
3),
b
3:= h
2f (x
2, y
1) − g (x
3, y
1) − g (x
2, y
0),
b
4; = h
2f (x
2, y
2) − g (x
3, y
2) − g (x
2, y
3),
ordiniamo i punti da sinistra a destra, e dal basso verso l’alto (ordine lessicografico)
P
1= (x
1, y
1), P
2= (x
2, y
1), P
3= (x
1, y
2), P
4= (x
2, y
2),
poniamo u
1= u(x
1, y
1), u
2= u(x
2, y
1), u
3= u(x
1, y
2), u
4= u(x
2, y
2), ricavando
−4u
1+ u
2+ u
3= b
1,
u
1− 4u
2+ u
4= b
2,
u
1− 4u
3+ u
4= b
3,
u
2+ u
3− 4u
4= b
4,
da cui posto A la matrice di Poisson composta da 2 blocchi di ordine 2, basta risolvere
il sistema Au = b per ottenere u(x
1, y
1), u(x
2, y
1), u(x
1, y
2), u(x
2, y
2).
Equazione di Poisson: un esempio bivariato.
Notiamo che la matrice di Poisson calcolata dalla
gallery
di
Matlab `
e M = −A. In effetti:
>> M=g a l l e r y(’ p o i s s o n ’, 2 ) ; >> M=f u l l( M ) M = 4 −1 −1 0 −1 4 0 −1 −1 0 4 −1 0 −1 −1 4 >>
Equazione di Poisson: un esempio bivariato.
Per ogni punto P
k
, bisogna tenere conto nel termine noto della
k-sima equazione del contributo h
2
f (P
k
). Inoltre nella
determinazione dei contributi al termine noto dovuti a g e’ bene
aiutarsi con la griglia in figura.
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 P 7 P8 P9 P 6 P 5 P 4 P 1 P2 P3
Figura:
Griglia avente passo h = 1/4 relativamente a [0, 1] × [0, 1].
.
Equazione di Poisson: una implementazione.
1
Detto Ω = [0, 1] × [0, 1], determinare il termine noto
b
negli
n punti della griglia interni al quadrato e pi´
u in basso
, bisogna
tenere conto del valore della soluzione nel bordo orizzontale in
basso di Ω;
n punti della griglia interni al quadrato e pi´
u in alto
, bisogna
tenere conto del valore della soluzione nel bordo orizzontale in
alto di Ω;
n punti della griglia interni al quadrato e pi´
u a sinistra
, bisogna
tenere conto del valore della soluzione nel bordo verticale a
sinistra di Ω;
n punti della griglia interni al quadrato e pi´
u a destra
, bisogna
tenere conto del valore della soluzione nel bordo verticale a
destra di Ω.
2
Uno dei punti cruciali e’ che nel termine noto della generica k-sima
equazione si tiene conto relativamente al centro (x
i, y
j) della formula a 5
punti della k-sima equazione (risulta k = (j − 1)n + i ), tanto h
2f (x
i, y
j)
Equazione di Poisson: una implementazione.
Salviamo in
poisson5pts.m
la funzione
f u n c t i o n [ x_grid , y_grid , u_grid ]= p o i s s o n 5 p t s ( n , f , g_left , g_right , g_down , g_up )
% INPUT : h =1/( n+1) , f , g l e f t , g r i g h t , g down , g u p d e f i n i s c o n o l ’ e q z . d i P o i s s o n . % OUTPUT : x g r i d , y g r i d , u g r i d : v e t t o r i c h e d e f i n i s c o n o g r i g l i a e s o l u z i o n e .
A=−g a l l e r y(’ p o i s s o n ’, n ) ; A=f u l l( A ) ; % MATRICE DI POISSON .
h =1/( n +1) ; x=(h : h:1−h ) ’ ; y=x ;
% CONTRIBUTI DI ” g ” AL TERMINE NOTO.
x _ l o c=x ; y _ l o c=z e r o s(s i z e( x_loc ) ) ; b_down=f e v a l( g_down , x_loc , y_loc ) ; % b a s s o
x _ l o c=x ; y _ l o c=o n e s (s i z e( x_loc ) ) ; b_up=f e v a l( g_up , x_loc , y_loc ) ; % a l t o
x _ l o c=z e r o s(s i z e( x ) ) ; y_loc=y ; b_left=f e v a l( g_left , x_loc , y_loc ) ; % s i n i s t r a
x _ l o c=o n e s (s i z e( x ) ) ; y _ l o c=y ; b _ r i g h t=f e v a l( g_right , x_loc , y_loc ) ; % d e s t r a % CONTRIBUTO TERMINE NOTO ” g ” : PRIMA E ULTIMA RIGHE
b1=b _ d o w n ; b1 ( 1 )=b1 ( 1 )+b _ l e f t ( 1 ) ; b1 ( n )=b1 ( n )+b _ r i g h t ( 1 ) ; % r i g a i n b a s s o
bn=b _ u p ; bn ( 1 )=bn ( 1 )+b _ l e f t ( n ) ; bn ( n )=bn ( n )+b _ r i g h t ( n ) ; % r i g a i n a l t o % CONTRIBUTO TERMINE NOTO ” g ” : RIGHE INTERMEDIE .
bj = [ ] ; f o r j = 2 : ( n−1)
b j l o c=z e r o s( n , 1 ) ; bjloc ( 1 )=b_left ( j ) ; bjloc ( n )=b _ r i g h t ( j ) ; bj =[ bj ; bjloc ] ; end
b_g =[ b1 ; bj ; bn ] ; % i l c o n t r i b u t o d i ” g ” a l t e r m i n e n o t o e ’ ”−b g ” . % GRIGLIA LESSICOGRAFICA (METODO STANDARD) .
l u n g h e z z a _ x=l e n g t h( x ) ; x_grid = [ ] ; y_grid = [ ] ; f o r i n d e x =1: l u n g h e z z a _ x
x _ g r i d =[ x _ g r i d ; x ] ; y _ g r i d =[ y _ g r i d ; y ( i n d e x )∗ones (s i z e( x ) ) ] ; end
% TERMINE NOTO ” b ”
f g r i d=f e v a l( f , x_grid , y_grid ) ; b_f =(h ˆ 2 )∗fgrid ; b=b_f−b_g ; % t e r m i n e n o t o ” b ” .
u _ g r i d=A\b ; % s o l u z i o n e n e i p u n t i d e l l a g r i g l i a
Equazione di Poisson: una implementazione.
Salviamo in
demopoisson5pts.m
la demo
f u n c t i o n d e m o p o i s s o n 5 p t s ( d e m o _ e x a m p l e ) s w i t c h d e m o _ e x a m p l e c a s e 1 f=@ ( x , y ) z e r o s(s i z e( x ) ) ; g _ d o w n=@ ( x , y ) o n e s (s i z e( x ) ) ; g_up=@ ( x , y ) ones (s i z e( x ) ) ; g _ l e f t=@ ( x , y ) o n e s (s i z e( x ) ) ; g _ r i g h t=@ ( x , y ) ones (s i z e( x ) ) ; s o l u t i o n=@ ( x , y ) o n e s (s i z e( x ) ) ; c a s e 2 f=@ ( x , y ) z e r o s(s i z e( x ) ) ;
g _ d o w n=@ ( x , y ) e x p(p i∗x ) ; g_up=@ ( x , y )−e x p(p i∗x ) ;
g _ l e f t=@ ( x , y ) c o s(p i∗y ) ; g_right=@ ( x , y ) ( (e x p( 1 ) ) ˆp i)∗c o s(p i∗y ) ; s o l u t i o n=@ ( x , y ) (e x p(p i∗x ) ) . ∗c o s(p i∗y ) ; c a s e 3 f=@ ( x , y ) (−2∗(p iˆ 2 ) )∗s i n(p i∗x ) . ∗s i n(p i∗y ) ; g _ d o w n=@ ( x , y ) z e r o s(s i z e( x ) ) ; g_up=@ ( x , y ) z e r o s(s i z e( x ) ) ; g _ l e f t=@ ( x , y ) z e r o s(s i z e( x ) ) ; g _ r i g h t=@ ( x , y ) z e r o s(s i z e( x ) ) ; s o l u t i o n=@ ( x , y ) (s i n(p i∗x ) ) . ∗s i n(p i∗y ) ; o t h e r w i s e f=@ ( x , y ) o n e s (s i z e( x ) ) ; g _ d o w n=@ ( x , y ) z e r o s(s i z e( x ) ) ; g_up=@ ( x , y ) z e r o s(s i z e( x ) ) ; g _ l e f t=@ ( x , y ) z e r o s(s i z e( x ) ) ; g _ r i g h t=@ ( x , y ) z e r o s(s i z e( x ) ) ; s o l u t i o n=@ ( x , y ) (s i n(p i∗x ) ) . ∗s i n(p i∗y ) ; end err = [ ] ; f o r n =[4 8 16 3 2 ]
[ x_grid , y_grid , u_grid ]= p o i s s o n 5 p t s ( n , f , g_left , g_right , g_down , g_up ) ;
s o l _ g r i d=f e v a l( solution , x_grid , y_grid ) ; err (end+1)=max(a b s( sol_grid−u_grid ) ) ; f p r i n t f(’ \n \ t [ n ] : %4.0 f [MAX. ERR . ] : %2.2 e ’, n , err (end) ) ;
Equazione di Poisson: qualit´
a dell’approssimazione.
Implementiamo il metodo sopra descritto, detto
a 5 punti
(cf. (3)).
Risulta importante ricordare la seguente stima dell’errore:
Teorema
Se
1
u `
e soluzione dell’equazione di Poisson (2) ed `
e almeno 4 volte differenziabile
con continuit`
a nel quadrato Ω := [0, 1] × [0, 1],
2
u
hl’approssimazione ottenuta col metodo alle differenze con 5 punti, utilizzando
una griglia G = {(x
i, y
j)} con x
i= i h, y
j= j h, h = 1/(n + 1)
allora
|u(x
i, y
j) − u
h(x
i, y
j)| ≤ ch
2con
c = (1/24)
max
(x ,y )∈Ω∂
4u(x , y )
∂x
4+ max
(x ,y )∈Ω∂
4u(x , y )
∂y
4Ci si aspetta quindi dai test numerici che effettueremo un errore dell’ordine di h
2.
Equazione di Poisson: esempio 1.
Esempio (1)
Approssimare la soluzione
u(x , y ) = 1
dell’equazione di Poisson nel
quadrato unitario Ω = [0, 1] × [0, 1]
(
∂
2u
∂x
2+
∂
2u
∂y
2= 0, (x , y ) ∈ Ω
u(x , y ) = 1, (x , y ) ∈ ∂Ω
(8)
mediante la formula a 5 punti.
Non `
e difficile osservare che
max
(x ,y )∈Ω
∂
4
u(x , y )
∂x
4
= 0, max
(x ,y )∈Ω
∂
4
u(x , y )
∂y
4
= 0
Equazione di Poisson: esempio 1.
Lanciamo da shell il primo esempio della demo, ottenendo
>> d e m o p o i s s o n 5 p t s ( 1 )
[ n ] :
4 [ MAX . ERR . ] :
3 . 3 3 e−16
[ n ] :
8 [ MAX . ERR . ] :
6 . 6 6 e−16
[ n ] :
16 [ MAX . ERR . ] :
3 . 5 5 e−15
[ n ] :
32 [ MAX . ERR . ] :
2 . 5 5 e−15
>>
Come previsto dalla stima, l’errore ´
e dell’ordine precisione di
macchina (in aritmetica esatta sarebbe nullo).
Equazione di Poisson: esempio 2.
Esempio (2)
Approssimare la soluzione
u(x , y ) = exp(π x ) · cos(π y )
dell’equazione di Poisson nel quadrato unitario Ω = [0, 1] × [0, 1]
∂
2u
∂x
2+
∂
2u
∂y
2= 0, (x , y ) ∈ Ω
u(x , 0) = exp(π x ), x ∈ [0, 1]
u(x , 1) = −exp(π x ), x ∈ [0, 1]
u(0, y ) = cos(π y ), y ∈ [0, 1]
u(1, y ) = exp(π) · cos(π y ), y ∈ [0, 1]
(9)
Equazione di Poisson: esempio 2.
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 −30 −20 −10 0 10 20 30Figura:
Soluzione del problema 2.
Equazione di Poisson: esempio 2.
Con qualche conto,
∂
4
u
∂x
4
(x , y )
=
∂
4
u
∂y
4
(x , y )
= π
4
|exp(π x) · cos(π y )|
e si nota subito che per x , y ∈ [0, 1] si ha
π
4
|exp(π x) · cos(π y )|
≤
π
4
max
x ∈[0,1]
exp(π x ) max
x ∈[0,1]
| cos(π y )|
=
π
4
exp(π),
(10)
Equazione di Poisson: esempio 2.
Testiamo i risultati ottenuti in Matlab.
>>
% STIMA ERRORE
>>
f o r m a t
s h o r t e ;
c = 1 8 7 . 8 4 2 8 ; err = [ ] ;
>>
f o r
n =[4 8 16
3 2 ] , h =1/( n+1) ; err (
end+1)=c
∗h ˆ 2 ;
end
>> err ’
% s t i m a
d e l l ’ e r r o r e
p e r n = 4 , 8 , 1 6 . 3 2 .
a n s
=
7 . 5 1 3 7 e+00
2 . 3 1 9 0 e+00
6 . 4 9 9 8 e−01
1 . 7 2 4 9 e−01
>>
% SOLUZIONE NUMERICA ( STIMA CONSERVATIVA ! )
>> d e m o p o i s s o n 5 p t s ( 2 )
[ n ] :
4 [ MAX . ERR . ] :
9 . 7 5 e−02
[ n ] :
8 [ MAX . ERR . ] :
3 . 2 0 e−02
[ n ] :
16 [ MAX . ERR . ] :
9 . 0 5 e−03
[ n ] :
32 [ MAX . ERR . ] :
2 . 4 5 e−03
>>
Come ci si aspettava la maggiorazione `
e realizzata, ma purtroppo come stima `
e
abbastanza conservativa.
Equazione di Poisson: esempio 3.
Esempio (3)
Approssimare la soluzione
u(x , y ) = sin(π x ) sin(π y )
dell’equazione di Poisson nel quadrato unitario Ω = [0, 1] × [0, 1]
∂
2u
∂x
2+
∂
2u
∂y
2= (−2 π
2
) sin(π x ) sin(π y ), (x , y ) ∈ Ω
u(x , 0) = 0, x ∈ [0, 1]
u(x , 1) = 0, x ∈ [0, 1]
u(0, y ) = 0, y ∈ [0, 1]
u(1, y ) = 0, y ∈ [0, 1]
(11)
Equazione di Poisson: esempio 3.
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1 1.2 1.4Figura:
Soluzione del problema 3.
Equazione di Poisson: esempio 2.
Con qualche conto,
∂
4
u
∂x
4
(x , y )
=
∂
4
u
∂y
4
(x , y )
= π
4
|sin(π x) · sin(π y )|
e si nota subito che per x , y ∈ [0, 1] si ha
π
4
|sin(π x) · sin(π y )| |
≤
π
4
(12)
e che in effetti tale massimo si ottiene in P = (1/2, 1/2) ∈ Ω. Quindi
Equazione di Poisson: esempio 3.
Visto che
c ≈ 8.1174
abbiamo
>>% STIMA DELL ’ ERRORE
>> f o r m a t s h o r t e ; c = 8 . 1 1 7 4 ; err = [ ] ;
>> f o r n =[4 8 16 3 2 ] , h =1/( n+1) ; err (end+1)=c∗h ˆ 2 ; end >> err ’ % s t i m a d e l l ’ e r r o r e p e r n = 4 , 8 , 1 6 . 3 2 . a n s = 3 . 2 4 7 0 e−01 1 . 0 0 2 1 e−01 2 . 8 0 8 8 e−02 7 . 4 5 4 0 e−03
>>% SOLUZIONE NUMERICA ( STIMA ABBASTANZA PRECISA ) .
>> d e m o p o i s s o n 5 p t s ( 3 )
[ n ] : 4 [ MAX . ERR . ] : 3 . 0 4 e−02 [ n ] : 8 [ MAX . ERR . ] : 9 . 9 1 e−03 [ n ] : 16 [ MAX . ERR . ] : 2 . 8 3 e−03 [ n ] : 32 [ MAX . ERR . ] : 7 . 5 4 e−04 >>
Rispetto al caso precedente la stima `
e pi`
u precisa, e la ratio di circa 4 ci dice
che la convergenza `
e ancora dell’ordine di h
2.
Il comando reshape (facoltativo)
Un importante comando Matlab `
e
reshape
. Dall’
help
di Matlab
>> h e l p r e s h a p e r e s h a p e R e s h a p e a r r a y .
r e s h a p e( X , M , N ) or r e s h a p e( X , [ M , N ] ) r e t u r n s the M−by−N matrix w h o s e e l e m e n t s are t a k e n c o l u m n w i s e f r o m X . An e r r o r r e s u l t s i f X d o e s not h a v e M∗N elements .
. . . . >>
Il comando, da un vettore
x
di dimensione m · n × 1, produce una
matrice di dimensione m × n, i cui elementi sono tratti da
x
.
Bibliografia
V. Comincioli, Analisi Numerica, metodi modelli applicazioni, Mc Graw-Hill, 1990.