Sei sulla pagina 1di 102

Risoluzione numerica di PDE

Dario A. Bini, Paola Boito, Beatrice Meini


5 maggio 2021

1 Introduzione
Le equazioni differenziali che consideriamo sono del tipo
L[u] = f (1)
dove u(x, y) : Ω → R è la funzione incognita definita sulla chiusura Ω di un
insieme Ω ⊂ R2 aperto e connesso, f (x, y) : Ω → R è una funzione nota e
sufficientemente regolare, L[u] è un operatore differenziale lineare definito da
∂2u ∂2u ∂2u ∂u ∂u
L[u] = A 2
+B +C 2 +D +E + F u, (x, y) ∈ Ω
∂x ∂x∂y ∂y ∂x ∂y
dove A, B, C, D, E, F, f : Ω → R sono funzioni assegnate sufficientemente re-
golari. Con l’espressione “u(x, y) è una funzione sufficientemente regolare” si
intende che la funzione u(x, y) con le sue derivate fino a un certo ordine siano
continue sul dominio di definizione. Nella maggior parte dei casi significativi ci
basta la continuità delle derivate fino al quarto ordine.
L’equazione (1) viene complementata con delle condizioni aggiuntive asse-
gnate sulla frontiera ∂Ω di Ω (dette condizioni al contorno) che verranno spe-
cificate caso per caso e differiscono tra loro a seconda della specificità del pro-
blema. Si assume inoltre che la frontiera ∂Ω sia sufficientemente regolare. Ad
esempio sia formata da una curva di Jordan definita da una applicazione conti-
nua γ(t) : [0, 1] → R2 , chiusa cioè tale che γ(0) = γ(1), e semplice cioè tale che
γ(t1 ) 6= γ(t2 ) per t1 6= t2 a parte il caso dei punti 0, 1. Nei problemi provenienti
dalle applicazioni la frontiera è differenziabile a tratti. Esempi classici sono do-
mini rettangolari, a forma di L, poligoni, domini circolari, ellittici. Ma nessuno
vieta di considerare domini con dei “buchi” come quello in Figura 1

1.1 Classificazione
Premettiamo il seguente lemma che motiva la terminologia usata per la classi-
ficazione delle equazioni differenziali.
Lemma 1 Dati A, B, C ∈ R, l’insieme {(x, y) ∈ R2 : Ax2 + Bxy + Cy 2 = 0}
è una ellisse, parabola o iperbole a seconda che B 2 − 4AC sia minore, uguale o
maggiore di zero.

1
Figura 1: Esempio di dominio Ω

Procediamo allora alla seguente classificazione


Definizione 2 Se le funzioni A(x, y), B(x, y), C(x, y) sono tali che B 2 −4AC <
0 ∀ (x, y) ∈ Ω, l’equazione (1) è detta ellittica, se B 2 − 4AC = 0 ∀ (x, y) ∈ Ω,
l’equazione (1) è detta parabolica, se B 2 − 4AC > 0 ∀ (x, y) ∈ Ω, l’equazione
(1) è detta iperbolica.
In generale la natura dell’equazione può cambiare a seconda del punto (x, y)
considerato del dominio.

1.2 Esempi
Alcuni esempi classici dalle applicazioni:
Problemi ellittici: Operatore di Laplace L[u] = ∆(u), dove

∂2 ∂2
∆(u) = u(x, y) + u(x, y)
∂x2 ∂y 2
Equazione di Laplace ∆(u) = 0, (x, y) ∈ Ω.
Equazione di Poisson ∆(u) = f (x, y), (x, y) ∈ Ω.
Condizioni al contorno di Dirichlet: u(x, y) = g(x, y), (x, y) ∈ ∂Ω, dove ∂Ω
indica la frontiera di Ω.
Condizioni al contorno di Neumann, dove la frontiera ∂Ω di Ω è costituita da
curve differenziabili a tratti:

u(x, y) = g(x, y), (x, y) ∈ ∂Ω (derivata rispetto alla normale alla frontiera)
∂~n
Condizioni al contorno di Robin

α u(x, y) + βu(x, y) = g(x, y), (x, y) ∈ ∂Ω
∂~n
Esempi di domini, Ω = (0, 1) × (0, 1), oppure Ω = {(x, y) : x2 + y 2 < 1}.
Modello fisico del problema di Poisson con condizioni al bordo di Dirichlet:
Ω: insieme racchiuso da una curva chiusa Γ nel piano; u(x, y) è la quota del
punto di coordinate (x, y) di una membrana elastica, in posizione di equilibrio
vincolata a passare per i punti (x, y, g(x, y)), (x, y) ∈ Γ = ∂Ω (filo chiuso nello

2
spazio con proiezione Γ sul piano (x, y)), e soggetta ad una forza f (x, y). Il
modello è valido per superfici “non troppo sghembe” [?].
Problema della bolla di sapone o di Plateau [?]: minimizzare l’area
s  2  2
Z Z
∂u ∂u
A= 1+ + dx dy
∂x ∂y

di una superficie (x, y, u(x, y)), (x, y) ∈ Ω vincolata su una curva chiusa sghemba
nello spazio (x, y, g(x, y)), (x, y) ∈ Γ, dove Γ è la curva chiusa di R2 che racchiude
il dominio Ω ⊂ R2 . L’equazione variazionale di Eulero-Lagrange la cui soluzione
è la u(x, y) che minimizza la superficie, è non lineare:
 2  2
∂2u ∂u ∂u ∂u ∂ 2 u ∂2u ∂u
(1 + ) − 2 + (1 + )=0
∂x2 ∂y ∂x ∂y ∂x∂y ∂y 2 ∂x

ed è approssimata da ∆u = 0, se u(x, y) “non è troppo sghemba”, cioè se le


derivate parziali prime di u(x, y) sono “abbastanza piccole” cosı̀ che l’errore
causato dal rimuovere i quadrati delle derivate prime è trascurabile.
Modelli tridimensionali dell’equazione di Laplace descrivono la pressione
u(x, y, z) di un gas nel generico punto (x, y, z) di un dominio Ω ⊂ R3 racchiuso
da un involucro ∂Ω
∂2u ∂2u ∂2u
+ 2 + 2 =0
∂x2 ∂y ∂z
con condizioni al contorno miste [?].
Altri modelli fisici governati dall’equazione di Laplace riguardano la distribu-
zione della temperatura u(x, y) su una porzione (lastra) di R2 racchiusa da una
curva Γ, o nel caso tridimensionale la distribuzione della temperatura u(x, y, z)
su una porzione di spazio racchiuso da una superficie Γ [?].

Viene considerata una equazione di tipo ellittico anche l’equazione di Sturm-


Liouville che è una equazione differenziale ordinaria con valori ai limiti:
0
− [p(x)u0 (x)] + q(x)u(x) = f (x), x ∈ (a, b)
u(a) = ua , u(b) = ub

dove p(x) > 0.


Problemi parabolici: Equazione del calore

∂ ∂2
γ u(x, t) − u(x, t) = 0, 0 < x < `, t ≥ 0
∂t ∂x2
dove γ > 0 e u : [0, `] × [0, +∞) → R, ` > 0. Condizioni aggiuntive:

u(x, 0) = g(x)
u(0, t) = a(t), u(`, t) = b(t)

