Appunti Di Calcolo Numerico Con Codici Matlab e Octave
Appunti Di Calcolo Numerico Con Codici Matlab e Octave
In tutti i capitoli c’è una sezione di Esercizi proposti: si tratta di esercizi proposti
dall’autore nei vari appelli, compiti, compitini e laboratori. Per molti essi si pos-
sono trovare anche le soluzioni e, dove richiesto il codice Matlab, navigando alla
pagina web
http://www.math.unipd.it/∼demarchi/didattica.html.
Vi sono poi alcune Appendici, il cui scopo è di integrare la trattazione dei vari
capitoli con la teoria mancante, delle applicazioni e delle indicazioni implementa-
tive, con l’obiettivo di completare la sensibilità numerica richiesta a chi si occupa
o è interessato al calcolo numerico.
• Appendice A: Metodi iterativi ed equazione logistica
• Appendice B: Interpolazione: aspetti implementativi e applicazioni.
• Appendice C: Codici Matlab/Octave.
6 Appunti di Calcolo Numerico con codici in Matlab/Octave
Stefano De Marchi
Dipartimento di Matematica
Università di Padova.
5.1 Confronti dei valori della costante di Lebesgue per punti di Cheb-
syshev e della funzione σ(n) . . . . . . . . . . . . . . . . . . . . . . . 143
5.2 Differenze divise della funzione x2 + 1 . . . . . . . . . . . . . . . . . 145
5.3 Tabella delle differenze divise per un punto ripetuto k + 1 volte . . 149
5.4 Tabella delle differenze divise per l’interpolazione di Hermite . . . 150
5.5 Schema di Neville, per n = 3. . . . . . . . . . . . . . . . . . . . . . . 152
a = pN q , (1.1)
a = pN q = p1 N q−1 = p2 N q+1
con p1 = N p e p2 = p/N .
Se la mantissa p è tale che
1
< |p| < 1
N
allora la rappresentazione (1.1) si dice normalizzata . Facciamo due esempi
• a = 115.78, la sua forma normalizzata è a = 0.11578 · 103 .
• a = 0.0026, la sua forma normalizzata è a = 0.26 · 10−2 .
Pertanto, fissata la base di numerazione N , per la rappresentazione di un nu-
mero a dovremo conoscere la coppia (p, q) (mantissa ed esponente). Nel caso
18 Appunti di Calcolo Numerico con codici in Matlab/Octave
s q |p|
1 s 1 2 q 9 10 |p| 32
1 s 1 2 q 12 13 |p| 64
In questo caso la mantissa ha t cifre con la prima cifra sempre uguale ad 1 (che
non viene rappresentata). Ció spiega perchè abbiamo scritto a2 a3 . . . at at+1 . . ..
Il campo dell’esponente serve a rappresentare sia esponenti positivi che neg-
ativi. Si usa inoltre in bias (scostamento) appunto per avere esponenti q ∗ sempre
positivi. Ad esempio q ∗ = 200 indica l’esponente 200 − 127 = 73.
Riassumiamo in tabella le cose salienti di questa rappresentazione sia nel
caso di singola che doppia precisione.
singola doppia
# bit 32 (4 bytes) 64 (8 bytes)
segno s 1 bit 1 bit
spazio mantissa 23 53
spazio esponente 8 11
bias 127 (011....1) 1023 (011....1)
max q 127 1023
min q -126 -1022
Tabella 1.4: Occupazione dei registri di memoria nelle due fondamentali rappre-
sentazioni floating-points
0 0
. . .
. . . 01 0...0
−126+127=1
Tabella 1.5: Il più piccolo numero floating point rappresentabile in singola preci-
sione
oppure l’underflow.
127
·2
• il più grande numero floating point rappresentabile è 1.11...1 = (1 +
mantissa
1 − 2−23 ) · 2127 ≈ 1038 Nota: l’esponente 255 si usa solo per l’overflow.
0 1
. . .
. . . 10 1...1
127+127=254
Tabella 1.6: Il più grande numero floating point rappresentabile in singola pre-
cisione
2. Per la parte decimale si moltiplica per 2 finché la parte decimale della molti-
plicazione risula essere uguale a 0. Nel nostro caso 0.6 ∗ 2 = 1.2 che ha cifra
binaria 1 e decimale 0.2 che riporto nella prossima moltiplicazione. 0.2 ∗ 2 = 0.4
cha ha parte binaria 0 e decimale 0.4 che uso per prossima moltiplicazione.
0.4 ∗ 2 = 0.8 (0 cifra binaria e 0.8 decimale), 0.8 ∗ 2 = 1.6 (1 binaria, 0.6 deci-
male). La prossima moltiplicazione ci fa ripartire dall’inizio. Pertanto il numero
(0.6)10 é il numero periodico (1001)2 .
1 - Aritmetica di macchina e analisi degli errori 21
(a)
|a − ã|
< N 1−t ,
|a|
poiché, essendo N q−1 < |a| < N q e dal fatto che |a − ã|/|a| < N q−t /N q−1 , si
ottiene la maggiorazione di cui sopra.
(b)
|a − ã| 1
≤ N 1−t .
|a| 2
Definizione 2. Il numero
1 1−t
eps = N , (1.2)
2
si chiama precisione macchina.
e=1; k=0;
while (e+1 > 1)
e=e/2; k=k+1;
end
e=2*e {è necessario perché si era diviso per 2}
k-1 {da l’esponente}
e = 2.2204e-016
k = 52
Sia ora x un numero che rappresenta un valore esatto. Indichiamo con x̃ una
sua rappresentazione sul calcolatore. Allora
Ea := |x − x̃| ,
x − x̃
Erx := x , x = 0
x̃ − x
Erx̃ := x̃ = 0 ,
x̃ ,
1 q−t N 1
|x − x̃| ≤ N = N −t · N q−1 ≤ N 1−t |x| (1.3)
2 2 2
poiché |x| < N q | essendo |p| < 1. La relazione ci dice come un’approssimazione
si ottenga dal valore esatto a meno di un errore di rappresentazione. Questo
errore, si dice errore inerente o ineliminabile poiché esso dipende dalla rapp-
resentazione (finita) dei numeri su un calcolatore.
Quanto detto vale ovviamente se la esponente di x, q, risulta m ≤ q ≤ M . In
particolare:
aM = (1 − N −t ) · N M .
Ricordando, che in un calcolatore con aritmetica in doppia precisione M =
1024, per cui (1 − N −t ) · N M = (1 + 1 − 2−52 ) · 21023 = (1 − 2−53 ) · 21024 ≈
1.7977 · 10308 . In Matlab/Octave questo valore è restituito dalla variabile
realmax.
am = N m−1 = 2−1022 .
Ricordando, che in un calcolatore con aritmetica in doppia precisione m =
−1021, per cui N m−1 ≈ 2.2251 · 10−308 . In Matlab/Octave questo valore è
restituito dalla variabile realmin. Ad essere precisi, in Octave 3.2.3 si può
arrivare a calcolare 2−1074 mentre 2−1075 risulta 0 (zero).
24 Appunti di Calcolo Numerico con codici in Matlab/Octave
if x0==0 y=exp(x0);
f=1; if y==1,
else f=1;
f=(exp(x0)-1)/x0; else
end f=(y-1)/log(y);
end
Nel caso in cui |x| 1 (cioè molto vicino a 0, usando i due algoritmi otterremo i
seguenti risulati
x0 ALG.1 ALG. 2
1.e − 5 1.000005 1.000005
1.e − 6 1.0036499 1.0000005
.. .. ..
. . .
1.e − 15 1.1102... 1.000....000 (15 zeri)
1.e − 16 0 1
Pertanto l’ALGORITMO 2 è più stabile (chiariremo meglio più avanti il concetto
di stabilità di un algoritmo numerico). Infatti, nell’ipotesi di singola precisione, la
risposta esatta sarebbe 1.00000005. Se infatti consideriamo f l((ex −1)/x) ≈ 1.3245....
mentre f l((ex − 1)/(log(ex )) ≈ 1.00000006 che è la risposta corretta.
E SEMPIO 8. Desideriamo
√ risolvere l’equazione ax2 + bx + c = 0. Se a = 0, le radici
2
−b ± b − 4ac
sono x1,2 = . Dove si manifesta la cancellazione numerica?
2a
√
• In x1 quando b2 − 4ac ≈ b
√
• in x2 quando − b2 − 4ac ≈ b.
Come ovviare a questi problemi? Nel primo caso, prima si calcola x2 dove il prob-
lema della cancellazione non sussiste quindi, usando le relazioni tra le radici x1 e
x2 di un’equazione di secondo grado, otteniamo x1 = c/(ax2 ). In maniera analoga
opereremo nel secondo caso: prima calcolo x1 quindi x2 = c/(ax1 ).
dove r indica la percentuale d’errore sul risultato rispetto alla percentuale d’errore
sul dato d. Pertanto, usando questo indice, un problema sarà ben condizionato
quando C è piccolo (vedremo più oltre in che senso) altrimenti sarà mal con-
dizionato. Vediamo un esempio.
E SEMPIO 10. Il sistema
x+y =2
1001x + 1000y = 2001
1 1 2
A= , b= .
1001 1000 2001
1.5 Il calcolo di π
Per il calcolo di π esistono alcuni importanti algoritmi non tutti convergenti per
motivi di instabilità. Di seguito diamo cenno di 5 algoritmi tra i più importanti.
Di essi diamo anche un pseudo-algoritmo che è un’utile base di partenza per una
successiva implementazione in un linguaggio di programmazione.
Algoritmo
b1 = 2; s1 = 1
for i=2:n √
1− 1−s2i−1
Ai = bi−1 si−1 , si = 2
bi = 2bi−1
end for
π
Indicando con
ci = cos
2i
e pi il corrispondente semiperimetro, l’algoritmo si descrivere come segue:
1 - Aritmetica di macchina e analisi degli errori 29
Algoritmo
c1 = 0; p1 = 2
for i=2:n
ci = 1+c2i−1
pi = pi−1
ci
end for
Algoritmo
p0 = 2;
for i=1:n,
2
pi = pi−1 4i4i
2 −1 ;
end for
30 Appunti di Calcolo Numerico con codici in Matlab/Octave
Algoritmo
q1 = 1;
for i=2:n
(−1)i−1
qi = qi−1 + 2i−1
end for
π = 4qn
Algoritmo
q1 = 0; t1 = 12
for i=1:n-1
ti ti (2i−1)
qi+1 = qi + 2i−1 ; ti+1 = 8i
end for
π = 6qn
(1 + x) − 1
.
x
Perchè il risultato è meno accurato che prendendo x = 8.0 · 10−16 ?
1 - Aritmetica di macchina e analisi degli errori 33
E SERCIZIO 6. Sia
Sn (x) = 1 + x + x2 /2 + x3 /3! + · · · + xn /n!
la troncata n-esima di exp(x). Si prenda x = −10 e si calcoli per n =
1, 2, . . . , 80 l’errore relativo
|Sn (x) − exp(x)|
exp(x)
Cosa si osserva? Perchè ciò accade?
E SERCIZIO 7. Si prenda x = 1.005, il calcolo di q7 (x) = (x − 1)7 produce il
risultato 7.8125 · 10−17 mentre quello di p7 (x) = x7 − 7x6 + 21x5 − 35x4 + 35x3 −
21x2 + 7x − 1 da come risultato −8.88178419700125 · 10−16 . Perchè?
E SERCIZIO 8. Implementare queste operazioni:
a=4/3; b=a-1; c=b+b+b; e=1-c.
Qual è il risultato dell’operazione? Altri valori di a darebbero lo stesso risul-
tato?
E SERCIZIO 9. Siano x = 5 e y = 5 − η con x − y = η. L’errore relativo della
differenza è
f l(x − y) − (x − y)
x−y = ,
x−y
dove f l(x − y) è la differenza dei 2 numeri x e y, in aritmetica floating point.
Ovvero
f l(x − y) = (x − y)(1 + eps),
con eps la funzione Matlab/Octave che restituisce la precisione macchina.
Calcolare x−y al diminuire di η e riportare su una tabella i valori η, x−y e
la percentuale x−y ∗ 100.
E SERCIZIO 10. Si consideri la ricorrenza
z2 = 2,
√ zn
zn+1 = 2 ;n ≥ 2
1+ 1 − 41−n zn2
mentre che cosa possiamo dire circa la convergenza della ricorrenza (1.6)?
Passiamo ora a descrivere i più comuni metodi iterativi per la ricerca di zeri di
funzione.
Facciamo vedere che il metodo di bisezione, nelle ipotesi che l’intervallo con-
tenga una sola radice, converge all’unica radice α di f nell’intervallo [a, b].
Dim. Assumiamo f (a) < 0 < f (b). Vogliamo far vedere che il metodo genera
una successione {xk } che converge verso α. Infatti, le successioni {ak } e {bk } sono
tali che
a0 ≤ a1 ≤ · · · ≤ an ≤ · · · ≤ bn ≤ · · · ≤ b0
2 - Ricerca di zeri di funzione 37
(b − a)
α+ − α− = lim (bk − ak ) = lim = 0.
k→∞ k→∞ 2k
Pertanto α+ = α− = α.
Ma f , per ipotesi, è continua e quindi lim f (ak ) = lim f (bk ) = f (α). Inoltre,
k→∞ k→∞
dal teorema del confronto limk→∞ f (ak ) ≤ 0 e limk→∞ f (bk ) ≥ 0 da cui segue
0 ≤ f (α) ≤ 0. Ció consente di concludere che f (α) = 0.
Poiché |Ik | = |bk − ak | = 21k |I0 | con I0 = b − a, allora l’errore assoluto ek al
passo k soddisfa alla disuguaglianza
1 1
|ek | = |xk − α| < |Ik | = k+1 |b − a| .
2 2
Chiedendo che |ek | < , possiamo determinare a priori il numero minimo di
iterazioni per ridurre l’errore a meno di
|b − a|
kmin > log2 −1. (2.3)
Per inciso, la funzione g(x) viene detta funzione d’iterazione del metodo itera-
tivo.
La trasformazione di f (x) = 0 in x = g(x) non è unica. Infatti, se consideriamo
4
x4 − 3 = 0, la possiamo trasformare in x = x4 + x − 3, oppure in x = 3+5x−x o an-
5
cora in x = 3 x3 . In generale esistono infiniti modi di ottenere una formulazione
di punto fisso.
L’altro problema, una volta ottenuta la forma x = g(x), è di chiederci se tutte
le funzioni d’iterazione g(x) vanno ugualmente bene. La risposta è negativa in
generale. Vale il seguente Teorema
Teorema 1. Supponiamo che g([a, b]) ⊂ [a, b] e che esista un L < 1 t.c.
Allora esiste un unico punto fisso α della funzione d’iterazione g. Inoltre la suc-
cessione {xk }k≥0 , x0 fissato, converge ad α.
ovvero assurdo.
Per concludere facciamo vedere che la successione {xk } converge ad α. Infatti,
allora g(x) ha un unico punto fisso α. Inoltre la successione generata dal metodo
xk+1 = g(xk ) converge ad α per ogni scelta di x0 ∈ Iα . Infine si ha
|xk+1 − α|
lim = |g (α)| . (2.6)
k→∞ |xk − α|
|ek+1 | |xk+1 − α|
lim = lim =γ, (2.7)
k→∞ |ek |p k→∞ |xk − α|p
|xk+1 − α|
lim = γ = 0
k→∞ |xk − α|p
si ricava
log |xk+1 − α| − log γ log |xk+1 − α|
p = lim ≈ lim . (2.8)
k→∞ log |xk − α| k→∞ log |xk − α|
Naturalmente se, come spesso accade, non si conosce la radice α, si puoò con-
siderare, in (2.8) invece di α, una sua approssimazione xm con m più grande di
k + 1.
|xk (2 − q xk ) − α|
lim
k→∞ |xk − α|p
risulta finito. Per p = 1 non è finito perchè il numeratore si comporta come
x2 e il denomiatore come x. Invece per p = 2, numeratore e denominatore si
comportano come x2 e quindi il limite sarà finito. Pertanto il metodo converge
con ordine 2.
L’esempio appena svolto ci consente di specializzare il concetto di ordine di
convergenza di un metodo iterativo.
Teorema 3. Se la funzione d’iterazione è derivabile almeno p volte con continuità
in Iα , con α un punto fisso semplice di g(x) per cui
1. Test sulla differenza tra due iterate successive. Il metodo iterativo contin-
uerà la ricerca della soluzione finchè |xk+1 − xk | < . Infatti
1
xk − α = (xk − xk+1 ) .
1 − g (ξk )
2. Test sulla differenza ”relativa” tra due iterate successive. Il test che faremo
ora è
|xk+1 − xk | < |xk+1 | .
3. Test sul valore della funzione. Il test consiste nel verificare se |f (xk )| <
. Purtroppo questo test non funziona quando la funzione è piatta su Iα ,
facendo fermare le iterazioni troppo lontano dal valore della soluzione. Un
esempio: la funzione f (x) = (x10 − 10)/x nell’intorno sinistro della radice
positiva α ≈ 1.26 è molto piatta e usando il test in esame partendo da x0 ∈
Iα = [1, 2] usando anche una tolleranza alta come = 1.e − 2, ci arresteremo
dopo migliaia di iterazioni.
• Nei test di arresto è necessario inserire anche un controllo sul numero mas-
simo di iterazioni, k ≤ kmax.
Come punto xk+1 prendiamo il punto in cui la retta tangente interseca l’asse delle
ascisse. In pratica dobbiamo risolvere y(x) = 0.
Imponendo questa condizione in (2.11), otteniamo la formula del metodo di
Newton
f (xk )
xk+1 = xk − , (2.12)
f (xk )
purchè f (xk ) = 0, k ≥ 0.
Facciamo ora un paio di osservazioni.
1. Il metodo di Newton consiste nel sostituire localmente f (x) con la retta
tangente. Infatti
Facciamo ora vedere che se x0 è preso “ sufficientemente” vicino alla radice
α, con f (α) = 0 (ovvero α radice semplice), allora il metodo converge almeno
quadraticamente e si ha
xk+1 − α f (α)
lim 2
= , (2.13)
k→∞ (xk − α) 2f (α)
2 - Ricerca di zeri di funzione 43
(α − xk )2
0 = f (α) = f (xk ) + f (xk )(α − xk ) + f (ξ), ξ ∈ (xk , α)
2
f (xk ) (α − xk )2
=
+ α − xk + f (ξ)
f (xk ) 2f (xk )
(α − xk )2
= xk − xk+1 + α − xk + f (ξ)
2f (xk )
f (ξ)
= α − xk+1 + (α − xk )2
2f (xk )
Allora il metodo di Newton converge all’ unica soluzione α ∈ [a, b] per ogni x0 ∈
[a, b].
Osservazione. L’ultima ipotesi del Teorema ci assicura che la tangente agli
estremi a e b interseca l’asse x all’interno di [a, b].
Dim. Supponiamo, come visualizzato in figura 2.1, che f > 0, f ≤ 0 e
f (a) < 0, f (b) > 0 (ovvero nell’ipotesi di esistenza di un unico zero α in [a, b]).
Sia a ≤ x0 < α e, ovviamente, f (x0 ) ≤ 0 = f (α). Allora x1 = x0 −f (x0 )/f (x0 ) ≥
x0 . Proviamo per induzione che xk ≤ α e xk+1 ≥ xk .
Per k = 0 è vera. Sia vera per k e proviamola per k + 1.
−f (xk ) ≤ (α − xk )f (xk )
f (xk )
xk+1 = xk − ≤ xk + (α − xk ) = α .
f (xk )
Segue che f (xk+1 ) ≤ f (α) = 0 e anche che xk+2 ≥ xk+1 come richiesto.
44 Appunti di Calcolo Numerico con codici in Matlab/Octave
L’esempio ci suggerisce come modificare il metodo di Newton affinchè sia man-
tenuta la convergenza quadratica anche in presenza di zeri con molteplicità m >
1.
f (xk )
xk+1 = xk − m , f (xk ) = 0, k ≥ 0 . (2.14)
f (xk )
La successione generata con l’iterazione (2.14) converge quadraticamente alla
radice multipla α alla luce della seguente osservazione: il metodo di Newton è un
metodo di iterazione funzionale con funzione d’iterazione g(x) = x − ff(x)
(x) .
2 - Ricerca di zeri di funzione 45
Facciamo vedere che, nel caso in cui la radice α ha molteplicità m, per man-
tenere l’ordine di convergenza quadratico, dobbiamo considerare la funzione d’ite-
razione
f (x)
g(x) = x − m . (2.15)
f (x)
Infatti, poichè possiamo scrivere f (x) = (x − α)m h(x) con h(p) (α) = 0, p =
0, . . . , m e
(x − α) h(x)
g(x) = x −
mh(x) + (x − α)h (x)
h(x) d
g (x) = 1 −
− (x − α) ψ(x)
mh(x) + (x − α)h (x) dx
h(x)
dove ψ(x) = mh(x)+(x−α)h (x) . Pertanto g (α) = 1 − 1/m = 0 se m > 1. È facile
kmax=100; tol=1.e-6;
x0=3/(2*a);
iter(1)=x0;
[y,yd]=fun1(x0,a);
x1=x0-y/yd;
k=1;
iter(k+1)=x1;
while abs(x1-x0)> tol*abs(x1) & k <=kmax
x0=x1;
[y,yd]=fun1(x0,a);
x1=x0-y/yd;
iter(k+1)=x1;
k=k+1;
end
disp(’La soluzione cercata e’’ ’); x1
%---file che valuta la funzione e la sua derivata ----
function [y,yd]=fun1(x,a)
Ax=a*x+2; Sx=sin(a*x);
y=Sx./Ax.*log(a*x);
yd=Sx./(Ax.*x)+a*(cos(a*x).*Ax-Sx)./(Ax.^2);
return
48 Appunti di Calcolo Numerico con codici in Matlab/Octave
f (xk )
xk+1 = xk − , c ∈ R\{0}. (2.17)
c
Per la ricerca del valore ottimale per c, si deve tener conto del fatto che il metodo
è un metodo d’iterazione funzionale con funzione d’iterazione g(x) = x − f (x)/c.
Pertanto c si sceglie cosicché
f (x)
|g (x)| = 1 − < 1,
c
f (x) = 0, x ∈ Iα ,
0 < f (x)/c < 2 .
Dalla seconda condizione, indicando con M = maxx∈Iα |f (x)| si deduce che per la
convergenza dobbiamo richiedere che |c| > M/2 e anche che c f (x) > 0.
Se c = f (α) allora il metodo ha convergenza lineare, quando c = f (α) il
metodo è almeno del primo ordine.
Il metodo di Steffensen
Il metodo costruisce la sequenza
f (xk )
xk+1 = xk − , (2.20)
g(xk )
f (xk + f (xk )) − f (xk )
g(xk ) = . (2.21)
f (xk )
Posto βk = f (xk ), si ha
f (xk + βk ) − f (xk ) 1
g(xk ) = = f (xk ) 1 − hk f (xk ) + O(βk2 )
f (xk ) 2
con hk = −f (xk )/f (xk ) che è la correzione di Newton.
Osservando che per la funzione s(x) = 1/(1 − x) si può scrivere come s(x) =
1 + x + O(x2 ), pertanto la (2.20) diventa
hk
xk+1 = xk + hk (1 + f (xk ) + O(βk2 )) . (2.22)
2
Da cui, per l’errore ek = xk − α, osservando che
1 f (ξ)
hk = −ek + e2k
2 f (xk )
50 Appunti di Calcolo Numerico con codici in Matlab/Octave
g(xk ) − xk
α = xk + . (2.24)
1−η
Come possiamo determinare η? Lo approssimiamo con la successione
g(g(xk )) − g(xk )
ηk = . (2.25)
g(xk ) − xk
Lemma 1. Se la successione xk+1 = g(xk ) converge ad α allora
lim ηk = g (α) .
k→+∞
Passando al limite, ricordando che per ipotesi la successione converge ovvero che
xk+1 − α
lim = g (α), otteniamo l’asserto
k→+∞ xk − α
g (α) − 1
lim ηk = 1 = g (α) .
k→+∞ 1 − g (α)
2 - Ricerca di zeri di funzione 51
(g(xk ) − xk )2
x̂k+1 = xk − , k≥0 (2.26)
g(g(xk )) − 2g(xk ) + xk
x g(g(x)) − (g(x))2
gΔ (x) = .
g(g(x)) − 2g(x) + x
Osservazione. Il Δ a pedice nella gΔ è dovuto alla seguente osservazione. Os-
serviamo che la successione di Aitken si può riscrivere come
(xk+1 − xk )2
x̂k+1 = xk − , (2.27)
xk+2 − 2xk+1 + xk
Δ x = (x + h) − x, h > 0
(Δ xk )2
x̂k+1 = xk − . (2.28)
Δ2 x k
k xk x̂k (Aitken)
0 0 0
.. .. ..
. . .
2 0.111 0.2024
.. .. ..
. . .
5 0.1751 0.2053
un poliomio algebrico di grado n. Per la ricerca delle radici reali e/o complesse
di pn (x) ricordiamo anzitutto due risultati utili a comprendere la difficoltà del
problema.
• Regola di Cauchy. Tutti gli zeri di pn (x) sono inclusi nel cerchio Ω ⊂ C
ak
Ω = {z ∈ C : |z| ≤ 1 + γ}, γ = max
0≤k≤n−1 an
2. Sia p6 (x) = x6 − 2x5 + 5x4 − 6x3 + 2x2 + 8x − 8 le cui radici sono ±1, ±2i, 1 ± i.
Abbiamo una sola radice positiva: p = 1. Il numero dei cambi di segno è
s = 5. Anche qui le due regole di Cartesio e Cauchy sono ancora vere. In
particolare per Cauchy avremo che γ = 8!
b n = an ;
for k=n-1:-1:0,
bk = ak + bk+1 ζ
end for
Alla fine b0 = pn (ζ).
con b0 che è il resto della divisione di pn (x) per x − ζ. Per Ruffini sappiamo che
b0 = pn (ζ) e quindi b0 = 0 quando ζ è una radice di pn (x). Pertanto, quando
pn (ζ) = 0 possiamo scrivere
Algoritmo 1.
(i) trova una radice ζk di pk con un metodo di ricerca radici (es. Newton);
Metodo di Newton-Hörner
Da cui
pn (ζ) = qn−1 (ζ; ζ) .
Poi, ricordando che pn (x) = (x − ζj )qn−1 (x) si sfrutta la deflazione per approssi-
mare uno zero di qn−1 finchè determineremo tutte le radici.
2 - Ricerca di zeri di funzione 55
x(k) − x(k−1)
x(k+1) = x(k) − f (x(k) ) , k≥1.
f (x(k) ) − f (x(k−1) )
Si fornisca anche il plot della sequenza {xi } alle due radici reali di f .
Si scelga tol = 1.e − 5. Rifare quindi l’esercizio con il metodo di Newton
(o delle tangenti).
56 Appunti di Calcolo Numerico con codici in Matlab/Octave
xi+1 = xi + e1−xi − 1 .
2.
f (xk )
xk+1 = xk − m .
f (xk )
Per ciascun metodo si determini il numero di iterazioni necessarie. Nel caso
del primo metodo si faccia vedere che la formula per mk in (2.29) fornisce
anche una stima della molteplicità di α.
E SERCIZIO 22. Si consideri l’equazione x = e−x .
• Individuato un intervallo che contiene la radice, usando l’iterazione
e−xn + xn
xn+1 = , n≥0 (2.30)
2
si determini la radice α dell’equazione data con tol = 1.e − 6.
• Si prenda ora l’iterazione
ωe−xn + xn
xn+1 = , n ≥ 0, ω = 0, ω = −1 , (2.31)
1+ω
Determinata α, graficamente si dica per quali valori di ω l’iterazione
(2.31) converge più rapidamente di (2.30) (Sugg. si calcoli in α la
derivata della funzione d’iterazione (2.31) )
• Qual è il valore ottimale di ω?
E SERCIZIO 23. Si considerino le funzioni f1 (x) = log(2/(3 − x)) e f2 (x) =
x3 − 3 .
• Mediante il metodo di Newton determinare l’unica intersezione x di
f1 (x) = f2 (x) calcolando anche il numero di iterazioni.
2 - Ricerca di zeri di funzione 57
xk+1 = xk + e1−xk − 1 , k ≥ 0 .
Qual è l’unico punto fisso α della funzione d’iterazione data e qual è il cor-
rispondente ordine p di convergenza?
58 Appunti di Calcolo Numerico con codici in Matlab/Octave
Il numero di righe o di colonne viene detto ordine o dimensione della matrice. Nel
caso in cui m = n si dice che la matrice è quadrata di ordine n altrimenti sarà
detta rettangolare.
dell’operazione, si ha:
Esempio. ⎡ ⎤ ⎡ ⎤ ⎡ ⎤
1 3 2 0 0 5 1 3 7
⎣ 1 0 0 ⎦+⎣ 7 5 0 ⎦ = ⎣ 8 5 0 ⎦ .
1 2 2 2 1 1 3 3 3
• Prodotto per uno scalare. Sia A una matrice quadrata di ordine n o ret-
tangolare m × n. Preso un α ∈ R si ha
(α A)ij = α Aij .
Esempio. ⎡ ⎤ ⎡ ⎤
1 3 4 2 6 8
⎢ 0 1 5 ⎥ ⎢ 0 2 10 ⎥
2⎢
⎣ −1
⎥ = ⎢ ⎥ .
7 −8 ⎦ ⎣ −2 14 −16 ⎦
1 0 0 2 0 0
Esempio.
⎡ ⎤
⎡ ⎤ 1 3 2 0 0
2 1 ⎢ 2 3 1 0 0 ⎥
1 3 2 ⎢ ⎥
⊕⎣ 4 1 ⎦ = ⎢
⎢ 0 0 0 2 1 ⎥ .
⎥
2 3 1 ⎣ ⎦
0 1 0 0 0 4 1
0 0 0 0 1
In generale
k
Ai = A1 ⊕ A2 ⊕ · · · ⊕ Ak = diag(A1 , . . . , Ak ) .
i=1
Esempio.
⎡ ⎤
0 3 0 6
⎡ ⎤ ⎢ 2 1 4 2 ⎥
0 3 ⎢ ⎥
1 2 ⎢ 0 1 0 2 ⎥
⊗⎣ 2 1 ⎦ = ⎢
⎢
⎥ .
⎥
3 0 ⎢ 0 9 0 0 ⎥
0 1 ⎣ ⎦
6 3 0 0
0 3 0 0
Nel caso banale in cui A sia 1 × 1 la serie coincide con l’usuale funzione
esponenziale scalare. L’ esponenziale di matrice viene usata soprattutto
nel contesto della soluzione di sistemi di equazioni differenziali ordinarie.
In Matlab/Octave la funzione expm consente di calcolare l’esponenziale di
matrice mediante un’approssimazione di Padè. Quest’ultima consiste in
un’approssimazione polinomiale razionale di matrici dell’espansione di Tay-
lor (3.1) (cfr. [18, 23]).
• A è detta diagonale se
⎛ ⎞
a1,1 0
⎜ 0 a2,2 ⎟
⎜ ⎟
⎜ .. .. ⎟ , ai,j = 0, i = j .
⎝ . . ⎠
0 an,n
• A è detta tridiagonale se
⎛ ⎞
x x 0
⎜ x x x ⎟
⎜ ⎟
⎜ . . .. .. ⎟
⎜ . . . ⎟ , ai,j = 0, |i − j| > 1 .
⎜ ⎟
⎜ . .. ⎟
⎝ .. . x ⎠
0 x x
Si dirà che una matrice è a banda con banda di ampiezza 2s + 1 se gli ele-
menti nulli sono quelli i cui indici soddisfano la disuguaglianza |i − j| > s.
Ad esempio, in Matlab/Octave per costruire una matrice tridiagonale A con
diagonale principale il vettore a (di dimensione n) e sottodiagonale e sovra-
diaganole i vettori b, c (di dimensione n − 1) rispettivamente, si usa il co-
mando A=diag(a)+diag(b,-1)+diag(c,1).
A11 A12
A= .
A21 A22
det : M→R
A → det(A)
3 - Soluzione di sistemi lineari 65
con Ãi,j = (−1)i+j det(Ai,j ) dove Ai,j è la matrice ottenuta sopprimendo la i-esima
riga e la j-esima colonna.
Definizione 7. Un autovalore di una matrice A, è un numero λ ∈ C per cui
esiste un vettore x non nullo per cui vale l’uguaglianza
λx = Ax . (3.3)
(iii) |a2i,j | < ai,i aj,j , i = j , ovvero l’elemento più grande sta sulla diagonale
principale.
(iv) Gli autovalori di A sono tutti positivi. Infatti se λ è un autovalore, dalla
definizione di una matrice simmetrica e definita positiva otteniamo la dis-
uguaglianza
0 < xT A x = λ xT x
n
da cui si conclude essendo xT x = i=1 x2i > 0 per ogni vettore x non nullo.
Nota: non vale il viceversa della proprietà (iv).
⎛ ⎞1/p
2. c A = |c|A, ∀ c ∈ R
n
(b) A1 = max |ai,j | (norma 1 o norma per colonne)
1≤j≤n
i=1
⎛ ⎞1/2
(c) AF = ⎝ |ai,j |2 ⎠ = tr(A AT ) , (norma di Frobenius)
1≤i≤n 1≤j≤n
(d) A2 = ρ(AT A) (norma 2 o norma euclidea o norma spettrale)
Osserviamo che la norma euclidea si chiama anche norma spettrale poiché ρ(A) =
max1≤i≤n |λi |, con λi i-esimo autovalore di A, si chiama raggio spettrale della
matrice A. Inoltre, se A è simmetrica A2 = ρ(A) altrimenti A2 = σ1 (A), con
σ1 (A) il più grande valore singolare della matrice A (per la definizione di valori
singolari di una matrice rimandiamo al capitolo successivo). Infatti, nel caso in
cui A = AT per il generico autovalore avremo: λ(A AT ) = λ(A2 ) = λ2 (A) e dunque
ρ(A) = A2 . Pertanto nel caso di matrici simmetrice il raggio spettrale è una
norma.
Definizione 9. Data una norma di matrice e una vettoriale, diremo che esse
sono compatibili o consistenti se
Ad ogni norma di vettore possiamo associare una norma di matrice nel seguente
modo
Ax
A := sup = sup Ax (3.5)
x=0 x x =1
Questa viene detta norma naturale o norma indotta. Ne consegue che Ax ≤
Ax, ovvero che una norma indotta è anche compatibile. Come esempio, è
facile verificare ricorrendo alla definizione che per la matrice identica
Ax = b . (3.6)
det(Ai )
xi = ,
det(A)
δx δb
≤ A−1 .
Ax b
δx δb
≤ AA−1 . (3.7)
x b
sulla soluzione e quello sul termine noto è maggiorato dal numero di con-
dizionamento della matrice. Più la matrice sarà malcondizionata e peggiore
sarà la maggiorazione e quindi la perturbazione indotta sulla soluzione.
κ(A) è quindi un fattore di amplificazione dell’errore.
In Matlab la funzione cond(A,p) consente di calcolare il numero di con-
dizionamento di A in norma p = 1, 2, ∞. In Octave esiste il comando cond(A)
che calcola il numero di condizionamento della matrice A in norma 2.
Facciamo notare che in alcuni testi, invece di κ(A), si trovano le notazioni
μ(A) o ν(A).
1
Nel caso in cui δA ≤ , in (3.8) si ha
2A−1
κ(A)
δA
≤ 2κ(A) .
1 − κ(A) A
1. Matrice di Hilbert, H.
È una matrice simmetrica di ordine n i cui elementi sono Hi,j = 1/(i + j −
1), 1 ≤ i, j ≤ n.
Si dimostra che κ2 (H) ≈ e3.5n . Alcuni valori di κ2 (H), sono riportati in
Tabella 3.1.
n 2 6 10
κ2 (H) 19.3 1.5 107 1.6 1013
2. Matrice di Vandermonde, V.
3 - Soluzione di sistemi lineari 71
A completamento ricordiamo che Matlab contiene una galleria di matrici test nel
cosidetto Matrix Computational Toolbox (MCT) di Nick Higham
www.maths.manchester.ac.uk/∼higham/mctoolbox/.
Per ottenere la lista di tutte le matrici test disponibili basta usare il comando
[out1,out2,...]=gallery(matname,opt1,opt2,...)
72 Appunti di Calcolo Numerico con codici in Matlab/Octave
(i) eliminazione;
che indicheremo più compattamente con A(1) x = b(1) , dove l’apice ci ricorda il
(1)
passo di eliminazione, avendo posto A(1) = A. Ora se a11 = 0 la prima equazione
può essere usata per ricavare x1 e sostituirlo nelle rimanenti equazioni ottenendo
un nuovo sistema A(2) x = b(2) che avrà un solo elemento non nullo nella prima
colonna ⎧ (2)
⎪ a1,1 x1 +a(2)
⎪ 1,2 x2 + · · ·
(2)
+a1,n xn = b1
(2)
⎪
⎪
⎨ 0 (2) (2)
+a2,2 x2 + · · · +a2,n xn = b2
(2)
.. .. .. .. (3.10)
⎪
⎪ . . . .
⎪
⎪
=
⎩ (2) (2) (2)
0 +an,2 x2 + · · · +an,n xn = bn
⎧
⎪ (1)
⎨ ai,j i=1
(2)
ai,j =
⎪
⎩ a(1) − m a(1)
i,j i,1 1,j i>1
⎧
⎪ (1)
⎨ bi i=1
(2)
bi =
⎪
⎩ b(1) − m b(1)
i i,1 1 i>1
(2)
Se a2,2 = 0 si può continuare con la seconda colonna e cosı̀ via.
(k)
Pertanto per 1 ≤ k ≤ n − 1, se ak,k = 0 avremo
(k)
ai,k
mi,k = (k)
, i = k + 1, . . . , n
ak,k
e ⎧
⎪ (k)
⎨ ai,j i≤k
(k+1)
ai,j =
⎪
⎩ a(k) − m a(k)
i,j i,k k,j i = k + 1, . . . , n j = i, ..., n
⎧
⎪ (k)
⎨ bi i≤k
(k+1)
bi =
⎪
⎩ b(k) − m b(k)
i i,k k i = k + 1, . . . n
Alla fine il sistema A(n) x = b(n) avrà la matrice A(n) che sarà triangolare
superiore
⎧ (n) (n) (n) (n)
⎪
⎪ a1,1 x1 +a1,2 x2 + · · · +a1,n xn = b1
⎪
⎪
⎨ (n) (n)
+a2,2 x2 + · · · +a2,n xn = b2
(n)
.. .. (3.11)
⎪
⎪ . .
⎪
⎪
⎩ (n) (n)
an,n xn = bn
allora
xn = b(n) (n)
n /an,n (3.13)
⎧ ⎫
1 ⎨ (n) ⎬
n
(n)
xi = bi − ai,j xj , i = n − 1, . . . , 1 . (3.14)
a ⎩ ⎭
(n)
i,i j=i+1
74 Appunti di Calcolo Numerico con codici in Matlab/Octave
Algoritmo 2. Eliminazione
for i=1:n-1,
for j=i+1:n,
m=a(j,i)/a(i,i);
a(j,:)=a(j,:)-m*a(i,:);
b(j)=b(j)-m*b(i);
end
end
(n − i) (n − i + 1) + (n − i) = (n − i)(n − i + 2) ,
ciclo su j ciclo su k ciclo su j per i bj
n−1 n−1
(n − i)(n − i + 2) = (n2 + 2n − 2(n + 1)i + i2 ) . (3.15)
i=1 i=1
Ricordando le identità
n n
n(n + 1) n(n + 1)(2n + 1)
i= , i2 = (3.16)
i=1
2 i=1
6
n−1
2n3 − 3n2 + n n3 n2 5n n3
(n2 + 2n − 2(n + 1)i + i2 ) = n2 − n + = + − ≈O .
i=1
6 3 2 6 3
(3.17)
Pertanto la complessità dell’algoritmo di eliminazione, in termini di operazioni
di moltiplicazione, è n3 /3 .
Per la sostituzione all’indietro possiamo usare questo codice.
for i=n:-1:1,
sum=a(i,:)*x
x(i)=(b(i)-sum)/a(i,i);
end
3 - Soluzione di sistemi lineari 75
[M,r]=max(abs(a(k+1:n,k)));
t=a(k,:); a(k,:)=a(r,:); a(r,:)=t
Con questa strategia si ha una riduzione dell’ errore algoritmo e quindi maggiore
stabilità. Infatti, detto
(k) (k)
|ar,k | = max |ai,k | ,
k≤i≤n
La disuguaglianza deriva dal fatto che per costruzione |mi,k | ≤ 1. Detto poi
(k) (k)
aM = max1≤i,j≤n |ai,j | , da (3.18) otteniamo
Pertanto la strategia del pivot parziale per righe garantisce maggiore stabilità al
MEG. È da osservare che la maggiorazione (3.19) non è quasi mai raggiunta.
Vediamo come è possibile implementare la tecnica del pivot parziale per righe,
facendo uso di un vettore p che memorizza solo gli scambi di righe. All’inizio
pi = i, i = 1, ..., n. Il significato di pi è il seguente: ai,j è memorizzato nella
posizione di indice di riga pi e colonna j (e bi nella posizione indicata da pi ).
Quando si scambia la riga k con la riga r, si scambia pk e pr cosicchè l’indice di
riga che contiene il pivot è pr .
• Primo passo. L’elemento pivot che vale 4, si trova in riga 2. Pertanto scambier-
emo p2 e p1 e l’indice del pivot sarà 2. Otteniamo i moltiplicatori m(1) = 1/2 e
m(2) = −1/2 e la nuova matrice
⎛ ⎞
0 1 1/2 7/2 2
⎝ 4 4 −3 3 1 ⎠,
0 5 −5/2 5/2 3
1 2
det(B2 ) = det =0.
−1 −2
allora avremo
⎛ ⎞ ⎛ ⎞⎛ ⎞
1 2 −1 1 0 0 1 2 −1
PB = ⎝ 1 1 2 ⎠=⎝ 1 1 0 ⎠⎝ 0 −1 3 ⎠ .
−1 −2 0 −1 0 1 0 0 −1
È facile far vedere che si sarebbe ottenuta un’altra fattorizzazione se avessimo usato
un’altra matrice di permutazione
⎛ ⎞
0 0 1
P1 = ⎝ 0 1 0 ⎠
1 0 0
L =
1.0000 0 0 0
0.5000 1.0000 1.0000 0
0.3333 1.0000 0 0
0.2500 0.9000 -0.6000 1.0000
U =
1.0000 0.5000 0.3333 0.2500
0 0.0833 0.0889 0.0833
0 0 -0.0056 -0.0083
0 0 0 0.0004
3 - Soluzione di sistemi lineari 79
mentre [L,U,P]=lu(A)
L =
1.0000 0 0 0
0.3333 1.0000 0 0
0.5000 1.0000 1.0000 0
0.2500 0.9000 -0.6000 1.0000
U =
1.0000 0.5000 0.3333 0.2500
0 0.0833 0.0889 0.0833
0 0 -0.0056 -0.0083
0 0 0 0.0004
P =
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
Mn−1 · · · M2 M1 A = A(n) .
80 Appunti di Calcolo Numerico con codici in Matlab/Octave
da cui
⎛ ⎞
1 0
⎜ m2,1 1 ⎟
⎜ ⎟
⎜ .. .. .. ⎟
⎜ . . . ⎟
L=⎜
⎜ ..
⎟ .
⎟
⎜ .. ⎟
⎜ . . ⎟
⎝ ⎠
mn,1 ··· mn,n−1 1
Infine nel caso generale in cui siano richieste ad ogni passo delle matrici di per-
mutazione, ovvero
(Mn−1 Pn−1 ) · · · (M1 P1 )A = U
Osservazioni
√
h1,1 = a1,1
' j−1
(
1
hi,j = ai,j − hi,k hj,k , i = 2, . . . , n ; j = 1, . . . , n
hj,j
k=1
.
/
/ i−1
hi,i = 0ai,i − h2i,k .
k=1
bi
α1 = a 1 , βi = , αi = ai − βi ci−1 , i = 2, ..., n .
αi−1
Risolvere quindi il sistema T*x=d con l’algoritmo di Thomas, con d scelto cosicché
si abbia x=ones(10,1). Quante operazioni si risparmiano rispetto alla fattoriz-
zazione classica LU fatta con Gauss?
1. calcola r = b − Ax̂;
3. poni y = x̂ + d
ripeti finché
d
> tol
y
dove tol è una prefissata tolleranza. Ovvero ci si arresterà quando l’errore rela-
tivo rispetto alla soluzione y risulta essere minore o uguale a tol.
Nota: di solito (cioè in assenza di errori di arrotondamento) bastano 1-2 iter-
azioni per convergere. Il metodo serve come stabilizzatore del MEG.
Una funzione Matlab/Octave che implementa l’algoritmo del raffinamento
iterativo si può scrivere come segue.
function y=RafIter(x,L,U,tol)
%--------------------------------------------
% Inputs:
% x = soluzione con MEG
% L, U = matrici della fattorizzazione LU di A
% tol = tolleranza
%
% Output:
% y = soluzione ‘‘raffinata’’
%--------------------------------------------
kmax=20; % numero massimo d’iterazioni
A=L*U;
b=A*x; % determino il termine noto
84 Appunti di Calcolo Numerico con codici in Matlab/Octave
A xi = ei , i = 1, ..., n , (3.22)
dove i blocchi (1,1) sono scalari e la sottomatrice X2,2 si assume già nota. Quindi
il resto di X si calcola risolvendo le equazioni:
x2,1 = −X2,2T
l2,1
x1,2 = −u1,2 X2,2
T T T
/u1,1 .
1
x1,1 = u1,1 − xT1,2 l2,1
• Verificare che la matrice gfpp(n) dà un fattore di crescita per MEG con
pivoting parziale pari a 2n−1 .
• Sempre nel MCT Toolbox, esiste la funzione gep che data una matrice,
anche rettangolare, applica l’eliminazione gaussiana con pivoting parziale
o completo, restituisce , tra le altre informazioni, la fattorizzazione LU e
il fattore di crescita dei suoi elementi. Far vedere che se si usa la matrice
gep(gfpp(n),’c’) il fattore di crescita risulta uguale a 2.
Mx − Nx = b (3.23)
Mx = Nx + b (3.24)
x = M −1 N x + M −1 b (3.25)
lim x(i) = x ,
i→∞
e continuando otterremo ⎛ 1
⎞
2i
x(i) = ⎝ 0 ⎠ .
0
Pertanto per i → ∞ la successione converge verso x. Si verifica facilmente che par-
T
1
tendo da x(0) = (0, 1, 1)T si avrebbe x(i) = 0, i , 2i e quindi una successione
2
divergente.
Prima di passare ai metodi, concludiamo questa parte sulle generalità dicendo
quando numericamente consideriamo convergente un metodo iterativo. Fissata
una tolleranza e indicato un numero massimo d’iterazioni kmax, il test d’arresto
che valuteremo sarà
con A = D − (B + C).
Nel metodo di Jacobi le matrici M e N prima definite sono
M = D, N = B + C .
Nota ⎛ a a ⎞
0 − a1,2
1,1
... − a1,n
1,1
⎜ − a2,1 a
− a2,n ⎟
⎜ a2,2 0 ... ⎟
J =⎜ ⎟ .
2,2
⎜ .. ⎟
⎝ . ⎠
an,1
− an,n 0
Nel metodo di Gauss-Seidel, o semplicemente G-S, le matrici M e N prima def-
inite sono
M = D − B, N = C .
La matrice di iterazione di Gauss-Seidel è
G = M −1 N = (D − B)−1 C .
Osserviamo che
da cui otteniamo che, in termini vettoriali, il metodo di G-S si può scrivere come
ha il grafo che non è fortemente connesso. Infatti non esiste un arco orientato che va
da p1 a p4 .
3 - Soluzione di sistemi lineari 91
È facile vedere che ρ(J) ≈ 0.4 < 1 come pure ρ(G) ≈ 0.18 < 1. Pertanto sia il metodo
di Jacobi che di G-S convergono. Si noti inoltre che ρ(G) < ρ(J) il che conferma che
se entrambi convergono, G-S converge più velocemente.
Nel prossimo esempio facciamo vedere che se A non è strettamente diagonale-
mente dominante, ma solo diagonalmente dominante, non è detto che il metodo
di Jacobi e di G-S siano convergenti.
E SEMPIO 22. La matrice
⎛ ⎞
−4 −1 1 1
⎜ 0 −4 0 −4 ⎟
A=⎜
⎝ 1
⎟
1 4 1 ⎠
0 −4 0 4
È facile vedere che ρ(J) = ρ(G) = 1, pertanto sia il metodo di Jacobi che di G-S non
convergono.
Infine un esempio di matrice diagonalmente dominante con grafo stretta-
mente connesso
E SEMPIO 23. Data ⎛ ⎞
1 −1 0 0
⎜ 0 1 1 0 ⎟
A=⎜
⎝ 0
⎟
0 −1 1 ⎠
−1 0 0 −3
che è diagonalmente dominante (non in senso stretto) con grafo fortemente connesso.
La matrice di Jacobi è ⎛ ⎞
0 1 0 0
⎜ 0 0 −1 0 ⎟
J =⎜ ⎝ 0 0
⎟
0 1 ⎠
− 13 0 0 0
che risulta essere convergente avendo cerchi di Gerschgorin centrati nell’origine con
raggi ≤ 1. Gli autovalori sono infatti {±0.76, 0 ± 0.76i}.
3 - Soluzione di sistemi lineari 93
ωAx = ωb, ω = 0, ω ∈ R .
che, come prima osservato, coincide con il metodo di G-S per ω = 1. Il parametro
ω serve ad accelerare la convergenza del metodo del metodo iterativo di G-S.
94 Appunti di Calcolo Numerico con codici in Matlab/Octave
Teorema 10. Condizione necessaria per la convergenza del metodo SOR è che
il cui valore è
2
ω0 = . (3.39)
1+ 1 − ρ2 (J)
Facciamo solamente vedere che richiedere che 0 < ω < 2 implica ρ(H(ω)) < 1.
Infatti,
Figura 3.1: Raggio spettrale di H(ω) con n = 10, ottenuto con la funzione
SOROmegaZero.m. Il valore ottimale calcolato è ω0 = 1.5727.
metodo SOR nel seguente modo a partire dal vettore iniziale (0, 0, 0). In prat-
ica si scelgano alcuni 0 < ωi < 2 e per ognuno di essi si eseguano 10-15
iterazioni. Quell’ ωi che stabilizza le soluzioni è da considerarsi quello ”ot-
timale” (si osservi che la soluzione del sistema è il vettore (1,1,1)). Perció
per sapere quale ω segliere si suggerisce di calcolare per ogni i norm([1; 1;
1]-x(ωi ),inf), dove x(ωi ) è la soluzione dopo 10-15 iterazioni dell’ SOR con
ωi .
Facoltativo: Sia A decomposta al solito come A = D − B − C e ricordando
che la matrice di iterazione del metodo SOR è:
Hω = (D − ω B)−1 [(1 − ω) D + ω C]
si disegni la funzione r :]0, 2[→ R, tale che r(ω) = ρ(Hω ). Verificare quindi
se il valore empirico scelto è ”vicino” al valore ”ottimale” teorico. Scrivere un
M-file che assolva a dette richieste, calcolando anche il numero di iterazioni
effettuate.
A questo punto abbiamo tutti gl’ingrendienti per l’algoritmo del metodo del gra-
diente
Scelto x(0) ∈ Rn , per k = 0, 1, ... finchè si converge, esegui i seguenti passi
1. r(k) = b − Ax(k) ,
T
r (k) r (k)
2. αk = r (k) T Ar (k)
(i) Scegliere la direzione di discesa d(k+1) . Essa non sarà più il residuo al passo
k + 1 ma tale che
(ii) Scelta la direzione cercheremo, come per il metodo del gradiente, il minimo
di
Definizione 15. Il vettore x∗, quando esiste, si dice soluzione ai minimi quadrati
del sistema Ax = b.
La soluzione ai minimi quadrati è caratterizzata dal seguente teorema.
Teorema 13. Sia A ∈ Rm×n , b ∈ Rm . Se x∗ soddisfa l’equazione
AT (b − Ax∗ ) = 0 (3.47)
allora per ogni y ∈ Rn si ha
Qv = I − 2 v v T . (3.50)
3. Q = I − 2 v vT .
102 Appunti di Calcolo Numerico con codici in Matlab/Octave
R = Qp Qp−1 · · · Q1 A
Se viene usata la fattorizzazione QR di A, la soluzione ai minimi quadrati di
A si può scrivere come
x∗ = R̃−1 Q̃T b ,
dove R̃ ∈ Rn×n , Q̃ ∈ Rm×n con R̃ = R(1 : n, 1 : n) e Q̃ = Q(1 : m, 1 : n) e R̃ non
singolare.
E SEMPIO 25. Dati tre punti A,B,C sopra il livello del mare. Per misurare le rispettive
altezze sopra il mare, calcoliamo le altezze h1 , h2 , h3 tra altri punti D,E,F ed i punti
A,B,C, nonchè le altezze h4 , h5 , h6 tra i punti AB, BC e AC rispettivamente. I valori
trovati sono
h1 = 1, h2 = 2, h3 = 3 ;
h4 = 1, h5 = 2, h6 = 1 .
Pertanto, ciascuna misurazione da origine ad un sistema lineare che rappresenta la
relazione tra le altezze dei punti A,B,C, che indichiamo con xA , xB , xC
⎛ ⎞ ⎛ ⎞
1 0 0 1
⎜ 0 1 0 ⎟⎛ ⎞ ⎜ 2 ⎟
⎜ ⎟ xA ⎜ ⎟
⎜ 0 0 1 ⎟ ⎜ ⎟
⎜ ⎟ ⎝ xB ⎠ = ⎜ 3 ⎟ .
⎜ −1 1 0 ⎟⎟ ⎜ 1 ⎟
⎜ xC ⎜ ⎟
⎝ 0 −1 1 ⎠ ⎝ 2 ⎠
−1 0 1 1
3 - Soluzione di sistemi lineari 103
7 5
xA = 3, xB = , xC = ,
4 4
con residuo T
b − Ax = − 14 , 1
4, 0, 2
4,
3
4, − 34
che è ortogonale alle colonne di A.
Il metodo consiste nel risolvere ad ogni passo il sistema lineare (3.52) con matrice
del sistema che è la matrice jacobiana.
Due semplici sistemi non lineari
E SEMPIO 26. ⎧ 2
⎨ x1 + x22 = 0
ex1 + ex2 = log(x3 )
⎩
x 1 x2 x3 = 5
104 Appunti di Calcolo Numerico con codici in Matlab/Octave
E SEMPIO 27.
x21 + x22 = 1
πx
sin 2 1 + x32 = 0
Per implementare in Matlab/Octave il metodo di Newton avremo bisogno di
una soluzione iniziale x0 , due funzioni fun e jfun che definiscono la funzione f
e la matrice jacobiana Jf , rispettivamente. Come test d’arresto, come al solito,
cicleremo finchè
x(k+1) − x(k) ≤ tolx(k) ∨ k > kmax .
con d ≥ 2, si risolva il sistema lineare A x = b con b tale che x = (1, . . . , 1)T . Va-
lutando la norma euclidea della differenza tra due iterate successive, ovvero
δk+1 = x(k+1) − x(k)
nei casi d = 2, 3 presentiamo in tabella alcune di tali differenze
d=2 d=3
.. ..
. .
456 7.2754e − 3 16 1.0229e − 4
457 7.2616e − 3 17 6.5117e − 5
458 7.2477e − 3 18 4.1563e − 5
459 7.2340e − 3 19 2.6593e − 5
• Si stimi in norma 2, il numero di iterazioni m necessarie nei casi d = 2
e d = 3 affinchè la differenza xk+m − xk+m−1 ≤ 1.e − 9 partendo da
k = 458 e k = 18, rispettivamente. (Sugg.: È noto che
δk+1 ≤ Ck δk
106 Appunti di Calcolo Numerico con codici in Matlab/Octave
Exrel 2
,
Ebrel 2
e il termine noto
b = [1 2 3 4 5 6 7]T .
P k
x1 − x0 < τ
1 − P
x(k+1) = (I − α A)x(k) + α b
1. (M + D)x(k+1) = −N x(k) + q ,
3. (M + N )x(k+1) = −Dx(k) + q .
(c) Ripetere i calcoli con n = 3, 10. Cosa si nota e cosa si può osservare? I
risultati cambiano se θ ∈ [0, 1]?
0 = xT Bx = xT (A − aI)2 + b2 xT x .
y T y + b2 x T x = 0
n
(c)
Ci = {z ∈ C : |z − ai,i | ≤ |aj,i | } , i = 1, . . . , n (4.6)
j=1,j =i
sono cerchi riga e colonna e sono detti i cerchi di Gerschgorin associati alla
matrice A.
4 - Autovalori di matrici 113
unione dei cerchi riga e colonna rispettivamente. Pertanto essi appartengono an-
che alla loro intersezione R ∩ C.
A supporto di questo Teorema facciamo un esempio tratto da [24, p. 89].
E SEMPIO 28. Sia ⎛ ⎞
4 −1 1 0 0
⎜ 1 3 −1 0 0 ⎟
⎜ ⎟
A=⎜
⎜ 0 1 1 0 0 ⎟
⎟
⎝ 0 0 0 2 1 ⎠
0 0 0 1 8
√ √
i cui autovalori sono λ1 = 5 + 10, λ2 = λ3 = 3, λ4 = 2 e λ5 = 5 − 10. I cerchi riga
sono
R 2 ∪ R3 ∪ R4 ∪ R5
poiché R2 = C2 , R4 ⊂ R2 ; C1 , C4 ⊂ C2 e R5 = C5 .
L’Esempio 28, ci suggerisce che se A è simmetrica allora le regioni R e C del
Teorema 16 coincidono ed essendo gli autovalori di matrici simmetriche reali, la
loro intersezione è formata dall’unione di intervalli dell’asse reale.
Un’applicazione del primo Teorema di Gerschgorin è la seguente
Proposizione 8. Se A è diagonalmente dominante in senso stretto allora è non
singolare.
Dim. La dimostrazione è ora facilitata dalla conoscenza dei cerchi di Ger-
schgorin. Infatti, se A è diagonalmente dominante in senso stretto vale la disug-
uaglianza
n
ai,j
ai,i < 1 .
j=1,j =i
114 Appunti di Calcolo Numerico con codici in Matlab/Octave
Figura 4.1: Cerchi di Gerschgorin della matrice A dell’ Esempio 28: sopra i
cerchi riga e sotto quelli colonna.
da cui
|z − ai,i | < |ai,i | .
La matrice A ha quindi cerchi di Gerschgorin che non passano mai per l’origine
e pertanto non potrà mai avere autovalori nulli.
Gerschgorin diede anche un’altra caratterizzazione
R = A1 ∪ A2 , A1 ∩ A2 = ∅
Figura 4.2: Cerchi riga di Gerschgorin della matrice A dell’ Esempio 29.
come si nota ci sono due sottinsiemi disgiunti e quindi un autovalore cadrà nel
cerchio di più a sinistra e due nell’insieme formato dagli altri due cerchi.
x(k)
x(k) = Ay(k−1) , y(k) = , λ(k) = (y(k) )T A y(k) .
x(k)
Perchè si chiama metodo delle potenze? Basta osservare che y(k) = r(k) Ak y(0) ,
cioè appaiono le potenze della matrice A, con
&
k
1
r(k) = .
i=1
x(i)
Infatti,
Ay (0)
• y (1) = ;
x(1)
Ay (1) A2 y (0)
• y (2) = = ;
x(2) x(1) x(2)
Ay (2) A3 y (0)
• y (3) = (3)
= (1) ;
x x x(2) x(3)
• ....
4.2.1 Convergenza
Gli autovettori
n x1 , . . . , xn sono linearmente indipendenti, cosicché possiamo scri-
vere x(0) = i=1 α1 xi da cui
n
y (0) = β (0) αi xi , β (0) = 1/x(0) .
i=1
(ii) Al passo k
' (−1
n &
k
y (k) = β (k) αi λki xi , β (k) = x(i)
i=1 i=0
da cui ' (
n k
(k) λi
y = λk1 β (k) α1 x 1 + αi xi ,
i=2
λ1
Poiché λλ1i < 1, i = 2, ..., n allora lim y (k) = x1 ovvero la successione dei vettori
k→∞
y (k) converge alla direzione dell’autovettore x1 purchè α1 = 0. Nel caso in cui
α1 = 0 e |λ2 | > |λ3 |, il processo dovrebbe convergere verso λ2 . Però a causa degli
(inevitabili) errori di arrotondamento comporta la comparsa di una componente
nella direzione di x1 anche se questa non era presente nel vettore iniziale x(0) ,
quindi α1 = 0 e il metodo converge ancora a λ1 . Vediamo questo fatto nell’esempio
seguente.
i cui autovalori (con 5 cifre decimali) sono −3.61903, −2.61803, −1.38197 e −0.38197.
Applicando il metodo delle potenze con vettore iniziale x(0) = [3, 4, 4, 3]T converge
al secondo autovalore più grande in modulo. Lo stesso accade partendo da x(0) =
[0, 0, 0, 0]T oppure x(0) = [1, 2, 2, 1]T perchè tale vettore ha componenti uguali lungo
xk2 e xk3 . Per evitare questo basterà considerare un vettore le cui componenti sono
scelte casualmente (random).
118 Appunti di Calcolo Numerico con codici in Matlab/Octave
(k)
Quando però |λ2 | ≈ |λ1 |, la successione {λ1 } converge verso λ1 molto lenta-
mente e in tal caso il metodo viene usato come stima iniziale per il metodo delle
potenze inverse che vedremo oltre.
Inoltre, se la matrice
' A non ( è simmetrica, la convergenza all’autovalore di
λ2 k
modulo massimo è O . Quando A è simmetrica la convergenza rad-
λ1
2k
λ2
doppia, ovvero é O λ1 .
λ2
Concludendo, il rapporto è importante ai fini della velocità di conver-
λ1
genza del metodo delle potenze. Il prossimo esempio ci fa capire proprio questo
fatto.
E SERCIZIO 52. Si consideri la matrice dell’Esercizio 51, con gli stessi valori del
parametro α, determinare l’autovalore di modulo minimo λn mediante il metodo
delle potenze inverse (ovvero il metodo delle potenze applicato ad A−1 ). Usare
x(0) =ones(4,1) e tolleranza = 1.e − 10.
Con il metodo delle potenze con shift è possibile cercare l’ autovalore di A, più
vicino ad numero η fissato. In pratica si tratta di applicare il metodo delle potenze
inverse per il calcolo dell’autovalore minimo λmin (Aη ) della matrice Aη = A − η I.
L’autovalore cercato, dipendente da η, è λη = λmin (Aη ) + η.
Per individuare un valore η da cui partire, si possono costruire i cerchi di
(r) (c)
Gerschgorin, Ci e Ci , i = 1, ..., n (vedi (4.5) e (4.6)), associati alle righe e alle
colonne di A, rispettivamente (vedasi la funzione CerchiGerschgorin.m).
E SERCIZIO 53. Cercare l’/gli autovalore/i di A, con α = −30, più vicino/i al nu-
mero η = −15. In pratica si tratta di applicare il metodo delle potenze inverse per
il calcolo dell’autovalore minimo della matrice Aη = A − η I. Quindi l’autovalore
cercato sarà λη = λmin (Aη ) + η.
Come cambia il numero delle iterazioni se prendiamo η = −17? Prendere
x(0) =ones(4,1) e tolleranza = 1.e − 10.
Per calcolare tutti i rimanenti autovalori si opera poi per deflazione, ovvero
applicando il metodo alle sottomatrici di ordine n−1, n−2, . . . , 1 che si ottengono
mediante trasformazioni per similitudine con matrici ortogonali (quali le matrici
di Householder).
Facciamo vedere su un semplice esempio come calcolare la radice più grande
in modulo, che chiameremo ξ1 , e la successiva radice più grande in modulo ξ2 .
ξ1 aT
PFPT =
0 F1
4.4 Il metodo QR
Se si desiderano tutti gli autovalori di una matrice, bisogna ricorrere a tecniche
che consentono dapprima di ridurre la matrice ad una forma più semplice medi-
4 - Autovalori di matrici 121
ovvero che tutti gli elementi della sottodiagonale siano in modulo minori di una
prescelta tolleranza (vedasi più sotto).
La funzione Matlab/Octave MetQR (vedasi i Codici Matlab/Octave online) im-
plementa il metodo QR per la ricerca di autovalori, mentre la funzione ConvergenzaQR
verifica se il metodo QR converge, controllando che gli elementi della sottodiago-
nale siano tutti in modulo minori di una fissata tolleranza.
Quindi
• per k = 1, 2, . . . mediante la fattorizzazione QR di A (usare la funzione
Matlab/Octave qr), fattorizzare T (k−1) come segue: T (k−1) − μI = Q(k) R(k) ;
• porre T (k) = R(k) Q(k) + μI.
Osserviamo che Q(k) T (k) = Q(k) R(k) Q(k) +μQ(k) = T (k−1) Q(k) , ovvero T (k) e T (k−1)
sono simili e pertanto hanno gli stessi autovalori.
L’effetto dello shift sulla convergenza è il seguente. Supponiamo che A abbia
autovalori che possiamo ordinare
(k)
Per tale scelta di μ, l’elemento tn,n−1 , generato dalla precedente iterazione, tende
rapidamente a zero al crescere di k. Se per caso μ fosse un autovalore della
(k) (k)
matrice T (k) , e anche di A, tn,n−1 = 0 e tn,n = μ. Questo suggerisce in ultima
istanza di scegliere
μ = t(k)
n,n .
Con questa scelta, si dimostra, la convergenza del metodo è quadratica, nel senso
che se
(k)
tn,n−1
= αk < 1, per qualche k ≥ 0
T (0) 2
allora
(k+1)
tn,n−1
= O(αk2 ) .
T (0) 2
Nel caso di matrice simmetrica, si dimostra (cf. [15]) che la convergenza è cubica.
Di questo fatto possiamo tenere conto durante l’esecuzione del metodo QR con
(k)
singolo shift, controllando il valore di |tn,n−1 | e ponendolo uguale a zero se risulta
(k) (k)
|tn,n−1 | < |tn−1,n−1 | + |t(k)
n,n | ≈ eps. (4.9)
Questo sarà il test da usare nell’implementazione del metodo QR con shift. Se,
(k)
la matrice A è in forma di Hessenberg superiore, l’azzeramento di tn,n−1 implica
124 Appunti di Calcolo Numerico con codici in Matlab/Octave
(k)
che tn,n sarà una buona approssimazione di λn . Quindi, noto λn la ricerca dei
rimanenti autovalori si farà sulla matrice T (k) (1 : n − 1, 1 : n − 1), riducendo di
volta in volta la dimensione del problema fino a determinare tutti gli autovalori
di A. In pratica una strategia di tipo deflattivo.
Il metodo QR con singolo shift è implementato nella funzione MetQRShift.
p1 (x) = d1 − x; (4.10)
pi (x) = (di − x) pi−1 (x) − b2i−1 pi−2 (x), i = 2, ..., n.
Alla fine pn (x) = det(A − xI). La successione {pi (x)} è detta una successione
di Sturm. Vale il seguente risultato (la cui dimostrazione si trova in [2, pagg.
345-346]).
4 - Autovalori di matrici 125
Teorema 18.
1. p0 (x) non cambia segno;
2. se pi (x) = 0 allora pi−1 (x)pi+1 (x) < 0, per i = 1, 2, . . . , n − 1 ; (alternanza
degli zeri)
3. se pn (x) = 0 allora pn (x)pn−1 (x) < 0 (e quindi pn (x) ha tutti zeri di molteplicità
1).
Detto altrimenti, per i = 2, ..., n gli autovalori di Ai−1 separano quelli di Ai ,
ovvero
λi (Ai ) < λi−1 (Ai−1 ) < λi−1 (Ai ) < · · · < λ2 (Ai ) < λ1 (Ai−1 ) < λ1 (Ai ) . (4.11)
α = min (di − (|bi | + |bi−1 |)), β = max (di + (|bi | + |bi−1 |)) , (4.13)
1≤i≤n 1≤i≤n
function [p,cs]=succSturm(d,b,x)
%-----------------------------------------------
% Calcolo della successione di Sturm ’p’ in x
% a partire dai vettori d e b
% e dei corrispondenti cambiamenti di segno ’cs’
%-----------------------------------------------
n=length(d); p(1)=1; p(2)=d(1)-x; for i=2:n,
p(i+1)=(d(i)-x)*p(i)-b(i-1)^2*p(i-1);
end
cs=0; %contatore cambi di segno
s=0; %contatore dei segni costanti
for i=2:length(p),
if(p(i)*p(i-1)<=0),
cs=cs+1;
end
if(p(i)==0),
s=s+1;
end
end
cs=cs-s;
return
(k)
ai,j = 0, se (i, j) = (p, q) .
4 - Autovalori di matrici 127
Siano c = cos(θ) e s = sin(θ). Allora, gli elementi di A(k) che variano rispetto a
quelli di A(k−1) per effetto della trasformazione (4.14) si ottengono risolvendo il
sistema
6 7 T 6 (k−1) 7
(k) (k) (k−1)
app apq c s app apq c s
(k) (k) = (k−1) (k−1) . (4.15)
apq aqq −s c apq aqq −s c
Il nostro scopo è trovare l’angolo θ che consente al passo k di annullare gli ele-
(k−1)
menti extradiagonali di A(k−1) interessati dalla trasformazione. Ora, se apq =
(k−1)
0, allora c = 1 e s = 0. Se invece apq = 0, posto t = s/c = tan(θ), il sistema
(4.15) equivale alla soluzione dell’equazione
(k−1) (k−1)
aqq − app
t2 + 2ηt − 1 = 0, con η = (k−1)
. (4.16)
2apq
Nell’equazione precedente,
se η ≥ 0 si sceglie la radice t = 1/(η + 1 + η 2 ) altri-
2
menti t = −1/(−η + 1 + η ). Quindi c e s risultano
1
c= √ , s = ct .
1 + t2
La convergenza del metodo si verifica calcolando la seguente quantità, valida
per una generica matrice M
⎛ ⎞1/2 ' (
n n 1/2
n n
Φ(A(k) ) = a2i,j − a2i,i − 2|ap,q |
i,j=1 i=1
(k−1)
= Φ(A ) − 2|ap,q | (4.18)
(k−1)
< Φ(A ).
128 Appunti di Calcolo Numerico con codici in Matlab/Octave
Una strategia ottimale di scelta degli indici p, q tale che Φ(A(k) ) ≤ Φ(A(k−1) ) sia
sempre verificata, è quella di scegliere l’elemento di A(k−1) tale che
(k−1)
|a(k−1)
p,q | = max |ai,j |.
i=j
Φ(A(k−1) )
Φ(A(k) ) ≤ Φ(A(k−1) ) − 2 = αΦ(A(k−1) )
n(n − 1)
2
con α = 1 − n(n−1) < 1, n ≥ 2. Continuando,
da cui la conclusione.
Una M-function che implementa il metodo di Jacobi, data A e una tolleranza
tol e che restituisce la matrice diagonale D degli autovalori, il numero di iter-
azioni effettuate e la quantità Φ(·), è la funzione symJacobi.
2. Determinare tutti gli autovalori con il metodo più idoneo per la strut-
tura della matrice.
4 - Autovalori di matrici 129
(k)
con ηk = |tn,n−1 |/T (0) 2 , T (0) = (Q(0) )T A Q(0) e Q(0) (la prima delle ma-
trici ortogonali usati nella fattorizzazione QR di A) che faccia vedere che la
convergenza del metodo è quadratica.
• polinomiale, quando f˜(x) = pn (x) con pn (x) = a0 +a1 x+· · ·+an xn ; polinomio
di grado ≤ n;
ck = ak + a−k
bk = i(ak − a−k ) .
pn (x)
• razionale in tal caso f˜(x) = rm,n (x) = qm (x) , con pn e qm polinomi di grado
n e m, rispettivamente (qm = 0 su R).
pn (xi ) = yi , i = 0, . . . , n (5.2)
la cui matrice A altro non è che la matrice di Vandermonde per la quale vale
&
n
det(V ) = (xi − xj ) . (5.4)
i,j=0, i<j
Seguendo [9, p. 24], per induzione su n, facciamo vedere che vale la relazione
(5.4).
Per n = 1, det(V ) = x1 − x0 . Sia n ≥ 2. Ora, det(V ) può essere visto come
det(V (x0 , . . . , xn )). Per valutare det(V ) possiamo procedere come segue. Consid-
eriamo la funzione
si ottiene
V a = y
con a = (a0 , a1 , ..., an )T , y = (g(x0 ), g(x1 ), ..., g(xn ))T e V la matrice di Vandermonde.
Ad esempio se n = 3, x0 = −5, x1 = −5 + 10/3 ≈ −1.667, x2 = −5 + 20/3 ≈
1.667, x3 = 5 il sistema diventa
⎛ ⎞ ⎛ ⎞ ⎛ 1 ⎞
1 −5 25 −125 a0 26 ≈ 0.04
⎜ 1 −1.667 2.779 −4.63 ⎟ ⎜ a1 ⎟ ⎜ 0.26 ⎟
V =⎜ ⎝ 1 1.667
⎟ ⎜ ⎟=⎜ ⎟.
2.779 4.63 ⎠ ⎝ a2 ⎠ ⎝ 0.26 ⎠
1 5 25 125 a3 0.04
Il concetto di condizioni d’interpolazione può essere generalizzato, come ve-
diamo nel prossimo esempio, considerando non solo i valori della funzione nei
nodi ma altri valori.
20
E SEMPIO 35. Si consideri la funzione f (x) = − 5 ex ristretta all’intervallo
1 + x2
[0, 1]. Determinare l’unico polinomio di secondo grado, p2 (x) = a0 + a1 x + a2 x2 tale
che
1 1
p2 (0) = f (0), p2 (1) = f (1), p2 (x)dx = f (x)dx .
0 0
Si tratta di risolvere il sistema lineare con matrice non singolare
⎛ ⎞
1 0 0
A=⎝ 1 1 1 ⎠
1 12 31
e termine noto ⎛ ⎞
15
⎜ 5(2 − e) ⎟
⎜ ⎟
b=⎜
⎜ 1
⎟
⎟
⎝ ⎠
f (t)dt
0
&
n
x − xj
li (x) = . (5.6)
xi − xj
j=0,j =i
&
n
Posto ωn (x) = (x − xi ) è facile provare che
i=0
ωn (x)
li (x) = .
(x − xi )ωn (xi )
Posto
&
n
1 1
wi = =
xi − xj ωn (xi )
j=0,j =i
Con tale nuova forma, detta (prima) formula baricentrica, si ha il vantaggio che
se i coefficienti wi sono precalcolati, per valutare il polinomio pn (x), serviranno
O(n) flops (valutando ωn (x) e i pesi wi /(x − xi )) al posto di O(n2 ) flops necessarie
per valutare ciascun polinomio elementare di Lagrange.
Non solo. Se aggiungiamo un altro nodo, xn+1 , allora i pesi diventeranno
wi∗ = wi /(xn+1 − xi ), i = 0, . . . , n
1
wn+1 = )n+1 .
i=0,i=n+1 (xn+1 − xi )
136 Appunti di Calcolo Numerico con codici in Matlab/Octave
n
wj
Infine, se g(x) ≡ 1 allora g(x) = ωn (x) . In definitiva, il polinomio
j=0
x − xj
d’interpolazione diventa
n wj
j=0 x−xj f (xj )
pn (x) = n wj , (5.8)
j=0 x−xj
1 x0 a0 f (x0 )
= .
1 x1 a1 f (x1 )
La matrice inversa è
1 x1 −x0
x1 − x0 −1 1
e pertanto avremo la soluzione
a0 1 x1 f (x0 ) − x0 f (x1 )
= .
a1 x1 − x0 −f (x0 ) + f (x1 )
&
n &
i−1 &
n
(i − j) = (i − j) · (i − j) = (−1)n−i i!(n − i)! , (5.10)
j=0,j =i j=0 j=i+1
da cui
n
ωn+1 (t) n yi
pn (t) = (−1)n−i . (5.11)
n! i=0
i (t − i)
Quando i nodi sono equispaziati, è facile verificare che per il calcolo di pn (t) sono
necessarie n2 /2 addizioni e 4n moltiplicazioni.
E SERCIZIO 63. Costruire la funzione Matlab/Octave che calcola l’i-esimo poli-
nomio elementare di Lagrange su nodi equispaziati facendo uso delle formule
(5.9) e (5.10). Costruire quindi il polinomio interpolante mediante la (5.11).
f (n+1) (ξ)
rn (x) = (x − x0 ) · · · (x − xn ) , (5.12)
(n + 1)!
con ξ ∈ (a, b) e xi distinti.
Dim. Se x = xi , l’errore è nullo e quindi il risultato è ovvio.
Sia ora x = xi , allora preso un qualsiasi t ∈ Ix (Ix il più piccolo intervallo che
contiene i punti x0 , ..., xn , x) possiamo definire la funzione ausialiaria
ωn (t)rn (x)
g(t) = rn (t) − .
ωn (x)
Poiché f ∈ C n+1 (Ix ) segue che g ∈ C n+1 (Ix ) ed ha n + 2 zeri distinti in Ix . Infatti
g(xi ) = 0, i = 0, . . . , n e g(x) = 0. Allora per il teorema di Rolle, g ha n + 1 zeri e
cosı̀ via finché g (n+1) ha un solo zero, che indichiamo con ξ.
138 Appunti di Calcolo Numerico con codici in Matlab/Octave
(n+1) (n+1)
Ma rn (t) = f (n+1) (t) e ωn = (n + 1)! pertanto
(n + 1)!
g (n+1) (t) = f (n+1) (t) − rn (x) .
ωn (x)
Quando valutiamo questa espressione in t = ξ otteniamo il risultato richiesto.
E SEMPIO 37. Calcoliamo l’errore d’interpolazione lineare, ovvero per n = 1. Dal
Teorema 5.12, r1 (x) = (x − x0 )(x − x1 ) f 2(ξ) , ξ ∈ (x0 , x1 ). Ora,
(x0 − x1 )2
max |(x − x0 )(x − x1 )| = .
x∈(x0 ,x1 ) 4
Se indichiamo con M2 = maxx∈(x0 ,x1 ) |f (x)|, possiamo dare la seguente maggio-
razione
(x0 − x1 )2
|r1 (x)| ≤ M2 .
8
2 sin x
Ad esempio, per f (x) = tan(x), x ∈ [1.35, 1.36], sapendo che f (x) = ,
cos3 x
troveremo |r1 (x)| ≤ 0.24 · 10−2 .
√
E SEMPIO 38. Per approssimare x̄, dove x̄ non è un quadrato perfetto, possiamo
interpolare come segue. Siano x0 , x1 , x2 i quadrati perfetti più vicini ad x̄, dei quali
consideriamo le loro radici. Si tratta quindi di costruire
√ il polinomio di grado 2, p2 (x),
√
interpolante i dati (xi , xi ), i = 0, 1, 2. Allora x̄ ≈ p2 (x̄).
Se x̄ = 0.6, consideriamo i tre punti
√ √ √
(0.49, 0.49 = 0.7), (0.64, 0.64 = 0.8), (0.81, 0.81 = 0.9)
ed il relativo polinomio√ d’interpolazione p2 (x). Il valore p2 (0.6) ≈ 0.774 ci darà
un’approssimazione di 0.6 (vedi Figura 5.3).
Circa l’errore che commettiamo, si tratta di stimare √ l’errore in [0.49, 0.81]. Ora
essendo ω2 (x) = (x−0.49)(x−0.64)(x−0.81), g(x) = x t.c. g (3) (x) = 8 √3x5 , l’errore
in modulo è
3
|r2 (x)| ≤ |ω3 (x)| , ξ ∈ [0.49, 0.81] .
3! 8 ξ 5
Infine,
0.924 · 10−3
|r2 (0.6)| ≤ ≤ 0.35 · 10−3 .
16 (0.49)5
Riconsideriamo l’Esempio 34, ovvero la funzione di Runge:
1
g(x) = , x ∈ [−5, 5] (5.14)
1 + x2
140 Appunti di Calcolo Numerico con codici in Matlab/Octave
(C) 2k − 1 π
xk = cos , k = 1, . . . , n . (5.15)
n 2
a + b b − a (C)
xk = + xk
2 2
(C)
dove xk sono i nodi di Chebsyehv in [−1, 1]. In alcuni testi (vedasi
ad es. [25, p. 78]) si considerano come nodi di Chebyshev i punti di
(CL)
Chebyshev-Lobatto, xk = cos(kπ/n), k = 0, . . . , n, che includono
pure gli estremi dell’intervallo.
con
n
Λn (X) = max |li (x)|
x∈[a,b]
i=0
Osservazioni.
Dal Teorema 23, En∗ dipende solo dalla regolarità di f e quindi è indipendente
dall’insieme dei punti d’interpolazione X, mentre non lo è Λn (X). Pertanto se
desideriamo diminuire l’errore d’interpolazione la scelta del vettore dei nodi è
fondamentale (per diminuire il valore di Λn ). Si dimostra (vedi ad esempio [28])
che la crescita asintotica (ovvero per n → ∞) della costante di Lebesgue per nodi
equispaziati Xe e nodi di Chebyshev Xc è :
2n+1
Λn (Xe ) ≈
n e loge n
2
Λn (Xc ) ≈ loge (n + 1) .
π
In entrambi i casi per n → ∞ la costante di Lebesgue tende ad infinito, ma per
i nodi di Chebyshev la crescita è logaritmica invece che esponenziale. Inoltre,
è stato dimostrato da Bernstein (1918) che, per ogni n ≥ 1, Λn (Xc ) ≤ σ(n) con
σ(n) = π2 log(n + 1) + 1 .
Per avere un’idea dell’andamento della costante di Lebesgue per punti di
Chebyshev, in Tabella 5.1 sono riportati alcuni valori di Λn (Xc ) e di σ(n) (ar-
rotondati alla terza cifra decimale). I valori di Λn (Xc ) sono stati calcolati con la
funzione CostLebesgue.m (vedi appendice C).
n Λn (Xc ) σ(n)
2 1.189 1.699
5 1.828 2.141
10 2.232 2.527
15 2.412 2.765
20 2.477 2.938
Tabella 5.1: Confronti dei valori della costante di Lebesgue per punti di Chebsy-
shev e della funzione σ(n)
Figura 5.6: 10 punti di Chebyshev (o) e Chebyshev estesi (*) in [−1, 1].
i = 0, . . . , n. Allora,
n
˜
pfn − pfn ∞ = max lj (x) f (xj ) − f˜(xj ) (5.19)
x∈[a,b]
j=0
n
≤ max |lj (x)| max |f (xi ) − f˜(xi )| . (5.20)
x∈[a,b] 0≤i≤n
j=0
n
Essendo Λn (X) := maxx∈[a,b] j=0 |lj (x)|, con X = {x0 , . . . , xn }, la costante di
Lebesgue si può interpretare come il numero di condizionamento del problema
d’interpolazione polinomiale.
E SEMPIO 40. Consideriamo la funzione f (x) = sin(2πx), x ∈ [−1, 1] che desideriamo
interpolare su 22 nodi equispaziati. Consideriamo poi i valori perturbati f˜(xi ) tali
che
δ := max |f (xi ) − f˜(xi )| ≈ 4.5 10−2 .
0≤i≤21
˜
Costruiamo pf21
e pf21 .
Mediante la (5.20) otteniamo la stima Λ21 ≈ 4500. Ovvero
il problema è sensibile alle perturbazioni (che ritroviamo soprattutto nei punti di
massima oscillazione della funzione).
è interpolante la funzione f (x) nei punti xi : infatti pn (xi ) = f (xi ). Per l’unicità
del polinomio d’interpolazione possiamo dire che esso è il polinomio d’interpolazione!
La (5.25) è detta la forma di Newton del polinomio d’interpolazione che potremo
riscrivere più semplicemente come
p = bn ; (5.27)
p = (x − xi )p + bi , i = n − 1, ..., 0
5 - Interpolazione e approssimazione 147
facciamo ora vedere il legame esistente con le differenze divise. Vale il seguente
risultato:
Proposizione 10. Se f ∈ C n+1 (I), allora
f (n+1) (ξ)
= f [x0 , ..., xn , x] , (5.29)
(n + 1)!
f (n+1) (ξ)
En (x) = (x − x0 ) · · · (x − xn ) , (5.31)
(n + 1)!
n
Dim. Come prima cosa, osserviamo che t0 ≥ 0 e i=0 ti = 1.
La dimostrazione di (5.32) si fa per induzione su n.
2. Nel caso n = 2, τ2 è il triangolo di vertici (0, 0), (1, 0), (0, 1).
f (t0 x0 + t1 x1 + t2 x2 )dt1 dt2 =
τ2
1 1−t1
= f (x0 + t1 (x1 − x0 ) + t2 (x2 − x0 ))dt2 dt1
0 0
1
1
= f (x0 + t1 (x1 − x0 ) + t2 (x2 − x0 ))|tt22 =1−t
=0
1
dt1
0 x2 − x0
1
1
= f (x2 + t1 (x1 − x2 ))dt1 −
x2 − x0 0
1 9
− f (x0 + t1 (x1 − x0 ))dt1
0
1
= {f [x1 , x2 ] − f [x0 , x1 ]} = f [x0 , x1 , x2 ] .
x2 − x0
3. Nel caso generale si integrerà prima rispetto ad una variabile per ridurre
la dimensione, quindi per ipotesi induttiva si conclude.
ove Voln (τn ) indica il volume n-dimensionale del simplesso τn . Ora, ricordando
1
la relazione Voln (τn ) = si ottiene la formula
n!
f (n) (x0 )
f [x0 , . . . , x0 ] = . (5.33)
n!
n+1 volte
Tabella 5.3: Tabella delle differenze divise per un punto ripetuto k + 1 volte
f (k) (x0 )
. In questo caso quindi il polinomio d’interpolazione in forma Newton
k!
coinciderà con la formula di Taylor.
dove i polinomi ui (x) e vi (x) sono funzioni dei polinomi elementari di Lagrange,
ovvero
È facile verificare che i polinomi ui (x) e vi (x) hanno grado 2n+1 e per essi valgono
le condizioni
ui (xk ) = δi,k ,
vi (xk ) = 0, ui (xk ) = 0, ∀ k
vi (xk ) = δi,k .
x0 f [x0 ]
f [x0 , x0 ]
x0 f [x0 ] f [x0 , x0 , x1 ]
..
f [x0 , x1 ] .
x1 f [x1 ] f [x0 , x1 , x1 ]
f [x1 , x1 ]
.. ..
x1 f [x1 ] . . f [x0 , x0 , . . . , xn , xn ]
..
.
.. .. ..
. . . f [x0 , x0 , xn ]
f [xn−1 , xn ]
xn f [xn ] f [x0 , xn , xn ]
f [xn , xn ]
xn f [xn ]
Teorema 25. Se f (x) ∈ C n+1 [a, b], esiste un punto ξ = ξ(x) ∈ (a, b) tale che
f (n+1) (ξ)
f [x0 , x1 , . . . , xn , x] = . (5.38)
(n + 1)!
5 - Interpolazione e approssimazione 151
Se f (x) ∈ C n+2 [a, b], esiste un punto η = η(x) ∈ (a, b) tale che
d f (n+2) (η)
f [x0 , x1 , . . . , xn , x] = . (5.39)
dx (n + 2)!
pi = yi , i = 0, . . . , n;
allora
p1,...,k (x)(x − x0 ) − p0,...,k−1 (x)(x − xk )
p0,...,k (x) = (5.40)
xk − x0
è il polinomio d’interpolazione su x0 , . . . , xk . Pertanto alla fine, p0,1,...,n (x) rappre-
senterà il valore in x del polinomio d’interpolazione di grado n costruito mediante
l’uso dei punti (xi , yi ).
Il vantaggio di questa tecnica, è che il polinomio d’interpolazione viene costru-
ito come una successione di polinomi di grado crescente, per cui il procedimento
si arresterà quando è raggiunto il grado richiesto.
In Tabella 5.5 riportiamo lo schema triangolare di Neville nel caso cubico.
Come si può facilmente verificare, i polinomi della prima riga p0,...,s , s = 0, . . . , 3
hanno grado crescente da 0 a 3.
152 Appunti di Calcolo Numerico con codici in Matlab/Octave
dove l’indice hi in pf1,hi ci ricorda che gli intervallini non hanno tutti la stessa
ampiezza.
Posto H = max0≤i≤n−1 hi , vale il seguente risultato.
Proposizione 11. Se f ∈ C 2 (I), allora
H2
max |f (x) − pf1,H (x)| ≤ max |f (x)| . (5.42)
x∈I 8 x∈I
5 - Interpolazione e approssimazione 153
E SEMPIO 42. Consideriamo i valori della funzione sin nei punti equispaziati xi =
i, i = 0, ..., 10. Usando le seguenti istruzioni Matlab/Octave, facciamo vedere come
plot produca l’interpolante lineare a tratti (vedasi Figura 5.8).
x=1:10; y=sin(x);
xx=0:0.01:10; yy=sin(xx);
plot(x,y,’-’,xx,yy,’:r’)
f (n+1) ∞ −n
f − pn ∞ ≤ 2 . (5.43)
(n + 1)!
e confrontare il risultato con quello ottenuto nel caso dei punti di Cheby-
shev.
3. Facoltativo: Plottare in un unico grafico, f (x), p4 (x) e t4 (x).
20
E SERCIZIO 67. Si consideri la funzione f (x) = x + ex + − 5 ristretta
1 + x2
all’intervallo [−2, 2].
1. Determinare il polinomio d’interpolazione di grado 5 in forma di New-
ton sui nodi equispaziati xk = −2 + kh, k = 0, ..., 5.
2. Calcolare l’errore d’interpolazione in un generico punto x ∈ (−2, 2).
5 - Interpolazione e approssimazione 155
con Hn,i (x) e Ĥn,i (x) polinomi di Hermite di grado n, definiti come
; <
Hn,i (x) = 1 − 2(x − xi )Ln,i (xi ) L2n,i (x)
Ĥn,i (x) = (x − xi )L2n,i (x)
ove Ln,i (x) è l’i-esimo polinomio di Lagrange di grado n.
Implementare (5.45) è computazionalmente costoso. Si può alternativa-
mente usare lo schema di interpolazione nella forma di Newton nel seguente
modo. Si considerano i punti
{z0 , z1 , z2 , z3 , ..., z2n+1 } = {x0 , x0 , x1 , x1 , ..., xn , xn }
e i corrispondenti valori della funzione f e della sua derivata prima f nei
punti, cosicchè il polinomio H2n+1 (x) si può scrivere nella forma equiva-
lente
H2n+1 (x) = q0,0 + q1,1 (x − x0 ) + q2,2 (x − x0 )2 + q3,3 (x − x0 )2 (x − x1(5.46)
)
2 2
+ q4,4 (x − x0 ) (x − x1 ) +
+ · · · + q2n+1,2n+1 (x − x0 )2 (x − x1 )2 · · · (x − xn−1 )2 (x − xn ) .
156 Appunti di Calcolo Numerico con codici in Matlab/Octave
(x − xj )k x > xj
(x − xj )k+ = .
0 x ≤ xj
In (5.47) ci sono k + n parametri (cj e dj ), ciò implica che lo spazio delle splines
di grado k ha dimensione n + k.
E SEMPIO 43. Le splines cubiche, che sono anche le più usate, si ottengono per k =
3. Il comando Matlab/Octave spline costruisce proprio splines cubiche. Vedremo
nel paragrafo 5.9.3 come costruire splines cubiche interpolanti imponendo diverse
condizioni sui nodi di bordo.
5.9.1 B-splines
Sia {x1 , x2 , ..., xn } (o {xi }+∞
i=−∞ ) una sequenza finita (o infinita) crescente di nu-
meri reali (xi < xi+1 ), detti nodi che per ora assumiamo distinti.
Definizione 22. La i-esima B-Spline di ordine k, che si indica con B(x; xi , ..., xi+k )
(grado k − 1) è la k-esima differenza divisa della potenza troncata p(x; t) = (x −
t)k−1
+
B(x; xi , ..., xi+k ) = (xi+k − xi )p[xi , ..., xi+k ](x) ,
dove con p[·](x) si è indicata la k-esima differenza divisa costruita sui nodi xi , xi+1 ,
..., xi+k di p(x; ·) vista come funzione di x.
158 Appunti di Calcolo Numerico con codici in Matlab/Octave
n+1
(f · g)[x1 , ..., xn+1 ] = f [x1 , ..., xj ]g[xj , ..., xn+1 ] (5.48)
j=1
xi+l − x x − xi
Bi,l (x) = Bi+1,l−1 (x) + Bi,l−1 (x) . (5.49)
xi+l − xi xi+l−1 − xi
5.9.2 Interpolazione
Sia f (x) una funzione nota sui punti t1 , t2 , ..., tm . Si desideri interpolarla per
mezzo di una spline S(x) di ordine n (grado n-1) con prescritti nodi interni x1 , ..., xN −1 .
160 Appunti di Calcolo Numerico con codici in Matlab/Octave
Figura 5.12: Spline cubica interpolante su nodi ”ad hoc” a (sx) e nodi equis-
paziati (dx)
• s1 (x1 ) = sn (xn ) = 0, in tal caso la spline viene detta naturale;
• nel caso in cui siano noti i valori f (x1 ) e f (xn ) s’imporranno le condizioni
s1 (x1 ) = f (x1 ) e sn (xn ) = f (xn ), in tal caso la spline viene detta vincolata
o completa;
• nel caso in cui siano f (x) sia periodica di periodo xn − x1 = b − a, ovvero
f (x1 ) = f (xn ) s’imporranno le condizioni s1 (x1 ) = sn (xn ) e s1 (x1 ) = sn (xn ),
in tal caso la spline viene detta periodica.
Indichiamo con m il vettore dei momenti (cfr. eq. (5.55) )
mi = si (xi ), i = 1, ..., n − 1
mn = sn−1 (xn ) .
Vediamo ora come costruire la spline cubica vincolata, ovvero la spline cubica
per la quale oltre ai valori della funzione f (x) nei nodi devono essere soddisfatte
le condizioni s (a) = f (a) e s (b) = f (b).
164 Appunti di Calcolo Numerico con codici in Matlab/Octave
t0 = . . . = tk = 0, tk+1 = . . . = t2k+1 = 1 ,
che è quella delle B-splines con le opportune modifiche. Sono detti polinomi di
Bernstein di grado k e si denotano con Bik (x) o βik (x).
n k
Bk,n (x) = x (1 − x)n−k (5.61)
k
lim Bn (f ; x) = f (x)
n→∞
su ogni punto x ∈ [0, 1] dove f è continua. Se inoltre f ∈ C[0, 1] allora il limite vale
uniformemente.
Corollario 1. Se f ∈ C[0, 1], allora per ogni > 0 e per n sufficientemente grande
n−1
S(t) = Pi Bi,m (t), t ∈ [α, β] .
i=0
n−1
S(t) = Pi Bin−1 (t), t ∈ [α, β] .
i=0
2. {P asso iterativo}
(r) (r−1) (r−1)
bi (t) = (1 − t)bi (t) + tbi+1 (t) r=1,...,n i=0,...,n−r (5.63)
b1b
``bb`
1
H
1
, H ```
, bH ``` b
, ! ! ! b21
HH `b2
, !
b ! H e
!3 H
b
,
b20!
b0 HHe
b10 , He 1
b
, Hebb2
H
b
e
b0 eb
b3
(r)
Proposizione 14. I punti bi (t) possono essere espressi in termini di polinomi
di Bernstein Bjr di grado r risultando
r
(r)
bi (t) = Pi+j Bjr (t) i = 0, ..., n − r (5.64)
j=0
Dim. Induzione su r.
(r) (5.63) (r−1) (r−1)
bi (t) = (1 − t)bi (t) + tbi+1 (t)
i+r−1 i+r
(5.64)
= (1 − t) r−1
Pj Bj−i (t) + t r−1
Pj Bj−i−1 (t)
j=i j=i
Usiamo il fatto che Bjr (t) = 0 se j ∈ {0, ..., n}. Riordinando gli indici otteniamo
i+r i+r
(1 − t) r−1
Pj Bj−i (t) + t r−1
Pj Bj−i−1 (t) =
j=i j=i
⎡ ⎤
i+r
⎢ ⎥ i+r
Pj ⎢
⎣(1 − t)Bj−i (t)
r−1 r−1
+ tBj−i−1 (t)⎥ = r
Pj Bj−i (t)
j=i ⎦ j=i
r
Bj−i (t)
∂E
= 0, j = 0, . . . , n . (5.68)
∂aj
BT B = D . (5.72)
V TB = R (5.73)
con R che è zero sotto la diagonale principale. Inoltre, la matrice R è tale che
RT R = B T V T V B = B T B = D ;
V T AU = R .
Un esempio
Si vuole determinare la funzione che approssima, nel senso dei minimi quadrati i
punti {(xi , yi ), 1 ≤ i ≤ m}, con un polinomio cubico p3 (x) = a1 + a2 x + a3 x2 + a4 x3 .
Questo è quello che in inglese si chiama “data fitting”.
174 Appunti di Calcolo Numerico con codici in Matlab/Octave
t=0:.05:1.0;
y=[.486; .866; .944;
1.144; 1.103; 1.202;
1.166; 1.191; 1.124;
1.095; 1.122; 1.102;
1.099; 1.017; 1.111;
1.117; 1.152; 1.265;
1.380; 1.575; 1.857];
function [x]=SVD_MinQuad(t,n)
%---------------------------------------
% t=vettore dei punti
% n=grado del polinomio d’approssimazione
%
% x=soluzione del sistema con SVD
%----------------------------------------
m=length(t);
for i=1:m,
a(i,:)=t(i).^(0:n);
end;
[u,d]=eig(a’*a);
b=a*u;
[v,r]=qr(b);
z=inv(r’*r)*r’*(v’*y);
disp(’Soluzione con la decomposizione SVD di A ’);
x=u*z
0.5747
4.7259
-11.1282
7.6687
A =
1 2 1
1 3 1
0 1 1
1 1 1
>> [U,S,V]=svd(A)
U =
S =
4.5732 0 0
0 0.7952 0
0 0 0.6736
0 0 0
5 - Interpolazione e approssimazione 177
V =
>> b=[1;2;0;1]
b =
1
2
0
1
>> d=U’*b
d =
-2.3223
-0.2329
-0.6213
0.4082
>> s=diag(S)
s =
4.5732
0.7952
0.6736
>> y=d(1:length(s))./s
y =
-0.5078
-0.2929
-0.9224
>> x=V*y
178 Appunti di Calcolo Numerico con codici in Matlab/Octave
x =
0.8333
0.5000
-0.5000
>> A=[1,2,1;1,2,1;0,1,0]
A =
1 2 1
1 2 1
0 1 0
>> b=[1;2;0]
b =
1
2
0
>> [U,S,V]=svd(A)
U =
S =
3.5616 0 0
0 0.5616 0
0 0 0
V =
d =
-2.0618
-0.4991
0.7071
>> s=diag(S)
s =
3.5616
0.5616
0
>> y=zeros(size(d))
y =
0
0
0
>> index=find(s~=0)
index =
1
2
>> y(index)=d(index)./s(index)
y =
-0.5789
-0.8888
0
>> x=V*y
x =
0.7500
-0.0000
0.7500
180 Appunti di Calcolo Numerico con codici in Matlab/Octave
Nota bene: si procede in maniera del tutto analoga per sistemi sottodeterminati
(sia quadrati che rettangolari), nel caso in cui si desideri la soluzione di norma
euclidea minima, piuttosto che quella con il maggior numero di zeri. Analoga-
mente quando si desideri la soluzione ai minimi quadrati di norma euclidea min-
ima di sistemi singolari.
• se n è dispari e M = (n − 1)/2
M
a0
tM (x) = + (ak cos(kx) + bk sin(kx)) + aM +1 cos((M + 1)x) . (5.78)
2
k=1
(M +s)
ck eikxj = f (xj ) , j = 0, . . . , n . (5.81)
k=−(M +s)
n
Dim. Infatti, osservando che la somma è j=0 eijh(k−m) con xj = j h, h =
2π/(n + 1).
n
(i) Per k = m è verificata: la somma si riduce j=0 1 = n + 1.
n+1
con numeratore che è uguale a zero poiché eih(k−m) = ei(n+1)h(k−m) =
cos(2π(k − m)) + i sin(2π(k − m)) = 1. Pertanto anche quando k = m vale la
somma. .
5 - Interpolazione e approssimazione 183
Posto quindi
q−1
(l) 1
ek = ωq−ks xl+ps , l = 0, ..., p − 1 , k = 0, . . . , m − 1 , (5.84)
q s=0
allora
p−1
1 −kl (l)
dk = ωm ek , k = 0, . . . , m − 1 . (5.85)
p
l=0
(l) (l)
Complessità. Iniziamo con l’osservare che, in (5.84), ek+q = ek perchè ωq−q =
(l) (l)
1. Pertanto, per ogni l, calcoleremo solo i coefficienti e0 , . . . , eq−1 che sono una
(l)
trasformata dei valori xl , xl+p , . . . , xl+p(q−1) . Il costo di {ek } è quindi quello di p
(l)
trasformate discrete di ordine q. Ora, calcolando preventivamente ek , il calcolo
184 Appunti di Calcolo Numerico con codici in Matlab/Octave
m 2 m m
r
2m+2 2 · +2 2 · 2 +· · ·+2r 2 · r = 2m = 2m r = 2m log2 (m) < m2 .
2 2 2
k=1
dove xi sono detti nodi di quadratura e i coefficienti wi sono detto pesi della
formula di quadratura.
Nel seguito ci limiteremo allo studio di integrali definiti del tipo
b
ω(x)f (x)dx
a
dove ω(x) è una funzione positiva su [a, b] detta funzione peso. Le formule di
quadratura che considereremo saranno di tipo interpolatorio costruite sia su nodi
equispaziati che su nodi coincidenti con gli zeri dei polinomi ortogonali rispetto
all’intervallo [a, b] e alla funzione peso ω(x).
Posto quindi
b b
wi = ω(x) li (x)dx, Rn f = ω(x) En f (x)dx ,
a a
allora b n
ω(x) f (x)dx = wi f (xi ) + Rn f . (6.3)
a i=0
Le formule di quadratura della forma (6.3) si dicono interpolatorie perchè si
basano sul polinomio d’interpolazione della funzione f .
Definizione 25. Una formula di quadratura di tipo interpolatorio si dice esatta
con ordine (o grado) di esattezza n se integra esattamente i polinomi di grado
n.
La definizione appena data afferma che se f (x) ∈ Pn allora En f (x) = 0 e
pertanto anche Rn f = 0. Non solo, se f (x) = 1, x, x2 , . . . , xn e la formula (6.3) è
esatta di ordine n, allora possiamo scrivere
⎧ b
⎪
⎪ + · · · + wn ω(x) x0 dx
⎪
⎪ w0 =
⎪
⎪ b
⎪
⎪
a
⎪
⎨ w 0 x0 + · · · + w n xn = ω(x) xdx
a (6.4)
⎪
⎪ .. .. ..
⎪
⎪ . . .
⎪
⎪ b
⎪
⎪
⎪
⎩ w0 xn0 + · · · + wn xnn = ω(x)xn dx
a
b
dove gli integrali ω(x)xk , k = 0, . . . , n si chiamano momenti . Il sistema (6.4) è
a
un sistema di ordine n+1 con matrice di Vandermonde che è non singolare poiché
xi = xj . Pertanto il sistema può essere utilizzato per determinare univocamente
i pesi wi , i = 0, . . . , n. L’unicità dei pesi di quadratura ci assicura anche che
non esistono altre formule per i pesi che producono formule di tipo interpolatorio
(6.1).
Osserviamo subito che essendo la matrice di Vandermonde malcondizionata,
dovremmo aspettarci che per n → ∞ le formule di tipo interpolatorio siano insta-
bili. Vedremo in seguito come evitare questi problemi d’instabilità delle formule
di tipo interpolatorio.
Definizione 26. La formula di quadratura di tipo interpolatorio (6.1) si dice
convergente se
n b
lim wi f (xi ) = ω(x)f (x)dx . (6.5)
n→∞ a
i=0
Posti
&
n
n
t−j
αi = dt, i = 0, . . . , n , (6.9)
0 i−j
j=0,j =i
Pertanto, i “nuovi” pesi αi si possono tabulare una volta per tutte usando la (6.9).
Osservando che αi = αn−i , potremo limitarci a calcolarne solo la metà.
I pesi αi sono noti col nome di numeri di Côtes. Infine, mediante la proprietà
dei polinomi di Lagrange di formare una partizione dell’unità, otteniamo la re-
n
lazione αi = n.
i=0
h
I2 (f ) = [f (x0 ) + 4f (x1 ) + f (x2 )] . (6.12)
3
2
Figura 6.1: Regola dei trapezi per il calcolo di sin (x) dx.
1/2
6 - Integrazione 189
h3 f (2) (ξ) h3
R1 (f ) = − = − f (2) (ξ), ξ ∈ (a, b) . (6.14)
6 2! 12
2
• Con n = 2, k = 4 e γ2 = 0 t2 (t − 1)(t − 2) = −4/15. La funzione f viene
approssimata con un polinomio di secondo grado ottenendo la formula di
Simpson (6.12). Per l’errore, grazie alla Proposizione 16, otteniamo errore
di quadratura per la formula di Simpson
1 5 (4)
R2 (f ) = − h f (ξ), ξ ∈ (a, b) . (6.15)
90
n α0 α1 α2 α3 errore
1 1 3 (2)
1 − h f (ξ)
2 12
1 4 1 5 (4)
2 − h f (ξ)
3 3 90
3 9 3 5 (4)
3 − h f (ξ)
8 8 80
14 64 24 8 7 (6)
4 − h f (ξ)
45 45 45 945
95 375 250 275 7 (6)
5 − h f (ξ)
288 288 288 12096
41 216 27 272 9 9 (8)
6 − h f (ξ)
140 140 140 140 1400
Pertanto, ai fini dell’errore, sono preferibili le formule per n pari, ovvero con n + 1
punti d’interpolazione.
Riassumiamo questi risultati in Tabella 6.1, per valori di n = 1, . . . , 6.
con un errore minore o uguale a tol = 0.5 · 10−3 . L’integrale dato si può esprimere
analiticamente mediante la funzione errore, erf (implementata con il nome erf
anche in Matlab/Octave)
x
2 2
erf(x) = √ e−t dt ,
π 0
2 · 12
|R1 | ≤ ≈ 0.1667̄ > tol .
6·2
Dobbiamo aumentare n.
• Prendiamo n = 2. Ragionando come prima, abbiamo ora bisogno di
2
max |f (4) (x)| = max |4(4x3 − 12x2 + 3)e−x | = 12 .
x∈[0,1] x∈[0,1]
n α0 α1 α2 α3 α4
xk+1
h xk + xk+1 b−a
f (x)dx ≈ [f (xk ) + +4f (xk ) + f (xk+1 )] xk = , h= .
xk 3 2 2N
Osservando che su ogni sotto intervallo Ik abbiamo introdotto il punto medio
xk , il che equivale a considerare i punti da zk , k = 0, . . . , 2N . La formula
generalizzata di Simpson è quindi la seguente:
b
h
[f (a) + 4f (z1 ) + 2f (z2 ) + 4f (z3 ) + · · · + 4f (z2N −1 ) + f (b)]
f (x)dx ≈
a 3
(6.18)
dove al solito a = z0 e b = z2N .
L’osservazione precedente sul numero dei punti si può assumere a priori e
dato N si considereranno sempre 2N + 1 punti.
Come semplice esempio, in Figura 6.3 facciamo vedere come si comporta la
formula trapezoidale rispetto a quella classica. È interessante vedere la dif-
ferenza d’errore tra le due formule.
Figura 6.3: Confronto tra la formula dei trapezi e dei trapezi composita per il
2
calcolo di 0.5 sin (x) dx.
ei ≤ hi
b−a
Osservazione. Il repository
http://www.mathworks.com/matlabcentral/fileexchange/
che raccoglie il software di scambio degli utenti Matlab, si trova il package
adaptQuad di Matthias Conrad e Nils Papenberg che contiene due routine
iterative per la quadratura adattativa usando sia Simpsons che Lobatto. Per
maggiori informazioni si rinvia al Technical Report [8].
6 - Integrazione 197
Figura 6.6: Integrazione con il metodo dei trapezi adattativo. I punti utilizzati
sono oltre 2000, molti di più di quelli richiesti dalla stima a priori (6.21), ma
distribuiti non uniformemente ma dove la funzione oscilla di maggiormente.
(c) Ogni sistema di polinomi ortogonali {pn }, soddisfa ad una relazione di ri-
correnza a 3 termini
pn+1 (x) = (An x + Bn )pn (x) − Cn pn−1 (x), n = 1, 2, . . . (6.23)
dove Cn > 0 e
an+1,0
An = (6.24)
an,0
an+1,1 an,1
Bn = An − , (6.25)
an+1,0 an,0
An hn an+1,2
Cn = = An , (6.26)
An−1 hn−1 an+1,1
Elenchiamo qui di seguito i polinomi ortogonali che per noi rivestono maggior
interesse.
Tn : Polinomi di Chebyshev di prima specie. Sono definiti su [−1, 1], ω(x) =
(1 − x2 )−1/2 e per essi vale la ricorrenza T0 (x) = 1, T1 (x) = x e
Tn+1 (x) = 2xTn (x) − Tn−1 (x), n ≥ 1 . (6.27)
Infatti, ricordando che Tn (x) = cos(n arccos x) n = 0, 1, . . . e la relazione
cos[(n + 1)θ] + cos[(n − 1)θ] = 2 cos θ cos(nθ)
posto θ = cos x si riottiene la (6.27).
Facciamo anche vedere che
Tn (x) = 2n−1 xn + · · · (6.28)
2 3 3−1 3
Infatti, essendo T2 (x) = 2x −1, T3 (x) = 4x −3x = 2 x −3x, per induzione
si ottiene la (6.28).
Infine, gli zeri del polinomio di Chebyshev di prima specie di grado n, che
sono stati introdotti al capitolo dell’ interpolazione polinomiale, sono i punti
di Chebyshev
2k − 1
xk = cos π , k = 1, ..., n .
2n
Un : Polinomi di Chebyshev di seconda specie. Sono definiti su [−1, 1], ω(x) =
(1 − x2 )1/2 e per essi vale la ricorrenza U0 (x) = 1, U1 (x) = 2x e
Un+1 (x) = 2xUn (x) − Un−1 (x), n ≥ 1 .
Pn : Polinomi di Legendre. Sono definiti su [−1, 1], ω(x) = 1 e per essi vale la
ricorrenza P0 (x) = 1, P1 (x) = x e
2n + 1 n
Pn+1 (x) = xPn (x) − Pn−1 (x), n ≥ 1 .
n+1 n+1
(2n)!
In questo caso possiamo anche facilmente calcolare an,0 = 2n (n!)2 e hn =
2/(2n + 1).
6 - Integrazione 199
Ln : Polinomi di Laguerre. Sono definiti su [0, +∞), ω(x) = e−x e per essi vale
la ricorrenza L0 (x) = 1, L1 (x) = 1 − x e
2n + 1 − x n
Ln+1 (x) = Ln (x) − Ln−1 (x), n ≥ 1 .
n+1 n+1
(−1)n
Anche in questo caso possiamo calcolare an,0 = n! e hn = 1.
2
Hn : Polinomi di Hermite. Sono definiti su (−∞, +∞), ω(x) = e−x e per essi
vale la ricorrenza H0 (x) = 1, H1 (x) = 2x e
Teorema 30. Siano x1 , . . . , xn gli zeri del polinomio ortogonale di grado n rispetto
all’intervallo [a, b] e alla funzione peso ω(x). Supponiamo che i pesi Ai siano stati
determinati cosicché
b n
ω(x)f (x)dx = Ai f (xi ) + Rn (f ) , (6.30)
a i=1
è esatta per i polinomi di grado ≤ n − 1. Allora la formula (6.30) è esatta per tutti
i polinomi di grado ≤ 2n − 1.
Un’ulteriore caratteristica delle formule di quadratura gaussiane, che è uno
dei motivi per i quali sono preferite rispetto a quelle di N-C, è che i pesi Ai sono
positivi. Infatti vale la rappresentazione
b 2
1 Pn (x)
Ai = ω(x) dx i = 1, . . . , n , (6.31)
(Pn (xi ))2 a x − xi
dove Pn indica il polinomio ortogonale di grado n relativo all’intervallo [a, b] e
b n
alla funzione peso ω(x). Da questa relazione segue che a ω(x)dx = i=1 Ai =
n
i=1 |Ai |, pertanto si ha convergenzadelle formule al valore dell’integrale. Per-
n
tanto nel caso [−1, 1], ω(x) = 1, si ha i=1 Ai = 2.
(GC1) 2i − 1
xi = cos π i = 1, ..., n .
2n
La (6.29) diventa
1 n
1 π 2i − 1
f (x) √ dx ≈ f cos π .
−1 1 − x2 n i=1
2n
I nodi, che sono gli zeri dei polinomi di Chebyshev di seconda specie, sono
(GC2) i
xi = cos π i = 1, ..., n .
n+1
La (6.29) diventa
1 n 2
π i i
f (x) 1 − x2 dx ≈ sin π f cos π .
−1 n+1 i=1
n+1 n+1
Riassumiamo nella Tabella 6.3, per n = 1, . . . , 4, i valori dei nodi (zeri) del
polinomio di Legendre e dei corrispondenti pesi. Si noti che sono indicati
n + 1 nodi, poiché per un dato n calcoliamo i = 0, . . . , n nodi e pesi. Ad es-
empio, per n = 1, significa che stiamo considerando il polinomio di grado
2, che ha appunto zeri ±3−1/2 . Per i pesi sono indicati, per simmetria, solo
quelli con i = 0, . . . , # n2 $. Sempre relativamente alla formula di quadratura
n xi Ai
1 ± √13 1
√
15 5 8
2 ± 5 , 0 9, 9
√ √ √ √
1 1 1 1
3 ± 35 525 − 70 30 , ± 35 525 + 70 30 36 (18 + 30), 36 (18 − 30)
√ √ √ √
1 1 128 1 1
4 0, ± 21 245 − 14 70, ± 21 245 + 14 70 225 , 900 (322 + 13 70), 900 (322 − 13 70)
n xi Ai
1 ±1 1
1 4
2 ±1, 0 3, 3
√
5 1 5
3 ±1 , ± 5 6, 6
√
21 1 49 32
4 ±1, ± 7 , 0 10 , 90 , 45
√
fornito dalle formule di Gauss-Chebyshev-Lobatto, in cui ω(x) = 1/ 1 − x2 ,
delle quali i nodi ed i pesi sono come segue
πi
xi = cos ,
n
π
Ai = , d0 = dn = 2, di = 1, 1 ≤ i ≤ n − 1 .
n di
Infine, per quanto riguarda l’errore di quadratura con formule di Gauss-
Legendre (GL) e Gauss-Legendre-Lobatto (GLL), ricordiamo le seguenti for-
mule che per essere applicate richiedono una certa regolarità della funzione
integranda (cfr. [25]).
22n+3 ((n + 1)!)4
I(f ) − IGL (f ) = f (2n+2) (ξ) , ξ ∈ (−1, 1). (6.32)
(2n + 3)((2n + 2)!)3
22n+1 n3 (n + 1)((n − 1)!)4 (2n)
I(f ) − IGLL (f ) = − f (ξ) , ξ ∈ (−1, 1). (6.33)
(2n + 1)((2n)!)3
Due considerazioni conclusive.
1. Le formule gaussiane in [−1, 1] sono estendibili ad un generico intervallo
[a, b] con l’opportuna trasformazione lineare sia sui nodi che sui pesi.
2. In Matlab/Octave la funzione quadl implementa la formula di quadratura
di Gauss-Lobatto. Si chiama con quadl(fun,a,b): in questo caso la toller-
anza di default è 1.e−3 e fun può essere definita sia su un altro M-file di tipo
funzione o mediante fun=inline(’ ’). Per usare una tolleranza definita
dall’utente, tol utente, si userà la chiamata quadl(fun,a,b,tol utente).
h 1 h 1
yk−1 = xk−1 + 1− √ , yk = xk−1 + 1+ √ .
2 3 2 3
b − a 4 (4)
I(f ) − IG
c
(f ) = h f (ξ) , ξ ∈ (a, b),
4320
n κ c0 c1 c2 c3 c4 c5
1 1/2 1 1
2 1/3 1 4 1
3 3/8 1 3 3 1
4 2/45 7 32 12 32 7
5 5/288 19 75 50 50 75 19
t | 10 15 30 40 50 70 100
-----------------------------------------------
a |.0144 .0216 .0432 .0576 .072 .1008 .1439
dv(t) d2 x(t)
a= =
dt dt2
T
dv(t)
v(T ) = dt = v(T ) − v(0) (6.34)
0 dt
T
dx(t)
x(T ) = dt = x(T ) − x(0) (6.35)
0 dt
Applicando all’equazione (6.34), la formula di quadratura composita dei
trapezi, si avrebbe
v(0) 0=
10
v(10) = (0.0144 + 0);
2
5
v(15) = v(10) + (0.0144 + 0.0216);
2
ecc...
x(0) = 0
10
x(10) = (v(10) + v(0));
2
5
x(15) = x(10) + (v(10) + v(15));
2
ecc...
• Quale sarebbe la distanza percorsa dal corpo dopo t = 100 sec (suppo-
nendo non ci sia attrito)? Sugg. 1 L’energia potenziale si trasforma in
cinetica, quindi .... Sugg. 2 oppure per la seconda legge della dinamica
d2 x
mg=m
dt2
e integrando due volte si conclude.
206 Appunti di Calcolo Numerico con codici in Matlab/Octave
function [z,w]=zwlegendre(n)
% This function computes nodes z and weights
% w of the Gauss-Legendre quadrature formula.
%---------------------------------------------
% Input:
% n = number of quadrature nodes
%Outputs:
% z = column vector of the nodes
% w = column vector of the weights
%---------------------------------------------
if n<=1
z=[0]; w=[2];
return
end
A=zeros(n); k=[1:n-1];
v=k./(sqrt(4*(k.^2)-1));
A=A+diag(v,1)+diag(v,-1);
[w,z]=eig(A);
nm2=sqrt(diag(w’*w));
w=(2*w(1,:)’.^2)./nm2;
z=diag(z);
6.4 Derivazione
Sia f ∈ C 1 [a, b]. Come possiamo approssimare f (x̂) in un generico punto x̂ ∈
[a, b]? Vediamo tre approssimazioni utili in molti casi di nostro interesse.
f (x̂ + h) − f (x̂)
f (x̂) = lim ,
h→0 h
h2
f (x̂ + h) = f (x̂) + hf (x̂) + f (ξx̂ ) ,
2
con ξx̂ ∈ (x̂, x̂ + h). Pertanto per l’errore avremo l’espressione
h
f (x̂) − Δa f (x̂) = − f (ξx̂ ) , (6.38)
2
che tende a zero come h. In pratica Δa f (x̂) fornisce un’approssimazione del
primo ordine della derivata di f in x̂.
f (x̂) − f (x̂ − h)
f (x̂) ≈ := Δi f (x̂) (6.39)
h
Se f ∈ C 2 [a, b] avremo
h2
f (x̂ − h) = f (x̂) − h f (x̂) + f (ηx̂ ) ,
2
con ηx̂ ∈ (x̂ − h, x̂). Pertanto per l’errore avremo un’espressione simile alle
differenze finite in avanti
h
f (x̂) − Δi f (x̂) = f (ηx̂ ) , (6.40)
2
che tende a zero come h. In pratica Δi f (x̂) fornisce anch’esso un’approssima-
zione del primo ordine della derivata di f in x̂.
6 - Integrazione 209
h2 h3
f (x̂ − h) = f (x̂) − h f (x̂) + f (x̂) + f (3) (ηx̂ ) ,
2! 3!
con ηx̂ ∈ (x̂ − h, x̂). Sommando membro a membro e dividendo per 2h otte-
niamo
f (x̂ + h) − f (x̂ − h) h2
= f (x̂) + f (3) (ξx̂ ) + f (3) (ηx̂ ) .
2h 12
Pertanto l’errore assume l’espressione
h2
f (x̂) − δ f (x̂) = −
f (3) (ξx̂ ) + f (3) (ηx̂ ) , (6.42)
12
che tende a zero come h2 . Osserviamo anche che al tendere di h → 0
anche ξx̂ ) e ηx̂ ) tenderanno allo stesso valore. In pratica δ f (x̂) fornisce
un’approssimazione del secondo ordine della derivata di f in x̂.
Data una suddivisione regolare dell’intervallo [a, b], ovvero i punti xk = a +
kh, k = 0, . . . , n con xn = b, da un punto di vista implementativo le formule
Δa si possono applicare per ogni punto eccetto il punto b; le formule Δi si possono
applicare per ogni punto eccetto il punto a mentre le formule centrali δ si possono
applicare per ogni punto interno dell’intervallo.
Nel caso delle differenze centrali, nei punti x0 e xn si usano invece le seguenti
approssimzioni
1
[−3f (x0 ) + 4f (x1 ) − f (x2 )] in x0 (6.43)
2h
1
[3f (xn ) − 4f (xn−1 ) + f (xn−2 )] in xn , (6.44)
2h
che si ottengono calcolando in x0 (rispettivamente in xn ) la derivata prima del
polinomio d’interpolazione di grado 2 della funzione f .
Infatti, il polinomio di secondo grado relativo ad x0 , si può costruire usando i
punti x0 , x1 , x2 ottenendo
p2 (x) = f (x0 )l0 (x) + f (x1 )l1 (x) + f (x2 )l2 (x)
2
& (x − xj )
dove, al solito, li (x) = . Derivandolo e valutandolo in x0 , sapendo
(xi − xj )
j=0,j =i
che x1 = x0 + h e x2 = x0 + 2h, si ottiene la (6.43).
210 Appunti di Calcolo Numerico con codici in Matlab/Octave
Figura 6.7: Grafico che illustra l’errore relativo compiuto dal metodo 1 (dif-
ferenze in avanti), in rosso, col + e dal metodo 2 (differenze finite centrali) in
nero con o, nell’approssimare exp(1).
6.4.1 Un esempio
|h| exp(1)
E1 ≈ (6.45)
2
|h|2 exp(1)
E2 ≈ (6.46)
6
Per esercizio verificare se sono buone approssimazioni dell’errore le stime (6.45)
e (6.46).
yn+1 = yn + h fn , n = 0, 1, . . . , N − 1 (6.49)
E SEMPIO 48. Crescita di una popolazione. Sia y(t) una popolazione di batteri
(ma questo esempio si può generalizzare al caso di una popolazione di persone) posta
in un ambiente limitato, ovvero dove non possono vivere più di B batteri. Sapendo
che y0 B. Sia C > 0 il fattore di crescita, allora la velocità di cambiamento dei
batteri al tempo t sarà proporzionale al numero dei batteri presistrenti al tempo t, ma
limiata dal fatto che non possono vivere più di B batteri. L’equazione differenziale
corrispondente, detta equazione logistica , è
d y(t) y(t)
= Cy(t) 1 − , (6.53)
dt B
che è un’equazione del primo ordine la cui soluzione ci da il numero di batteri presenti
al tempo t.
Se approssimiamo la derivata con il metodo di Eulero esplicito (6.49) essa diventa
yn+1 = yn + Ch yn (1 − yn /B) n ≥ 0 .
In quest’ultimo caso, appare evidente, che usando un metodo implicito per il calcolo
della soluzione al passo tn+1 , si dovrà risolvere, ad ogni passo, un’equazione non
lineare. Nonostante i metodi impliciti siano più costosi essi però sono più stabili
(vedi, ad esempio, [25, 26]).
6 - Integrazione 213
T (h) = τ0 +τ1 hγ1 +τ2 hγ2 +. . .+τm hγm +αm+1 (h)hγm+1 , 0 < γ1 < γ2 < · · · < γm+1 ,
(6.54)
con τi , i = 0, . . . , m indipendenti da h, |αm+1 (h)| ≤ A (ovvero limitata) e γi non
tutti numeri interi. Chiederemo inoltre che τ0 = lim T (h) ovvero, τ0 rappresenta
h→0
la soluzione del problema considerato.
Presentiamo ora due semplici esempi di funzionali lineari che si possono rap-
presentare nella forma (6.54).
E SEMPIO 49. Sia
f (x + h) − f (x − h)
T (h) =
2h
l’operatore alle differenze finite centrali. È noto che T (h) ≈ f (x). Se f ∈
C 2m+3 [x − a, x + a], m ≥ 0 e |h| ≤ |a|, allora dall’espansione di Taylor possiamo
riscrivere T (h) come segue:
1 h2 h2m+3
T (h) = f (x) + f (x)h + f (2) (x) + ... + [f (2m+3) (x) + o(1)] −
2h 2! (2m + 3)!
1 h2 h2m+3
− f (x) − f (x)h + f (2) (x) + . . . + (−1)2m+3 [f (2m+3) (x) + o(1)] =
2h 2! (2m + 3)!
= τ0 + τ1 h2 + . . . + τm h2m + αm+1 (h)h2m+2 , (6.55)
f (2k+1) (x)
dove τ0 = f (x), τk = , k = 1, . . . , m + 1 e αm+1 (h) = τm+1 + o(1)1 .
(2k + 1)!
1 Con il simbolo o(1) si intende indicare una quantità che ha ordine di infinitesimo di una costante.
214 Appunti di Calcolo Numerico con codici in Matlab/Octave
f (k+1) (x)
dove τk = , k = 0, 1, . . . , m + 1 e αm+1 (h) = τm+1 + o(1).
(k + 1)!
Infine, come già osservato alla sezione 6.4, l’operatore alle differenze finite
centrali è una approssimazione migliore dell’operatore alle difference finite in
avanti, poiché la sua espansione asintotica contiene solo potenze pari di h (cfr.
(6.55) e (6.56)).
dove
(i)
&
i
zs
ck,j =
zs − zj
s = j
s=i−k
sono i polinomi elementari di Lagrange, tali che
⎧
i ⎨ 1 p=0
(i)
ck,j zjp = 0 p = 1, ..., k (6.59)
⎩
j=i−k (−1)k zi−k zi−k+1 · · · zi p=k+1
(i)
Dim. Osserviamo che i coefficienti ck,j dipendono solo da zj . Consideriamo
i monomi z p , p = 0, 1, ..., k. Riscriviamoli come polinomi di interpolazione di
Lagrange
i & i
z − zs
zp = zjp · p = 0, 1, ..., k .
zj − z s
j=i−k
s = j
s=i−k
Da cui, per z = 0 si ottengono le prime due uguaglianze in (6.59).
Infine, osserviamo che
i &
i
z − zs &
i
z k+1 = zjk+1 · + (z − zs ) . (6.60)
zj − z s
j=i−k
s = j s=i−k
s=i−k
Infatti, poiché z k+1 sta sia a sinistra che a destra della (6.60), il polinomio dif-
ferenza
z k+1 − (membro destro in (6.60)) ∈ Pk
e si annulla nei k + 1 punti zs , s = i − k, ..., i. Cioè esso si annulla identicamente.
Ciò prova la validità della (6.60).
Sostituendo z = 0, si ottiene la terza delle (6.59).
Siamo in grado di usare l’espansione (6.58). Pertanto, per k < m
(i) ; <
i i
(i)
Ti,k = ck,j T (hj ) = ck,j τ0 + τ1 zj + τ2 zj2 + . . . + τk zjk + zjk+1 (τk+1 + O(hj )) ,
j=i−k j=i−k
(6.61)
e per k = m
(i) ; <
i i
(i)
Ti,m = cm,j T (hj ) = cm,j τ0 + τ1 zj + τ2 zj2 + . . . + τm zjm + zjm+1 αm+1 (hj ) .
j=i−m j=i−m
(6.62)
216 Appunti di Calcolo Numerico con codici in Matlab/Octave
Se i passi hj sono tali che hj = h0 bj , 0 < b < 1, ovvero formano una successione
h
geometrica di ragione b, o in generale hj+1 j
≤ b < 1, ∀ j, si può dimostrare che
esiste una costante Ck dipendente solo da b tale che
i
(i)
|ck,j |zjk+1 ≤ Ck zi−k zi−k+1 · · · zi . (6.63)
j=i−k
Figura 6.8: Tableau dello schema di Richardson per m = 3, con Ti,0 = T (hi ).
Regola trapezoidale
Se si fa uso della formula trapezoidale, è noto che
f (a) f (b)
T (h) = h + f (a + h) + . . . + f (b − h) + .
2 2
Per tale funzionale vale la formula di sommazione di Eulero-Maclaurin:
b m
B2l h2l B2m+2
T (h) = f (t)dt+ f (2l−1) (b) − f (2l−1) (a) +h2m+2 (b−a)f (2m+2) (ξ) ,
a (2l)! (2m + 2)!
l=1
(6.67)
con a < ξ < b . La formula precedente ci da una espressione esplicita dell’errore
che si commette approssimando l’integrale di f su [a, b] mediante la formula
trapezoidale. I coefficienti Bk sono i numeri di Bernoulli che sono definiti come il
valore in 0 dei polinomi di Bernoulli di grado k, con k pari (si veda la sottosezione
6.5.3 per alcuni cenni sui polinomi di Bernoulli).
Alla luce di quanto detto, la formula trapezoidale (6.67) si può riscrivere come
T (h) = τ0 + τ1 h2 + . . . + τm h2m + αm+1 h2m+2 , (6.68)
dove
b
τ0 = f (t)dt
a
B2k
τk = f (2k−1) (b) − f (2k−1) (a) , k = 1, . . . , m
(2k)!
B2m+2
αm+1 (h) = (b − a)f (2m+2) (ξ(h)) a < ξ(h) < b .
(2m + 2)!
Poiché f (2m+2) ∈ C[a, b], allora esiste una costante L tale che |f (2m+2) (x)| ≤ L,
uniformemente in x. Ció implica che ∃ Mm+1 tale che
b−a
|αm+1 (h)| ≤ Mm+1 , ∀h= , n>0. (6.69)
n
La disequazione (6.69) ci dice che il termine di errore dell’espansione asintotica
(6.68) tende a zero come h → 0. Infine, detta espansione approssima τ0 come un
polinomio in h2 , al tendere a zero di h.
Metodo di Romberg
Per il calcolo di τ0 si può procedere come segue:
h0 h0
1. h0 = b − a, h1 = , . . . ,hm = , con n1 , . . . , nm > 0, m > 0.
n1 nm
2. In corrispondenza determino
Ti,0 = T (hi ) , i = 0, 1, . . . , m ;
dove T (h) è il funzionale (6.68).
218 Appunti di Calcolo Numerico con codici in Matlab/Octave
3. Sia
T̃m,m (h) = a0 + a1 h2 + · · · + am h2m ;
tale che T̃m,m (hi ) = T (hi ), i = 0, 1, . . . , m. Il polinomio T̃m,m altro non è che
il polinomio di interpolazione di Ti,0 .
Ti,k−1 − Ti−1,k−1
Ti,k = Ti,k−1 + 2 32 , 1≤k≤i≤m. (6.70)
hi−k
hi − 1
Una prima importante proprietà dello schema di Romberg è che ogni Ti,k del
tableau costruito con la (6.70) (vedi Figura 6.8) rappresenta una regola di inte-
grazione lineare, ovvero
T20 ,0
T2,0 T20 ,1
.. .. ..
. . .
(b) Ciascuna delle formule in una data riga, come ad esempio la riga evidenzi-
ata in Tabella 6.5
T23 ,0 , T22 ,1 , T21 ,2 , T20 ,3
o in generale
T2m ,0 , T2m−1 ,1 , T2m−2 ,2 , T2m−3 ,3 , ....(∗)
è una formula con N = 2m + 1 punti e in ciascuna delle formule (*) i punti
sono gli stessi che in T2m ,0 .
Infine, vale il seguente risultato.
Teorema 31. Ciascuna formula T1,k , T2,k , T3,k , .... è una formula di grado di
esattezza 2k − 1.
Ad esempio, se consideriamo la terza colonna di Tabella 6.5, essa rappresenta
una formula di quadratura esatta sui polinomi di grado 5 (ecco perchè integra
perfettamente la funzione x5 ).
B0 (x) = 1, (6.72)
1
B1 (x) = x− , (6.73)
2
Bk+1 (x) = (k + 1)Bk (x), k = 1, 2, .... (6.74)
ulteriori condizioni
B2l+1 (0) = 0 = B2l+1 (1), l≥1. (6.75)
Si voglia ad esempio determinare B2 (x). Dalle (6.73) e (6.74) si avrebbe B2 (x)
=
2x − 1. Integrando B2 (x) = x2 − x + c. Usando ancora le (6.73) e (6.74) si avrebbe
3
B3 (x) = x3 − x2 + 3cx + d. Usando le condizioni al contorno (6.75) si ottiene
2
d = 0, c = 16 .
Da quanto detto segue che i numeri di Bernoulli sono nulli per i polinomi di
grado dispari (ciò segue da (6.75)) e diversi da zero per quello di grado pari. I
1 1 1
primi 4 numeri pari di Bernoulli sono: B0 = 1, B2 = , B4 = − , B6 = .
6 30 42
Due proprietà facilmente verificabili sono:
1. (−1)k Bk (1 − x) = Bk (x), k ≥ 0;
1
2. Bk (t)dt = 0, k > 1.
0
Pi,0 = yi , i = 0, 1, ..., n .
k
dove i polinomi di grado k, lj,i sono i polinomi elementari di Lagrange.
(x),
Tale algoritmo si può applicare allo schema di Romberg pur di prendere x = 0
e xi = h2i nonché prendendo i = 0, 1, 2, ... e k = 1, ..., i nel passo iterativo.
A
Metodi iterativi ed
equazione logistica
Questa Appendice ha lo scopo di far capire come i modelli di evoluzione di una
popolazione, siano studiabili come metodi iterativi per la ricerca di zeri di fun-
zione. Si tratta di successioni il cui valore corrente dipende da quello prece-
dente tramite una funzione di iterazione, che rappresenta l’evoluzione della popo-
lazione.
Iniziamo ricordando dapprima due tra i più noti e semplici modelli di evoluzione
di una popolazione: il modello lineare di Malthus e quello quadratico di Verhulst.
Poi studieremo brevemente il modello lineare discreto (del modello differenziale)
di Volterra, applicato all’evoluzione di due popolazioni concorrenti, e la sua con-
troparte non lineare noto come modello di Lotka-Volterra.
• Divergenza quando g > 0. Infatti, se 1 + g > 1 che implica xk > xk−1 >
· · · > x0 : la popolazione cresce esponenzialmente.
T : R+ −→ R+
(A.3)
x → T (x) = −ax2 + (1 + b)x .
A. Metodi iterativi ed equazione logistica 225
Figura A.5: Iterazione del processo di Verhulst che origina il ben noto dia-
gramma di biforcazione
• una isometria se
• una dilatazione se
T : R2 −→ R2 , T (X) = X := A · X
con A matrice dei coefficienti e X = [x y] .
Consideriamo come Esempio Figura A.14
Cerchiamo di chiarire il significato dei coefficienti cooperazione: a e d (di
ciascuna popolazione, rispetto se stessa) sono negativi, ciascuna specie - da sola
- si estinguerebbe (contrazione). Ma sono positivi i coefficienti di crescita b e
c (di ciascuna popolazione, rispetto all’altra), la presenza dell’altra specie può
rallentare o addirittura inibire il processo di estinzione.
232 Appunti di Calcolo Numerico con codici in Matlab/Octave
dove
234 Appunti di Calcolo Numerico con codici in Matlab/Octave
&n
(x − xj )
Li (x) = .
j=1
xi − xj
j =i
function V = vandermonde(nodi)
%
% V = vandermonde(nodi)
%
n = length(nodi);
V = repmat(nodi’,1,n).^repmat([n-1:-1:0],n,1);
f [x] = f (x)
f [x] − f [x1 ]
f [x1 , x] =
x − x1
... = ...
f [x1 , x2 , . . . , xk−1 , x] − f [x1 , x2 , . . . , xk−1 , xk ]
f [x1 , x2 , . . . , xk−1 , xk , x] =
x − xk
Per il calcolo delle differenze divise ci possiamo avvalere della funzione DiffDivise
di Appendice E.
B. Interpolazione: aspetti implementativi e applicazioni 241
p0 f (x) = d1
w = (x − x1 )
pi f (x) = pi−1 f (x) + di+1 w, i = 1, . . . , n − 1
w = w · (x − xi+1 ), i = 1, . . . , n − 1
ove
di = f [x1 , . . . , xi ] .
S.a = 1;
S.b = [1,2];
generano la struttura S
S =
{
a = 1
b =
1 2
}
Pij = ai,j .
Con le notazioni usate fino ad ora, si può costruire una spline cubica S a partire
dalla sua derivata seconda nell’intervallo generico [xi , xi+1 ]
mi+1 − mi
S[x i ,xi+1 ]
(x) = (x − xi ) + mi , i = 1, . . . , n − 1 (B.5)
hi
B. Interpolazione: aspetti implementativi e applicazioni 243
mi+1 − mi
S[x i ,xi+1 ]
(x) = (x − xi )2 + mi (x − xi ) + ai
2hi
mi+1 − mi mi
S[xi ,xi+1 ] (x) = (x − xi )3 + (x − xi )2 + ai (x − xi ) + bi
6hi 2
bi = f (xi ),
f (xi+1 ) − f (xi ) hi hi
ai = − (mi+1 − mi ) − mi =
hi 6 2
f (xi+1 ) − f (xi ) hi hi
= − mi+1 − mi
hi 6 3
A questo punto, richiedendo la continuità della derivata prima, cioè S[x i−1 ,xi ]
(xi ) =
S[xi ,xi+1 ] (xi ) per i = 2, . . . , n − 1, si ottiene
Splines cubiche naturali Si impone che il valore della derivata seconda agli
estremi dell’intervallo sia 0. Dunque m1 = mn = 0. Il sistema lineare (B.6)
diventa allora
⎛ ⎞⎛ ⎞ ⎛ ⎞
1 0 ... ... ... 0 m1 d1
⎜ h61 h1 +h 2 h2
0 ... 0 ⎟ ⎜ ⎟ ⎜ ⎟
⎜ 3 6 ⎟ ⎜ m2 ⎟ ⎜ d2 ⎟
⎜ .. .. .. .. .. ⎟ ⎜ .. ⎟ ⎜ .. ⎟
⎜0 . . . . . ⎟ ⎜ ⎟ ⎜ ⎟
⎜ ⎟⎜ . ⎟ = ⎜ . ⎟
⎜ .. .. .. .. .. ⎟ ⎜ . ⎟ ⎜ . ⎟
⎜ . . . . . 0 ⎟ ⎜ . ⎟ ⎜ . ⎟
⎜ ⎟⎜ . ⎟ ⎜ . ⎟
⎝0 ... 0 hn−2 hn−2 +hn−1 hn−1 ⎠ ⎝
mn−1 ⎠ ⎝dn−1 ⎠
6 3 6
0 ... ... ... 0 1 mn dn
con d1 = dn = 0 e di = f (xi+1h)−f
i
(xi )
− f (xi )−f (xi−1 )
hi−1 , i = 2, . . . , n−1. L’algoritmo
per il calcolo della struttura associata ad una spline cubica naturale è ri-
portato in Tabella B.2.
Splines cubiche vincolate Si impongono due valori d1 e d2 per la derivata
S (x1 ) e S (xn ), rispettivamente. Si ricava dunque
a1 = d1
mn − mn−1
(xn − xn−1 )2 + mn−1 (xn − xn−1 ) + an−1 = dn
2hn−1
244 Appunti di Calcolo Numerico con codici in Matlab/Octave
function pp = splinenaturale(x,y)
%
% function pp = splinenaturale(x,y)
%
n = length(x);
x = x(:);
y = y(:);
h = x(2:n)-x(1:n-1);
d1 = h(2:n-2)/6;
d0 = (h(1:n-2)+h(2:n-1))/3;
rhs = (y(3:n)-y(2:n-1))./h(2:n-1)-(y(2:n-1)-y(1:n-2))./h(1:n-2);
S = diag(d1,-1)+diag(d0)+diag(d1,1);
m = zeros(n,1);
m(2:n-1) = S\rhs;
a = (y(2:n)-y(1:n-1))./h(1:n-1)-h(1:n-1).*(m(2:n)/6+m(1:n-1)/3);
b = y(1:n-1);
pp.x = x;
pp.P = [(m(2:n)-m(1:n-1))./(6*h),m(1:n-1)/2,a,b];
pp.k = 4;
pp.n = n-1;
pp.d = 1;
da cui
h1 h1 f (x2 ) − f (x1 )
m1 + m2 = − d1
3 6 h1
hn−1 hn−1 f (xn ) − f (xn−1 )
mn−1 + mn = dn −
6 3 hn−1
con d1 = dn = 0.
246 Appunti di Calcolo Numerico con codici in Matlab/Octave
Rappresentazione dell’errore
Supponiamo di usare un metodo di interpolazione polinomiale a tratti di grado
k − 1 in un intervallo [a, b] e consideriamo due diverse discretizzazioni, rispetti-
vamente con n1 e n2 nodi, con intervalli di lunghezza media h1 = (b − a)/(n1 − 1)
e h2 = (b − a)/(n2 − 1). Gli errori di approssimazione saranno verosimilmente
err1 = Chk1 e err2 = Chk2 . Si ha dunque
k
err2 h2
=
err1 h1
da cui
C
Codici Matlab/Octave
I codici relativi alle funzioni citate dalla presente trattazione, sono scaricabili al
link
http://www.math.unipd.it/∼demarchi/CN2006-07/CodiciMatlab.pdf
I codici sono parte integrante del presente libro. Invitiamo il lettore a farne il
download.
C
Indice analitico
Analisi degli errori, 17
Analisi errori
Condizionamento, 26
errore algoritmico, 26
Errore assoluto, 23
Errore inerente, 23
Metodo stabile o instabile, 26
Numero di condizionamento, 26
Problema ben(mal) condizionato, 26
Stabilità, 26
Appendice A, 219
Modello lineare di Malthus, 219
Modello lineare di Volterra, 227
competizione, 228
cooperazione, 227
preda-predatore, 228
Modello non lineare di Lotka-Volterra, 229
Modello non lineare di Verhulst, 220
diagramma di biforcazione, 222
Teorema di (Banach)-Cacciopoli, 223
Appendice B, 234, 235
Appendice C, 245
Aritmetica di macchina, 17
arrotondamento, 21
base di numerazione, 17
bias, 20
Calcolo di , 22
Cancellazione numerica, 24
Errore relativo, 23
esponente, 17
mantissa, 17
notazione floating-point, 17
notazione in virgola mobile, 17
numero macchina, 18
precisione macchina, 22
rappresentazione normalizzata, 17
252 Appunti di Calcolo Numerico con codici in Matlab/Octave
troncamento, 21
Autovalori di matrici, 111
autovalore, 111
autovettore, 111
cerchi di Gerschgorin, 112
metodo delle potenze, 116
convergenza, 117
Metodo QR
decomposizione reale di Schur, 122
polinomio caratteristico, 111
quoziente di Rayleigh, 111
Calcolo di π, 28
Algoritmo di Archimede per π, 28
Algoritmo di Viète per π, 28
Algoritmo di Wallis per π, 29
Calcolo di autovalori di matrici
Autovalori di matrici simmetrice, 124
metodi di Jacobi, 126
Successione di Sturm, 124
matrice di Householder, 120
Metodo delle potenze
metodo di Bernoulli, 119
Metodo delle potenze inverse, 119
shift, 119
Metodo QR, 120
shift, 122
valori singolari, 112
Contenuto dei Capitoli, 10
GNU Octave, 5
Integrazione, 208
Estrapolazione di Richardson, 208
Algoritmo di Neville, 216
formula di sommazione di Eulero-Maclaurin, 212
Formule composite o generalizzate, 192
Formula generalizzata di Simpson, 193
Indice analitico 253
Matlab, 5
Matrice a blocchi, 63
Matrice di Hessenberg superiore, 63
Matrice di permutazione, 77
Matrice diagonale, 62
Matrice inversa, 64
Matrice simmetrica definita positiva, 65
Matrice trasposta, 63
Matrice triangolare inferiore, 63
Matrice triangolare superiore, 62
Matrice tridiagonale, 63
Minimi quadrati discreti, 170
decomposizione SVD, 172
equazioni normali, 171
funzionale quadratico, 170
residuo quadratico, 170
SVD in Matlab/Octave, 174
realmax, 23
realmin, 23
Zeri di funzione, 35
Accelerazione di Aitken, 50
Algoritmo di bisezione, 36
Calcolo di radici di polinomi
Deflazione, 52
Metodo di Newton-Hörner, 54
capitalizzazione composta, 35
Iterazione di punto fisso, 37
Ordine di convergenza, 39
Teorema delle contrazioni, 38
Teorema di Ostrowski, 38
Test d’arresto, 41
Metodo delle corde, 48
Metodo delle secanti, 48
Ordine di convergenza, 48
Metodo di bisezione, 36
Metodo di Newton, 42
Radici multiple, 44
Teorema di convergenza, 43
Metodo di Steffensen, 49
modello preda-predatore, 35
Schema di Hörner, 53
Bibliografia
[1] K. E. Atkinson, An Introduction to Numerical Analysis, Second Edition, Wi-
ley, New York, 1989.
[2] R. Bevilacqua, D. Bini, M. Capovani e O. Menchi Metodi Numerici, Zanichelli,
1992.
[3] J.-P. Berrut, Lloyd N. Trefethen, Barycentric Lagrange Interpolation, SIAM
Rev. 46(3) (2004), pp. 501-517.
[4] L. Bos, S. De Marchi, A. Sommariva e M. Vianello, Computing multivariate
Fekete and Leja points by numerical linear algebra, SIAM J. Num. Anal. Vol.
48(5) (2010), pp. 1984-1999.
[5] L. Bos, S. De Marchi, A. Sommariva e M. Vianello, Weakly Admissible Meshes
and Discrete Extremal Sets, Numer. Math. Theor. Meth. Appl. Vol. 4(1) (2011),
pp. 1-12
[6] V. Comincioli, Analisi numerica: metodi, modelli, applicazioni. E-book, Apo-
geo, 2005.
[7] V. Comincioli, Analisi numerica. Complementi e problemi, McGraw-Hill Com-
panies, 1991.
[8] M. Conrad e N. Papenberg, Iterative Adaptive Simpsons and Lobatto Quadra-
ture in Matlab, TR-2008-012 Mathematics and Computer Science, Emory Uni-
versity, 2008.
[9] P. J. Davis, Interpolation & Approximation, Dover Publications Inc., New
York, 1975.
[10] C. de Boor, A Practical Guide to Splines, Springer-Verlag, New York, 1978.
[11] S. De Marchi, Funzioni splines univariate, Forum Ed. Udinese, Seconda ed.,
2001 (con floppy).
[12] S. De Marchi, On Leja sequences: some results and applications Appl. Math.
Comput. 152(3) (2004), 621-647
[13] G. Farin, Curves and Surfaces for CAGD: A Practical Guide, Third Edition,
Academic Press, San Diego, 1993.
[14] Gautschi, W., Inglese, G., Lower bounds for the condition numbers of Van-
dermonde matrices, Numer. Math., 52(3) (1988), pp. 241-250.
[15] G. Golub, Charles F. Van Loan Matrix computation, The Johns Hopkins Uni-
versity Press, Terza Edizione, 1996.
258 Appunti di Calcolo Numerico con codici in Matlab/Octave
[17] Higham, N. J., The Matrix Computation Toolbox for MATLAB, University
of Manchester, Numerical Analysis Report No. 410, (2002).
[18] Higham, N. J., The Scaling and Squaring Method for the Matrix Exponen-
tial Revisited, SIAM J. Matrix Anal. Appl., 26(4) (2005), pp. 1179-1193.
[23] Moler, C. B. and C. F. Van Loan, Nineteen Dubious Ways to Compute the
Exponential of a Matrix, SIAM Review 20, 1978, pp. 801-836.
(1.1) Isaac Newton: 1643-1727 (1.2) Leonhard Euler: 1707- (1.3) Joseph-Louis Lagrange:
1783 1736-1813
(2.1) Carl Friedrich Gauss: (2.2) William Hörner : 1786- (2.3) Augustin-Louis Cauchy:
1777-1855 1837 1789-1857
(4.1) Eric Harold Neville: (4.2) Alexander Craig Aitken: (4.3) Gene Howard Golub: 1932-
1889-1961 1895-1967 2007