a(t), b(t) : [0, +∞) → R, g(x) : [0, `] → R funzioni assegnate.

3
t

0
0 l x

Figura 2: Dominio Ω nel caso dell’equazione del calore: 0 ≤ x ≤ `, 0 ≤ t ≤ tmax .

Modello fisico: u(x, t) è la temperatura al tempo t nel punto x di una sbarret-


ta di metallo di estremi 0, ` di cui è nota la temperatura iniziale g(x), 0 ≤ x ≤ `
(cioè al tempo t = 0), e la temperatura dei punti estremi x = 0, x = ` ad ogni
istante t. La costante γ è tale che γ = cρ/k > 0, dove k è la conducibilità
termica, ρ la densità, c la capacità termica del materiale. Il problema della
temperatura di una sbarretta metallica è un problema di diffusione.
Nel caso di un oggetto bidimensionale Ω (lastra di metallo) con contorno Γ
l’equazione diventa
∂2u ∂2u ∂u
+ 2 −γ = 0.
∂x2 ∂y ∂t
In ambito finanziario il modello di Black-Scholes-Merton, che descrive l’anda-
mento del prezzo di strumenti finanziari, in particolare delle opzioni, si riconduce
alla risoluzione dell’equazione parabolica di Black-Scholes

∂f ∂f 1 ∂2f
rs + + σ 2 s2 2 − rf = 0
∂s ∂t 2 ∂s
in cui f (s(t), t) è il prezzo al tempo t dello strumento finanziario, mentre s = s(t)
è il prezzo del “sottostante”, e r, σ sono parametri. Per maggiori dettagli si veda
https://en.wikipedia.org/wiki/Black%E2%80%93Scholes_model
Problemi iperbolici: Equazione delle onde

∂2 ∂2
u(x, t) − λ u(x, t) = 0, 0 < x < `, t > 0
∂t2 ∂x2
dove λ > 0. Condizioni aggiuntive:

u(x, 0) = g(x)

u(x, t)|t=0 = v(x)
∂t
u(0, t) = 0, u(`, t) = 0

con g(x), v(t) funzioni assegnate.

4
u(x,t)

0 x l

Figura 3: Corda vibrante: u(x, t) è l’ordinata del punto della corda di ascissa x
al tempo t

Modello fisico: u(x, t) è l’ ordinata di un punto di ascissa x che sta su una


corda elastica uniforme sottesa tra i punti (0, 0) e (`, 0) (vedi Figura 1.2. g(x)
è la posizione in cui viene abbandonata la corda all’istante iniziale e v(x) è la
velocita che il punto di ascissa x della corda ha al tempo iniziale. La costante
λ è il rapporto tra la elasticità specifica e la densità di massa.

Problemi in dimensioni più alte (propagazioni di un’onda di una membrana


elastica) portano all’equazione
∂2u ∂2u ∂2u
2
− λ( 2 + 2 ) = 0, (x, y) ∈ Ω.
∂t ∂x ∂y
Lo studio di onde di pressione conduce a equazioni del tipo
∂2u ∂2u ∂2u ∂2u
2
− λ( 2 + + 2 ) = 0, (x, y, z) ∈ Ω.
∂t ∂x ∂x2 ∂z
Osservazione 3 Soluzioni del tipo u(x, y, z, t) = v(x, y, z) cos ωt in cui tutti i
punti oscillano con medesima frequenza e fase esistono se
∂2v ∂2v ∂2v ω2
2
+ 2 + 2 = − v, (x, y, z) ∈ Ω
∂x ∂y ∂z λ
v(x, y, z) = 0, (x, y, z) ∈ ∂Ω.
Questo è un problema di autovalori per un operatore di tipo ellittico.
Un’altra classe di equazioni differenziali che si incontrano nelle applicazioni
sono le equazioni lineari del trasporto
∂u(x, t) ∂u(x, t)
−c = f (x, t).
∂t ∂x
Nel caso omogeneo in cui f (x, t) è la funzione nulla, la soluzione generale è data
da u(x, t) = g(x + ct) dove g(x) = u(x, 0). Questo modello differenziale descrive
il trasporto di un onda g(x) con velocità c.
Problemi di trasporto con diffusione (advection – diffusion, convection –
diffusion) sono descritti da equazioni paraboliche del tipo
∂u(x, t) ∂u(x, t) ∂ 2 u(x, y)
+c −D = 0,
∂t ∂x ∂x2

5
con condizioni iniziali u(x, 0) = g(x) con g(x) funzione assegnata. Il problema è
dominato dal trasporto se c >> D, mentre è dominato dalla diffusione se D >>
c. Il problema può essere trattato nel caso multidimensionale in cui la derivata
prima rispetto ad x è sostituita da una combinazione lineare delle derivate prime
rispetto a xi e la derivata seconda da una combinazione lineare delle derivate
seconde rispetto a xi . Per maggiori dettagli si rimanda alla pagina https:
//en.wikipedia.org/wiki/Convection%E2%80%93diffusion_equation

2 Metodi numerici di risoluzione


Raramente è possibile descrivere la soluzione di un problema differenziale, nel
caso essa esista, in termini di funzioni elementari. È quindi necessario costruire
dei metodi numerici per approssimare la soluzione con precisione arbitraria.
Possiamo classificare i metodi di risoluzione numerica nelle seguenti classi.
Per semplicità diamo una descrizione sommaria in cui la funzione incognita u(x)
è intesa della sola variabile x e definita su [0, 1], l’operatore differenziale è L[u]
e l’equazione differenziale è L[u] = f con condizioni al contorno di Dirichlet
omogenee. Svilupperemo più in dettaglio il primo di questi metodi per cui si fa
riferimento alle pubblicazioni [?], [?], [?], [?] . Rimandiamo alle pubblicazioni
[?], [?], [?], [?] per maggiori dettagli sugli altri approcci. Per le nozioni di algebra
lineare numerica facciamo riferimento al libro [?].

1. Differenze finite: Fissato un intero n > 0 la funzione incognita u(x) viene


sostituita con un insieme finito di valori ui = u(xi ), i = 0, 1, . . . , n + 1,
che essa assume in un insieme assegnato di punti x0 , . . . , xn+1 equispa-
ziati nel dominio con passo h = 1/(n + 1). L’operatore differenziale L
viene approssimato (discretizzato) da un operatore lineare Ln a dimen-
(n)
sione finita (matrice) tale che (Ln (u0 , . . . , un+1 ))i = L[u]|x=xi + hp τi ,
(n)
dove τi è limitato superiormente da una costante indipendente da n e
p è un intero positivo. L’equazione L[u] = f viene sostituita dal sistema
lineare Ln ((v0 , . . . , vn+1 )) = (f (x0 ), . . . , f (xn )). La soluzione (v1 , . . . , vn )
sotto certe ipotesi approssima bene i valori (u1 , . . . , un ) nel senso che
maxi |vi − u(xi )| converge a zero se n → ∞.
Questo è un approccio “alla Matlab”. Infatti, quando in Matlab si vuole
tracciare il grafico di una funzione assegnata u(x) sull’intervallo [a, b] viene
costruita una griglia di punti equidistanziati x = [a : h : b]; distanziati di
un passo h e poi viene tracciata la funzione calcolata su questi punti col
comando plot(x, u(x)).
2. Metodo di Galerkin: Si ambienta il problema in uno spazio di Hilbert H
di funzioni su cui è definito l’operatore differenziale e a cui la soluzione
appartiene. L’idea si basa sul fatto che se L[u] = f allora per ogni v ∈ H
vale hL[u] − f, vi = 0.
Si sceglie un insieme di funzioni ϕi ∈ H, i = 1, 2, . . ., linearmente in-
dipendenti e si approssima la soluzione con una combinazione lineare

6
finita
n
X
vn (x) = αi ϕi (x).
i=1

Ad esempio, per un dominio [a, b], e le condizioni al contorno sono di


Dirichlet omogenee, le funzioni ϕi (x), possono essere polinomi ortogonali
oppure funzioni spline che verificano
Pn le condizioni al contorno omogenee.
Fra tutte le funzioni vn (x) = i=1 αi ϕi (x) si cerca quella per cui il residuo
f − L[v] è ortogonale a tutte le funzioni di Vn =span(ϕ1 , . . . , ϕn ) ⊂ H.
Quindi si impone la ortogonalità del residuo rispetto a un insieme di fun-
zioni “test” assegnate in Vn , ad esempio le stesse funzioni ϕi . Ciò conduce
ad un sistema di equazioni lineari. Nel caso in cui le funzioni test siano le
ϕi stesse il sistema diventa
n
X
hϕi , L[ϕj ]iαj = hf, ϕi i, i = 1, . . . , n. (2)
j=1

Se le funzioni ϕi sono autofunzioni dell’operatore lineare L[·] che soddi-


sfano le condizioni al contorno omogenee allora la matrice del sistema è
diagonale. Scegliendo funzioni spline a supporto compatto si ottiene un
sistema con matrice a banda.
Come nel caso dell’approssimazione lineare di funzioni un problema im-
portante è la determinazione di un insieme di funzioni ϕi , i = 1, 2, . . . , per
cui kvn − uk → 0 e tale che il sistema lineare finito sia di facile risoluzione.

3. Metodo di Rayleigh-Ritz, elementi finiti: Anche qui si ambienta il proble-


ma in uno spazio di Hilbert H. Si fa l’ipotesi che l’operatore lineare L[·]
sia autoaggiunto, cioè hL[v], wi = hv, L[w]i per ogni v, w ∈ H e coerci-
tivo, cioè tale che hv, L[v]i ≥ γhv, vi per ogni v ∈ H, dove γ > 0 è una
costante opportuna. In questo modo si riesce a riformulare il problema
come problema di minimo di un funzionale. Vale cioè u ∈ H è soluzione
se e solo se u minimizza il funzionale F (v) = 12 hv, L[v]i − hv, f i. Infatti
minimizzare questo funzionale equivale a minimizzare kv − ukL dove, per
1
la coercitività di L, l’applicazione v → kvkL := hv, L[v]i 2 è una norma
su H, detta norma in energia. Tale norma è indotta dal prodotto scalare
hu, viL := hu, L[v]i. Infatti vale

kv − uk2L =hv − u, L[v] − f i = hv, L[v]i − hv, f i − hu, L[v]i + hu, f i


=hv, L[v]i − 2hv, f i + hu, f i
=2F (v) + hu, f i

e l’ultimo addendo è costante


Come nel metodo di P Galerkin, la soluzione si approssima come combina-
zione lineare v(x) = i αi ϕi (x) di funzioni ϕi (x). Il problema di minimo
del funzionale trattato in termini discreti, cioè imponendo che il gradiente

7
Figura 4: Spline cubica a supporto compatto

rispetto agli αi sia nullo, o trattato con le tecniche gia viste nell’approssi-
mazione di funzioni, imponendo cioè l’ortogonalità, col prodotto scalare in
energia, del resto u − v allo spazio Vn generato dalle funzioni ϕi , conduce
ad un analogo sistema lineare finito con matrice di elementi hϕi , L[ϕj ]i.
Nella tecnica degli elementi finiti il dominio viene discretizzato suddividen-
dolo in elementi che possono essere segmenti di varia ampiezza, o, nel caso
bidimensionale, in triangoli, e imponendo che ciascuna ϕi sia non nulla
solo in pochi di questi elementi in modo che la matrice del sistema sia più
sparsa possibile. Un esempio di scelta delle ϕi (x) è costituito dalle fun-
zioni spline ottenute discretizzando l’intervallo in sotto-intervalli [xi , xi+1 ]
di ampiezza h e traslando, centrandola nei vari punti xi , la particolare
funzione spline cubica a supporto compatto definita da
 1
3

 6 (2 + t) , −2 < t ≤ −1

 1 2 3
 6 (4 − 6t − 3t ) −1 < t ≤ 0



1
s(x) = 6 (4 − 6t2 + 3t3 ) 0<t≤1 dove t = x/h.

1 3
− t)

6 (2 1<t<2





0 altrove

Un grafico di questa funzione è riportato in figura 4 In questo caso la


matrice del sistema è a banda con 7 diagonali non nulle.
Il grafico è stato ottenuto con la function di Matlab riportata nel Listing
1. L’uso degli elementi finiti permette di scegliere discretizzazioni non
uniformi a seconda delle necessità.
4. Metodo di collocazione: AncheP
in questo caso la soluzione viene approssi-
mata con una funzione v(x) = i αi ϕi (x) combinazione lineare di funzioni

8
Listing 1: Script di Matlab per tracciare il grafico della funzione B-Spline
function [s,x]=bspline(n)
% function [s,x]=bspline(n)
% calcola e traccia il grafico della B-spline cubica
% n: numero di punti in cui viene discretizzato ciascuno dei
sottointervalli
% x: valori dei punti in cui la spline viene campionata
% s: valori della spline nei punti x
h = 1/(n+1);
x0 = [-3+h:h:-2];
x1 = x0+1;
x2 = x1+1;
x3 = x2+1;
x4 = x3+1;
x5 = x4+1;
x = [x0,x1,x2,x3,x4,x5];
s0 = x0*0;
s1 = (1/6)*(2+x1).^3;
s2 = (1/6)*(4-6*x2.^2-3*x2.^3);
s3 = (1/6)*(4-6*x3.^2+3*x3.^3);
s4 = (1/6)*(2-x4).^3;
s5 = 0*x5;
s = [s0,s1,s2,s3,s4,s5];
plot(x,s,’LineWidth’,3)
end

9
Figura 5: Copertina e Primo capitolo del libro “Istitutiones Calculi
Differentialis” di Leonardo Eulero pubblicato nel 1787.

base ϕi (x). Si impone che il residuo f − L[v] si annulli in alcuni punti spe-
ciali
Pn del dominio. Cioè si interpola la funzione f con funzioni del tipo
i=1 αi L[ϕi ]. Alla luce delle considerazioni fatte sulle costanti di Lebe-
sgue e sulla relazione che intercorre tra l’errore di interpolazione l’errore
di migliore approssimazione uniforme, nel caso si approssimi con polino-
mi è conveniente scegliere i nodi di collocazione in modo da contenere la
crescita delle corrispondenti costanti di Lebesgue. Ad esempio i nodi di
Chebyshev se il dominio è [−1, 1] sono una scelta adatta.

3 Il metodo delle differenze finite


Il termine “differenze finite” viene usato da Leonardo Eulero nella stessa acce-
zione moderna. In figura 5 viene riportata la pagina del primo capitolo del libro
“Istitutiones Calculi Differentialis” del 1787 in cui Eulero introduce il concetto
di differenze finite.
Descriviamo il metodo delle differenze finite partendo dal semplice problema
modello
u00 (x) = f (x), x ∈ (0, 1)
(3)
u(0) = a, u(1) = b
Si osserva che se f (x) : [0, 1] → R è continua allora la soluzione di (3) esiste

10
ed è unica. Infatti, integrando l’espressione u00 (x) = f (x) si ha
Z x
u0 (x) = f (t)dt + γ1
0

Integrando nuovamente si ottiene


Z xZ s
u(x) = f (t)dtds + γ1 x + γ2
0 0

Le costanti γ1 e γ2 vengono determinate imponendo le condizioni al contorno.


Si osserva anche che se f (x) è di classe C 2 [0, 1] allora la soluzione u(x) è di
classe C 4 [0, 1]. La regolarità della soluzione ha un ruolo molto importante nel
metodo delle differenze finite. le elaborazioni che svolgeremo nel seguito so-
no valide nell’ipotesi in cui la soluzione del problema differenziale esista e sia
sufficientemente regolare.
Prima di trattare il metodo introduciamo alcune formule utili.

4 Discretizzazione degli operatori differenziali


4.1 Alcune formule
Sia f (x) : [a, b] → R e si assuma che f ∈ C 4 [a, b], e x, x + h, x − h ∈ [a, b]. Allora
vale
h2 00 h3 (3) h4 (4)
f (x + h) = f (x) + hf 0 (x) + 2 f (x) + 6 f (x) + 24 f (ξ)
(4)
h2 00 h3 (3) h4 (4)
f (x − h) = f (x) − hf 0 (x) + 2 f (x) − 6 f (x) + 24 f (η)

dove ξ ∈ (x, x + h), η ∈ (x − h, x). Sommando le due formule (4) si ottiene

h4 (4)
f (x + h) + f (x − h) = 2f (x) + h2 f 00 (x) + (f (ξ) + f (4) (η))
24
da cui
1 1
f 00 (x) = (f (x − h) − 2f (x) + f (x + h)) + τ h2 , |τ | ≤ max |f (4) (x)|. (5)
h2 12 x∈[a,b]

Similmente sottraendo entrambi i membri degli sviluppi in serie (4) arrestati al


termine cubico, si ottiene
1 1
f 0 (x) = (f (x + h) − f (x − h)) + σh2 , |σ| ≤ max |f (3) (x)|. (6)
2h 6 x∈[a,b]

La (6) è detta differenza centrata . Una approssimazione più scadente della


derivata prima che coinvolge i valori f (x) e f (x + h) è data da
1 1
f 0 (x) = (f (x + h) − f (x)) − hf 00 (ξ), ξ ∈ (x, x + h) (7)
h 2

11
ed è detta differenza in avanti. Similmente l’espressione
1 1 ˆ ξˆ ∈ (x − h, x)
f 0 (x) = (f (x) − f (x − h)) − hf 00 (ξ),
h 2
ottenuta prendendo −h al posto di h è detta differenza all’indietro. Approssi-
mazioni più precise si possono ottenere se f (x) ha maggior regolarità svolgendo
sviluppi in serie di ordine più elevato.

4.2 Discretizzazione del problema modello


Si consideri l’equazione (3). Sia n > 1 un intero, h = 1/(n + 1), xi = ih,
i = 0, 1, . . . , n + 1. Dalla (5) si ottiene
1
(u(xi−1 ) − 2u(xi ) + u(xi+1 )) = f (xi ) − τi h2 , i = 1, . . . , n,
h2 (8)
u(x0 ) = a, u(xn+1 ) = b
dove
1 (4)
τi = (u (ξi ) + u(4) (ηi )), ξi ∈ (xi , xi+1 ), ηi ∈ (xi−1 , xi )
24
per cui
1 1
|τi | ≤ max |u(4) (x)| = max |f 00 (x)|. (9)
12 x∈[0,1] 12 x∈[0,1]
La formula fornisce una approssimazione dell’operatore differenziale L[u] =
u00 con l’operatore alle differenze finite Ln : Rn+2 → Rn
1
Ln (u) = (ui−1 − 2ui + ui+1 )i=1:n (10)
h2
dove abbiamo posto ui = u(xi ) e abbiamo indicato u = (ui )i=0:n+1 . In questo
modo l’espressione (8) prende la forma
Ln (u) = f − h2 τ (n) , (11)
(n)
dove si è posto f = (f (xi ))i=1:n , τ (n) = (τi )i=1:n .
Per maggior rigore formale e per ricordare che le quantità introdotte dipen-
(n)
dono da n, avremmo dovuto scrivere hn al posto di h, xi al posto di xi e
(n) (n)
ui al posto di ui cosı̀ come u(n) , x(n) e f al posto rispettivamente di u x
e f . Però, per non appesantire la notazione, eviteremo di riportare l’indice n
fintanto che questo non crei ambiguità. Scriveremo quindi u al posto di u(n) .
Comunque è utile osservare che il vettore u è di fatto da intendersi come una
successione di vettori u(n) .
L’operatore Ln (u) è individuato dalla matrice tridiagonale n × (n + 2)
 
−1 2 −1
1  −1 2 −1 
Ln = − 2 
 
h  . .. . .. . .. 

−1 2 −1

12
per la quale useremo lo stesso simbolo Ln . Per questo possiamo usare la
notazione Ln u per denotare Ln (u).
Il vettore di componenti L[u]|x=xi − (Ln (u))i = h2 τi è detto errore locale di
dicretizzazione.
In generale, l’approssimazione alle differenze Ln (u) che discretizza l’opera-
tore differenziale L[u] si dice consistente di ordine hp se esiste una costante
γ > 0, indipendente da n, tale che maxi |L[u]|x=xi − (Ln (u))i | ≤ γhp per ogni
n > 1. Per questa definizione l’approssimazione (10) dell’operatore L[u] = u00 è
consistente di ordine h2 .
L’equazione differenziale (3) con condizioni al contorno di Dirichlet, ristretta
ai valori ui = u(xi ) si può allora riscrivere come
  u1  
f1
 
τ1
 
a

2 −1

 .. ..  u2   f2   τ2   0 
1  −1 . .  ..
 
..
 
2 ..

1 

..

− 2  = −h  − 2 
    
. . . .

h .. ..   h 
 
. .
     
 −1  un−1
   fn−1   τn−1   0 
−1 2 un fn τn b

essendo u0 = a, un = b, dove fi = f (xi ).


Denotiamo con
 
2 −1
. ..
1  −1 . .
 
. 
An = − 2  
h  .. .. 
 . . −1 
−1 2

la matrice del sistema precedente. In questo modo possiamo scrivere il sistema


come
1
An u = f − h2 τ (n) − 2 (ae1 + ben ) (12)
h
dove abbiamo indicato con e1 e en il primo e l’ultimo vettore della base cano-
nica di Rn e, con abuso di notazione abbiamo indicato ancora con u il vettore
di componenti u1 , . . . , un . L’abuso di notazione non genera ambiguità poiché
quando u è moltiplicato per la matrice Ln è inteso u = (u0 , u1 , . . . , un+1 ) mentre
quando è moltiplicato per An è inteso u = (u1 , . . . , un ).
Rimuovendo la componente dell’errore locale di discretizzazione in (12) si
ottiene il sistema
1
An v = f − 2 (ae1 + ben ). (13)
h
Si osserva che la matrice An del sistema (13) è dominante diagonale e irri-
ducibile, quindi, per il terzo teorema di Gerschgorin è non singolare. Il sistema
(13) ha allora una sola soluzione v = (vi ). Si osservi ancora che il termine noto
è costituito da due componenti additive: la prima dipende dalla funzione f (x),
la seconda dipende dalle condizioni al contorno.

13
Per valutare l’accuratezza dell’approssimazione v = (vi ) ottenuta risolvendo
il sistema (13) al posto del sistema (12) che ci fornirebbe la soluzione esatta va-
(n)
lutata nei punti della discetizzazione, si introduce l’errore globale (n) = (i ) ∈
Rn , definito da (n) = v − u.
Ci interessa dimostrare che per n → ∞ la successione k(n) k∞ converge a
zero. In questo modo, scegliendo valori di n arbitrariamente grandi, possiamo
meglio approssimare i valori di u(x) in un insieme di punti sempre più fitti e in
modo sempre più accurato.
Sottraendo la (12) dalla (13) si ha
    
τ1

2 −1 1
 ..  2   τ2 
1  −1 2 .   .. 

2
 
..  .
− 2  .  = h
 . 
 
h  .. ..
   
. . −1    τn−1 
n−1
 
−1 2 n τn

cioè
An (n) = h2 τ (n) . (14)
Quindi una espressione esplicita dell’errore globale è data da

(n) = h2 A−1
n τ
(n)
.

Se k · k è una norma vettoriale su Rn allora dalla relazione precedente si


ottiene
k(n) k ≤ h2 kA−1
n k · kτ
(n)
k (15)
dove kA−1n k è la norma matriciale indotta.
In particolare, se kAn k è limitata superiormente da una costante σ indipen-
dente da n allora k(n) k ≤ σh2 kτ (n) k e l’errore globale in norma converge a zero
con lo stesso ordine di convergenza dell’errore locale.

Definizione 4 Sia k · k una norma su Rn . Lo schema alle differenze finite dato


dal sistema lineare An v = f si dice stabile in norma k · k se kA−1
n k è limitato
superiormente da una costante indipendente da n. Si dice convergente in norma
k · k con ordine hp se lim k(n) k = 0 con ordine hp .

Se nella definizione di stabilità o di convergenza si omette il termine “in


norma k · k” allora si intende implicitamente che la stabilità o la convergenza è
data in norma infinito.
Se un metodo consistente di ordine hp è anche stabile in norma k · k allora
esso è convergente con lo stesso ordine hp in norma k · k. Questa proprietà che
può essere dimostrata sotto ipotesi generali, verrà da noi considerata caso per
caso per i problemi modello studiati.

14
4.3 Analisi in norma 2
Per il problema modello è abbastanza facile fare una analisi della convergenza
in norma 2. Nel seguito indichiamo con tridn (a, b, c) la matrice tridiagona-
le n × n con elementi uguali a b sulla diagonale principale, uguali a c sulla
sopra-diagonale e uguali ad a sulla sotto-diagonale. Useremo la stessa nota-
zione tridn (A, B, C) per denotare la matrice tridiagonale a blocchi con blocchi
A, B, C di dimensione m × m. Nel caso in cui gli elementi (o i blocchi) lungo le
diagonali non fossero costanti useremo la notazione tridn (ai , bi , ci ) per denotare
che la matrice tridiagonale ha sulla i-esima riga gli elementi ai , bi e ci dove
bi è l’elemento diagonale, ci è elemento sopra-diagonale mentre bi è l’elemento
sotto-diagonale. Similmente definiamo trid(Ai , Bi , Ci ). Indichiamo inoltre con
diagn (d1 , . . . , dn ) o più semplicemente con diag(d1 , . . . , dn ) la matrice diagonale
con elementi diagonali d1 , . . . , dn .
Si ricordano i seguenti risultati che si possono dimostrare utilizzando un pò
di trigonometria
Teorema 5 Vale Sn tridn (1, 0, 1)Sn = diag(2c1 , . . . , 2cn ), dove ci = cos(iπ/(n+
1)),
q e dove Sn = (si,j ) è la matrice ortogonale simmetrica di elementi si,j =
2 π
n+1 sin(ij n+1 ).
(n)T
Inoltre vale RnT (tridn (1, 0, 1) + en en )Rn = diag(2ĉ1 , . . . , 2ĉn ), dove ĉi =
π
cos((2i − 1) 2n+1 ), e dove Rn = (ri,j ) è una matrice ortogonale di elementi
q
4 π (n)T
ri,j = 2n+1 sin(i(2j − 1) 2n+1 ). Infine la matrice tridn (1, 0, 1) + e1 e1 ha gli
(n)T
stessi autovalori di tridn (1, 0, 1) + en en in quanto le due matrici sono simili.
Dim. Cerchiamo autovettori del tipo v = (vi ), vi = sin(iθ) per un opportuno θ.
Posto w = tridn (1, 0, 1)v, si ha w1 = sin(2θ) = 2 cos θ sin θ = (2 cos θ)v1 , mentre
wi = sin((i−1)θ)+sin((i+1)θ) = 2 cos θ sin(iθ) = (2 cos θ)vi , per i = 2, . . . , n−1.
Infine wn = sin((n − 1)θ) = sin(nθ) cos θ − cos(nθ) sin θ. Per cui v è autovettore
corrispondente a λ = 2 cos θ se anche per wn vale wn = (2 cos θ)vn . Imponendo
quest’ultima condizione si ha cos(nθ) sin θ + cos θ sin(nθ) = 0 che è verificata
se e solo se sin((n + 1)θ) = 0 cioè se e solo se θ = πj/(n + 1) con j intero.
Quindi λj = 2 cos(πj/(n + 1)) è autovalore per j = 1, . . . , n corrispondente
(j)
all’autovettore
p v (j) di componenti vi = sin(πij/(n + 1)), j = 1, . . . , n. Il
fattore 2/(n + 1) rende gli autovettori di norma euclidea unitaria.
(n)T
Analogamente si procede per la matrice tridn (1, 0, 1) + en en . In que-
sto caso cambia solo la condizione su wn che diventa sin((n − 1)θ) + sin(nθ) =
2 cos θ sin(nθ), cioè sin(nθ) cos θ −sin θ cos(nθ)+sin(nθ) = 2 cos θ sin(nθ) e quin-
di sin(nθ) = cos θ sin(nθ) + sin θ cos(nθ). Quest’ultima espressione può essere
equivalentemente scritta come sin(nθ) = sin((n + 1)θ). Poichè sin α = sin β se
α + β è multiplo dispari di π, si ottiene θ = (2k − 1)π/(2n + 1). 

Segue che per la matrice tridiagonale tridn (−1, 2, −1) vale la relazione

S tridn (−1, 2, −1) S = diag(2 − 2c1 , . . . , 2 − 2cn ), ci = cos
n+1

15
Da questa proprietà segue che
π
kA−1 2 2
n k2 = h / min(2 − 2ci ) = h /(2 − 2 cos ).
i n+1
Tenendo presente che 1 − cos x = x2 /2 + O(x4 ) si ha
kA−1 2 2
n k2 = 1/π + O(h ).

Cioè kA−1
n k è limitata superiormente da una costante indipendente da n. Più
precisamente, arrestando lo sviluppo di cos x al quarto termine si ha 1 − cos x =
1 4
x2 /2 − 24 x cos ξ con 0 < ξ < x, e poiché 1 > cos x, ne segue
x2 x2
1 − cos x ≥ (1 − ).
2 12
Per cui, posto x = πh, vale anche
h2 1 h2 1 1 1 1 1
kA−1
n k2 = ≤ x2 x2
= ≤ 2 + h2 ,
2 1 − cos x 2 2 (1 − 12 )
π 2 1 − x122 π 6
1
dove per l’ultima maggiorazione si è usata la disuguaglianza 1−t ≤ 1 + 2t valida
se t ≤ 1/2.
Introduciamo ora la norma
n
1 X 1
kuk = √ ( u2i )1/2 = √ kuk2 ,
n + 1 i=1 n+1
e osserviamo che la norma matriciale indotta da questa norma coincide con la
norma 2. Inoltre è facile verificare che
Z 1
lim kuk = ( u(x)2 dx)1/2
n→∞ 0
1
Pn 2
R1
essendo n+1 i=1 ui l’approssimazione di 0 u(x)2 dx mediante la formula dei
rettangoli.
Dalla (9) segue che

n 1 1 1
kτ (n) k ≤ √ max |u(4) (x)| < max |u(4) (x)| = max |f 00 (x)|.
n + 1 12 12 12
Si ottiene allora da (15)
1 2
k(n) k < h max |f 00 (x)| + O(h4 ).
12π 2 x∈[0,1]
Cioè l’errore globale valutato nella norma k · k converge a zero come h2 . Questo
(n)
non implica che k√ k∞ converge a zero come h2 . Poiché vale kuk∞ ≤ kuk2 ,
si ha che kuk∞ ≤ n + 1kuk, quindi
1 3
k(n) k∞ < 2
h 2 max |f 00 (x)| + O(h4 ).
12π x∈[0,1]

Si ha quindi convergenza anche in norma ∞ ma la maggiorazione che otteniamo


in questo modo non è stretta. Infatti si può dimostrare che vale k(n) k∞ ≤ γh2 ,
per una opportuna costante γ. Questo si dimostra nella prossima sezione.

16
4.4 Analisi in norma ∞
Per valutare la convergenza dello schema alle differenze in norma infinito è
sufficiente valutare la norma infinito della matrice A−1
n . Mostriamo due ana-
lisi diverse ma equivalenti: un’analisi puramente matriciale e una basata sulla
proprietà del massimo.
Osserviamo innanzitutto che la matrice −An può essere scritta come
2 1
−An = (I − Bn ), Bn = tridn (1, 0, 1).
h2 2
Ed essendo gli autovalori di tridn (1, 0, 1) compresi
P∞ tra i 0 e 2, la matrice Bn
ha raggioP spettrale ρ(B) < 1 per cui la serie i=0 B è convergente e vale

−A−1n = i=0 Bn ≥ 0, dove la nonnegatività segue dal fatto che Bn ≥ 0. In
effetti, usando l’irriducibilità di Bn si può dimostrare che −A−1n > 0. Questa
proprietà discende anche dal fatto che la potenza k-esima di tridn (1, 0, 1) ha uni
sulla k-esima sopra e sotto diagonale per k = 1, 2, . . . , n − 1.
La non negatività di −A−1 n è fondamentale per dimostrare la stabilità del
metodo delle differenze finite.

4.4.1 Analisi matriciale


Dalla non negatività di −A−1 −1
n e dalla definizione di k · k∞ segue che kAn k∞ =
kAn ek∞ . Quindi ci basta studiare la norma infinito del vettore w = A−1
−1
n e. Ci
interessa allora trovare un vettore w tale che Aw = e. Poiché A rappresenta
una derivata seconda sul discreto, si intuisce che il vettore w è legato alla di-
scretizzazione della funzione s(x) = 21 x2 che ha derivata seconda identicamente
uguale a 1. Per questo facciamo le seguenti osservazioni.
Si considerino le tre le funzioni f1 (x) = 1, f2 (x) = x, f3 (x) = 21 x2 e le loro
controparti discrete date dai tre vettori di Rn+2 che si ottengono valutando le
funzioni nei punti xi = ih della discretizzazione cioè

f1 (x) = 1 f 1 = (1, . . . , 1)T ,


f2 (x) = x ←→ f 2 = h(0, 1, 2, . . . , n + 1)T , (16)
2
f3 (x) = 12 x2 f 3 = h2 (0, 1, 4, . . . , (n + 1)2 )T

L’operatore derivata seconda è tale che L[1] = 0, L[x] = 0, L[ 12 x2 ] = 1. Lo


stesso comportamento lo mantiene l’operatore discreto Ln . Infatti si verifica
facilmente che
Ln f 1 = 0
Ln f 2 = 0 (17)
T
Ln f 3 = (1, . . . , 1)

17
essendo le componenti dei tre prodotti date rispettivamente da
1
(1 − 2 + 1) = 0
h2
1
((i − 1) − 2i + (i + 1)) = 0
h
1
[(i − 1)2 − 2i2 + (i + 1)2 ] = 1.
2
Si osservi che la proprietà (17) discende anche dal fatto che l’errore locale di
discretizzazione h2 τi è proporzionale alla derivata quarta della funzione calco-
lata in un opportuno punto ξi , essendo la derivata quarta di ciascuna delle tre
funzioni 1, x, 12 x2 nulla.
Ora denotiamo i tre vettori di Rn costituiti dalla “parte interna” dei tre
vettori f 1 , f 2 , f 3 in (16) con

e = (1, 1, . . . , 1)T ,
p = h(1, 2, 3, . . . , n)T , (18)
1
s = h2 (1, 4, 9, . . . , n2 )T ,
2
e denotiamo en = (0, . . . , 0, 1)T , e1 = (1, T
 10, . . . , 0) , il1 primo
 e l’ultimo vettore
n
della base canonica di R . Poiché Ln = h2 e1 | An | h2 en , dalla (17) si deduce
che
An e = −(n + 1)2 (e1 + en ),
An p = −(n + 1)2 en , (19)
1
An s = e − (n + 1)2 en ,
2
che dà An s = e + 12 An p. Da cui, moltiplicando per A−1
n si ricava

1
A−1
n e = s − p.
2
Dunque si ha
1 1
kA−1 −1
n k∞ = kAn ek∞ = max |(hi)2 − hi| ≤ (20)
2 i=1:n 8
dove l’uguaglianza vale se n è dispari per i = (n + 1)/2. Da cui si deduce che
1
kA−1
n k∞ ≤ .
8
Per la norma infinito dell’errore globale risulta allora dalla (15) che
1 2 (n) 1 2
k(n) k∞ ≤ h kτ k∞ ≤ h max |u(4) (x)|.
8 96 0≤x≤1

18
Osservazione 6 In questo approccio sono stati cruciali due proprietà: la pri-
ma è che −A−1 n ≥ 0 per cui kA−1 −1
n k∞ = kAn ek∞ ; la seconda è che An e
−1

è esprimibile in termini di vettori noti facilmente limitabili in norma. La se-


conda proprietà può essere indebolita chiedendo la conoscenza di un vettore
v = (v)i ∈ Rn tale che 0 ≤ vi ≤ δ, con δ > 0 costante indipendente da n, per
cui An v ≥ γe con γ > 0 costante indipendente da n. L’espressione di un vettore
con queste caratteristiche può essere dedotta dalla conoscenza di una funzione
v(x) > 0 per cui L[v(x)] è limitata dal basso da una costante.

Osservazione 7 Si noti che dalla prima delle (19) si ha

−A−1 2
n (e1 + en ) = h e. (21)

Se v = αe1 + βen , poiché |v| ≤ max{|α|, |β|}(e1 + en ), e poiché −A−1 n ≥ 0,


per la monotonia della norma infinito dalla relazione (21) si ha k − A−1n vk∞ ≤
max{|α|, |β|}kA−1
n (e 1 + en )k = max{|α|, |β|}h 2
kek ∞ = max{|α|, |β|}h2
.
Come conseguenza di questo fatto si deduce che nel sistema An x = b una
perturbazione nella prima o nell’ultima componente di b dell’ordine di δ produce
una variazione nella soluzione del sistema dell’ordine di h2 δ.

Un approccio similare per dare limitazioni a k(n) k∞ può essere svolto me-
diante la proprietà del massimo. Lo vediamo nel prossimo paragrafo.

4.4.2 Analisi mediante la proprietà del massimo


Si osserva che se u00 (x) ≥ 0 per x ∈ [a, b], la funzione u(x) è convessa in [a, b]
per cui il suo massimo viene necessariamente preso su un estremo. Similmente
se u00 (x) ≤ 0 allora u(x) è concava e il suo minimo viene preso su un estremo.
Poiché Ln (u) è la controparte discreta di u00 (x) ci si aspetta che se il vettore
u = (ui )i=0:n+1 è tale che Ln (u) ≥ 0 allora max(u0 , un+1 ) ≥ ui , i = 1, . . . , n.
Analogamente, se Ln (u) ≤ 0 allora ci si aspetta che min(u0 , un+1 ) ≤ ui , i =
1, . . . , n + 1. Vale infatti il seguente

Teorema 8 (Proprietà del massimo discreto) Se v = (vi )i=0:n+1 è tale


che Ln (v) ≥ 0 allora max(v0 , vn+1 ) ≥ vi , i = 1, . . . , n. Se Ln (v) ≤ 0 allora
min(v0 , vn+1 ) ≤ vi , i = 1, . . . , n.

Dim. Sia Ln (v) ≥ 0 e si supponga per assurdo che vk sia il massimo dei vi
e sia vk > v0 , vn+1 . Allora dalla condizione Ln (v) ≥ 0 si ha

vk ≤ (vk−1 + vk+1 )/2. (22)

inoltre essendo vk ≥ vk−1 , vk+1 risulta vk ≥ 12 (vk−1 + vk+1 ) per cui dalla (22)
segue che vk = 12 (vk−1 + vk+1 ) e quindi vk = vk−1 = vk+1 . Ne segue che anche
vk+1 e vk−1 sono massimi. Ripetendo il ragionamento per vk−1 e per vk+1 si
conclude che vi = v0 = vn+1 per ogni i, che è assurdo. Analogamente si tratta
il caso in cui Ln (v) ≤ 0. 

19
Basandoci sulla proprietà del massimo discreto soddisfatta da Ln dimostria-
mo ora la convergenza e la stabilità del metodo delle differenze finite per il
problema modello. Successivamente diamo il risultato in forma più generale.
(n)
Ricordiamo che l’errore globale (n) = (i )i=1:n è tale che An (n) = h2 τ (n) .
(n) (n) (n)
(n) = (b
Inoltre, definendo b i )i=0:n+1 , dove b
i = i per i = 1, . . . , n, e
(n) (n) (n)
0 = n+1 = 0, risulta An (n) = Ln (b
b  ).
(n)
Teorema 9 Per l’errore globale (n) = (i )i=1:n vale

1 2 (n)
k(n) k∞ ≤ h kτ k∞
2
Dim. Si è già osservato che la funzione w(x) = 21 x2 è tale che L[w] = 1 e
che questa proprietà è condivisa dalla controparte discreta w = (wi )i=0:n+1 ,
(n) ) =
wi = w(xi ) = 12 (hi)2 . Si vede allora allora che, poiché per la (14) è Ln (b
An ((n) ) = h2 τ (n) , si ha

(n) + h2 kτ (n) k∞ w) = ±h2 τ (n) + h2 kτ (n) k∞ e ≥ 0.


Ln (±b

(n) + h2 kτ (n) k∞ w,
Quindi, per la proprietà del massimo applicata ai vettori ±b
risulta
(n) 1 2 (n)
max(±i + h2 kτ (n) k∞ wi ) ≤ h2 kτ (n) k∞ max(w0 , wn+1 ) = h kτ k∞
i 2
da cui
(n) (n) 1 2 (n)
±i ≤ ±i + h2 kτ (n) k∞ wi ≤ h kτ k∞ , i = 1, . . . , n.
2
(n)
quindi |i | ≤ 21 kτ (n) k∞ h2 . 

Si osservi che si è dimostrato che k(n) k∞ ≤ 12 kh2 τ (n) k∞ quando (n) =


A−1 2 (n)
n h τ qualunque sia τ (n) 6= 0. Per cui vale kA−1 1
n vk∞ /kvk∞ ≤ 2 qualunque
−1
sia v 6= 0. Quindi, per definizione di norma indotta segue kAn k∞ ≤ 21 .
La proprietà del massimo discreto vale sotto ipotesi più generali. Vale infatti
il seguente risultato

Teorema 10 Sia Ln una matrice n × (n + 2) tridiagonale di elementi bi , ai , ci ,


tale che ai < 0, bi , ci > 0 e Ln e ≤ 0. Se Ln v ≥ 0 allora vi ≤ max(v0 , vn+1 ).

Dim. Si procede come nella dimostrazione del teorema 8. Si supponga che


vk sia massimo. Se Ln v ≥ 0 allora −ak vk ≤ bk vk−1 + ck vk+1 da cui vk ≤
bk ck
−ak vk−1 + −ak vk+1 . Essendo poi −ak /(bk + ck ) ≥ 1, ne segue che

−ak bk ck bk ck
vk ≤ ( vk−1 + vk+1 ) ≤ vk−1 + vk+1 ,
bk + ck −ak −ak bk + ck bk + ck

20
cioè vk è minore o uguale alla media pesata tra vk−1 e vk+1 con pesi bkb+c k
k
e
ck
bk +ck . D’altra parte, poiché v k è massimo, risulta v k ≥ v , v
k−1 k+1 e quindi v k
è maggiore o uguale alla media pesata di vk+1 e vk−1 , quindi deve essere vk
uguale a vk−1 e a vk+1 per cui induttivamente anche i valori estremi sarebbero
un massimo. 

Il risultato di convergenza può essere espresso per una qualsiasi equazione


differenziale del tipo
L[u] = f, x ∈ (0, 1)
(23)
u(0) = a, u(1) = b
dove L è un operatore differenziale definito su uno spazio di funzioni sufficiente-
mente regolari da [0, 1] in R che viene approssimato con un errore locale O(hq )
da un operatore alle differenze finite dato dalla matrice Ln tridiagonale di di-
mensione n × (n + 2). Cioè si assume che Ln sia tale che per ogni funzione u(x)
sufficientemente regolare, posto z = L[u], valga
Ln u = (z(x1 ), . . . zn (xn ))T + hq τ (n) ,
dove h = 1/(n + 1), xi = ih, u = (ui ), ui = u(xi ) e kτ (n) k∞ ≤ M con M
costante positiva.
Infatti, se ora denotiamo con u(x) la soluzione di (23), u = (u(xi )) e v i =
(vi ), la soluzione del sistema
Ln v = f , f = (f (xi ))i=1,n , v0 = a, vn+1 = b
per cui
(n) ) = hq τ (n) ,
Ln (b b(n) = v − u.
Per l’errore globale b(n) si ha il seguente risultato
Teorema 11 Se valgono le seguenti proprietà
i) Ln y ≥ 0 ⇒ maxi yi = max(y0 , yn+1 );
ii) esiste w = (wi )i=0,n+1 tale che wi ≥ 0, Ln w ≥ γe, w0 , wn+1 ≤ δ, con γ e
δ costanti positive,
(n) k∞ ≤ hq γδ kτ (n) k∞ .
allora kb

(n) + γ1 hq kτ (n) k∞ w. Vale


Dim. Si considerino i vettori y = ±b
1 q (n)
Ln y = ±hq τ (n) + h kτ k∞ Ln w ≥ ±hq τ (n) + hq kτ (n) k∞ e ≥ 0
γ
Per cui, per la proprietà del massimo segue che yi ≤ max(y0 , yn+1 ). Poichè
(n) (n)
0 = b
b n+1 = 0, vale max(y0 , yn+1 ) ≤ γδ hq kτ (n) k∞ da cui yi ≤ γδ hq kτ (n) k∞ ,
che per la definizione di y implica
δ q (n) 1 δ
±(n) ≤ h kτ k∞ − hq kτ (n) k∞ wi ≤ hq kτ (n) k∞ .
γ γ γ

21


L’esistenza di un vettore w con la proprietà ii) del teorema precedente si


deduce generalmente dall’esistenza di una funzione w(x) definita su [0, 1] tale
che w(x) ≥ 0, L[w] ≥ γ > 0, ponendo wi = w(xi ).

Definizione 12 La classe di matrici scrivibili come M = αI − N con N ≥ 0,


cioè con elementi non negativi e α ≥ ρ(N ), dove ρ(N ) è il raggio spettrale di
N , è detta classe delle M-matrici.

La proprietà del massimo è legata alla non negatività dell’inversa di −An


Vale infatti il seguente risultato che fornisce una condizione sufficiente facilmente
verificabile affinché −A−1
n > 0.

Teorema 13 Sia A = αI − B una matrice n × n irriducibile con B ≥ 0. Le


seguenti proprietà sono equivalenti
1. α > ρ(B)
2. A è non singolare e A−1 > 0
3. esiste un vettore v ∈ Rn , v > 0 tale che y = Av ≥ 0, y 6= 0.

4.5 Implementazione in Matlab


È molto semplice scrivere un programma in Matlab che risolve numericamente il
problema modello u00 (x) = f (x) per 0 < x < 1 con le condizioni u(0) = u(1) = 0,
mediante il metodo delle differenze finite. Per poter trattare dimensioni elevate
conviene adottare la modalità di rappresentazione delle matrici “sparse” fornita
da Matlab in cui vengono memorizzati solamente gli elementi diversi da zero di
una matrice assieme ai loro indici. Per fare questo usiamo il comando sparse.
Ad esempio

a = sparse(eye(n));

assegna alla variabile a la matrice identica di dimensione n rappresentata in


modalità sparsa. In effetti questo comando costruisce prima una matrice densa,
cioè eye(n), e poi la rappresenta in modo sparso. Si può evitare di allocare anche
se temporaneamente n2 spazio di memoria scrivendo a = speye(n). Inoltre

d = sparse(ones(n-1,1));
b = diag(d,1);
c = diag(d,-1);

costruiscono le matrici sparse d e c che hanno 1 rispettivamente nella sopra-


diagonale e nella sotto-diagonale e zeri altrove.
In questo modo si può scrivere facilmente la function che risolve numerica-
mente il problema modello con condizioni al contorno di Dirichlet. Questa è

22
Listing 2: Risoluzione del problema modello con condizioni di Dirichlet mediante
differenze finite. Per risolvere il sistema la function usa il risolutore di Matlab
ottenuto col comando backslash \
function [v, x] = problema_modello1(f,alfa,beta)
% function [v, x] = problema_modello1(f,alfa,beta)
% risolve l’equazione differenziale
% u’’(x)=f(x) su [0,1], con u(0)=alfa, u(1)=beta
% col metodo delle differenze finite
% Input: f e’ il vettore dei valori del termine noto nei punti x(i)=i*h
% alfa e beta sono le condizioni al bordo
% Output: v e’ l’approssimazione della soluzione ottenuta
% x e’ il vettore con i punti del reticolo di discretizzazione
% usa il risolutore di Matlab
n = length(f);
h = 1/(n+1);
d = sparse(ones(n-1,1));
A = speye(n);
A = diag(d,1)+diag(d,-1)-2*A;
f(1) = f(1)-alfa/h^2;
f(n) = f(n)-beta/h^2;
v = h^2*(A\f);
x = [0:h:1]’;
v = [alfa; v; beta];
end

riportata nel Listing 2. La function prende in input il termine noto f , assegnato


come vettore di n componenti, i valori α e β della funzione u(x) negli estremi
dell’intervallo [0, 1] e dà in uscita il vettore v con i valori approssimati della
soluzione u(x) negli n + 2 punti del reticolo (estremi inclusi), assieme al vettore
x dei punti del reticolo (estremi inclusi). In questo modo, per tracciare il grafico
della soluzione basta scrivere plot(x,v).
In figura 6 si riporta la soluzione ottenuta con n = 1000, f funzione identi-
camente uguale a 1 e α = 0, β = 0.
La figura 7 riporta il grafico della soluzione ottenuta con α = 0, β = 0.2 e
con f (x) = 1 per x < 1/2, f (x) = 0 per x ≥ 1/2. In questo caso la f (x) è
discontinua.
Nel listing (3) è riportata una function che risolve lo stesso problema me-
diante eliminazione Gaussiana.
Si possono fare alcuni esperimenti con queste due function. Ad esempio
possiamo vedere quanto tempo impiegano al variare di n. Per la function basata
sul risolutore di Matlab, con i comandi

n=100; for k=1:6; f = ones(n,1); n


tic; v=problema_modello1(f,0,0);toc
n = n*10; end

23
Figura 6: Soluzione del problema modello con f (x) = 1

Figura 7: Soluzione del problema modello con α = 0, β = 0.2, f (x) = 1 per


0 ≤ x < 1/2, f (x) = 0 per 1/2 ≤ x ≤ 1.

24
Listing 3: Risoluzione del problema modello con condizioni di Dirichlet mediante
differenze finite. Per risolvere il sistema la function usa l’eliminazione gaussiana
function [v, x] = problema_modello2(f,alfa,beta)
% function [v, x] = problema_modello1(f,alfa,beta)
% risolve l’equazione differenziale
% u’’(x)=f(x) su [0,1], con u(0)=alfa, u(1)=beta
% col metodo delle differenze finite
% Input: f e’ il vettore dei valori del termine noto nei punti x(i)=i*h
% alfa e beta sono le condizioni al bordo
% Output: v e’ l’approssimazione della soluzione ottenuta
% x e’ il vettore con i punti del reticolo di discretizzazione
% usa l’eliminazione gaussiana per risolvere il sistema tridiagonale
n = length(f);
h = 1/(n+1);
a = 2*ones(n,1);
f(1) = f(1)-alfa/h^2;
f(n) = f(n)-beta/h^2;
for i=1:n-1
a(i+1) = 2-1/a(i);
f(i+1) = f(i+1)+f(i)/a(i);
end
v = zeros(n,1);
v(n) = f(n)/a(n);
for i=n-1:-1:1
v(i) = (f(i)+v(i+1))/a(i);
end
v = -v*h^2;
x = [0:h:1]’;
v = [alfa; v; beta];
end

25
si ottengono i valori
n = 100
Elapsed time is 0.000401 seconds.
n = 1000
Elapsed time is 0.000487 seconds.
n = 10000
Elapsed time is 0.001696 seconds.
n = 100000
Elapsed time is 0.016155 seconds.
n = 1000000
Elapsed time is 0.114713 seconds.
n = 10000000
Elapsed time is 1.007154 seconds.

In particolare il problema a dimensione 10 milioni si risolve in circa 1 secondo.


La function basata sull’eliminazione gaussiana nonostante il costo del ciclo
for che in un linguaggio interpretato come Matlab richiede maggior tempo di
elaborazione è più veloce. Infatti, sostituendo la function problema modello1
con problema modello2 si hanno i tempi
n = 100
Elapsed time is 0.000708 seconds.
n = 1000
Elapsed time is 0.000280 seconds.
n = 10000
Elapsed time is 0.001256 seconds.
n = 100000
Elapsed time is 0.007935 seconds.
n = 1000000
Elapsed time is 0.070925 seconds.
n = 10000000
Elapsed time is 0.615645 seconds.

Si può osservare che la crescita del tempo di calcolo è lineare con n. In-
fatti moltiplicando per 10 la dimensione, il tempo di calcolo viene moltiplicato
all’incirca per 10.
Un’altra sperimentazione interessante è verificare che l’errore di approssima-
zione decresce come h2 se f (x) è di classe C 2 come mostrato nella teoria. Per
questo consideriamo un problema la cui soluzione è nota. Ad esempio sceglia-
mo u(x) = sin2 (πx) per cui u(0) = u(1) = 0 e u00 (x) = 2π 2 (1 − 2 sin(πx)2 ).
Scegliamo allora
x = [h:h:1-h]’;
f = 2*pi^2*(1-2*sin(pi*x).^2);
e valutiamo gli errori, rispetto alla soluzione nota u(x) = sin2 (πx), della soluzio-
ne v ottenuta applicando la function problema modello1. Questa valutazione

26
Listing 4: Risoluzione del problema modello con condizioni di Dirichlet mediante
differenze finite. Controllo degli errori.
function [err1,err2] = check_error(n)
% function [err1,err2] = check_error(n)
% calcola gli errori err1, err2 in norma infinito e in norma 2
% della soluzione ottenuta col metodo delle differenze finite
% applicato all’equazione differenziale
% u’’(x)=f su [0,1], con u(0)=0, u(1)=0
% usando una discretizzazione con n punti interni
% con f=2*pi^2*(1-2*sin(pi*x).^2) la soluzione e’ u(x)=sin(pi*x)
h = 1/(n+1);
x = [h:h:1-h]’;
f = 2*pi^2*(1-2*sin(pi*x).^2);
u = sin(pi*x).^2;
v = problema_modello1(f,0,0);
err1 = norm(v(2:end-1)-u,inf);
err2 = norm(v(2:end-1)-u,2)/sqrt(n+1);
end


n k(n) k∞ k(n) k2 / n + 1
100 3.2e-4 2.0e-4
1000 3.3e-6 2.0e-6
10000 3.3e-8 2.0e-8
100000 1.8e-10 1.0e-10
1000000 5.5e-7 3.7 e-7
10000000 1.7e-6 1.1 e-6

Tabella 1: Errore globale in norma infinito e in norma 2 della soluzione


ottenuta applicando il metodo delle differenze finite all’equazione u00 (x) =
2π 2 (1 − 2 sin(πx)2 ).

viene svolta dalla function check error, riportata nel Listing 4, che valuta sia
l’errore in norma 2 che in norma infinito.
Lanciando questa funzione con diversi valori di n si hanno i risultati riportati
nella tabella 1
Si osserva che moltiplicando n per 10 l’errore sia in norma 2 che in norma
infinito si riduce all’incirca di un fattore 100 finché n non supera il valore di
10000. Per valori maggiori di n l’approssimazione sembra deteriorarsi. Il mo-
tivo di questo fatto è dovuto al numero di condizionamento della matrice del
sistema che in norma 2 vale λmax /λmin dove λmax e λmin sono rispettivamente
il massimo e il minimo autovalore di tridn (−1, 2, −1). Per il teorema 5 il rap-
porto λmax /λmin vale (2 + 2 cos(π/(n + 1))/(2 − 2 cos(π/(n + 1)) che è all’incirca
(4/π 2 )(n + 1)2 . Quindi al crescere di n aumenta il numero di condizionamen-
to della matrice e questo comporta amplificazione degli errori. Non possiamo

27
quindi spingere troppo avanti il valore di n.
Un’altra considerazione è la seguente: la limitazione superiore data all’erro-
re globale in norma infinito è h2 max |u(4) (x)|/96 che nel nostro caso, essendo
|u(4) (x)| ≤ 8π 4 fornisce la limitazione k(n) k∞ ≤ 8.12h2 in linea con i valori
riportati in tabella.
È interessante vedere cosa succede nel caso in cui la funzione f (x) non sia
sufficientemente regolare in modo che la soluzione u(x) non sia di classe C 4 .
Possiamo per questa sperimentazione prendere una funzione f (x) discontinua,
ad esempio la funzione che vale 1 nella prima metà dell’intervallo e vale zero
nella seconda e confrontare le approssimazioni ottenute con vari valori di n. Si
può verificare che la soluzione in questo caso è data da
( 1 2 3 1
2 x − 8 x per x ∈ [0, 2 ]
u(x) =
1
8 (x − 1) per x ∈ [ 21 , 1].

Lo script che segue calcola le soluzioni numeriche con n = 10000 − 1 e


con 1000 − 1, le confronta con la soluzione esatta e calcola gli errori in norma
infinito e in norma 2. Lo script traccia anche il grafico della soluzione e il grafico
dell’errore.

n1=1000-1; n2=10000-1;
h = 1/(n1+1); % risolvo a dimensione n1
x = [h:h:1-h]’; f = x*0; f(1:(n1+1)/2) = 1;
v1 = problema_modello1(f,0,0); v1 = v1(2:end-1);
u1 = v1;
u1(1:(n1+1)/2) = 0.5*x(1:(n1+1)/2).^2-(3/8)*x(1:(n1+1)/2);
u1((n1+1)/2+1:end)=(-1/8)*(1-x((n1+1)/2+1:end));
h = 1/(n2+1); % risolvo a dimensione n2
x = [h:h:1-h]’;
f = x*0; f(1:(n2+1)/2) = 1;
v2 = problema_modello1(f,0,0); v2 = v2(2:end-1);
u2 = v2;
u2(1:(n2+1)/2) = 0.5*x(1:(n2+1)/2).^2-(3/8)*x(1:(n2+1)/2);
u2((n2+1)/2+1:end)=(-1/8)*(1-x((n2+1)/2+1:end));
e1 = u1-v1; e2 =u2-v2;
fprintf(’n = %d, err_inf = %e, err_2 = %e \n’,n1+1, ...
norm(e1,inf), norm(e1,2)/sqrt(n1+1));
fprintf(’n = %d, err_inf = %e, err_2 = %e \n’,n2+1, ...
norm(e2,inf), norm(e2,2)/sqrt(n2+1));
plot(x,u2); figure; plot(x,e2)

Si osserva che gli errori ottenuti con n = 1000 − 1 e n = 10000 − 1 sono


rispettivamente 1.25e-4 e 1.25e-5, per la norma infinito e 7.22e-4 e 7.22e-5
per la norma 2. Si osserva che dividendo il passo di discretizzazione all’incirca
per 10 l’errore si riduce di un fattore circa 10. La convergenza sembra esserci
ancora ma avviene con O(h) e non O(h2 ).

28
Figura 8: Soluzione calcolata del problema u00 (x) = f (x) con f (x) discontinua

Figura 9: Errore globale nella risoluzione del problema u00 (x) = f (x) con f (x)
discontinua

Il grafico della soluzione è riportato in figura 8 mentre il grafico dell’errore è


riportato in figura 9. Si può notare come il valore massimo dell’errore è raggiunto
nel punto di discontinuità della derivata seconda.

4.6 Altre condizioni al contorno


Si consideri il problema

u00 (x) = f (x), x ∈ (0, 1)


u0 (0) = a, u0 (1) = b

Le condizioni al contorno di Neumann possono essere approssimate mediante la


formula (6) nel modo seguente
1 1
(u1 − u−1 ) = a + σ0 h2 , (un+2 − un ) = b + σn+1 h2
2h 2h

29
dove |σ0 |, |σn+1 | ≤ 1
6 max |u000 (x)|. Affiancando le precedenti equazioni alla
condizione
1
(ui−1 − 2ui + ui+1 ) = fi + h2 τi , i = 0, . . . , n + 1,
h2
si ottiene il sistema
      
h/2 0 −h/2 u−1 a σ0
 −1 2 −1  u0   f0   τ0 
1  . .. ..

..
 
..
 
..

− 2 . =  − h2 
      
h  . . . 
 .   .   . 

 −1 2 −1   un+1   fn+1   τn+1 
h/2 0 −h/2 un+2 b σn+1

Si osservi che nel termine noto compare oltre all’errore locale di discretizzazione
di L, anche l’errore locale dovuto alla discretizzazione delle condizioni al con-
torno di Neumann. Semplifichiamo il sistema precedente effettuando una com-
binazione lineare di righe. Più precisamente, moltiplicando la prima equazione
per 2/h, addizionando con la seconda e dividendo per 2, si ottiene
1 1 1
2
(−u0 + u1 ) = f0 + a/h − h2 τ0 − hσ0
h 2 2
e analogamente moltiplicando l’ultima equazione per −2/h, addizionando con
la penultima e dividendo per 2, si ottiene
1 1 1
(−un+1 + un ) = fn+1 + b/h − h2 τn+1 + hσn+1
h2 2 2
La versione discreta del problema di Neumann diventa allora
 
1 −1 u0
  1 
2 f0 + a/h
 −1 2 . . . u1  f1
 
  
1   .
 
.

− 2 .. .. ..  .  =  ..  − h2 τ (n)
   
h  . . .   .   
un   fn

−1 2 −1 
 
1
−1 1 u n+1 f
2 n+1 − b/h
σ0 + h τ20
 

 0 

− h
 .
.. 

 
 0 
τn+1
−σn+1 + h 2
(n) (n)
dove τ (n) = (τ0 , . . . , τn+1 )T . Stavolta nel termine di errore compare, oltre
all’errore locale di discretizzazione dell’operatore L[u] anche l’errore dovuto alla
discretizzazione della condizione di Neumann.
Si osservi che la matrice del sistema è singolare. Infatti il vettore e di tutte
componenti uguali a 1 sta nel nucleo della matrice. La cosa non sorprende poiché

30
il problema differenziale, se ha una soluzione, ne ha infinite; infatti le soluzioni
differiscono per una costante additiva, cosı̀ come accade per il problema discreto.
Supponiamo esista una soluzione e fissiamo la costante additiva imponendo
che il valore di u(x) sia assegnato in un estremo. Possiamo quindi ignorare una
delle due condizioni di Neumann visto che che dipende linearmente dalle altre
equazioni. Se imponiamo la condizione u(0) = c e rimuoviamo la condizione di
Neumann nell’estremo destro otteniamo il sistema
 
−1  1 a 1

2 f0 + h + h2 c
 
 2 −1 u1 1
f1 − h2 c

  .   
1  . .  .  
 .  =  f

− 2 −1 2 .  2

h 

. .

un   .
. 
.. . . −1 .
   
un+1
 
−1 2 −1 fn
   
τ1 −σ0 − hτ0 /2
2 
h  τ2
  0 
−  ..  + h 
  
..
2  . 

 . 
τn+1 0

che ha matrice non singolare. Denotando con Tn la matrice triangolare inferiore


del sistema e indicando con v il vettore che risolve

Tn v = b (24)

dove b è il vettore nella parte destra ottenuto rimuovendo la componente di


errore, per l’errore globale (n) = u − v si ottiene
   
τ1 σ0 + hτ0 /2
1   τ2  0
  
Tn (n) = h2  .  + h 
 
.
2  ..  .. 
 
τn 0

Si osservi che in questo modo stiamo risolvendo il problema ai valori iniziali


 00
u (f ) = f (x) 0<x<1
u(0) = c, u0 (0) = a

Si osservi ancora che lo schema alle differenze finite (24) è esplicito cioè la matrice
del sistema è in forma triangolare per cui i valori vi possono essere espressi in
forma esplicita in funzione dei valori vj per j < i.
Per dimostrare la stabilità di questo schema basta dimostrare che kTn−1 k∞
è limitata superiormente da una costante. Posto
 
0
 1 0 
Z=
 
 . .. . .. 

O 1 0

31
1 1
si osserva che Tn = h2 (I − 2Z + Z 2 ) = h2 (I − Z)2 . Per cui
 2
1
 1 1 
Tn−1 = h2 (I − Z)−2 = h2 
 
.. . . . . 
 . . . 
1 ... 1 1
cioè  
1

 2 1 

Tn−1 2
=h 
 3 2 1 
 (25)
 .. .. .. .. 
 . . . . 
n+1 n ... 2 1
per cui
1 (n + 2)(n + 1) n+2
kTn−1 k∞ = h2 (1 + 2 + · · · + (n + 1)) = 2
≤ < 1,
(n + 1) 2 2(n + 1)
inoltre (n) = 12 h2 Tn−1 τ (n) + hTn−1 (σ0 − hτ0 /2)e1 . Quindi, poiché
   
σ0 x1
 0   x2 
Tn−1 h  .  = h2 (σ0 − hτ0 /2)  .  , xi = ih,
   
 . .  . .
0 xn+1
l’errore globale rimane di ordine O(h2 ).

4.7 Condizioni al contorno di tipo misto


Nel caso in cui le condizioni al contorno siano del tipo misto
u0 (0) = a, u(1) = b
la matrice del sistema, di dimensione (n + 1) × (n + 1) prende la forma
 
1 −1
 .. 
1  −1 2 .  =: − 1 Kn

− 2 
h  . .. . . . −1 
 h2
−1 2
mentre l’equazione differenziale discretizzata prende la forma
 1 1

2 f0 + h a
 
u0
 u1  
 f1 
1 .

− 2 Kn  .  =  ..  + (hσ0 − h2 τ0 /2)e1 + h2 τ (n) .
   
h  ..   
 fn−1 
un 2
fn − h b

32
Quindi la relazione tra errore globale ed errore locale diventa
1
− Kn (n) = h(σ0 − hτ0 /2)e1 + h2 τ (n)
h2
da cui
1 1
(n) = (− 2
Kn )−1 h(σ0 − hτ0 /2)e1 + (− 2 Kn )−1 h2 τ (n) (26)
h h
dove abbiamo indicato con e1 = (1, 0, . . . , 0)T il primo versore della base ca-
nonica di Rn+1 . Per i teoremi di Gerschgorin la matrice Kn è non singolare,
inoltre per il teorema 5 l’autovalore più piccolo di h12 Kn è limitato inferiormen-
te da una costante indipendente da n per cui la norma k( h12 Kn )−1 k2 è limitata
superiormente da una costante. Questo dimostra la stabilità in norma 2.
Per la stabilità in norma infinito si possono seguire diversi approcci.

4.8 Analisi matriciale


Possiamo seguire la stessa analisi svolta nella sezione 4.4.1. Osserviamo innanzi-
tutto che −An ha inversa positiva poiché è una M-matrice irriducibile, essendo
verificata la proprietà di segno dei suoi elementi ed essendo An e ≥ 0. Per cui
vale kA−1 −1
n k∞ = kAn ek∞ . Usando le stesse notazioni in cui p = (hi)i=0,n ,
s = (h i )i=0:n (stavolta gli indici partono da 0 e i vettori sono in Rn+1 ) vale
2 2

An e = −(n + 1)2 en
An p = (n + 1)e1 − (n + 1)2 en (27)
1 1
An s = e − e1 − ( (n + 1)2 − 1)en
2 2
Da queste espressioni si ricava
1 1 1 1
An s = e + (1 + )An e − An p.
2 n+1 2n+1
Moltiplicando per A−1 −1
n si ottiene un’espressione di y = An e e si verifica che il
massimo di y è preso sulla prima componente e vale y1 = 12 + h2 .
Si deduce quindi che kA−1 1 h
n k∞ = 2 + 2 . Quindi la parte di errore dovuta alla
discretizzazione della derivata seconda è un O(h2 ). La componente di errore
dovuta alla discretizzazione della derivata prima è hσ0 kA−1 n e1 k∞ = hσ0 khp −
hek∞ che è ancora un O(h2 ).
Una analisi analoga ma forse più semplice può essere fatta sostituendo al
2
vettore p il vettore p s = h2 ((n +
e = h(n + 1, n, . . . , 1) e al vettore s il vettore e
e = − h1 e1 , An e
1)2 , n2 , . . . , 1). Infatti, essendo An p s = e − (n + 23 )e1 si ricava
−1 3 h2
An e = e s − (n + 2 )he p che ha elementi 2 (n + 1 − i)2 − (n + 23 )h2 (n + 1 − i).
La componente più grande in valore assoluto si ottiene per i = 0 e vale 12 + h2 .
Da cui si ricava kA−1 −1
n k∞ = kAn ek∞ = 2 + 2 .
1 h

33
Osservazione 14 Anche in questo caso si può vedere che una perturbazione
dell’ordine di δ nell’ultima componente del termine noto produce una variazione
dell’ordine di δh2 nelle componenti della soluzione del sistema lineare. Infatti
dalla prima delle (27) si ricava che A−1 2
n en = −h e. Inoltre una perturbazione
dell’ordine di δ nella prima componente del termine noto produce una variazione
della soluzione dell’ordine di δh. Infatti dalla seconda delle (27) si ha A−1
n e1 =
hp + (n + 1)2 A−1n e n = h(p + e).

4.9 Analisi mediante fattorizzazione LU


Una analoga analisi di stabilità si ottiene osservando che per la matrice Kn ∈
R(n+1)×(n+1) vale la fattorizzazione LU
 
1
 −1 1 
 
T  0 −1 1
Kn = LL , L = 


 .. . .. . .. . .. 
 . 
0 . . . 0 −1 1

Per cui Kn−1 = L−T L−1 , L−1 è la matrice triangolare inferiore con tutti elementi
uguali a 1, quindi kL−1 k∞ = kL−T k∞ = n + 1. Si deduce allora che
1
k( Kn )−1 k∞ ≤ h2 kL−1 k∞ kL−T k∞ = 1.
h2
Inoltre, per quanto riguarda la parte di errore globale dato dalla condizione di
Neuman, si ha
   
1 n+1
1  1   n 
( 2 Kn )−1 hσ0 e1 = h3 σ0 L−T L−1 e1 = h3 σ0 L−T  .  = h3 σ0 
   
..
h  .. 

 . 
1 1

Da cui
1
k( Kn )−1 )hσ0 e1 k = h3 |σ0 |(n + 1) = h2 |σ0 |.
h2

4.10 Analisi mediante la formula di Morrison


La formula di Sherman-Woodbury-Morrison è un utile strumento che permette
di mettere in relazione le inverse di due matrici che differiscono per una matrice
di rango basso. Se le matrici n × n A e B sono tali che

A = B + UV T

dove U e V sono matrici n × m, m < n, e se B è non singolare, allora A è non


singolare se e solo se la matrice m × m

S = Im + V T B −1 U

34
è non singolare e vale la formula di Sherman-Woodbury-Morrison per l’inversa
di A
A−1 = B −1 − B −1 U S −1 V T B −1 .
Per una analisi in norma infinito si usa l’espressione di Kn−1 in termini del-
l’inversa di H = tridn+1 (−1, 2 − 1) data dalla formula di Sherman-Woodbury-
Morrison (SWM). Infatti, poiché Kn = H − e1 eT1 , si ha
1
Kn−1 = H −1 + H −1 e1 eT1 H −1 . (28)
1 − eT1 H −1 e1

Ora esaminiamo separatamente le due quantità (− h12 Kn )−1 hσ0 e1 e (− h12 Kn )−1 h2 τ (n)
che compongono l’errore globale (n) in (26).
Per la prima, usando la formula di SWM (28), si ha

1 eT1 H −1 e1
(− Kn )−1 hσ0 e1 = − h3 σ0 Kn−1 e1 = −h3 σ0 (1 + )H −1 e1
h2 1 − eT1 H −1 e1
1
= − h3 σ0 T
H −1 e1 .
1 − e1 H e1 H −1 e1
−1

Essendo
1
H −1 e1 = (n + 1, n, . . . , 2, 1)T , (29)
n+2
risulta
n+1
eT1 H −1 e1 = , (30)
n+2
da cui (− h12 Kn )−1 hσ0 H −1 e1 = −h3 σ0 (n + 2)H −1 e1 = −h2 σ0 n+1
n+2
e1 , cioè

1 n+2
k(− 2
Kn )−1 hσ0 e1 k∞ ≤ |σ0 |h2 .
h n+1
Per quanto riguarda la seconda quantità vale
1 1
k(− 2
Kn )−1 h2 τ (n) k∞ ≤ k(− 2 Kn )−1 k∞ h2 kτ (n) k∞ .
h h
Inoltre una analisi in norma infinito ci fornisce
1 1 1 1 5
k(− Kn )−1 k∞ = h2 kKn−1 k∞ ≤ h2 (kH −1 k∞ + (n + 1)2 ) ≤ + = ,
h2 2 8 2 8
dove abbiamo usato (28), (29), (30) e (20). Per cui si ha stabilità del metodo,
inoltre anche il secondo addendo è limitato superiormente da una costante per
h2 . Questo dimostra la convergenza dello schema alle differenze con ordine h2 .

35
Listing 5: Risoluzione del problema modello con condizioni al contorno miste
mediante differenze finite
function [v,x] = miste(f,alfa,beta)
% [v,x] = miste(f,alfa,beta)
% risolve l’equazione u’’(x)=f(x), u’(0)=alfa, u(1)=beta
% col metodo delle differenze finite sulla griglia x_i=ih, h=1/(n+1)
% f=(f_1,f_2,...,f_n), f_i=f(x_i),i=1,...,n
% v=(v_0,...,v_{n+1}) approssimazione della funzione u in x_0,...,x_{n+1}
% x=(x_0,...,x_{n+1})
n = length(f);
h = 1/(n+1);
d = sparse(ones(n-1,1));
A = speye(n);
A = diag(d,1)+diag(d,-1)-2*A;
A(1,1) = -1;
f(1) = f(1)+alfa/h;
f(n) = f(n)-beta/h^2;
w = h^2*(A\f);
v = [w;beta];
x = [1:n+1]/(n+1);
end

Figura 10: Soluzione del problema modello con condizioni miste e α = 0, β =


0.2, f (x) = 1 per 0 ≤ x < 1/2, f (x) = 0 per 1/2 ≤ x ≤ 1.

36
4.11 Implementazione Matlab
La function riportata nel Listing 5 fornisce una implementazione per il metodo
delle differenze finite applicato al problema u00 (x) = f (x) con le condizioni miste
u0 (0) = α, u(1) = β.
La figura 10 riporta il grafico della soluzione calcolata con α = 0, β = 0.2 e
con f (x) = 1 per x < 1/2, f (x) = 0 per x ≥ 1/2.
Si noti la tangente orizzontale nell’estremo sinistro data dalla condizione
u0 (0) = 0.

5 Equazioni più generali


Trattiamo in questa sezione il caso dell’equazione L[u] = f per 0 < x < 1 con
u(0) = a, u(1) = b, dove
L[u] = (c(x)u0 (x))0
dove c(x) : [0, 1] → R è una funzione sufficientemente regolare tale che c(x) > 0.
Analogamente al problema modello trattato nella sezione precedente, pos-
siamo facilmente verificare che la soluzione dell’equazione differenziale esiste
ed è sufficientemente regolare se lo è la funzione f (x). Infatti, integrando
l’espressione L[u] = f (x) si ha
Z x
1 γ1
u0 (x) = f (t)dt + .
c(x) 0 c(x)
Integrando nuovamente si ottiene
Z x Z s Z x
1 γ1
u(x) = f (t)dtds + dt + γ2 .
0 c(s) 0 0 c(t)
Le costanti γ1 e γ2 vengono determinate imponendo le condizioni al contorno.
Si osserva anche che se f (x) è di classe C 2 [0, 1] e c(x) è di classe C 3 [0, 1] allora
la soluzione u(x) è di classe C 4 [0, 1].
Dalla formula (6) di discretizzazione della derivata prima, con h sostituito
da h2 , si ha
1 h h 1 000 000
u0 (x) = (u(x + ) − u(x − )) + σ(x)h2 , σ(x) = (u (ξ) + u (η))
h 2 2 48
dove ξ ∈ (x, x+ h2 ), η ∈ (x− h2 , x). Inoltre, fissato h, la funzione σ(x) è derivabile
essendo differenza di u0 (x) e di una combinazione lineare di u(x + h2 ) e u(x − h2 ).
Vale quindi
1 h h
c(x)u0 (x) = c(x)(u(x + ) − u(x − )) + h2 c(x)σ(x)
h 2 2
Applicando nuovamente la (6) alla funzione g(x) = c(x)u0 (x) si ricava

g(x + h2 ) − g(x − h2 ) h2 000 ˆ


L[u] = g 0 (x) = + (g (ξ) + g 000 (η̂))
h 48

37
con ξˆ ∈ (x, x + h2 ), η̂ ∈ (x − h2 , x). Componendo le due relazioni cosı̀ ottenute si
ottiene
 
0 0 1 h u(x + h) − u(x) h u(x) − u(x − h)
(c(x)u (x)) = c(x + ) − c(x − )
h 2 h 2 h (31)
+ h2 τ (x)
dove
1 h h h h 1 000 000
τ (x) = (c(x + )σ(x + ) − c(x − )σ(x − )) + (u (ξ) + u (η))
h 2 2 2 2 48
per cui, essendo c(x)σ(x) derivabile con continuità ne segue che |τ (x)| è limitato
superiormente da una costante indipendente da n.
Quindi, applicando la formula (31) nei punti xi = ih e denotando ci =
c(xi + h/2), si arriva alla discretizzazione
 
c0 −(c0 + c1 ) c1
1  c1 −(c1 + c2 ) c2 
Ln = 2 
 
h  . .. . .. . .. 

cn−1 −(cn−1 + cn ) cn
 
−(c0 + c1 ) c1
 c1 −(c1 + c2 ) c2 
1  .. .. ..

An = 2 
 
h  . . . 

 cn−2 −(cn−2 + cn−1 ) cn−1 
cn−1 −(cn−1 + cn )

5.1 Analisi matriciale


Si osserva che, poiché c(x) > 0, per il Teorema 13 risulta −A−1n > 0 e −An è
una M-matrice irriducibile. In base alla osservazione 6 possiamo cercare una
funzione w(x) ≥ 0 tale che L[w(x)] sia limitato dal basso da una costante
positiva, e ricavare da questa un vettore w candidato a svolgere la funzione di
s nel caso del problema modello.
Imponiamo allora la condizione L[w] = 1 che integrata tra 0 e x dà c(x)w0 (x) =
x da cuiR w0 (x) = x/c(x). Quindi integrando nuovamente tra 0 e x si ha
x t
w(x) = 0 c(t) dt. Approssimando l’integrale con la formula dei rettangoli si
ottiene come candidato w = (wi )i=0,n+1
i i
X xj X j
wi = h = h2 .
c
j=1 j−1
c
j=1 j−1

Poiché wi+1 − wi = h2 (i + 1)/ci si ha


1
(Ln w)i = (ci−1 wi−1 − (ci−1 + ci )wi + ci wi+1 )
h2
1
= 2 (ci−1 (wi−1 − wi ) + ci (wi+1 − wi ) = −i + i + 1 = 1
h

38
1
Per cui, denotando con An = h2 tridn (ci , −(ci + ci+1 ), ci+1 ) la parte centrale di
Ln e s = (wi )i=1,n , si ha

1
An s = e − cn wn+1 en . (32)
h2
Pi 1
In modo analogo si vede che, posto v = (vi )i=0,n+1 , v0 = 0, vi = h2 j=1 cj−1
per i = 1, . . . , n + 1, vale vi+1 − vi = h2 /ci per i = 0, . . . , n, da cui
1
(Ln v)i = (ci−1 (vi−1 − vi ) + ci (vi+1 − vi )) = 0.
h2
Quindi denotando p la parte centrale di v si ha
1
An p = − cn vn+1 en . (33)
h2
Combinando (32) e (33) si ottiene
wn+1
A−1
n e=s− p.
vn+1
Pn+1 Pn+1
Infine, posto γ = wvn+1
n+1
, si ha γ = ( j=1 j/cj−1 )/( j=1 1/cj−1 ) che è la media
pesata degli interi da 1 a n + 1 per cui γ < n + 1. Quindi prendendo le norme,
si ottiene
i
X j+γ 2
kA−1 2
n ek∞ = max |wi − vi γ| ≤ h max ≤ .
i i
j=1
cj−1 minx c(x)

5.2 Analisi mediante la proprietà del massimo


Per il Teorema 10 per l’operatore discreto Ln vale la proprietà del massimo. Per
dimostrare la convergenza e la stabilità dello schema alle differenze si applica il
teorema 11 per cui basta dimostrare che esiste w tale che w ≥ 0, w0 , wn+1 ≤ δ
e Ln (w) ≥ γe per una costante γ indipendente da n.
Per questo è sufficiente scegliere il vettore individuato nel paragrafo prece-
dente, cioè
i
X j
wi = h2 , i = 0, . . . , n + 1.
j=0
c j−1

Si analizzi il caso dell’operatore di Sturm-Liouville

L[u] = −(p(x)u0 (x))0 + q(x)u(x)

dove p(x), q(x) > 0.

39
5.3 Analisi mediante fattorizzazione LU
Un modo diverso di studiare kA−1 n k∞ si basa su un’analisi matriciale.
Si verifica facilmente che −An = Bn + h12 cn en eTn , dove
 
c0 + c1 −c1
 −c1 c1 + c2 −c2 
1  .. .. ..

Bn = 2 
 
h  . . . 

 −cn−2 cn−2 + cn−1 −cn−1 
−cn−1 cn−1
Inoltre, una verifica diretta mostra che Bn si può fattorizzare come
1 −1
   
c0 1
 ..  c1   −1 1
1  1 .  
Bn = .
 
h2

..
 ..  .. ..
. . .
 
.
 
 −1 
1 cn−1 −1 1
(34)

Si osserva infine che, poiché ci > 0, −An e Bn sono M-matrici non singolari
essendo dominanti diagonali e irriducibili. Quindi le loro inverse hanno elementi
positivi. Inoltre, dalla formula di Sherman-Woodbury-Morrison e dalle proprietà
delle M-matrici segue che 0 ≤ −A−1 n ≤ Bn−1 . Quindi per la stabilità basta
dimostrare che kBn k∞ è limitata superiormente da una costante indipendente
da n.
Poiché  −1  
1 −1 1 1 ... 1
.. .. .. . . 
. . . .. 
  

 . .  =
 

 1 −1   1 1 
1 1
2
n 1
si ha che kBn k∞ ≤ (n+1)2 min c < 1/ min ci che è limitato superiormente da una
i
costante indipendente da n.

5.3.1 Analisi in norma 2


Si richiama la seguente proprietà delle matrici ad elementi non negativi: che se
A e B sono matrici tali che 0 ≤ ai,j ≤ bi,j allora ρ(A) ≤ ρ(B). Inoltre si ricorda
che per una matrice simmetrica A vale kAk2 = ρ(A).
Dunque dalla simmetria di An e Bn e dal fatto che 0 ≤ −A−1 −1
n ≤ Bn segue
−1 −1
k − An k2 ≤ kBn k2 . Poichè
0 ≤ Bn−1 =h2 tridn (−1, 1, 0)−1 diag(c0 , . . . cn−1 )−1 trid(0, 1, −1)−1
1
≤h2 tridn (−1, 1, 0)−1 tridn (0, 1, −1)−1
min ci
1
=h2 (tridn (0, 1, −1)tridn (−1, 1, 0))−1
min ci

40
Figura 11: Soluzione del problema (p(x)u0 (x))0 = f (x), u(0) = u(1) = 0 con
f (x) = 1 e p(x) = x + 1/100

h2
vale kBn−1 k2 ≤ min ci kK
−1
k2 dove
 
2 −1
 .. .. 
 −1 . . 
K = tridn (0, 1, −1)tridn (−1, 1, 0) =  
 .. 
 . 2 −1 
−1 1

Per il teorema 5 gli autovalori della matrice K sono 2 − 2 cos(j n+1/2 ), j =

1, . . . , n e corrispondono agli autovettori v j = (sin(ij n+1/2 )). Il più piccolo
2π 4π 2
autovalore è 2 − 2 cos( n+1/2 )= (n+1/2)2 + O(h4 ), per cui

(n + 1/2)2 4 2 4
kK −1 k2 = 2
< 2 + O(h2 ).
(n + 1) π π

5.4 Implementazione in Matlab


Nel Listing 6 è riportata la function Matlab che risolve il problema −(p(x)u0 (x))0 +
q(x)u(x) = f (x) con condizioni al contorno di Dirichlet u(0) = α, u(1) = β.
La figura 11 riporta il grafico della soluzione del problema con α = β = 0,
p(x) = x + 1/100, q(x) = 0, f (x) = 1.

41
Listing 6: Risoluzione del problema di Sturm-Liouville

function [v, x] = sturm_liouville(p,q,f,alfa,beta)


% function v = sturm_liouville(f,p,q,alfa,beta)
% risolve l’equazione differenziale
% -(p(x)u’(x))’+q(x)u(x)=f(x) su [0,1], con u(0)=alfa, u(1)=beta
% col metodo delle differenze finite dove p,q>0
% Input: p vettore di componenti p(x_i) per i=0:n+1, x_i= i*h
% q vettore di componenti q(x_i) per i=1:n
% f vettore di componenti f(x_i) per i=1:n
% alfa e beta sono le condizioni al bordo
% Output: v e’ l’approssimazione della soluzione ottenuta, estremi
inclusi
% x e’ il vettore dei punti della discretizzazione, estremi inclusi
% usa il risolutore di Matlab
n = length(f);
h = 1/(n+1);
d1 = sparse(p(2:n));
d = sparse(p(1:n)+p(2:n+1));
q = sparse(q);
A = diag(d1,1)+diag(d1,-1)-diag(d);
A = -(1/h^2)*A + diag(q);
f(1) = f(1) + alfa*p(1)/h^2;
f(n) = f(n) + beta*p(n+1)/h^2;
v = h^2*(A\f);
v = [alfa;v;beta];
x = [0:n+1]/(n+1);
end

42
6 Il problema agli autovalori
Si consideri il “problema modello”

− u00 (x) = λu(x), 0 < x < 1


(35)
u(0) = 0, u(1) = 0

in cui occorre determinare gli scalari λ e le funzioni u(x) : [0, 1] → R, u(x) non
identicamente nulle, che verifichino (35). Gli scalari λ sono chiamati autovalori
e le corrispondenti funzioni u(x) autofunzioni. In questo caso speciale esiste
una infinità numerabile di soluzioni date da ui (x) = sin(πix) e λi = i2 π 2 ,
i = 1, 2, . . ., per cui il problema della loro approssimazione di fatto non si pone.
Usiamo però questo problema modello come paradigma per descrivere il suo
trattamento numerico.
Discretizzando l’intervallo [0, 1] con i punti xi = ih, i = 0, . . . , n + 1, h =
1/(n + 1), e utilizzando l’operatore discreto Ln si arriva alla seguente relazione
 
2 −1
 .. 
1  −1 2 .  u = λu + h2 τ (n)

(36)
2
h   .. .. 
. . −1 
−1 2
(n) (n) 1
dove τ (n) = (τi ) è tale che |τi | ≤ 12 max |u(4) (x)|, valida nel caso in cui u(x)
sia di classe C 4 [0, 1].
Si considera allora il problema
 
2 −1
 .. 
1  −1 2 . 
 v = µv (37)
h2  .. .. 
 . . −1 
−1 2

e ci si chiede quanto le soluzioni del problema discreto (37) differiscano da


quelle del problema continuo (35). Per questo è utile richiamare il teorema di
Bauer-Fike. Ricordiamo che una norma assoluta k · k è tale che kxk = kyk
se yi = |xi |, i = 1, . . . , n, inoltre ricordiamo che (vedi [?]) la norma matriciale
indotta da una norma assoluta è tale che kDk = max |di | per ogni matrice
diagonale D = diag(di ). Osserviamo anche che le norme classiche 1,2 e ∞ sono
norme assolute.

Teorema 15 (Bauer-Fike) Siano A, B, F matrici n × n tali che B = A +


F . Supponiamo che A sia diagonalizzabile, cioè A = SDS −1 con D matrice
diagonale. Sia inoltre k · k una norma assoluta. Allora, per ogni autovalore λ
di B esiste un autovalore µ di A tale che

|λ − µ| ≤ kF k · kSk · kS −1 k

43
Dim. Sia Bu = λu per cui (A − λI)u = −F u. Se λ è autovalore di A allora la
tesi è vera. Se λ non è autovalore di A allora A − λI è non singolare e possiamo
scrivere
u = −(A − λI)−1 F u.
Questo implica che k(A − λI)−1 F k ≥ 1 da cui, poiché (A − λI)−1 = S(D −
λI)−1 S −1 , si ha
1 ≤ kF k · kSk · kS −1 k · k(D − λI)−1 k.
Poiché k · k è una norma assoluta, si ha che k(D − λI)−1 k = 1/|µ − λ| dove µ è
un autovalore di A che ha distanza minima da λ. 

Si osservi che se S è ortogonale vale kSk2 = 1. Ciò, unito al fatto che k · k2


è assoluta, implica il seguente

Corollario 16 Nelle ipotesi del teorema precedente se A è simmetrica allora


per ogni autovalore λ di B esiste un autovalore µ di A tale che

|λ − µ| ≤ kF k2

Per quanto riguarda lo studio della distanza tra l’autovettore v della matrice
A e l’autovettore vettore u della matrice B premettiamo la definizione di de-
composizione ai valori singolari (SVD) è la definizione di inversa generalizzata.
Vale il seguente

Teorema 17 Per ogni matrice A ∈ Rm×n esistono matrici ortogonali U ∈


Rm×m e V ∈ Rn×n e una matrice diagonale Σ =diag(σ1 , . . . , σp ) ∈ Rm×n con
p = min{m, n}, e σ1 ≥ σ2 ≥ · · · ≥ σp ≥ 0, tali che A = U ΣV T .

La fattorizzazione A = U ΣV T è detta decomposizione ai valori singolari,


le colonne di U e di V sono dette rispettivamente vettori singolari destri e
sinistri. Gli scalari σi sono i valori singolari di A. Un risultato analogo vale per
matrici ad elementi complessi dove U e V sono unitarie. Si osservi che le matrici
AT A e AAT hanno gli stessi autovalori non nulli che coincidono con i quadrati
dei valori singolari non nulli. Inoltre le colonne di U e di V sono autovettori
rispettivamente delle matrici AAT e AT A. Dalle colonne di V e U si ricavano
facilmente delle basi ortogonali del nucleo di A e dello span di A.

Osservazione 18 Se A è reale e simmetrica allora i valori singolari di A sono


i valori assoluti degli autovalori di A. Se A è anche definita positiva i valori
singolari di A coincidono con gli autovalori di A.

Mediante la SVD si può definire il concetto di inversa generalizzata di una


matrice A ∈ Rm×n come A+ = V Σ+ U T , dove Σ+ =diag(σ1+ , . . . , σp+ ) ∈ Rn×m ,
e σi+ = 1/σi se σi 6= 0, σi+ = 0 se σi = 0.
Vale il seguente risultato che permette di esprimere la soluzione di minima
norma di un problema di minimi quadrati.

44
Teorema 19 Dato il sistema Ax = b con A ∈ Rm×n , b ∈ Rm , il vettore x∗ =
A+ b è il vettore di minima norma 2 che minimizza kAx − bk2 .

Teorema 20 Nelle ipotesi del teorema di Bauer-Fike, sia u ∈ Rn tale che,


(A + F )u = λu. Allora esistono un autovettore v e un autovalore µ di A tali
che Av = µv e
kv − uk
≤ k(A − µI)+ k · (kF k + |λ − µ|) ≤ k(A − µI)+ k · kF k(1 + kSk · kS −1 k)
kuk
dove (A − µI)+ è l’inversa generalizzata di A − µI e S −1 BS = D è diagonale.
In particolare, se A è simmetrica risulta
kv − uk2 2
≤ kF k2 .
kuk2 mint∈σ(A),t6=µ |t − µ|

dove σ(A) è l’insieme degli autovalori di A.

Dim. Vale
(A + F − λI)u = 0
Av − µv = 0
Sottraendo entrambi i membri delle precedenti equazioni si ottiene

A(u − v) + F u − (λ − µ)u − µ(u − v) = 0.

Da cui
(A − µI)(u − v) = −F u + (λ − µ)u.
Quindi F u+(λ−µ)u sta nell’immagine di A−µI e per il teorema 19 la soluzione
u − v di minima norma può essere scritta come

u − v = −(A − µI)+ (F − (λ − µ)I)u

inoltre vale
ku − vk ≤ k(A − µI)+ k(kF k + |λ − µ|)kuk.
Da cui la prima parte della tesi. Se A è simmetrica, con autovalori αi , si ha
kSk2 · kS −1 k2 = 1, per cui la tesi discende dall’osservazione 18; infatti i valori
singolari di (A − µI)+ , per definizione di inversa generalizzata, sono 1/(αi − µ)
se αi − µ 6= 0 e 0 altrimenti. 

Siamo pronti per confrontare le soluzioni del problema continuo (35) con
quelle del problema discreto (37). Infatti possiamo riscrivere (36) come

(A + F )u = λu

dove si è indicato con A = h12 trid(−1, 2, −1), e con F = h2 τ uT /(uT u).


Applicando il teorema di Bauer-Fike con la norma 2, poiché
h2
kF k = kτ k · kuk = h2 kτ k/kuk,
kuk2

45
si ha
kτ k
|λ − µ| ≤ h2 . (38)
kuk
1
Poiché τi = 24 (u(4) (ξi ) + u(4) (ηi )) con ξ ∈ (xi , xi+1 ) e ηi ∈ (xi−1 , xi ), se
1 1 1
M = maxx∈[0,1] |u(4) (x)|, allora √n+1 kτ (n) k2 ≤ 12 M , inoltre limn √n+1 kuk2 =
1/2
τ k2 è limitato superiormente da una
R
1
0
u(x)2 dx per cui il quoziente kku k2
costante θ.
Inoltre, poiché gli autovalori di A sono αi = (n + 1)2 (2 − 2 cos πi/(n + 1)) =
i π + O(h2 ), se µ = αj allora 1/ mini6=j |αi − µ| = 1/((2j − 1)π 2 ) + O(h2 ) dove
2 2

1/((2j − 1)π 2 ) non dipende da n. Per cui

kv − uk2 1
≤ γh2 θ
kuk2 (j − 1/2)π 2

per una costante γ > 0. Questo dimostra la convergenza della soluzione del
problema discreto alla soluzione del problema continuo.

6.1 Implementazione in Matlab


Nel Listing 7 è riportata la function Matlab che risolve il problema agli autovalori
(c(x)u0 (x))0 = λu(x) su [0, 1] con condizioni al contorno di Dirichlet u(0) =
u(1) = 0. In questo caso Matlab non riesce a trarre vantaggio dalla sparsità
della matrice per cui per valori moderatamente grandi di n si hanno tempi di
calcolo elevati. Si suggerisce di provare con n ≤ 1000.
La figura 12 riporta il grafico degli autovalori con c(x) = x + 1/100, mentre
la figura 13 riporta le autofunzioni corrispondenti agli autovalori di modulo più
piccolo.

7 Il caso multidimensionale
Si consideri il problema di Poisson con condizioni al contorno di Dirichlet su un
dominio quadrato

∂2u ∂2u
+ 2 = f (x, y), (x, y) ∈ Ω = (0, 1) × (0, 1)
∂x2 ∂y (39)
u(x, y) = g(x, y), (x, y) ∈ ∂Ω

Si discretizzi il quadrato [0, 1] × [0, 1] con un reticolo di (m + 2) × (n + 2) punti


(xi , yj ), per i = 0, . . . , m + 1, j = 0, . . . , n + 1, come in figura 14 dove xi = ihx ,
yj = jhy , con hx = 1/(m + 1), hy = 1/(n + 1). La scelta della posizione e
dell’orientamento degli assi è stata dettata dall’esigenza di avere congruenza
con la notazione matriciale. Nella figura 14 si evidenzia la corrispondenza tra il
punto (xi , yj ) e la coppia (i, j).

46
Listing 7: mediante differenze finite.]Soluzione del problema agli autovalori
(c(x)u0 (x))0 = λu(x) sull’intervallo [0,1] mediante differenze finite.
function [v,lambda]=eig_generale(c)
% [v,lambda]=eig_generale(c)
% risolve il problema agli autovalori (u’(x)c(x))’=lambda u(x), u(0)=u(1)
=0
% col metodo delle differenze finite sulla griglia x_i=ih, h=1/(n+1)
% v matrice le cui colonne approssimano le autofunzioni
% lambda vettore degli autovalori corrispondenti
n = length(c)-1;
h = 1/(n+1);
d0 = sparse(c(1:n)+c(2:n+1));
d1 = sparse(c(2:n));
A = -diag(d0)+diag(d1,1)+diag(d1,-1);
A = A*(1/h^2);
[v,ei] = eig(A);
v = [zeros(1,n);v;zeros(1,n)];
lambda = diag(ei);
end

Figura 12: Autovalori del problema (c(x)u0 (x))0 = λu(x), su [0,1] con u(0) =
u(1) = 0 con e c(x) = x + 1/100

47
Figura 13: Prime 6 autofunzioni di L[x] = (c(x)u0 (x))0 su [0, 1], con c(x) =
x + 1/100, calcolate mediante differenze finite.

48
j y

(xi , y)j

Figura 14: Discretizzazione del quadrato

Nell’ipotesi in cui la soluzione u(x, y) è continua con le sue derivate parziali


fino all’ordine 4, applicando la (5) alla funzione u(x, y) vista separatamente
come funzione della sola x e come funzione della sola y si ottiene
∂2u 1
|(x ,y ) = (ui−1,j − 2ui,j + ui+1,j ) + h2x τi,j
∂x2 i j hx
(40)
∂2u 1 2
|(x ,y ) = (ui,j−1 − 2ui,j + ui,j+1 ) + hy νi,j
∂y 2 i j hy
2 2
1
dove ui,j = u(xi , yj ) e |τi,j | ≤ 12 max ∂∂xu2 , |νi,j | ≤ 12
1
max ∂∂yu2 . Sommando le

espressioni di (40) si arriva a


∂2u ∂2u 1 1 1 1
( 2
+ )|(xi ,yj ) = 2 (ui−1,j + ui+1,j ) + 2 (ui,j−1 + ui,j+1 ) − 2( 2 + 2 )ui,j
∂x ∂y 2 hx hy hy hy
+ h2x τi,j + h2y νi,j .
(41)

Nel seguito per semplificare le notazioni, pur continuando a usare i simboli


m ed n, supponiamo che m = n, quindi hx = hy =: h per cui la formula (41)
diventa
∂2u ∂2u 1
( + )|(xi ,yj ) = 2 (ui−1,j +ui+1,j +ui,j−1 +ui,j+1 −4ui,j )+h2 τi,j +h2 νi,j . (42)
∂x2 ∂y 2 h

La formula fornisce una approssimazione dell’operatore differenziale L[u] =


∂2u 2

∂x2 + ∂∂yu2 con l’operatore alle differenze finite

1
Lm,n (U (m,n) ) = (ui−1,j + ui+1,j + ui,j−1 + ui,j+1 − 4ui,j )i=1:m,j=1:n
h2
dove abbiamo indicato U (m,n) = (ui,j )i=0:m+1,j=0:n+1 .

49
Un modo per descrivere sinteticamente questa formula, nota come formula
dei cinque punti, è quello di usare la matrice 3 × 3 dei coefficienti di ui+r,j+s
per r, s = −1, 0, 1 detta stencil
 
0 −1 0
1
− 2  −1 4 −1 
h
0 −1 0

Si osserva che la relazione che lega Lm,n con Lm e Ln è la seguente


 
u0,1 ... u0,n

 u1,1 ... u1,n 

Lm,n (U (m,n)
) =Lm 
 .. .. 
 . . 

 um,1 ... um,n 
um+1,1 ... um+1,n (43)
 
u1,0 u1,1 ... u1,n u1,n+1
+ .. .. .. ..  T
 Ln

. . . .
um,0 um,1 ... um,n um,n+1

Infatti, applicare ad u(x, y) la derivata seconda rispetto a x corrisponde nella


versione discreta ad applicare l’operatore Lm a tutte le colonne di U escluse
la prima e l’ultima che sono quelle di bordo; similmente applicare la derivata
seconda rispetto a y corrisponde nel discreto ad applicare Ln a tutte le righe di
U esclusa la prima e l’ultima che sono quelle di bordo. Quindi Lm,n definisce
una applicazione lineare da R(m+2)×(n+2) in Rm×n .
L’equazione differenziale (39) con le condizioni al contorno di Dirichlet, ri-
stretta ai valori ui,j = u(xi , yj ), i = 1, . . . , m, j = 1, . . . , n interni al dominio si
può allora riscrivere come

Am U + U An = B − h2x τ (m,n) − h2y ν (m,n) ,

dove abbiamo posto Am = − h12 tridm (−1, 2, −1), An = − h12 tridn (−1, 2, −1),
x y

U = (ui,j )i=1,m, j=1,n , B = F + h12 (g :0 eT1 + g :n+1 eTn ) + h12 (e1 g T0: + em g Tm+1: ),
x y
F = (fi,j )i=1:m,j=1:n , fi,j = f (xi , yj ) e abbiamo denotato g :0 = (g(xi , 0))i=1:m ,
g :1 = (g(xi , 1))i=1:m , g 0: = (g(0, yi ))i=1:n , g 1: = (g(1, yi ))i=1:n .
Rimuovendo la componente dell’errore locale si ottiene il sistema

Am V + V An = B, V = (vi,j )i=1,m, j=1,n (44)

la cui incognita è V .
È possibile scrivere tale sistema in forma standard Am,n u = b se ordiniamo
le componenti incognite (ui,j ) come un vettore u = u(m,n) di mn componenti.
Per questo utilizziamo l’operatore vec definito nel seguente modo
Definizione 21 Data la matrice A di dimensione m × n, il vettore v = vec(A)
è formato dagli elementi di A ordinati per colonne, cioè v(j−1)m+i = ai,j .

50
Il vettore vec(A) è naturale vederlo come un vettore “a blocchi” dove il
generico blocco in posizione j ha per elementi gli elementi della colonna j-esima
di A. Ad esempio, se  
a11 a12 a13
A=
a21 a22 a23
allora  
a11

 a21 

 a12 
a= 

 a22 

 a13 
a23
Introduciamo il prodotto di Kronecker. Date la matrice A di dimensione
m × n e la matrice B di dimensione p × q, definiamo la matrice A ⊗ B come
la matrice di dimensioni mp × nq che partizionata in blocchi p × q ha elementi
(ai,j B). In particolare,

Im ⊗ B = diagm (B, B, . . . , B)

mentre  
a11 I ... a1,n I
 .. ..
A ⊗ Ip =  . .

.
am1 I ... am,n I
Formalmente se H = A ⊗ B, allora h(i−1)m+r,(j−1)n+s = ai,j br,s , per i =
1, . . . , m, j = 1, . . . , n, r = 1, . . . , p, s = 1, . . . , q.
Si riportano le principali proprietà del prodotto di Kronecker la cui dimo-
strazione si lascia come esercizio:
vec(AB) = (I ⊗ A)vec(B)
vec(AB) = (B T ⊗ I)vec(A)
(A ⊗ C)(B ⊗ D) = (AB) ⊗ (CD)
det(Am ⊗ Bn ) = (det Am )n (det Bn )m
(45)
(Am ⊗ Bn )−1 = A−1 −1
m ⊗ Bn

(Am ⊗ Bn )T = ATm ⊗ BnT


−1
Sm Am Sm = diag(a), Tn−1 Bn Tn = diag(b), ⇒
(Sm ⊗ Tn )−1 (Am ⊗ Bn )(Sm ⊗Tn ) = diag(a) ⊗ diag(b)

dove A, B, C, D sono matrici di dimensioni compatibili in modo che i prodotti


AB e CD siano ben definiti, e dove Am e Bn denotano matrici non singolari di
dimensione rispettivamente m × m e n × n.
Alla luce delle proprietà sopra riportate, l’equazione (44) si può scrivere nella
forma
(In ⊗ Am + An ⊗ Im )v = b. (46)

51
Denotiamo con Am,n = In ⊗ Am + An ⊗ Im . È facile vedere che la ma-
trice Am,n ha una struttura tridiagonale a blocchi con blocchi tridiagonali.
Precisamente, supponendo per semplicità m = n per cui hx = hy , vale

1
Am,n = − tridn (−Im , Hm , −Im ), Hm = tridm (−1, 4, −1).
h2

7.1 Analisi in norma 2


Utilizzando le proprietà del prodotto di Kronecker è abbastanza immediato di-
mostrare che la norma 2 della matrice A−1 m,n è limitata superiormente da una
costante. Per semplicità, ma comunque senza ledere la generalità, assumiamo
m = n. Per le proprietà (45) gli autovalori della matrice An,n = I ⊗ An + An ⊗ I
π
sono dati da − h12 (2 − 2 cos n+1 π
i + 2 − 2 cos n+1 j) e sono tutti negativi; il più pic-
colo autovalore in valore assoluto si ottiene con i = j = 1 e vale h12 (4−4 cos n+1 π
).
2 4
Poiché cos x = 1−x /2+O(x ), si ha che il minimo dei valori assoluti degli auto-
valori di An,n è µ = 2π 2 +O(h2 ) per cui kA−1 −1 1
n,n k2 = ρ(An,n ) = 1/µ = 2π 2 +O(h )
2

che è limitato superiormente da una costante indipendente da n.

7.2 Analisi in norma infinito


Diamo un cenno di come si possano applicare le metodologie viste nel ca-
so monodimensionale usando il principio del massimo e l’analisi puramente
matriciale.

7.2.1 Analisi mediante il principio del massimo


Si osserva innanzitutto che vale la proprietà del massimo. Infatti, sia V = (vi,j )
tale che Lm,n (V ) ≥ 0. Vale allora

vi,j ≤ (vi−1,j + vi+1,j + vi,j−1 + vi,j+1 )/4.

Se vi,j fosse un punto di massimo, sarebbe maggiore o uguale ai valori nei punti
contigui e quindi alla loro media, cioè

vi,j ≥ (vi−1,j + vi+1,j + vi,j−1 + vi,j+1 )/4.

Le due relazioni danno vi,j = vi−1,j = vi1,j = vi,j−1 = vi,j+1 , cioè i valori di V
nei punti contigui sono anch’essi di massimo. Ripetendo il ragionamento per i
punti contigui si conclude che il massimo è preso sul bordo.
Ci basta ora far vedere che esiste una matrice W = (wi,j )i=0:m+1,j=0:n+1 ≥ 0
tale che Lm,n (W ) ha tutte componenti uguali a 1 per poi procedere come si è
fatto nella dimostrazione del teorema 9. Basta allora scegliere W = weT , dove
w = ( 21 (hm i)2 )i=0:m+1 e e ∈ Rn+2 . Infatti, dalla (43) e dal fatto che Lm (w) = e
e Ln (e) = 0 segue immediatamente la tesi.
Si osservi che la matrice W non è altro che la discretizzazione della funzione
w(x, y) = 21 x2 sul reticolo di punti (xi , yj ).

52
Ora possiamo procedere come nella dimostrazione del teorema 9. Quindi
consideriamo la matrice Y = (yi,j ),
(m,n) (m,n)
yi,j = ±i,j + h2 max |τi,j |wi,j
(m,n)
dove abbiamo denotato τi,j le componenti dell’errore locale di discretizzazio-
(m,n)
ne, e i,jle componenti dell’errore globale estese sul bordo con zeri. Per co-
struzione vale Lm,n (Y ) ≥ 0 per cui maxi,j yi,j = maxi,j (y0,j , ym+1,j , yi,0 , yi,n+1 ).
Si deduce quindi che
(m,n) 1
±i,j ≤ h2 kτ (m,n) k∞ .
2

7.2.2 Analisi matriciale


Similmente al caso monodimensionale è possibile condurre una analisi più stretta
mediante un approccio puramente matriciale.
Supponiamo per semplicità che m = n e denotiamo A = I ⊗ A + A ⊗ I
dove A = − h12 trid(−1, 2, −1). Usando le (19) per le proprietà del prodotto di
Kronecker si ha
A(e ⊗ e) = −(n + 1)2 [e ⊗ (e1 + en ) + (e1 + en ) ⊗ e]
A(e ⊗ p) = −(n + 1)2 (e ⊗ en ) − (n + 1)2 (e1 + en ) ⊗ p (47)
1
A(e ⊗ s) = e ⊗ (e − (n + 1)2 en ) − (n + 1)2 (e1 + en ) ⊗ s
2
Dalla seconda delle (47) si ricava −(n + 1)2 (e ⊗ en ) = A(e ⊗ p) + (n + 1)2 (e1 +
en ) ⊗ p che sostituita nell’ultima dà
1 1
A(e ⊗ s) = e ⊗ e + A(e ⊗ p) + (n + 1)2 (e1 + en ) ⊗ p − (n + 1)2 (e1 + en ) ⊗ s
2 2
da cui
1 1
e ⊗ e = A(e ⊗ s) − A(e ⊗ p) + (n + 1)2 (e1 + en ) ⊗ (s − p).
2 2
Moltiplicando entrambi i membri della relazione precedente per −A−1 si ottiene

1 1
−A−1 (e ⊗ e) = e ⊗ ( p − s) − (n + 1)2 A−1 ((e1 + en ) ⊗ (s − p)) (48)
2 2
Poiché 0 ≤ 21 p − s ≤ 18 e e poichè −A−1 ≥ 0 dalla (48) si ottiene
1 1
0 ≤ −A−1 (e ⊗ e) ≤ e ⊗ ( p − s) ≤ e ⊗ e.
2 8
Poiché k − A−1 (e ⊗ e)k∞ = kA−1 k∞ , si deduce che
1
kA−1 k∞ ≤
8

53
da cui la stabilità dello schema alle differenze e la convergenza.
Analogamente a quanto riportato nell’osservazione 7 si può dimostrare che
anche nel caso bidimensionale eventuali perturbazioni del termine noto del si-
stema Am,n x = b relative ai valori sul bordo non si ritrovano amplificate nella
soluzione.

Osservazione 22 Dalla prima delle (47) segue che

−A−1 (e ⊗ (e1 + en ) + (e1 + en ) ⊗ e) = h2 (e ⊗ e). (49)


Il vettore v = (αe1 + βen ) ⊗ y + z ⊗ (γe1 + θen ) è nullo nella parte interna
al dominio e ha valori arbitrari sul bordo. Se σ = kvk∞ allora vale |v| ≤
σ(e(e1 + en ) + (e1 + en ) ⊗ e). Per cui dalla (49) si ha kA−1 vk∞ ≤ h2 kvk∞ . Per
cui, una perturbazione dei dati sul bordo produce una variazione nella soluzione
dell’ordine di h2 .

7.3 Il caso di derivate miste


Si consideri l’operatore

∂2u ∂2u ∂2u


a + 2b + c
∂x2 ∂x∂y ∂y 2

dove b2 < ac.


Sia f (x) derivabile tre volte con continuità per cui

1 h h2
f 0 (x) = (f (x + h) − f (x)) − f 00 (x) − f 000 (ξ). (50)
h 2 6
Dalla (50) applicata a u(x, y) come funzione di x con incremento h = hx e come
funzione di y con incremento h = hy si ottiene

∂2u 1
= (u(x + hx , y + hy ) − u(x + hx , y) − u(x, y + hy ) + u(x, y))
∂x∂y hx hy
(51)
hx ∂ 3 u hy ∂ 3 u
− 2
− + O(h2 ).
2 ∂x∂ y 2 ∂ 2 x∂y

Si consideri ora un generico punto del reticolo (xi , yj ) e per semplicità si


denoti con la lettera A. Si considerino i punti contigui che verranno denotati
con le lettere dalla B alla I, e si numerino i quadrati che hanno un vertice in A
da 1 a 4 come in figura:

54
E C D

2 1

F B
A

3 4

G H I
Applicando la formula (51) nel punto A con incrementi hx = ±h e hy = ±h,
tenendo conto che l’asse x è verticale, orientato verso il basso mentre l’asse y
è orizzontale orientato verso destra, si ottengono le quattro diverse formule per
∂2u
approssimare la derivata mista ∂x∂y
1 ∂2u h ∂3u ∂3u
1. 2
(−u(D) + u(C) − u(A) + u(B)) = − (− 2
+ 2 ) + O(h2 )
h ∂x∂y 2 ∂x∂y ∂x ∂y
1 ∂2u h ∂3u ∂3u
2. 2
(−u(C) + u(E) − u(F) + u(A)) = + ( 2
+ 2 ) + O(h2 )
h ∂x∂y 2 ∂x∂y ∂x ∂y
1 ∂2u h ∂3u ∂3u
3. (−u(A) + u(F) − u(G) + u(H)) = + (− + ) + O(h2 )
h2 ∂x∂y 2 ∂x∂y 2 ∂x2 ∂y
1 ∂2u h ∂3u ∂3u
4. (−u(B) + u(A) − u(H) + u(I)) = − ( + ) + O(h2 )
h2 ∂x∂y 2 ∂x∂y 2 ∂x2 ∂y
Una qualsiasi combinazione
P lineare delle quattro espressioni con coefficienti
α1 , α2 , α3 , α4 tali che αi = 1, fornisce una formula generale per approssimare
∂2u
la derivata mista ∂x∂y con errore O(h). Scegliendo però in modo opportuno i
coefficienti è possibile annulare la componente O(h) dell’errore e ottenere quindi
un errore locale O(h2 ); questo si realizza scegliendo α1 = α3 , α2 = α4 . La
formula generica con errore locale O(h2 ) può essere descritta con la matrice
3 × 3 dei coefficienti di ui+r,j+s per r, s = −1, 0, 1 (stencil)
     
0 0 0 α2 α1 − α2 −α1 0 1 0
a  b c
2
1 −2 1  + 2 2  α1 − α2 2(α2 − α1 ) α1 − α2  + 2  0 −2 0 
h h h
0 0 0 −α1 α1 − α2 α2 0 1 0

Se b > 0 (il caso b < 0 è trattato in modo analogo) scegliendo α2 = 12 , α1 = 0,


si ottiene lo stencil
 
b c−b 0
1 
a − b −2(a + c − b) a − b 
h2
0 c−b b
che genera una M-matrice se 0 < b < min(a, c). Si osservi inoltre che la somma
degli elementi dello stencil è nulla. Ciò permette di dimostrare la stabilità e la

55
convergenza con ordine O(h2 ) di questo schema. Per questo è sufficiente deter-
minare una matrice W ≥ 0 tale che Lm,n (W ) ≥ γ > 0, dove γ è indipendente
da m e da n. Basta allora scegliere w(x, y) = 21 x2 , in modo che L[w] = a(x, y),
γ = min a(x, y), e porre W = (wi,j ), wi,j = w(xi , yj ).
Si osservi ancora che se 0 < b < min(a, c) allora b2 < ac ma non viceversa.

7.4 Casi più generali


Si consideri il caso di
∂ ∂u ∂ ∂u
L[u] = (a(x) ) + (b(y) ) (52)
∂x ∂x ∂y ∂y
con a(x) ≥ α > 0, b(y) ≥ β > 0.
Si verifichi che la matrice Am,n ottenuta con condizioni al contorno di
Dirichlet è
1 1
In ⊗ 2 tridm (ai−1 , −(ai−1 + ai ), ai ) + 2 tridn (bi−1 , −(bi−1 + bi ), bi ) ⊗ Im
h h
dove ai = a(xi + h/2), bi = b(yi + h/2).
L’analisi della stabilità in norma 2 si effettua valutando l’autovalore di mi-
nimo valore assoluto della matrice simmetrica Am,n . Usando le proprietà del
prodotto di Kronecker, nell’ipotesi che a(x, y) ≥ α > 0 e b(x, y) ≥ β > 0
si ottiene che l’autovalore di minimo valore assoluto di Am,n è la somma de-
gli autovalori di minimo valore assoluto di tridm (ai−1 , −(ai−1 + ai ), ai ) e di
tridn (bi−1 , −(bi−1 + bi ), bi ) per cui la stabilità in norma 2 discende dall’analisi
di stabilità in norma 2 nel caso monodimensionale.
Per l’analisi della stabilità in norma infinito si osserva che −Am,n è una M-
matrice e che Lm,n (Em,n ) = 0 con Em,n matrice di elementi uguali a 1. Questo
basta a dimostrare la proprietà del massimo. Rimane quindi da individuare
una matrice Wm,n ≥ 0 tale che Lm,n (W ) ≥ γ > R x0 con γ costante indipendente
t
da m, n. Per questo basta scegliere w(x, y) = 0 a(t) dt e W = w(m) e(n)T con
2
(m) Pi
wi = j=0 (jh) aj−1 .
Si studi come può essere discretizzato l’operatore
∂ ∂u ∂ ∂u
L[u] = (a(x, y) ) + (b(x, y) )
∂x ∂x ∂y ∂y
con a(x, y) ≥ α > 0, b(x, y) ≥ β > 0.
Un altro caso interessante è il seguente
∂2u ∂2u
L[u] = a(x)b(y) 2
+ c(x)d(y) 2 , a(x, y) > 0, b(x, y) > 0.
∂x ∂y
che è un caso particolare di
∂2u ∂2u
L[u] = a(x, y) + b(x, y) , a(x, y) > 0, b(x, y) > 0.
∂x2 ∂y 2
Si lascia come esercizio la sua discretizzazione e l’analisi di stabilità e conver-
genza.

56
7.5 Condizioni al contorno di tipo misto
Si consideri il problema di Poisson (39) con le seguenti condizioni al contorno
miste
∂u(x, 1)
u(x, 0) = g1 (x), = g2 (x)
∂~n
∂u(1, y)
u(0, y) = g3 (y), = g4 (y)
∂~n
Si proceda come fatto nel caso monodimensionale e si dimostri che l’operatore
discreto Am,n ha la forma

Am,n = Im ⊗ An + Am ⊗ In

dove Am e An sono le matrici che discretizzano u00 (x) con condizioni al contorno
miste ottenute nel paragrafo 4.6.

7.6 Domini non rettangolari


Nel caso in cui il dominio Ω non sia un rettangolo è possibile operare in modo
analogo. È sufficiente considerare un rettangolo che contiene Ω e procedere in
modo consueto alla discretizzazione di questo rettangolo mediante un reticolo
di punti (xi , yj ). Consideriamo a titolo di esempio il caso in cui il dominio ha
una forma ad L come in figura.

Il sistema lineare che descrive l’approssimazione discreta per questo domi-


nio, con condizioni al contorno di Dirichlet, si ottiene allora considerando il
corrispondente sistema relativo al rettangolo che contiene ω e rimuovendo le
equazioni e le incognite relative ai punti del reticolo che non appartengono ad
Ω.
In altri termini se Ax = b è il sistema relativo alla discretizzazione del
rettangolo, il sistema relativo alla discretizzazione di Ω è Ab
bx = bb dove x
b e bb si
ottengono rispettivamente da x e b rimuovendo le componenti relative ai punti
esterni al dominio Ω mentre A b è la sottomatrice di A ottenuta rimuovendo righe
e colonne corrispondenti ai punti che non appartengono ad Ω.

57
Ad esempio, nel caso in figura, ordinando le incognite per colonne, la matrice
risulterà ancora tridiagonale a blocchi con blocchi diagonali che sono tridiagonali
con valori (1,-4,1). I primi 5 blocchi diagonali hanno dimensione 14, mentre i
restanti 9 blocchi diagonali hanno dimensione 7; i primi 4 blocchi sopra e sotto
diagonali hanno dimensione 14, il sesto ha dimensione 14 × 7, i rimanenti hanno
dimensione 7.
La stabilità del metodo in norma 2 si ottiene applicando il teorema di
Courant-Fischer e la definita positività di A. Infatti, una volta dimostrato che
gli autovalori di A sono limitati dal basso da una costante positiva indipendente
dalle dimensioni di A, allora per il teorema di Courant-Fischer anche gli auto-
valori di ogni sottomatrice principale A b di A sono limitati dal basso dalla stessa
−1
costante e quindi A ha norma 2 limitata superiormente da una costante.
b
Più in generale possiamo dimostrare una proprietà analoga valida per le
M-matrici. Premettiamo il seguente risultato.
Osserviamo prima che se A1 = I − B1 , A2 = I − B2 sono due M-matrici
n × n e quindi B1 , B2 ≥ 0. Allora vale il seguente risultato

Teorema 23 Siano A1 = I − B1 , A2 = I − B2 M-matrici con B1 , B2 ≥ 0 e


ρ(B1 ) < 1, ρ(B2 ) < 1. Se B1 ≥ B2 allora A−1
1 ≥ A2 .
−1

P∞ P∞
Dim. Discende dal fatto che A−1
1 =
i −1
i=0 B1 , A2 =
i k k
i=0 B2 , poiché B1 ≥ B2
per k = 1, 2, . . .. 

La proprietà descritta sopra viene utilizzata implicitamente per dimostrare


il seguente risultato.

Teorema 24 Sia A una M-matrice e A b una sua sottomatrice principale relativa


all’insieme degli indici S. Sia W la sottomatrice di A−1 con indici in S. Allora
A b−1 ≤ W . In particolare vale kA
b è invertibile e vale 0 ≤ A b−1 k ≤ kW k ≤ kA−1 k
per ogni norma matriciale k · k indotta da una norma monotona.

Dim. Senza ledere la generalità supponiamo che S = {1, 2, . . . , m} e che A =


I − B con B ≥ 0 e ρ(B) < 1. Partizioniamo le matrici A e B come segue
   
A11 A12 B11 B12
A= , B=
A21 A22 B21 B22

b = A11 , B11 matrici m × m. Consideriamo inoltre


con A
 
B11 0
A = I − B, B =
e e e .
0 B22

e ≤ B quindi P∞ B
Vale allora B e i ≤ P∞ B i e la serie P∞ B e i è convergente
i=0 i=0 i=0
e vale
X∞ ∞
X
−1
(I − B) =
e i
B ≤
e B i = A−1 .
i=0 i=0

58
Inoltre per la struttura diagonale a blocchi di B
e risulta

−1
 
e −1 = (I − B11 )
(I − B)
0
0 (I − B22 )−1

b−1 = (I − B11 )−1 conclude la tesi.


Il fatto che A 

7.6.1 Caso di punti del dominio fuori dalla griglia


Nel caso di un dominio curvilineo che non passi necessariamente nei punti della
griglia è possibile procedere comunque a discretizzazioni alle differenze finite.
Prendiamo ad esempio il caso mostrato della figura 15 in cui il bordo, de-
scritto dalla linea blu passa per i punti E ed F che non sono punti del reticolo.
In questo caso non si può applicare la formula dei 5 punti centrata in O che coin-
volgerebbe i valori di u(O), u(A), u(B), u(C) e u(D), visto che non si hanno
informazioni dsu u(C) e U (B). Quindi apparentemente non siamo in grado di
scrivere l’equazione che deriva dall’applicazione della formula dei 5 punti in O.
Però possiamo rimediare a questa difficoltà sviluppando u(x, y) come funzione
di x nel punto O col resto nel termine di ordine 3, e valutando l’espressione in
A ed E. In questo modo si ottengono le espressioni

1 2 ∂ 2 u

∂u
u(A) = u(O) + hA + h + O(h3A )
∂x O 2 A ∂x2 O
1 2 ∂ 2 u

∂u
u(E) = u(O) + hE + h + O(h3E )
∂x O 2 E ∂x2 O

dove hA = A − O, hE = E − O. Da queste si ottiene l’espressione

∂ 2 u

1 2 2
hE u(A) − hA u(E) = (hE − hA )u(O) + (hE hA − hA hE ) + O(h4 )
2 ∂x2 O

in cui non compare la derivata prima rispetto a x. In modo analogo facendo lo


sviluppo rispetto alla y e valutando in D e in F si ha

1 2 ∂ 2 u

∂u
u(D) = u(O) + hD + h + O(h3D )
∂y O 2 D ∂y 2 O
1 2 ∂ 2 u

∂u
u(F ) = u(O) + hF + h + O(h3F )
∂y O 2 F ∂y 2 O

dove hD = D − O, hF = F − O. Da queste si ottiene l’espressione

∂ 2 u

1 2 2
hF u(A) − hA u(F ) = (hF − hD )u(O) + (hF hD − hD hF ) + O(h4 )
2 ∂y 2 O

in cui non compare la derivata prima rispetto a y. Combinando linearmente


le due ultime espressioni in cui non compaiono le derivate prime con opportuni

59
D

A O E B

F
C

Figura 15: Bordo che non passa per i punti del reticolo: si conoscono i valori di
u(E) e u(F ) ma non quelli di U (B) e u(C) necessari per applicare la formula
dei 5 punti in O.

2 2
pesi si ottiene il laplaciano ∂ u(x,y)
∂x2 + ∂ u(x,y)
∂y 2 nel punto O con errore locale O(h).
Si ottiene una equazione che lega i valori incogniti di u(O), u(A), u(D) ai valori
noti di u(E) e u(F ) con errore locale O(hx + hy ).
Un approccio diverso consiste nel dare una approssimazione dei valori di
u(B) e di u(C) in funzione di u(E), u(F ) e u(O) mediante estrapolazione, e poi
applicare la formula dei 5 punti in O. Ad esempio, per approssimare u(B) con
estrapolazione lineare possiamo costruire la retta che passa per i punti (0, u(O))
e (hE , u(E)) e valutare il valore in hB . Oppure possiamo costruire la parabola
che passa per (hA , u(A)), (0, u(O)), e (hE , u(E)) e valutarne il valore in hB .
Manipolazioni simili possono essere fatte con le condizioni di Neumann.

7.7 Implementazione in Matlab


Nel Listing 8 è riportata la function Matlab che risolve il problema ∆u = f su
un rettangolo con condizioni al contorno di Dirichlet. Il dominio è discretizzato
con una griglia di m×n punti interni. La variabile f è una matrice di dimensione
(m + 2) × (n + 2) che contiene sulla prima e ultima riga e sulla prima e ultima
colonna i valori delle condizioni al contorno, mentre nella sua parte interna
contiene i m × n valori di f (x, y) nei punti della griglia. La variabile v è una
matrice (m + 2) × (n + 2) che contiene la soluzione, inclusi anche i punti di
bordo.
La figura 16 riporta il grafico della soluzione ottenuta scegliendo il termine
noto f = 0 con valori al contorno dati da tre segmenti di retta. I valori di m e
n sono m = 30, n = 50. Il tempo di calcolo su un laptop con processore i3 è di
0.015 secondi.

60
Listing 8: Risoluzione del problema di Poisson ∆u = f su un quadrato mediante
differenze finite utilizzando il comando backslash di Matlab.
function v = poisson(f)
% function v = poisson(f)
% risolve il problema di Poisson su [0,1]x[0,1] con termine noto f(x,y)
% col metodo delle differenze finite
% f e’ matrice (m+2)x(n+2), sulla prima e utima riga e colonna contiene
% le condizioni al bordo, nella parte rimanente contiene i valori di
% f(x,y) nei punti della griglia
% v e’ una matrice (m+2)x(n+2) con i valori della soluzione, bordo
incluso
% Il sistema lineare e’ risolto col backslash \ di Matlab
[mm,nn] = size(f);
g = f(2:mm-1,2:nn-1);
m = mm-2; n = nn-2;
hy = 1/(m+1);
hx = 1/(n+1);
% completo il termine noto con le condizioni al contorno
g(1,:) = g(1,:)-f(1,2:nn-1)/hy^2;
g(m,:) = g(m,:)-f(mm,2:nn-1)/hy^2;
g(:,1) = g(:,1)-f(2:mm-1,1)/hx^2;
g(:,n) = g(:,n)-f(2:mm-1,nn)/hx^2;
% costruisco la matrice
dm = sparse(ones(m,1));
dn = sparse(ones(n,1));
dm1 = sparse(ones(m-1,1));
dn1 = sparse(ones(n-1,1));
Hn = (1/hx^2)*(-2*diag(dn)+diag(dn1,1)+diag(dn1,-1));
Hm = (1/hy^2)*(-2*diag(dm)+diag(dm1,1)+diag(dm1,-1));
A = kron(diag(dn),Hm)+kron(Hn,diag(dm));
% risolvo il sistema
v = A\vec(g);
v = reshape(v,m,n);
% completo alla dimensione originale
v = [f(1,:);f(2:m+1,1),v,f(2:m+1,n+2);f(m+2,:)];
% traccio il grafico
mesh(v);
% per salvare la figura scommentare l’istruzione che segue
% print ’bolla.jpg’ -djpg
end

61
Figura 16: Configurazione di equilibrio ottenuta dall’equazione ∆u = 0 con
valori al contorno dati da tre segmenti di retta sghembi

Nella figura 17 si riporta il grafico della soluzione ottenuta con f (x, y) = 1


e condizioni omogenee al bordo. I valori scelti di m e n sono m = n = 80. Il
tempo di calcolo è stato di 0.078 secondi.
Per maggiori dettagli sugli aspetti computazionali e implementativi si ri-
manda alla sezione 11.

8 Metodi variazionali (scritta da Federico Poloni)


8.1 Premessa
Sia B uno spazio di funzioni. Per evitare di generare confusione chiamando
troppe cose con il nome “funzione”, solitamente in analisi si preferisce chiamare
operatore una mappa da B in sé (o comunque da uno spazio di funzioni a un
altro spazio di funzioni), e funzionale una mappa da B a R (o C). Notate anche
che nella frase qui sopra, per evitare confusione, ho usato il termine mappa, che
in fondo è un altro sinonimo di funzione.
Per evitare di avere troppe parentesi tonde, qui useremo le parentesi quadre
per indicare l’applicazione di un operatore: per esempio, L[f ] indicherà l’appli-
cazione dell’operatore L alla funzione f . La notazione L[f ](x), invece, indica
che dobbiamo applicare l’operatore L alla funzione f , e valutare la funzione
risultante nel punto x.

62
Figura 17: Configurazione di equilibrio ottenuta dall’equazione ∆u = f
f (x, y) = 1 e con valori al contorno nulli.

8.2 Introduzione
I metodi alle differenze finite hanno due difetti:
1. Funzionano bene su griglie quadrate regolari, ma si adattano male a do-
mini di forma più strana, per problemi in 2 o più dimensioni, che invece
spesso capitano nelle applicazioni.
2. Richiedono un’alta regolarità della soluzione: per dimostrarne il funzio-
namento, abbiamo usato sviluppi di Taylor fino al IV ordine, richiedendo
quindi che la funzione sia C 4 (e che u(4) ∞ non sia troppo grossa).

I metodi chiamati variazionali, o di Ritz-Galerkin, o degli elementi finiti, invece


funzionano meglio sotto questi punti di vista.

8.3 Problema modello


Consideriamo il generico problema di Sturm-Liouville; cerchiamo u : [a, b] → R
di classe C 2 tale che
L[u] = f ;
u(a) = α (53)
u(b) = β,

63
dove l’operatore L è definito come
0
L[v] := − [p(x)v 0 (x)] + q(x)v(x)
per due funzioni p(x) > 0, p ∈ C 1 , e q(x) > 0, q ∈ C 0 date. Nel seguito, quando
possibile ometteremo i (x) dalle funzioni: per esempio l’equazione qui sopra sarà
scritta in modo più compatto
L[v] = −[pv 0 ]0 + qv.
Innanzitutto mi tolgo dai piedi le condizioni al contorno, cercando di rim-
piazzarle con u(a) = u(b) = 0: per questo, scelgo una qualunque funzione
l(x) ∈ C 2 che soddisfi l(a) = α, l(b) = β (per esempio c’è un polinomio di grado
1 che va bene), e noto che ũ = u − l soddisfa
L[ũ] = f − L[l]
ũ(a) = 0
ũ(b) = 0
che è un problema dello stesso tipo ma con condizioni al bordo omogenee. Con
qualche altro trucco (che non vediamo) è possibile trattare più o meno tutte le
condizioni al contorno, incluse quelle di Neumann.

8.4 Forma debole


Consideriamo il prodotto scalare L2 classico
Z b
hu, vi = uvdx.
a

Nota che se u soddisfa (53), allora (integrando) soddisfa anche


hL[u], vi = hf, vi ∀v ∈ Ca1 tratti , v(a) = v(b) = 0. (54)
Nota che con quelle ipotesi su v possiamo scrivere
Z b Z b Z b Z b
hL[u], vi = − (pu0 )0 vdx + quvdx = pu0 v 0 dx + quvdx, (55)
a a a a

dove abbiamo integrato per parti il primo pezzo.


Con questa espressione per hL[u], vi, nota che il problema (54) ha senso anche
se u e v sono due funzioni soltanto Ca1 tratti e nulle ai bordi. Anzi, possiamo
chiedere solo che u0 e v 0 esistano come derivate distribuzionali. Lo spazio delle
funzioni
{v : v ∈ L2 [a, b], v 0 ∈ L2 [a, b], v(a) = v(b) = 0} =: H01 , (56)
dove la derivata è fatta in senso distribuzionale, è detto uno spazio di Sobolev.
Se non sapete cos’è una derivata distribuzionale, ignorate pure questa parte e
prendete la (56) come definizione di H01 solo con le funzioni C 1 a tratti, e tutto
funzionerà lo stesso.

64
8.5 Proprietà di L
Su H01 , l’operatore L è simmetrico rispetto al prodotto scalare h·, ·i (ovvio dalla
(55)); possiamo anche provare che è definito positivo (in un certo senso).
Lemma 25 (versione 1D del lemma di Poincaré) Esiste una costante C
(che dipende solo dal dominio [a, b]) tale che per ogni u ∈ H01 si ha

kukN ≤ C ku0 kL2

per le due norme N = ∞ e N = L2 .


Dim. Usando Cauchy-Schwarz in modo furbo applicato col prodotto scalare
ottenuto integrando da 0 a z, si ha hu0 , 1i2 ≤ h1, 1ihu0 , u0 i, da cui ∀z ∈ [a, b]
Z z Z z Z z
0 2
2
u(z) = ( 2
u dx) ≤ ( 2
1 dx)( u02 dx) ≤ (z − a) ku0 kL2 .
a a a

Visto che questa disuguaglianza vale per ogni z ∈ [a, b], si ha


2 2
kuk∞ ≤ (b − a) ku0 kL2 .

Similmente, integrando entrambi i lati della disuguaglianza si ottiene


!
Z Z b b
2 2
kukL2 = u(z)2 dz ≤ (z − a)dz ku0 kL2
a a

Teorema 26 Esistono costanti m, M che dipendono solo dal dominio tali che
per ogni u ∈ H01 si ha
2 2
m kukN ≤ hL[u], ui ≤ M ku0 kN

Dim. Z b Z b Z b
hL[u], ui = pu02 dx + qu2 dx ≥ (min p) u02 dx
a a a
2 2
≥(min p) ku0 kL2 ≥ (min p)C −2 kukN

Z b Z b
2 2
hL[u], ui = pu02 dx + qu2 dx ≤ (max p) ku0 kL2 dx + (max q) kukL2
a a
2 2
≤(max p) ku0 kL2 dx + (max q)C 2 ku0 kL2

65
8.6 Formulazione variazionale
Teorema 27 Se u soddisfa (54), allora u è un punto di minimo (stretto) in
H01 del funzionale F (v) := hL[v], vi − 2 hf, vi. In particolare, (54) ha al più una
soluzione.

Dim. Usando la simmetria di L,

F (v) + hL[u], ui = hL[v − u], v − ui ≥ kv − ukN ≥ 0,

con l’ultimo ≥ sempre stretto a meno che u = v. 

8.7 Discretizzazione
Finora abbiamo dimostrato tante belle proprietà ma non abbiamo enunciato
algoritmi per risolvere la (53). Lo facciamo ora: nella (54), rimpiazziamo H01
con un suo sottospazio S con dim S = n < ∞: cioè, cerchiamo uS ∈ S tale che

hL[u], vi = hf, vi ∀v ∈ S. (57)


n
Fissiamo una base di funzioni
Pn (φi (x))i=1 per S. Allora, uS si scriverà in funzione
della base come uS = j=1 xj φj . Scrivendo l’equazione (57) per v = φi , i =
1, 2, . . . n (perché bastano?) otteniamo il sistema
n
X
hφi , L[φj ]i xj = hφi , f i , i = 1, 2, . . . , n. (58)
j=1

È un sistema con matrice AS simmetrica e positiva definita (perché hf, L[f ]i ≥


2
kf kL2 > 0 per ogni 0 6= f ∈ S). Quindi possiamo risolverlo e ricavare gli xi , e
quindi uS .
Nota che il teorema 27 funziona (con la stessa dimostrazione) anche se rim-
piazziamo H01 con S, per cui uS è il punto di minimo (stretto) del funzionale F
su S.

8.8 Errore di discretizzazione


Teorema 28 (Lemma di Céa) Esiste una costante (che dipende solo dal do-
minio) D per cui per ogni v ∈ S si ha

ku − uS kN ≤ D ku0 − v 0 kN

per le norme N = 2, N = ∞.

Dim.
m ku − uS kN ≤ hL[u − uS ], u − uS i = hu, L[u]i + F (us )
≤ hu, L[u]i + F (v) = hL[u − v], u − vi ≤ M ku0 − v 0 kN

66
dove nel ≤ a cavallo dell’andata a capo abbiamo usato l’osservazione appena
fatta che uS è il minimo di F su S, e quindi F (uS ) ≤ F (v). 

Quindi l’errore globale sulla soluzione dipende solo dall’errore di approssi-


mazione della derivata prima v nello spazio S: cioè, se scelgo un S dove la
derivata prima di u può venire approssimata “bene” (cioè c’è una v ∈ S tale
che v 0 − u0 è piccolo), allora ottengo una buona stima della soluzione.

8.9 Esempio: Spline cubiche


Prendiamo come S lo spazio delle funzioni spline cubiche sui punti equispaziati
x0 , x1 , . . . , xN . Ha dimensione N + 1 (infatti basta fissare i valori della u su
x0 , x1 , . . . , xN e possiamo costruire la sua spline). È possibile (non lo vediamo
qui) costruire una sua base tale che per ogni i la funzione di base φi è diversa da
zero solo nell’intervallo [xi−2 , xi+2 ]. Ciò è bello perché implica che gli elementi
della matrice del sistema AS = hφi , L[φj ]i sono nulli tutte le volte che |j − i| >
2 (è evidente dalla (55)). Quindi la matrice del sistema è pentadiagonale, e
possiamo applicarci velocemente la maggior parte degli algoritmi di algebra
lineare (eliminazione di Gauss in O(n2 ), un passo dei principali metodi iterativi
in O(n)).
Per quanto riguarda l’errore globale, si può dimostrare (noi lo omettiamo) il
seguente risultato:
Lemma 29 Sia u ∈ C 4 . La spline cubica che interpola u nei punti x0 , x1 , . . . , xN
soddisfa
kv 0 − u0 k∞ ≤ C u(4) h3


per una costante moderata C.
Questo + il lemma di Céa ci permettono di dire che l’errrore globale per questo
metodo agli elementi finiti è al più C u(4) ∞ h3 . Notare che per le differenze
finite c’era un’espressione simile ma h2 al posto di h3 , quindi gli elementi finiti
si avvicinano meglio alla soluzione.

8.10 Esempio: funzioni lineari a tratti


Prendiamo come S lo spazio delle funzioni di approssimazione lineare nei punti
x0 , x1 , . . . , xN (cioè le funzioni lineari a tratti con i punti di non derivabilità
nelle xi ). Una sua base è data dalle funzioni φi tali che φi (xj ) = δij (“hat
functions”); con questa base la AS risulta tridiagonale.
Notare che hanno la regolarità minima che serve per far funzionare gli ele-
menti finiti (C 1 a tratti). Si può dimostrare (non difficile, ma lo omettiamo) che
per la funzione v di approssimazione lineare per una funzione u ∈ C 2 soddisfa

kv 0 − u0 k∞ ≤ C u(2) h.


2
(notare che C è la minima regolarità di u per cui ha senso porsi il problema
(53)). Questo + lemma di Céa ci dicono che la soluzione converge con errore h.

67
8.11 Curiosità: cosa succede in più dimensioni
Tutti i risultati enunciati finora non richiedono particolari proprietà di R, e
infatti funzionano anche quando le funzioni sono definite su un aperto Ω di R2 ,
per ogni operatore L per cui si riesce a dimostrare il teorema 26. Non serve che
L sia simmetrico, ma se non lo è le dimostrazioni si complicano un po’. Nel caso
simmetrico, quasi tutte le dimostrazioni che abbiamo visto funzionano pari pari
(eccezione: lemma di Poincaré).
Sono possibili diverse scelte dello spazio S, a seconda del problema; la più
comune è prendere una triangolazione del dominio, cioè una suddivisione di Ω
in tanti piccoli triangoli, e considerare le funzioni che sono continue globalmente
e lineari su ognuno dei triangoli. Con la base opportuna (le funzioni che valgono
1 in un vertice della triangolazione e 0 altrove), la matrice del sistema non ha
più una struttura particolare come nel caso 1D, ma è comunque molto sparsa.
Le operazioni da fare nella pratica sono:
• Costruire la triangolazione del dominio. Non è difficile, ci sono algoritmi
dedicati, ma talvolta non serve neppure applicarli perché molte applicazio-
ni partono da programmi di progettazione al computer in cui il risultato è
già naturalmente suddiviso in triangoli (o tetraedri nel caso 3D)—se qual-
cuno si interessa di computer-grafica 3D o di CAD ha già capito di cosa
parliamo.
• Costruire la matrice e il termine noto del sistema (58). Qui ci sono molti
integrali da fare. Nella pratica, questi integrali vengono calcolati uti-
lizzando su ogni triangolo (o su ogni segmento [xi , xi+1 ] di suddivisione
dell’intervallo [a, b] nel caso 1D) una formula di quadratura. Solitamente
questa è la parte che porta via più tempo.
• Risolvere il sistema. Visto che di solito la matrice è molto sparsa, si usa
un metodo iterativo (Jacobi, gradiente coniugato, GMRES), spesso ac-
coppiato con precondizionatori sofisticati. Di solito si arresta il metodo
iterativo con un residuo abbastanza alto:  = 10−3 , per esempio. Difatti,
spesso, a causa degli errori già commessi “a monte” (nei dati sperimentali,
nel modello, nella quadratura, errore globale nella soluzione dell’equazio-
ne differenziale), la precisione del risultato è già limitata a poche cifre
significative.

9 Equazioni paraboliche
Si consideri l’equazione del calore
∂u ∂ 2 u
γ − = 0, γ > 0. (59)
∂t ∂x2
con condizioni
u(x, 0) = f (x), 0 ≤ x ≤ `,
(60)
u(0, t) = a(t), u(`, t) = b(t), t ≥ 0.

68
Il dominio [0, `] × [0, tmax ], si discretizza con ui,j = u(xi , tj ), xi = i∆x , ∆x =
`/(n + 1), tj = j∆t , ∆t = tmax /(m + 1), i = 0, 1, . . . , n + 1, j = 0, 1, 2, . . . , m + 1.

9.1 Una prima discretizzazione


Assumiamo che i dati a(t), b(t), f (x) siano sufficientemente regolari in modo
che la soluzione u(x, t) con le sue derivate rispetto alla x e rispetto alla t fino
al quart’ordine siano continue. Si approssima la derivata prima rispetto a t con
la formula (7) e la derivata seconda rispetto a x mediante la formula (5). Si
ottiene allora
∂u 1
= (ui,j+1 − ui,j ) + σi,j ∆t
∂t ∆t
∂2u 1
= (ui−1,j − 2ui,j + ui+1,j ) + τi,j ∆2x
∂x2 ∆2x
dove |σi,j | e |τi,j | sono limitati superiormente.
∆t
Sostituendo nella (59) e ponendo per semplicità r = γ∆2x , si ottiene
τi,j
ui,j+1 = r(ui+1,j + ui−1,j ) + (1 − 2r)ui,j + ∆2x ∆t − σi,j ∆2t ,
γ
per i = 1, . . . , n, j = 0, 1, . . ., dove u0,j = a(tj ), un+1,j = b(tj ) e ui,0 = f (xi ).
Si considera allora il sistema ottenuto rimuovendo l’errore locale di discre-
tizzazione
vi,j+1 =r(vi+1,j + vi−1,j ) + (1 − 2r)vi,j i = 1, . . . , n, j = 0, 1, . . . , m + 1
v0,j =a(tj ), vn+1,j = b(tj ), vi,0 = f (xi ).
Ordinando le incognite “per colonne” cioè come
(v1,1 , v2,1 , . . . , vn,1 , v1,2 , v2,2 , . . . , vn,2 , . . . , v1,m+1 , v2,m+1 , . . . , vn,m+1 )
si ottiene un sistema lineare la cui matrice è ∆t Am,n dove
 
I
1 
 −T I 
Am,n = , T = tridn (r, −2r + 1, r)

∆t 
 .. ..
. . 
−T I
Per l’errore globale i,j = ui,j − vi,j vale
∆2x
Am,n vec(i,j ) = vec(τi,j ) − ∆t vec(σi,j )
γ
Per dimostrare la stabilità e la convergenza del metodo occorre studiare la
norma infinito della matrice A−1m,n . Vale
 
I
 T I 
A−1
m,n = ∆t 
 
.. . .. I 
 . 
m
T ... T I

69
La presenza di T m nel blocco in basso a sinistra ci dice che condizione neces-
saria di stabilità è che ρ(T ) ≤ 1 altrimenti T m divergerebbe esponenzialmente.
Quindi condizione necessaria di stabilità è che gli autovalori di T siano in valore
assoluto minori o uguali a 1. Cioè |1−2r +2r cos iπ/(n+1)| ≤ 1. Ciò è verificato
per ogni n se e solo se r ≤ 1/2, cioè ∆t /∆2x ≤ γ/2. La stabilità e la convergenza
sono subordinate ad una condizione sul rapporto ∆t /∆2x . Si parla per questo di
stabilità condizionata.
È interessante osservare che per avere stabilità il numero di punti della
discretizzazione temporale deve essere dell’ordine del quadrato del numero di
punti della discretizzazione spaziale. Questo conduce a bassi livelli di efficienza
computazionale.
Si osservi che se r ≤ 1/2 la matrice T è non negativa e Am,n è una M-matrice
per cui A−1 −1
m,n ≥ 0. Vale allora kAm,n k∞ = kAm,n e
−1 (n(m+1))
k∞ dove e(n(m+1)) è
il vettore con n(m + 1) componenti uguali a 1. Inoltre vale T e(n) ≤ e(n) per cui
T j e(n) ≤ e(n) quindi
m
X
kA−1 −1 (n(m+1))
m,n k∞ = kAm,n e k∞ ≤ ∆t kT j e(n) k∞ ≤ ∆t (m + 1) = 1
j=0

e quindi per l’errore globale risulta

|i,j | ≤ (∆2x max |τp,q |/γ + ∆t max |σp,q |)

9.2 Una discretizzazione più efficiente: il metodo di Crank-


Nicolson
Si può ottenere un metodo dotato di convergenza incondizionata, cioè comunque
∆t e ∆x convergano a zero e con errore locale O(∆2x + ∆2t ), con una piccola
modifica del metodo mostrato nel paragrafo precedente.
Si osserva che per una funzione sufficientemente regolare f (x) il quoziente
(f (x + h) − f (x))/h approssima la derivata prima di f (x) in x con un errore
O(h) (confronta con (7)), però la stessa formula può essere vista come una
applicazione della (6) con passo h/2 e quindi come una approssimazione di
f 0 (x+h/2) con errore O(h2 ). Ciò suggerisce di discretizzare la (59) uguagliando
γ(ui,j+1 − ui,j )/∆t ad una approssimazione alle differenze finite della derivata
seconda di u(x, t) rispetto ad x però al tempo tj +∆t /2 anziché al tempo tj come
si era fatto nel paragrafo precedente. Per questo si usa come approssimazione
della derivata seconda di u(x, t) rispetto ad x al tempo tj + ∆t /2 la media
aritmetica delle due approssimazioni della derivata seconda ai tempi tj e tj+1 ,
cioè (ui−1,j − 2ui,j + ui+1,j )/∆2x e (ui−1,j+1 − 2ui,j+1 + ui+1,j+1 )/∆2x . Infatti, in
generale, per una funzione sufficientemente regolare f (x) facendo uno sviluppo
in serie di f (x) con incremento h e −h e prendendo la media aritmetica di
entrambi i membri si ha che (f (x−h)+f (x+h))/2 = f (x)+h2 (f 00 (ξ)+f 00 (η))/4,
dove ξ ∈ (x + h), η ∈ (x − h).

70
Si arriva quindi alla equazione alle differenze
1 1
(ui,j+1 − ui,j ) = (ui−1,j − 2ui,j + ui+1,j + ui−1,j+1 − 2ui,j+1 + ui+1,j+1 )
∆t 2γ∆2x
+ O(∆2x ) + O(∆2t )

che, ponendo r = ∆t /(2γ∆2x ), può essere riscritta come


1 1
[(1 + 2r)ui,j+1 − rui−1,j+1 − rui+1,j+1 ] = [(1 − 2r)ui,j + rui−1,j + rui+1,j ]
∆t ∆t
+ O(∆2x ) + O(∆2t )

Il sistema lineare ottenuto rimuovendo i termini con gli errori locali è dunque
1 1
((1 + 2r)vi,j+1 − rvi−1,j+1 − rvi+1,j+1 ) = ((1 − 2r)vi,j + rvi−1,j + rvi+1,j )
∆t ∆t
v0,j = a(tj ), vn+1,j = b(tj ), vi,0 = f (xi ).

L’espressione per l’errore globale è quindi

Am,n (n(m+1)) = O(∆2x + ∆2t ) (61)

dove  
A
1  −B A 
Am,n =
 
∆t 
 .. .. 
. . 
−B A
in cui A = tridm (−r, 1 + 2r, −r), B = tridm (r, 1 − 2r, r).
La convergenza del metodo in qualche norma si studia dando maggiorazioni
alla norma di A−1
m,n . Si osserva che, posto V = A
−1
B, risulta
 
I
 V I 
A−1 = ∆  (I ⊗ A−1 ).
 
m,n t  .. .. ..
 . . . 
Vm ... V I

La presenza di del blocco V m in basso a sinistra mostra che condizione


necessaria di stabilità è ρ(V ) ≤ 1 altrimenti la matrice V m divergerebbe espo-
nenzialmente. Si verifica facilmente che V = (I + rH)−1 (I − rH), dove H è la
matrice tridiagonale definita da H =tridm (−1, 2, −1). Per cui gli autovalori di
V sono
1 − 2r(1 − ci ) πi
, ci = cos( )
1 + 2r(1 − ci ) n+1
Il valore assoluto della espressione precedente è sempre minore di 1 qualunque
.
sia il valore di r. Il massimo si ottiene per ci = cos(π/(n + 1)) e vale ρ(V ) =
2
1 − 2r(π/(n + 1)) .

71
Questa proprietà può essere usata per dimostrare la convergenza incondizio-
nata in norma 2. Infatti, partizionando (n(m+1)) in blocchi i di lunghezza n,
e denotando con c = (ci ) il vettore a destra nel sistema (61), risulta
k−1
X
k = ∆t V i A−1 ck−i .
i=0

Introducendo la norma kvk = √1 kvk2 per vettori di n componenti, segue che


n

k−1
X
kk k ≤ ∆t kV ki2 kA−1 k2 kck−i k
i=0

da cui
∆t
kk k ≤ kA−1 k2 max kci k.
1 − kV k2 i

Vale inoltre kA−1 k2 = 1/(1 + 2r(1 − cos(π/(n + 1)))) < 1, e


.
∆t /(1 − kV k2 ) = ∆t /(1 − (1 − 2r(π/(n + 1))2 )) = ∆t /(2rπ 2 ∆2x ).

Poiché r = ∆t /(γ∆2x ), ne segue che ∆t /(1 − kV k2 ) è limitato superiormente da


una costante indipendente da m e da n, da cui la convergenza del metodo di
Crank-Nicolson in norma 2. Più precisamente esiste una costante θ > 0 tale che
kk k ≤ θ(∆2t + ∆2x ).
Una dimostrazione elementare della stabilità in norma infinito si può dare
sotto l’ipotesi r ≤ 1/2. Infatti vale il seguente risultato.

Teorema 30 Se r ≤ 1/2 per le matrici A = tridm (−r, 1 + 2r, −r) e B =


tridm (r, 1 − 2r, r), vale A−1 ≥ 0, B ≥ 0 inoltre

A−1 e ≤ e
Be ≤ e
A−1 Be ≤ e
Xm
(A−1 B)j A−1 e ≤ (m + 1)e
j=0

da cui kA−1
m,n k∞ ≤ 1.

Dim. Posto H = trid(−1, 2, −1) vale A = I + 2rH, e B = I − 2rH. Per


cui, se r ≤ 1/2 è B ≥ 0. Inoltre, essendo A una M-matrice dominante
diagonale è A−1 ≥ 0. Per quanto riguarda le rimanenti diseguaglianze vale
Ae = e + r(e1 + en ) ≥ e da cui, poiché A−1 ≥ 0 segue A−1 e ≤ e. Inoltre
Be = e − re1 − ren ≤ e. La terza diseguaglianza si ottiene componendo le due
precedenti. La quarta diseguaglianza segue dalla terza. 

72
Dal punto di vista implementativo il metodo di Crank-Nicolson conviene
scriverlo nella forma più semplice

(1 + 2r)vi,j+1 − rvi−1,j+1 − rvi+1,j+1 = (1 − 2r)vi,j + rvi−1,j + rvi+1,j ,

o, denotando con v j = (vi,j ), si ha

Av j+1 = Bv j + r(aj + aj+1 )e1 + r(bj + bj+1 )en , j = 0, 1, . . . , v0 = f ,

dove f = (f (xi )).

9.3 Il metodo θ
Si chiama metodo θ il metodo alle differenze finite che si ottiene combinando
linearmente le approssimazioni della derivata seconda di u rispetto ad x al tempo
tj e tj+1 con peso θ e 1 − θ. Col parametro θ = 1/2 si ottiene il metodo di
Crank-Nicolson, per cui il metodo θ ne costituisce una generalizzazione.

9.4 Altre discretizzazioni


Si consideri lo schema alle differenze ottenuto mediante le formule
∂ 2 u(x, t) 1
= 2 (u(x − ∆x , t) − 2u(x, t) + u(x + ∆x , t)) + ∆2x τ (ξ, t)
∂x2 ∆x
∂u(x, t) 1
= (u(x, t) − u(x, t − ∆t )) + ∆t σ(x, η)
∂t ∆t
Si dimostri che lo schema è incondizionatamente stabile. Inoltre, per l’operatore
alle differenze finite L∆ (ui,j ) ottenuto in questo modo vale la proprietà del
massimo discreto, cioè se L∆ (ui,j ) ≤ 0 nei punti della discretizzazione interni al
dominio allora ui,j prende il massimo sul bordo.
Si verifichi che se la discretizzazione della derivata temporale è fatta mediante
la formula
∂u(x, t) 1
= (u(x, t + ∆t ) − u(x, t)) + ∆t σ̃(x, η̃)
∂t ∆t
allora per l’operatore alle differenze finite ottenuto in questo modo vale la
proprietà del massimo discreto se r = ∆t /(γ∆2x ) è minore di 1/2.
Si studi il metodo che si ottiene approssimando la derivata temporale con la
formula (più precisa)

∂u(x, t) 1
= (u(x, t + ∆x ) − u(x, t − ∆t )) + ∆2t σ̂(x, η̂).
∂t 2∆t
Si dimostri che la norma infinito dell’inversa della matrice che discretizza l’ope-
ratore diverge per ∆t → 0 indipendentemente dal valore di r = ∆t /(γ∆2x ).

73
9.5 Caso tridimensionale
Nel modello in cui si studia la propagazione della temeperatura u(x, y, t) dei
punti (x, y) di una piastra Ω di cui si conosce ad ogni istante la temperatura g
sul bordo ∂Ω e i valori iniziali della temperatura della piastra, l’equazione del
calore prende la forma

∂u(x, y, t) ∂ 2 u(x, y, t) ∂ 2 u(x, y, t)


γ −( + )=0
∂t ∂x2 ∂y 2
con le condizioni al contorno
u(x, y, t) = g(x, y, t), (x, y) ∈ ∂Ω,
u(x, y, 0) = f (x, y), (x, y) ∈ Ω.

Anche in questo caso si possono applicare gli analoghi dei metodi alle differenze
finite esaminati nel paragrafo precedente.

9.6 Metodo di semi-discretizzazione (delle linee)


È possibile discretizzare l’equazione del calore solamente nella parte spaziale e
lasciare invece inalterata la variabile temporale. Quindi, discretizzando l’inter-
vallo [0, `] mediante la griglia xi = i∆x per i = 0, 1, . . . , n+1, con ∆x = `/(n+1),
e ponendo u = (ui ) con ui := u(xi ), si ottiene il problema
1
u0 = tridn (1, −2, 1)u + a(t)e1 + b(t)en + ∆2x τ n
γ∆2x

con le condizioni iniziali u(0) = f dove f = (fi ), fi = f (xi ).


Trascurando l’errore locale ∆2x τ n , si ottene il sistema di n equazioni diffe-
renziali in n incognite
1
v 0 = Av + a(t)e1 + b(t)en , v(0) = f , A= tridn (1, −2, 1)
γ∆2x

Questo sistema può essere risolto numericamente con i metodi numerici classici
per equazioni differenziali ordinarie.
Un approccio particolare può essere applicato nel caso più semplice in cui le
condizioni al bordo sono u(0, t) = u(`, t) = 0. In questo caso il sistema prende
la forma
v 0 = Av, v(0) = f
per cui la soluzione ammette una scrittura esplicita data da

v = eAt f .

Si osserva inoltre che, se siamo interessati a calcolare v(ti ), per i = 1, 2, . . . ,


dove ti = i∆t , è sufficiente calcolare M = e∆t A e porre v(ti ) = M v(ti−1 ),
con v(0) = f . Per valori moderati di n questa modalità risolutiva è efficace

74
e di facile implementazione in Matlab mediante la funzione expm che calcola
l’esponenziale di matrici.
Rimane il problema di valutare quanto l’errore locale ∆2x τ influisca sull’er-
rore globale  = u − v. È facile verificare che questo errore soddisfa l’equazione

0 = A + ∆2x τ , (0) = 0.

Nel caso in cui τ è costante la soluzione di questo sistema è

 = ∆2x A−1 (etA τ − τ ).

Si ricorda che A−1 ha norma limitata superiormente da una costante, e i suoi


autovalori λi sono tutti negativi. Questa seconda proprietà implica che anche
etA ha norma limitata superiormente da una costante infatti i suoi autovalori
sono etλi e convergono a zero per t → ∞. Per cui vale

kk ≤ ∆2x kA−1 k(1 + ketA k)kτ k = O(∆2x ).

Limitazioni analoghe possono essere date nel caso τ sia un polinomio in t.

10 Equazioni iperboliche
Consideriamo ora l’equazione delle onde

∂2u ∂2u
2
= γ 2 , 0 < x < 1, 0 < t < tmax , (62)
∂t ∂x
con le condizioni
u(x, 0) = f (x), 0 < x < 1
∂u(x, t)
|t=0 = g(x), 0 < x < 1 (63)
∂t
u(0, t) = 0, u(1, t) = 0.

10.1 La soluzione di D’Alembert


L’equazione delle onde nella forma (62) ammette una forma esplicita della so-
luzione. Infatti, se F (x) e G(x) sono due funzioni derivabili due volte con
continuità, allora u(x, t) = F (x + ct) + G(x − ct) soddisfa l’equazione (62) con

c = γ. Basta quindi costruire F e G in modo che u(x, t) soddisfi le condizioni
(63). Si verifica che l’imposizione delle (63) porta a
Z x+ct
1 1
u(x, t) = [f (x + ct) + f (x − ct)] + g(ν)dν
2 2c x−ct

cioè, F (x) = 12 (f (x) + ĝ(x)), G(x) = 12 (f (x) − ĝ(x)) con ĝ(x)0 = 1c g(x).
Si osserva che il valore u(x∗ , t∗ ) della soluzione (x, t) nel punto (x∗ , t∗ ) di-
pende unicamente dai valori f (x∗ + ct∗ ), f (x∗ − ct∗ ) e dai valori della funzione

75
Figura 18: Dominio di dipendenza della soluzione dell’equazione delle onde

g nell’intervallo [x∗ − ct∗ , x∗ + ct∗ ]. In altri termini, il valore di u(x∗ , t∗ ) non è


influenzato dai valori delle condizioni iniziali al di fuori di [x∗ − ct∗ , x∗ + ct∗ ].
Analogamente, i valori di u(x∗ , t∗ ) dipendono dai valori della “storia passata”
di u(x, t) racchiusa dalle due rette passanti per (x∗ , t∗ ) e rispettivamente per
i punti (x∗ − ct∗ , 0), (x∗ + ct∗ , 0) dette rette caratteristiche. Le rette hanno
equazione x − ct = x∗ − ct∗ e x + ct = x∗ + ct∗ . La figura 18 riporta tali rette e
il dominio da esse racchiuso detto dominio di dipendenza.

10.2 Discretizzazione
Adottiamo l’equazione (62) come esempio per mostrare la risoluzione alle diffe-
renze finite di un problema iperbolico.
Discretizzando il dominio con i punti (xi , tj ), xi = i∆x , tj = j∆t , i =
0, . . . , n + 1, j = 0, 1, . . . , m + 1, δx = 1/(n + 1), ∆t = tmax /(m + 1) e
approssimando le due derivate seconde con la formula (5) si ottiene
1 1
(ui,j+1 − 2ui,j + ui,j−1 ) = 2 r(ui+1,j − 2ui,j + ui−1,j ) + O(∆2t ) + O(∆2x ).
∆2t ∆t
 2
∆t
con r = γ ∆x e con le condizioni al bordo

u0,j = un+1,0 = 0 j = 0, 1, . . . , m + 1
ui,0 = f (xi ), i = 1, . . . , n (64)
∆2t 00 3
ui,1 = f (xi ) + ∆t g(xi ) + 2 γf (xi ) + O(∆t ) i = 1, . . . , n

76
La terza condizione si ottiene nel seguente modo mediante uno sviluppo in serie
essendo ∂u(x, 0)/∂x = g(x):

∂u(xi , 0) ∆2t ∂ 2 u(xi , 0)


ui,1 = u(xi , ∆t ) = f (xi ) + ∆t + + O(∆3t )
∂t 2 ∂t2
∆2 ∂ 2 u(xi , 0)
= f (xi ) + ∆t g(xi ) + t γ + O(∆3t )
2 ∂x2
∆2
= f (xi ) + ∆t g(xi ) + t γf 00 (xi ) + O(∆3t )
2
Se la derivata seconda di f (x) non fosse disponibile basta approssimarla con
una formula alle differenze con errore O(∆2x ).
Denotando con u(j) il vettore di componenti ui,j , per i = 1, . . . , n, e con
f , g, f 00 i vettori le cui componenti sono i valori delle corrispondenti funzioni
f (x), g(x), f 00 (x) in xi per i = 1, . . . , n, si ha
1 (1) 1 1 1
u = 2f + g + γf 00 + O(∆2t )
∆2t ∆t ∆t 2
1 (2) 1 1 (1) 1
2 u = 2 Vn 2 u + 2 f + O(∆2t ) + O(∆2x )
∆t ∆t ∆t ∆t
1 (j+1) 1 1
u = 2 Vn u(j) − 2 u(j−1) + +O(∆2t ) + O(∆2x )
∆2t ∆t ∆t

dove Vn = tridn (r, 2 − 2r, r).


In forma matriciale si ottiene quindi il sistema
 
In
 u(1)
 
 −Vn In
1  In

−Vn In

  .. 
  .  = b + O(∆2t + ∆2x ) (65)
∆2t 

 . .. . .. . .. 
 u(n)
In −Vn In

dove il vettore b dipende dalle condizioni (64).


Lo schema alle differenze che si ottiene è uno schema esplicito nel senso che
la soluzione discreta al tempo j si può esprimere in funzione delle soluzioni al
tempo j − 1 e j − 2. Lo schema è rappresentato dallo stencil

0 1 0
r 2 − 2r r
0 1 0

e la soluzione nel punto (xi , tj ) dipende dai valori delle soluzioni nei pun-
ti (xi−1 , tj−1 ), (xi , tj−1 ), (xi+1 , tj−1 ) e (xi , tj−2 ). In figura 19 viene riporta-
ta in forma grafica questa dipendenza assieme alpdominio di dipendenza per
l’operatore discreto dove si è posto δ = ∆x /∆t = γ/r.
Si osservi che la soluzione discreta dipende dai valori delle funzioni f (x) e
g(x), che danno le condizioni iniziali, nell’intervallo [xi − δtj , xi + δtj ], mentre la

77
Figura 19: Dominio p
di dipendenza dell’operatore discreto per l’equazione delle
onde, δ = ∆x /∆t = γ/r

soluzione del problema continuo in (xi , tj ) dipende dai valori nell’intervallo [xi −
ctj , xi + ctj ]. Se δ < c il secondo intervallo include strettamente il primo per cui
esistono valori delle condizioni iniziali che alterano la soluzione della equazione
differenziale ma non alterano la soluzione dell’equazione alle differenze. Questo
fatto ci fa capire che se r > 1 non ci può essere convergenza. Infatti dimostriamo
ora che questa condizione è necessaria per la stabilità.
La stabilità e la convergenza dello schema dipendono dalla limitatezza della
norma dell’inversa della matrice Am,n del sistema (65). Supponiamo per sem-
plicità m pari e si partizioni Am,n in blocchi di dimensione 2n × 2n in modo che
risulti bidiagonale a blocchi. Vale allora
 
I2n
    −H I2n
1 In 0 2n

An = 2 Im/2 ⊗ (
 
∆t −Vn In

 . .. . .. 

−H2n I2n

dove  −1    
I 0 I −Vn I −Vn
H2n = =
−Vn I 0 I Vn I − Vn2
n/2−1
Poiché nell’inversa di Am,n compare la matrice H2n , una condizione necessa-
ria di stabilità è ρ(H2n ) ≤ 1. Si ha che ρ(H2n ) ≤ 1 se e solo se gli autovalori λ di
Vn sono tali che −2 ≤ λ ≤ 2. Usando il teorema 5 si deduce che tale condizione
equivale a r(1 − cos(πi/(n + 1))) ≤ 2, per i = 1, . . . , n e per ogni n, cioè r ≤ 1.
Si può verificare che questa condizione di stabilità è anche sufficiente.

78
Un esempio di equazione differenziale classificata come iperbolica è data
dall’equazione di trasporto lineare
∂u ∂u
+a =0
∂t ∂x
dove a è una costante. Si può verificare che

u(x, t) = g(x − at).

risolve l’equazione di trasporto lineare dove u(x, 0) = g(x). Inoltre ogni soluzio-
ne è di questo tipo.
Si osservi che u(x, t) è costante lungo le rette di equazione x−at = γ. Quindi,
dato il punto (x∗ , t∗ ), vale u(x∗ , t∗ ) = u(x, t) per x − at = x∗ − at∗ . Queste rette
sono dette rette caratteristiche.
I punti di coordinate (x∗ + a(t − t∗ ), t) per 0 ≤ t ≤ t∗ , in cui la funzione vale
u(x∗ , t), formano il dominio di dipendenza continuo di u(x∗ , t∗ ).
La versione non omogenea è data da
∂u ∂u
+a = f (x, t)
∂t ∂x
dove f (x, t) è funzione sufficientemente regolare.
Il problema può essere formulato sul dominio rettangolare [0, `] × [0, T ] con
le condizioni u(x, 0) = α(x) per x ∈ [0, `] e u(0, t) = β(t) per t ∈ [0, T ].
Si possono dare varie discretizzazioni di questa equazione usando per ap-
prossimare le derivate spaziali e temporali differenze in avanti, all’indietro o
centrate in tutte le loro combinazioni. Posto ui,j = u(xi , tj ) dove tj = ∆t j e
xi = i∆x , con ∆x = `/n, ∆t = T /m, per i = 0, . . . , n, j = 0, . . . , m, l’operatore
differenziale può essere discretizzato dai seguenti schemi
a 1
(ui+1,j − ui,j ) + (ui,j+1 − ui,j ),
∆x ∆t
a 1
(ui+1,j − ui,j ) + (ui,j − ui,j−1 ),
∆x ∆t
a 1
(ui+1,j − ui,j ) + (ui,j+1 − ui,j−1 ),
∆x 2∆t
a 1
(ui+1,j − ui−1,j ) + (ui,j+1 − ui,j−1 ),
2∆x ∆t
a 1 1
(ui+1,j − (ui,j+1 + ui,j−1 )) + (ui,j+1 − ui,j−1 ).
∆x 2 2∆t
Questi schemi sono detti rispettivamente forward-forward, forward-backward,
forward-central, central-central o leapfrog. L’ultimo è invece lo schema di Lax-
Friedrichs.
Analizziamo ad esempio il primo schema e assumiamo per semplicità a < 0.
Si ordinano le incognite secondo l’ordinamento lessicografico

(u1,1 , u2,1 , . . . , un,1 , u1,2 , u2,2 , . . . , un,2 , . . . u1,m , u2,m , . . . , un,m )

79
in modo che il vettore cosı̀ ottenuto può essere partizionato in m blocchi u(j) =
(ui,j )i=1,n per j = 1, . . . , n. Ponendo r = a∆∆x , la matrice del sistema allora
t

diventa  
I
−S I 
1  −S I

A=
 
∆t 
 
. . . . 
 . . 
−S I
dove  
1+r −r

 1+r −r 

S=
 .. .. 
 . . 

 1+r −r 
1+r
è una matrice n × n. La matrice inversa è dunque
 
I
 S I 
 2 
−1  S S I
A = ∆t 


 .. . .. .. ...
. 
 . 
S m−1 ... S2 S I

Se r ∈ (−1, 0), la matrice S è non negativa per cui anche l’inversa A−1 è non
negativa e la sua norma infinito è data da
m
X ∞
X
∆t k S i ek∞ ≤ ∆t k S i ek∞ = ∆t k(I − S)−1 ek∞
i=0 i=0

Ma vale  
1 −1

 1 −1 

I − S = −r 
 .. .. 
 . . 

 1 −1
1
per cui  
1 1 ... 1
 .. .. 
1 . .
(I − S)−1 = −r−1 


 .. 
 . 1
1
Quindi k(I − S)−1 ek∞ = −r−1 n da cui,
∆x `
kA−1 k∞ ≤ −r−1 n∆t = − ∆t = −`/a
a∆t ∆x

80
essendo r−1 = ∆x /(a∆t ) e n = `/∆x . Cioè la norma dell’inversa è limitata
uniformemente da una costante. Questo garantisce stabilità e convergenza.
Nel caso a > 0 non ci sarebbe stata stabilità.
Lo stencil del caso forward-forward è il seguente dove l’asse orizzontale è
l’asse x, indicizzato da i e quello verticale è quello del tempo indicizzato da j.

Si osservi che, come risulta dallo stencil, il valore di ui,j dipende da ui,j−1
e da ui+1,j−1 cioè da (xi , tj−1 ) e (xi+1 , tj−1 ). Per cui il dominio di dipendenza
discreto per ui,j è formato da (xh , tk ) dove k ≤ j, h = i, . . . , i + k. Il dominio
di dipendenza discreto è mostrato in figura

Si osservi che se a < 0 e r ∈ (−1/2, 0) allora l’involuco convesso del dominio


di dipendenza discreto contiene il dominio di dipendenza continuo. Se invece
r 6∈ (−1/2, 0) allora ci sarebbero valori del dominio di dipendenza continuo che
non apparterrebbero all’involucro convesso del dominio di dipendenza discreto
qualunque siano n e m. Per cui, modificando le condizioni iniziali alterando i
valori che stanno nel dominio di dipendenza continuo ma non nell’involucro del
dominio di dipendenza discreto la soluzione dell’equazione differenziale cambie-
rebbe mentre non cambierebbe quella dell’equazione alle differenze. Il metodo
numerico non sarebbe quindi in grado di approssimare la soluzione. Questo
conferma l’analisi di stabilità.

10.3 Metodo di semi-discretizzazione


Anche per equazioni iperboliche può essere applicato un metodo in cui viene
discretizzata solamente la derivata rispetto allo spazio mediante i punti xi =
i∆x , i = 0, 1, . . . , n + 1, ∆x = 1/(n + 1). Procedendo come nel caso parabolico
si arriva al sistema di equazioni differenziali

u00 = Au + ∆2x τ , u(0) = f , u0 (0) = g

dove f = (fi ), g = (gi ), fi = f (xi ), gi = g(xi ), A = (γ/∆2x )tridn (1, −2, 1) e


∆2x τ è l’errore locale di discretizzazione. Il sistema viene sostituito dall’analogo

81
sistema ottenuto rimuovendo l’errore locale e si ha

v 00 = Av, v(0) = f , v 0 (0) = g. (66)

In questo caso la soluzione si scrive come

v(t) = cos(tB)f + sin(tB)B −1 g (67)

dove B = (−A)1/2 e sin(tB), cos(tB) denotano funzioni di matrici. Infatti,


ricordando che sin(0B) = 0, cos(0B) = I, e sin(tB)0 = B cos(tB), cos(tB)0 =
−B sin(tB), ne segue v 0 (t) = −B sin(tB)f +B cos(tB)B −1 g e v(0) = f , v 0 (0) =
g. Inoltre v 00 = −B 2 sin(tB)f − B 2 cos(tB)g = Av.
La soluzione (67) può essere facilmente calcolata avendo a disposizione le
funzioni di matrice seno e coseno.
Un approccio per risolvere il sistema (66) che riconduce il calcolo alla funzio-
ne esponenziale di matrice si ottiene nel modo seguente. Si introduce il vettore
w = [v; v 0 ], dove si sono usate le notazioni di Matlab. Si riscrive (66) come
 
0 0 I
w = Aw, A =
A 0

con le condizioni w(0) = [f ; g]. In questo modo si può scrivere la soluzione


come
w(t) = etA w(0).
Inoltre, come nel caso parabolico, i valori w(tj ), per tj = j∆t , si possono
calcolare mediante

w(tj+1 ) = e∆t A w(tj ), j = 0, 1, 2, . . . .

Si osservi che, come nel caso parabolico, la matrice A ha inversa con norma
limitata e etA ha norma limitata essendo gli autovalori di A numeri immaginari
puri. Questo fatto garantisce la stabilità del metodo.
Il metodo di semi-discretizzazione si applica efficacemente anche in presenza
di attrito viscoso nel modello. In questo caso l’equazione delle onde è del tipo

∂2u ∂2u ∂u
2
=γ 2 −a
∂t ∂x ∂t
dove il termine in cui compare la derivata prima rispetto al tempo esprime
l’azione resistente della forza di attrito di coefficiente a ≥ 0.
Nella versione semi-discreta il sistema di equazioni ordinarie diventa

v 00 = Av − av 0

e la sua linearizzazione è della forma w0 = Aw con


 
0 I
A= .
A −aI

82
La costruzione della matrice A in matlab si realizza facilmente col comando
AA = [zeros(n), eye(n); A, -a*eye(n)];
dove A è la matrice tridiagonale che discretizza la derivata seconda, su un reti-
colo di n punti, moltiplicata per γ. Nel caso di problemi multidimensionali A è
la matrice che discretizza il laplaciano sul dominio.
Si osserva che, poiché A è diagonalizzabile con autovalori λi negativi, gli
autovalori di A coincidono con l’unione degli autovalori di
 
0 1
λi −a

che sono le soluzioni dell’equazione quadratica

x2 + ax − λi = 0.

Queste soluzioni hanno parte reale negativa, per cui la matrice etA ha norma
limitata. Inoltre poiché  −1
A−1

aA
A−1 =
I 0
e A ha norma limitata, ne segue che anche A−1 ha norma limitata. Quindi c’è
stabilità.

11 Note computazionali
I sistemi lineari ottenuti discretizzando equazioni differenziali alle derivate par-
ziali col metodo delle differenze finite sono generalmente a banda (a blocchi)
e sparsi. Nel caso in cui tali sistemi non siano triangolari (a blocchi) per cui
un metodo di sostituzione può risolvere in modo efficiente il sistema, è preferi-
bile usare un metodo iterativo. Nel caso delle equazioni di tipo ellittico in cui
la matrice del sistema è una M-matrice simmetrica, e quindi definita positiva,
il metodo iterativo più indicato è il metodo del gradiente coniugato (precon-
dizionato). Tale metodo, cosı̀ come molti altri, richiede ad ogni passo come
operazione più costosa il calcolo del prodotto matrice vettore. Ad esempio, nel
caso della matrice Am,n che discretizza il laplaciano cambiato di segno su un ret-
tangolo, il prodotto y = h2 Am,n x si realizza con le seguenti semplici istruzioni
nella sintassi tipo Matlab.
for i=1:m
for j=1:n
y(i+1,j+1)=4*x(i+1,j+1)-x(i,j+1)-x(i+2,j+1)-x(i+1,j)-x(i+1,j+2);
end
end

Si osservi che nel doppio ciclo for abbiamo dovuto aumentare di 1 i valori
degli indici delle variabili x e y. Infatti, Matlab richiede indici positivi. In
altri termini il valore di ui,j è memorizzato nella variabile x(i + 1, j + 1) per
i = 0, . . . , m + 1, j = 0, . . . , n + 1.

83
Si osservi ancora che nel doppio cilco for intervengono punti che stanno
sul bordo del dominio. Questi possono essere rimossi assegnando il valore zero
alle componenti di bordo di x. Nel caso in cui il metodo iterativo richieda il
calcolo del residuo Am,n x − b è conveniente assegnare ai valori di bordo della
variabile x i valori al contorno del problema. In questo modo il calcolo svolto
nel doppio cilco for non corrisponde alla sola moltiplicazione di hAm,n per il
vettore incognito ma include anche la parte del termine noto che contiene le
condizioni al bordo.
Poiché Matlab è un linguaggio interpretato, l’esecuzione di due cicli for an-
nidati può richiedere un tempo di esecuzione elevato se i valori di m e n sono
“moderatamente grandi”. Un modo per ovviare a questo inconveniente è scrivere
il doppio ciclo in forma “vettoriale” nel modo seguente:

y(2:m+1,2:n+1) = 4*x(2:m+1,2:n+1) - x(1:m,2:n+1) - x(3:m+2,2:n+1)


- x(2:m+1,1:n) - x(2:m+1,3:n+2);

Nel caso in cui il dominio Ω non coincide col rettangolo ma è un suo sottoin-
sieme proprio, ad esempio un dominio di forma ad L o un quadrato con un foro
al suo interno di forma quadrata, è possibile modificare leggermente il program-
ma per il calcolo del prodotto matrice-vettore. Conviene introdurre una nuova
variabile dominio tale che dominio(i+1,j+1) vale 1 se il punto (xi , yj ) sta nel
dominio e vale 0 altrimenti. Il doppio ciclo for si trasforma in modo semplice in

for i=1:m
for j=1:n
if dominio(i+1,j+1)
y(i+1,j+1)=4*x(i+1,j+1)-x(i,j+1)-x(i+2,j+1)-x(i+1,j)-x(i+1,j+2);
end
end
end

Anche in questo caso è possibile dare una versione in forma “vettorizzata”


del doppio ciclo for procedendo come nel caso del rettangolo, facendo seguire il
calcolo dall’operazione y=dominio .* y; che serve a riportare a zero i valori
di y al di fuori del dominio di interesse. Si ricorda che l’operatore .* esegue il
prodotto elemento a elemento delle due matrici.
Un metodo iterativo per risolvere il sistema Ax = b, che si basa sul calcolo
del residuo, è il metodo di Richardson definito da

x(k+1) = x(k) − α(Ax(k) − b)

a partire da un vettore iniziale x(0) , generalmente x(0) = 0. La convergenza del


metodo si ha se il raggio spettrale della matrice di iterazione I − αA è minore
di 1. Se la matrice A è definita positiva e i suoi autovalori sono compresi in
(0, λmax ), allora la scelta α ≤ 1/λmax garantisce la convergenza. Non avendo
informazioni sullo spettro di A, si può sempre scegliere α = 1/kAk per una
qualsiasi norma matriciale indotta k · k.

84
Figura 20: Configurazione di equilibrio di una membrana elastica (bolla di sa-
pone) calcolata col metodo del gradiente coniugato applicato al sistema linea-
re ottenuto discretizzando l’equazione di Laplace su un dominio “bucato” con
condizioni di Dirichlet

La figura 20 mostra la configurazione di una bolla di sapone calcolata col


metodo del gradiente coniugato applicato al sistema lineare ottenuto discre-
tizzando l’equazione di Laplace sul dominio [0, 3] × [0, 3]\[1, 2] × [1, 2] con le
condizioni u(x, y) = 0 sul bordo del quadrato maggiore e u(x, y) = 1 sul bordo
del quadrato minore.
La figura 21 mostra una analoga configurazione in cui il dominio è il quadrato
[0, 1] × [0, 1] e la funzione è nulla su due lati opposti del quadrato mentre vale
x(1 − x) sugli altri due lati opposti.
La figura 22 differisce dalla precedente poichè al dominio è stato tolto un
quadrato centrale al bordo del quale la funzione prende il valore nullo.
La figura 23 mostra la situazione di equilibrio di una membrana elastica
pesante vincolata ad un bordo circolare a quota 0 e ad un bordo circolare interno
a quota più elevata.
Per una panoramica dei metodi iterativi e per una descrizione algoritmica
che permette facili implementazioni, si suggerisce il documento [?].
Si riportano le function nella sintassi di Matlab che svolgono il calcolo della
configurazione di equilibrio risolvendo l’equazione di Laplace ∆u = 0. Si osservi
che, poiché l’equazione è omogenea, il parametro h non ha un ruolo effettivo nel
sistema di equazioni. Infatti esso non compare nell’iterazione.
La function 10 calcola la posizione di equlibrio nel caso di un dominio arbi-
tario contenuto in un dominio rettangolare. Il dominio in cui viene trattato il

85
Figura 21: Configurazione di equilibrio di una membrana elastica a supporto
quadrato con condizioni nulle su due lati opposti e pari a x(1 − x) sui rimanenti
due lati.

Figura 22: Configurazione di equilibrio di una membrana elastica a suppor-


to quadrato “bucato” con condizioni nulle su due lati opposti del quadrato
maggiore, pari a x(1 − x) sui rimanenti due lati, e nulle sul quadrato interno.

86
Listing 9: Risoluzione del problema ∆u = 0 su un rettangolo mediante differenze
finite utilizzando il metodo iterativo di Richardson.
function v = poisson_richardson(f)
% function v = poisson_richardson(f)
% risolve il problema di Poisson su [0,1]x[0,1] con termine noto f(x,y)
% col metodo delle differenze finite
% f e’ matrice (m+2)x(n+2), sulla prima e utima riga e colonna contiene
% le condizioni al bordo, nella parte rimanente contiene i valori di
% f(x,y) nei punti della griglia
% v e’ una matrice (m+2)x(n+2) con i valori della soluzione, bordo
incluso
% Il sistema lineare Av = f e’ risolto con l’iterazione di
% Richardson: v_{k+1}=v_k-alfa*(Av_k-f) dove 0 < alfa <= 2/||A||
% Il residuo Av-f viene calcolato in ’modo vettoriale’
% Il termine noto appare implicitamente attraverso le condizioni al
% contorno date dalle righe e colonne estreme della matrice di input v
maxit = 2000; epsi = 1.e-6;
m = size(f,1); n = size(f,2);
n = n-2; m = m-2;
hy = 1/(m+1); hx = 1/(n+1);
rhx = 1/hx^2; rhy = 1/hy^2;
alpha = 2/(4*rhy+4*rhx);
v = f;
% risolvo il sistema -A v = -f
f(2:m+1,2:n+1) = -f(2:m+1,2:n+1);
for it=1:maxit
sy = (2*v(2:m+1,2:n+1)-v(1:m,2:n+1)-v(3:m+2,2:n+1))*rhy;
sx = (2*v(2:m+1,2:n+1)-v(2:m+1,1:n)-v(2:m+1,3:n+2))*rhx;
r = sx + sy - f(2:m+1,2:n+1);
r = r*alpha;
err = max(max(abs(r)));
disp([it err]);
v(2:m+1,2:n+1) = v(2:m+1,2:n+1)-r;
if err<epsi
break
end
end
mesh(v); % disegna la posizione di equilibrio della membrana
% per salvare la figura scommentare l’istruzione che segue
% print ’bolla.jpg’ -djpg
end

87
Figura 23: Configurazione di equilibrio di una membrana elastica pesante vin-
colata ad un bordo circolare a quota 0 e ad un bordo circolare interno a quota
più elevata.

problema è individuato dalla matrice dominio i cui elementi valgono 1 nei punti
interni al dominio, valgono 0 altrove. L’iterazione di Richardson si ripete in
modo analogo al caso del dominio rettangolare con la differenza che l’iterazione
non viene aggiornata nei punti fuori dal dominio e che i punti esterni al dominio
non contribuiscono al prodotto matrice vettore se non quelli di bordo. Ciò si
realizza moltipicando
La function riportata nel listing 11 risolve l’equazione del calore col metodo
del paragrafo 9.1 che è stabile se r < 1/2.
Calcolando la soluzione con T = 1, γ = 32.4, u(0, t) = u(1, t) = 1, u(x, 0) =
0, e scegliendo n = 40, m = 100 si ha instabilità essendo r = 0.51883 e si ottiene
la figura 24.
Scegliendo invece γ = 34 si ha r < 1/2 per cui il metodo è stabile. La
soluzione calcolata in questo caso è mostrata in figura 25.
Le function riportate nei listati seguenti sono prive di commento. Il comm-
neto è lo stesso riportato nella function 11.
Il listato 12 riporta lo stesso metodo implementato però in forma vettoriale.
Il codice in questa forma è più efficiente.
La function riportata nel listato 13 risolve l’equazione del calore col metodo
ottenuto discretizzando la derivata prima con una differenza all’indietro. Il
metodo è incondizionatamente stabile.

88
Listing 10: Risoluzione del problema di Poisson ∆u = f in un dominio contenuto
in un quadrato mediante differenze finite e iterazione di Richardson.
function v = poisson_richardson2(f,dominio)
% function v = poisson_richardson2(f)
% risolve il problema di Poisson su un dominio contenuto in [0,1]x[0,1]
con
% termine noto f(x,y) col metodo delle differenze finite
% f e’ matrice (m+2)x(n+2), sul bordo del dominio contiene
% le condizioni al contorno, nella parte rimanente contiene i valori di
% f(x,y) nei punti della griglia
% dominio e’ una matrice (m+2)x(n+2) che vale 1 nei punti interni al
dominio
% vale 0 nei punti esterni o di bordo
% v e’ una matrice (m+2)x(n+2) con i valori della soluzione nei punti del
% dominio, bordo incluso, mentre vale 0 fuori del dominio
% Il sistema lineare Av = f e’ risolto con l’iterazione di
% Richardson: v_{k+1}=v_k-alfa*(Av_k-f) dove 0 < alfa <= 2/||A||
% Il residuo Av-f viene calcolato in ’modo vettoriale’
% Il termine noto appare implicitamente attraverso le condizioni al
% contorno date dalle righe e colonne estreme della matrice di input v
maxit = 2000; epsi = 1.e-6;
m = size(f,1); n = size(f,2);
n = n-2; m = m-2;
hy = 1/(m+1); hx = 1/(n+1);
rhx = 1/hx^2; rhy = 1/hy^2;
alpha = 2/(4*rhy+4*rhx);
v = f;
% risolvo il sistema -A v = -f
f(2:m+1,2:n+1) = -f(2:m+1,2:n+1);
for it=1:maxit
sy = (2*v(2:m+1,2:n+1)-v(1:m,2:n+1)-v(3:m+2,2:n+1))*rhy;
sx = (2*v(2:m+1,2:n+1)-v(2:m+1,1:n)-v(2:m+1,3:n+2))*rhx;
r = sx + sy - f(2:m+1,2:n+1);
r = r*alpha;
r = r.*dominio(2:end-1,2:end-1);
err = max(max(abs(r)));
disp([it err]);
v(2:m+1,2:n+1) = v(2:m+1,2:n+1)-r;
if err<epsi
break
end
end
mesh(v); % disegna la posizione di equilibrio della membrana
% per salvare la figura scommentare l’istruzione che segue
% print ’bolla.jpg’ -djpg
end

89
Listing 11: Risoluzione dell’equazione del calore mediante differenze finite con
la derivata prima approssimata da una differenza in avanti. Il metodo è stabile
se r ≤ 1/2.
function u = calore_fw(a, b, u0, g, T)
% function u = calore_fw(a, b, u0, T)
% calcola la soluzione u(x,t) dell’equazione del calore
% g*u_t-u_xx = 0 su [0,1]x[0:T]
% con valori al bordo u(0,t)=a(t), u(1,t)=b(t), u(x,0) = u0(x)
% la soluzione u(x,t) viene data come matrice (n+2)xm
% dove u_{i,j}=u(x_i,t_j)
% metodo usato: differenze finite con differenza in avanti
n = length(u0); m = length(a);
Dx = 1/(n+1); Dt = T/m;
r = Dt/(g*Dx^2);
u = zeros(n+2,m); u(2:n+1,1) = u0; u(1,:) = a; u(n+2,:) = b;
if r>1/2
disp(’WARNING: il metodo non e’ stabile’)
r
end
% risolvo
for j=1:m-1
for i=2:n+1
u(i,j+1)=r*(u(i+1,j)+u(i-1,j))+(1-2*r)*u(i,j);
end
end
mesh(u);
end

90
Figura 24: Soluzione dell’equazione del calore: caso instabile

Figura 25: Soluzione dell’equazione del calore: caso stabile

91
Listing 12: Risoluzione dell’equazione del calore mediante differenze finite con
la derivata prima approssimata da una differenza in avanti. Versione vettoriale.
function u = calore_fwv(a, b, u0, g, T)
% metodo usato: differenze finite con differenza in avanti
n = length(u0); m = length(a);
Dx = 1/(n+1); Dt = T/m; r = Dt/(g*Dx^2);
u = zeros(n+2,m); u(2:n+1,1) = u0; u(1,:) = a; u(n+2,:) = b;
if r>1/2
disp(’WARNING: il metodo non e’ stabile’); disp(r)
end
% risolvo
for j=1:m-1
u(2:n+1,j+1)=r*(u(3:n+2,j)+u(1:n,j))+(1-2*r)*u(2:n+1,j);
end
mesh(u);

La function riportata nel listato 13 risolve l’equazione del calore col metodo
di Crank-Nicolson.
La function riportata nel listato 15 risolve l’equazione del calore col meto-
do di semi-discretizzazione usando l’esponenziale di matrici. In questo caso le
condizioni al bordo devono essere nulle.
Nella figura 26 si riporta la soluzione ottenuta col metodo di Crank-Nicolson
scegliendo n = m = 400, a = b = 1, g = 1, t = 1/4, con una rappresentazione
data mediante colori.

12 Il modello non lineare della bolla di sapone


Come già accennato nella sezione introduttiva, la superficie di minima area
sottesa da una curva chiusa nello spazio si ottiene risolvendo l’equazione non
lineare di Eulero-Lagrange
2 2
∂2u ∂u ∂u ∂ 2 u ∂2u
 
∂u ∂u
(1 + )−2 + 2 (1 + )=0
∂x2 ∂y ∂x ∂y ∂x∂y ∂y ∂x
Per curve non troppo sghembe in cui le derivate prime di u(x, y) sono “pic-
cole” questo operatore non lineare è approssimata dal laplaciano. In generale
possiamo però affrontare numericamente un problema non lineare con un ap-
proccio iterativo. Se il primo membro dell’equazione di Eulero-Lagrange lo chia-
miamo residuo e lo denotiamo con r(u), l’equazione r(u) = 0 può essere trattata
numericamente con il metodo di Richardson, nella sua forma più generale, che
produce una successione uk (x, y) di funzioni definita da
uk+1 (x, y) = uk (x, y) − αr(uk (x, y)), k = 0, 1, 2, . . .
dove α è una costante opportuna. Possiamo implementare questo metodo nel
discreto sostituendo a u(x, y) una matrice m×n con i valori di u(x, y) campionati

92
Listing 13: Risoluzione dell’equazione del calore mediante differenze finite con
la derivata prima approssimata da una differenza all’indietro. Il metodo è
incondizionatamente stabile.
function u = calore_bw(a, b, u0, g, T)
% metodo usato: differenze finite con differenza all’indietro
n = length(u0); m = length(a);
Dx = 1/(n+1); Dt = T/m; r = Dt/(g*Dx^2);
u = zeros(n+2,m); u(2:n+1,1) = u0; u(1,:) = a; u(n+2,:) = b;
% costruisco blocco diagonale
vn = sparse(ones(n,1)); vn1 = sparse(ones(n-1,1));
A = (1+2*r)*diag(vn) - r*diag(vn1,1) - r*diag(vn1,-1);
% vettori e1, en della base canonica
e1 = zeros(n,1); en = e1; e1(1) = 1; en(n) = 1;
% risolvo
for j=1:m-1
u(2:n+1,j+1) = A\(u(2:n+1,j) + r*a(j+1)*e1 + r*b(j+1)*en);
end
mesh(u);

Listing 14: Risoluzione dell’equazione del calore mediante differenze finite con
il metodo di Crank-Nicolson.
function u = calore_CN(a, b, u0, g, T)
% metodo usato: Crank-Nicolson
n = length(u0); m = length(a);
Dx = 1/(n+1); Dt = T/m; r = Dt/(2*g*Dx^2);
u = zeros(n+2,m); u(2:n+1,1) = u0; u(1,:) = a; u(n+2,:)=b;
% costruisco matrice diagonale A e sottodiagonale B
vn = sparse(ones(n,1)); vn1 = sparse(ones(n-1,1));
A = (1+2*r)*diag(vn) - r*diag(vn1,1) - r*diag(vn1,-1);
B = (1-2*r)*diag(vn) + r*diag(vn1,1) + r*diag(vn1,-1);
% risolvo
u(2:n+1,2)=A\(B*u(2:n+1,1));
for j=2:m-1
w = r*(a(j+1) + a(j))*e1 + r*(b(j + 1) + b(j))*en;
u(2:n+1,j+1) = A\(B*u(2:n+1,j) + w);
end
mesh(u);

93
Listing 15: Risoluzione dell’equazione del calore mediante semi-discretizzazione
e uso della funzione esponenziale di matrice.
function u = calore_exp(a, b, u0, g, T)
% metodo usato: funzione expm
n = length(u0); m = length(a); dt = T/m;
a = zeros(n,1); a(1)=-2; a(2)=1; a=a*(n+1)^2/g;
A = toeplitz(a); B = expm(dt*A);
u = zeros(n+2,m); u(2:n+1,1) = u0;
for i=2:m
u0 = B*u0; u(2:n+1,i) = u0;
end

Figura 26: Soluzione dell’equazione del calore ottenuta col metodo di Crank-
Nicolson con n = m = 400. I colori danno il livello di temperatura.

94
nei punti di un reticolo, e sostituire alle derivate prime e seconde degli operatori
discreti dati dalle matrici tridiagonali o bidiagonali come già fatto per i problemi
standard.
In questo modo il residuo r(ui,j ) è una applicazione non lineare dallo spazio
delle matrici m × n in sé. E possiamo utilizzare l’iterazione di Richardson nella
forma discreta.
Una trattazione adeguata di questo problema non lineare comporta una ana-
lisi di stabilità, e una analisi di convergenza del metodo di Richardson. Que-
st’ultima in particolare è agevole se lo Jacobiano J di r(ui,j ) è definito positivo
(scegliendo α > 0) o negativo (scegliendo α < 0) con |α| sufficientemente pic-
colo. Infatti in questo caso lo jacobiano dell’iterazione discreta non lineare di
Richardson è I − αJ e ha raggio spettrale minore di 1 per |α| sufficientemente
piccolo ma non zero.
Possiamo provare a implementare questa iterazione e a controllare la conver-
genza. Ottenere una soluzione discreta in cui il residuo ha una norma piccola
ci garantisce una approssimazione della soluzione del problema discreto. Nel
caso ci sia stabilità, questa garantisce una buona approssimazione del probema
continuo.
Le due function che seguono implementano il metodo di Richardson. Nella
prima il residuo è il membro sinistro dell’equazione di Eulero-Lagrange e per
convergere richiede valori numerici di alpha molto piccoli che comportano un
numero elevato di iterazioni.
La seconda function usa come residuo una espressione diversa che ora de-
scriviamo. Riformuliamo l’equazione di Eulero-Lagrange nel modo seguente
 2 2  2 2
∂2u ∂2u ∂u ∂ u ∂u ∂ u ∂u ∂u ∂ 2 u
+ = − − + 2 =: f (x, y)
∂x2 ∂y 2 ∂y ∂x2 ∂x ∂y 2 ∂x ∂y ∂x∂y
Denotiamo con v(x, y) la soluzione de problema di Laplace

∆v = f (x, y)

e definiamo r(u) = u − v. Chiaramente r(u) = 0 se e solo se u = v cioè


∆u = f (x, y) che è l’equazione di Eulero-Lagrange. Quindi adottiamo questa
espressione di r(u) nel metodo di Richardson.
Con questa scelta è possibile avere convergenza con valori di α non troppo
piccoli in valore assoluto e quindi un basso numero di iterazioni.
Una ulteriore possibilità che non abbiamo implementato, consiste nel riscri-
vere l’equazione di Eulero-Lagrange come

2 2
∂2u ∂2u ∂u ∂u ∂ 2 u
 
∂u ∂u
(1 + )+ (1 + )=2 =: f (x, y)
∂x2 ∂y ∂y 2 ∂x ∂x ∂y ∂x∂y
definire v la soluzione del problema lineare
 2  2
∂2v ∂v ∂2v ∂v
(1 + ) + 2 (1 + ) = f (x, y)
∂x2 ∂y ∂y ∂x

95
Listing 16: Risoluzione dell’equazione di Eulero-Lagrange col metodo di
Richardson: prima versione.
function [u,b,A] = EuleroLagrange1(f, k, alpha)
% risolve equazione uxx(1+uy^2)+uyy(1+ux^2)-2ux*uy*uxy=f(x,y)
% con iterazione di richardson
% u = u +alpha*(uxx(1+uy^2)+uyy(1+ux^2)-2ux*uy*uxy-f(x,y))
% f e’ (m+2)x(n+2) sul bordo ha le condiz al contorno
% nella parte interna il termine noto
[mm,nn] = size(f); m = mm-2; n = nn-2;
% m; n; dimensioni parte interna
hx = 1/(m+1); hy = 1/(n+1);
% costruisco le matrici delle derivate seconde
aux1 = ones (mm-2,1)*[1,-2,1]/hx^2;
D2x = spdiags(aux1,[0,1,2],mm-2,mm);
aux1 = ones (nn-2,1)*[1,-2,1]/hy^2;
D2y = spdiags(aux1,[0,1,2],nn-2,nn);
% costruisco le matrici delle derivate prime
aux1 = ones (mm-2,1)*[-1,0,1]/(2*hx);
Dx = spdiags(aux1,[0,1,2],mm-2,mm);
aux1 = ones (nn-2,1)*[-1,0,1]/(2*hy);
Dy = spdiags(aux1,[0,1,2],nn-2,nn);

% valore iniziale u
u = poisson(f);
% itero
for i = 1 : k
% costruisco residuo
r = -f(2:end-1,2:end-1);
ay = ones(mm-2,nn)+(Dx*u).^2; ay=ay(:,2:nn-1);
ax = ones(mm,nn-2)+(u*Dy’).^2; ax=ax(2:mm-1,:);
sxu = Dx*u; syu = u*Dy’;
sxu = sxu(:,2:end-1); syu =syu(2:end-1,:);
axy = 2*sxu.*syu;
uxy = Dx*u*Dy’;
uxx = D2x*u; uyy = u*D2y’;
uxx = uxx(:,2:end-1); uyy = uyy(2:end-1,:);
r = r-axy.*uxy+uxx.*ay+uyy.*ax;
err = norm(r,inf)
u(2:end-1,2:end-1) = u(2:end-1,2:end-1)+alpha*r;
if err<1.e-13
disp(’numero iterazioni’); i
break
end
end
end

96
Listing 17: Risoluzione dell’equazione di Eulero-Lagrange col metodo di
Richardson: seconda versione.
function [u,b,A] = Eulero-Lagrange2(f, k,alpha)
% risolve equaz uxx(1+uy^2)+uyy(1+ux^2)-2ux*uy*uxy=f(x,y)
% con iterazione u=u-alpha*r
% dove il residuo r e’ dato da r=u-w con
% w= Laplaciano^{-1}( 2ux*uy*uxy-uxx*(uy)^2-uyy*(ux)^2 +f(x,y))
% f e’ (m+2)x(n+2) sul bordo ha le condiz al contorno
% nella parte interna il termine noto
[mm,nn] = size(f); m = mm-2; n = nn-2;
% m; n; dimensioni parte interna
hx = 1/(m+1); hy = 1/(n+1);
% costruisco matrici derivata seconda
aux1 = ones (mm-2,1)*[1,-2,1]/hx^2;
D2x = spdiags(aux1,[0,1,2],mm-2,mm);
aux1 = ones (nn-2,1)*[1,-2,1]/hy^2;
D2y = spdiags(aux1,[0,1,2],nn-2,nn);
% costruisco matrici derivata prima
aux1 = ones (mm-2,1)*[-1,0,1]/(2*hx);
Dx = spdiags(aux1,[0,1,2],mm-2,mm);
aux1 = ones (nn-2,1)*[-1,0,1]/(2*hy);
Dy = spdiags(aux1,[0,1,2],nn-2,nn);

% valore iniziale u
u = poisson(f);
% itero
for i = 1 : k
% costruisco termine noto
B = f;
ay = ones(mm-2,nn)+(Dx*u).^2; ay=ay(:,2:nn-1);
ax = ones(mm,nn-2)+(u*Dy’).^2; ax=ax(2:mm-1,:);
sxu = Dx*u; syu = u*Dy’;
sxu = sxu(:,2:end-1); syu =syu(2:end-1,:);
axy = 2*sxu.*syu; uxy = Dx*u*Dy’;
uxx = D2x*u; uyy = u*D2y’; uxx = uxx(:,2:end-1);
uyy = uyy(2:end-1,:);
B(2:end-1,2:end-1) = B(2:end-1,2:end-1)+axy.*uxy-uxx.*ay-uyy.*ax;
% risolvo problema di Poisson
v = poisson(B);
err = norm(u-v,inf)
res = u-v;
u = u-alpha*res;
if err<1.e-13
disp(’numero iterazioni’); i
break
end
end
end

97
Figura 27: Soluzione dell’equazione non lineare di Eulero-Lagrange.

e porre r(u) = u − v.
Ad esempio, con i dati forniti dallo script seguente
m = 40; n = 40;
f = zeros(m,n);
f(1:end,1) = sin(pi*[0:m-1]’/(m-1));
f(1,1:end) = sin(pi*[0:n-1]/(n-1));

occorrono 41098 iterazioni col primo metodo con α = 1.9 · 10−5 e 65 iterazioni
col secondo metodo con α = 1.4 · 10−1 per avere un residuo di norma inferiore
a 10−10 .
le figure ?? e ?? riportano il grafico della superficie minima e il grafico della
differenza tra la superficie minima e quella fornita dalla linearizzazione ottenuta
col laplaciano.
È abbastanza facile realizzare una function che simula la propagazione di
un’onda in un dominio bidimensionale risolvendo numericamente l’equazione
delle onde con attrito viscoso
∂2u ∂2u ∂u
2
= g 2
−a .
∂t ∂x ∂t
su un dominio rettangolare. La function del listato ?? realizza questo.
Con un po’ più di impegno si riesce a modificare la function per animare
un’onda che si propaga in un dominio arbitrario contenuto in un rettangolo. Un
esempio di function è riportata nel listato ??.

98
Listing 18: Animazione di un’onda che si propaga su un dominio bidimensionale.
function animazione_rettangolo(g, a, p, v, s)
% traccia l’animazione di un’onda su un dominio rettangolare
% risolvendo l’equazione delle onde u_tt = g*u_xx - a*u_x
% mediante l’esponenziale di matrice con Delta_t=1/16000
% In INPUT
% g: rapporto costante elastica/massa (valore costante)
% a: rapporto costante di attrito/massa (valore costante)
% p, v: posizione e velocita’ iniziale
% s: numero di secondi

% costruisco la matrice A
n = size(p,1); n2=n^2;
S = 2*eye(n)- diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);
K = kron(eye(n),S)+kron(S,eye(n)); Dx = 1/(n+1);
K =(1/Dx^2)*K;
A = [zeros(n2),eye(n2); -g*K, -a*eye(n2)];
% formo il vettore delle condizioni iniziali
p=vec(p); v=vec(v); y = [p;v];
% Simulazione
nt = round(s*16000); deltat = 1/16000;
disp(’Calcolo esponenziale di matrice’)
B = expm(deltat*A);
% traccio posizione iniziale
V = zeros(n+2,n+2); V(2:n+1,2:n+1) = reshape(p,n,n);
% traccio il grafico della configurazione iniziale
mesh(V)
axis([0,n+2,0,n+2,-5,5])
disp(’Premere un tasto per iniziare la simulazione’)
pause
for j=1:nt
y = B*y;
w=ones(n^2,1)*1; w = y(1:n2);
V(2:n+1,2:n+1) = reshape(w,n,n);
% traccio il grafico della configurazione all’istante generico
mesh(V)
axis([0,n+2,0,n+2,-5,5])
pause(0.0001)
end

99
Listing 19: Animazione di un’onda che si propaga su un dominio bidimensionale.
function animazione_onda(dom, g, a, p, v, s)
% traccia l’animazione di un’onda su un dominio bidimensionale
% risolvendo l’equazione delle onde u_tt = g*u_xx - a*u_x
% mediante l’esponenziale di matrice con Delta_t=1/16000
% In INPUT
% dom: dominio
% g: rapporto costante elastica/massa (valore costante)
% a: rapporto costante di attrito/massa (valore costante)
% p, v: posizione e velocita’ iniziale
% s: numero di secondi

% costruisco la matrice A
n = size(p,1);
S = 2*eye(n)- diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);
K = kron(eye(n),S)+kron(S,eye(n)); Dx = 1/(n+1); K =(1/Dx^2)*K;
% calcolo la sottomatrice relativa ai punti del dominio
ind = find(dom==1);
n2 = length(ind);
Kd = K(ind,ind);
A = [zeros(n2),eye(n2); -g*Kd, -a*eye(n2)];
% formo il vettore delle condizioni iniziali
p=vec(p); p = p(ind);
v=vec(v); v = v(ind);
y = [p;v];
% Simulazione
nt = round(s*16000);
deltat = 1/16000;
disp(’Calcolo esponenziale di matrice’)
B = expm(deltat*A);
% traccio posizione iniziale
V = zeros(n+2,n+2);
w=ones(n^2,1)*1;
w(ind) = y(1:n2);
V(2:n+1,2:n+1) = reshape(w,n,n);
% traccio il grafico della configurazione iniziale
mesh(V)
axis([0,n+2,0,n+2,-5,5])
disp(’Premere un tasto per iniziare la simulazione’)
pause
for j=1:nt
y = B*y;
w=ones(n^2,1)*1; w(ind) = y(1:n2);
V(2:n+1,2:n+1) = reshape(w,n,n);
% traccio il grafico della configurazione all’istante generico
mesh(V)
axis([0,n+2,0,n+2,-5,5])
pause(0.0001)
end

100
Figura 28: Differenza tra la soluzione dell’equazione non lineare di
Eulero-Lagrange e la soluzione del problema linearizzato mediante laplaciano.

Riferimenti bibliografici
[1] D. Bini, M. Capovani, O. Menchi, Metodi Numerici per l’Algebra Lineare.
Zanichelli, Bologna, 1987.
[2] Garrett Birkhoff and Robert E. Lynch, Numerical Solution of Elliptic
Problems. SIAM, Philadelphia 1984.
[3] J.F. Botha and G.F Pinder, Fundamental Concepts in the Numerical
Solution of Differential Equations, John Wiley & Sons, 1983.
[4] Eugene Isaacson and Herbert Bishop Keller, Analysis of Numerical
Methods. John Wiley & Sons, Inc., New York, 1966.
[5] A. R. Mitchell and D.F. Griffiths, The Finite Difference Method in Partial
Differential Equations. John Wiley & Sons, New York 1980.

[6] Alfio Quarteroni and Alberto Valli, Numerical Approximation of Partial


Differential Equations. Springer Series in Computational Mathematics,
Berlin 1997.
[7] Josef Stoer, Roland Bulirsch, Introduzione all’Analisi Numerica (2).
Zanichelli, Bologna 1975.
[8] Gerald Wheatley, Applied Numerical Analysis, Pearson, Addison Wesley,
New York 2004.

101
[9] Richard Barret et Al., Templates For the Solution of Li-
near Systems: Building Blocks For Iterative Methods.
http://www.netlib.org/linalg/html templates/Templates.html

102

Potrebbero piacerti anche