Risoluzione di equazioni non lineari

Risoluzione di equazioni non lineari
Si considera il problema di determinare la soluzione dell’equazione
f (x) = 0
ove f (x) è una funzione definita in un intervallo [a, b], chiuso e
limitato. Ogni valore x∗ ∈ [a, b] per cui f (x∗) = 0 si dice RADICE
dell’equazione f (x) = 0 oppure ZERO della funzione f (x). Se non si
hanno a disposizione strumenti analitici, il grafico di f (x) nell’intervallo
considerato può fornire in modo rapido una approssimazione della
soluzione cercata. Risulta tuttavia preferibile disporre di metodi
numerici in grado di fornire soluzioni con una accuratezza prefissata.
Esempio. Supponiamo che una reazione chimica origini a un certo
istante x una concentrazione di un particolare ione descritta dalla
legge f (x) = 7.e−5x + 3.e−2x. Ci si chiede per quale istante x∗ la
concentrazione si dimezza rispetto a quella iniziale f (0) = 10, ossia
quando f (x∗) = 5. Si tratta di risolvere l’equazione f (x) − 5 = 0
in un intervallo [0, c] ove c è un valore per cui f (c) − 5 < 0. Per
esempio, per c = 1, f (c) − 5 = −4.54. Dal grafico della funzione
si deduce che x∗ ' 0.18. Vale che f (0.18) − 5 = −0.0610.
L’accuratezza può essere non soddisfacente.
5
4
3
2
f(x)
1
0
−1
−2
−3
−4
−5
0
0.1
0.2
0.3
0.4
0.5
x
0.6
0.7
0.8
0.9
1
Metodo di bisezione
La tecnica più semplice per determinare lo zero di una funzione continua
in [a, b] che assume segno opposto agli estremi dell’intervallo, consiste
nella dimostrazione costruttiva del seguente teorema (è un corollario del
Teorema del valor medio).
Teorema degli zeri di una funzione continua. Sia f (x) una funzione
continua in [a, b] chiuso e limitato e sia f (a).f (b) < 0. Allora esiste
un punto x∗ ∈ (a, b) tale che f (x∗) = 0.
Per determinare x∗ si costruisce una successione di intervalli
I1 = [a1, b1], I2 = [a2, b2], ..., Ik = [ak , bk ]
tali che
Ik ⊂ Ik−1 ⊂ Ik−2 ⊂ ... ⊂ I1
con f (ak ).f (bk ) < 0, k = 1, 2, .... E’ a1 = a, b1 = b.
La costruzione degli intervalli avviene nel seguente modo. Si pone
a1 = a, b1 = b. Sia f (a1) < 0 e f (b1) > 0 (in caso contrario si
determinano le radici di −f (x) = 0).
Al passo k si calcola
ck =
ak + bk
2
k = 1, 2, ...
e il valore f (ck ).
Se f (ck ) = 0, ck = x∗.
Altrimenti si pone:
½
[ak+1, bk+1] =
[ak , ck ]
[ck , bk ]
se f (ck ) > 0
se f (ck ) < 0
Pertanto è f (ak+1) < 0, f (bk+1) > 0 e Ik+1 ⊂ Ik .
bk+1 − ak+1 =
1
1
1
(bk − ak ) = 2 (bk−1 − ak−1) = ... = k (b1 − a1)
2
2
2
Allora in Ik+1 giace x∗ che è la radice di f (x) = 0 e x∗ = ck+1 ±²k+1,
ove
1
²k+1 ≤ k+1 (b − a)
2
1
Pertanto, fissata ² tale che ² = k+1
(b − a), il numero ck+1 è una
2
∗
approssimazione di x entro una tolleranza ². Col metodo di bisezione
è possibile determinare una successione di approssimazioni di x∗ tali
che
1
∗
|ck − x | ≤ k (b − a)
k≥1
2
Per k → ∞, {ck } converge a x∗ con velocità di convergenza pari a
quella della successione { 1k }. Il metodo fornisce un valore maggiorante
2
dell’errore. Da tale valore è possibile determinare il minimo numero di
iterazioni k necessarie ad ottenere un errore assoluto che non supera
una tolleranza ² prefissata. Infatti k è tale che
1
(b − a) ≤ ²
2k
log10 b−a
b−a
b−a
²
⇒2 ≥
⇒ k ≥ log2
=
²
²
log102
Occorrono allora almeno k + 2 valutazioni di funzione (1 per ogni
iterazione +2 per il passo iniziale).
k
Esempio. Si vuole risolvere x2 − 78.8 = 0 in [6, 12].
k
1
2
3
4
5
6
7
8
ak
6
6
7.5
8.25
8.625
8.8125
8.8125
8.859375
f (6)
=
36 − 78.8 < 0
f (12)
=
144 − 78.8 > 0
bk
12
9
9
9
9
9
8.90625
8.90625
ck
9
7.5
8.25
8.625
8.8125
8.90625
8.859375
8.882813
8.882813 è una approssimazione
8.876936408 tale che
∗
|8.882813 − x | ≤
f (ck )
2.2
-22.55
-10.7375
-4.409375
-1.139844
0.5212891
-0.3114746
0.1043579
della
soluzione
√
78.8
'
1
6 = 0.0234
28
L’errore assoluto è 0.00587... Occorrono 10 valutazioni di funzione.
Esempio. Determinare il numero di iterazioni necessarie a risolvere
x3 + 4x2 − 10 = 0 con una tolleranza ² = 10−5 in [1, 2].
Deve essere
1
−5
(b
−
a)
≤
10
2k
b−a
k
5
2 ≥
⇒
k
≥
log
10
' 16.6
2
10−5
Allora deve essere k almeno uguale a 17. Occorrono 17 + 2 valutazioni
di funzioni.
Osservazioni
• Se a e b sono valori molto vicini, operando con aritmetica finita,
il calcolo di c con la formula a+b
2 può fornire un numero esterno
a [a, b]. Conviene calcolare il punto medio con la formula c =
a + b−a
2 . Per esempio, se a = 0.983, b = 0.986, lavorando in
artimetica finita con tre cifre di precisione decimale, si ha:
f l(a + b)
a+b
f l(
)
2
1
=
f l(0.983 + 0.986) = .196 10 troncamento
=
.196 101
f l(
) = .980
2
che è esterno all’intervallo [.983, .986].
f l(b − a)
b−a
f l(
)
2
b−a
f l(a +
)
2
=
f l(0.986 − 0.983) = .3 10
=
.3 10−2
−2
f l(
) = .150 10
2
=
f l(.983 + .150 10
−2
−2
) = f l(.983 + .0015) =
che è interno all’intervallo [.983, .986].
• Pur essendo f (a) e f (b) rappresentabili sulla macchina, può
essere che il loro prodotto, calcolato per verificare il segno, non
sia rappresentabile sulla macchina. E’ preferibile allora usare la
funzione sign(x) per esaminare il segno di f (a) e di f (b), ove

x>0
 1
sign(x) =
0
x=0

−1 x < 0
• L’algoritmo di bisezione realizzato in aritmetica finita può non avere
fine. Se ak = 98.5 e bk = 98.6 e ² = 0.004 in aritmetica
con tre cifre decimali di precisione, il test bk − ak < ² non è
b −a
verificato. Ma ck = ak + k 2 k = 98.5 + 0.1/2 = 98.55, ma
f l(98.55) = 98.5. Si genera una successione di iterati costanti.
Occorre dunque usare il test
|bk − ak | < ² + eps.max(|b|, |a|)
(in modo che si eliminano inconvenienti dovuti al fatto di scegliere
una tolleranza troppo piccola, inferiore relativamente rispetto alla
precisione di macchina) e prevedere un massimo numero di iterazioni.
Il metodo di bisezione ha la caratteristica positiva di convergere a uno
zero di f (x) nella sola ipotesi di f (x) continua con segno opposto agli
estremi. Tuttavia la convergenza è lenta (si guadagna una cifra decimale
ogni 3 iterazioni circa se b − a = 1 ). Pertanto spesso viene usato
solo per individuare l’intervallo entro cui cade lo zero di una funzione
come tecnica di approssimazione iniziale. Una volta individuato tale
intervallo (entro cui in genere valgono ipotesi più forti), si raggiungono
approssimazioni migliori con metodi a convergenza più veloce.
Metodo delle approssimazioni successive
Il problema di determinare lo zero di una funzione in genere non si risolve
in un numero finito di passi. Si tratta di generare un procedimento
iterativo. Esso comporta:
• determinazione di una approssimazione iniziale alla soluzione x∗ di
f (x) = 0;
• determinare una relazione funzionale a partire da f (x);
• a partire da x0, generare, valutando la relazione funzionale
determinata, una successione di iterati xk fino ad ottenere la
precisione desiderata o fino a che si raggiunge un massimo numero
di iterazioni.
Occorre poi determinare le condizioni per cui {xk } converge per k →
∞.
Se {xk } converge per ogni x0 ∈ [a, b] si parla di convergenza globale;
se invece si ha convergenza solo per gli x0 appartenenti a un opportuno
intervallo che contiene x∗, allora si parla di convergenza locale.
Il problema di cercare la radice di f (x) = 0 è strettamente connesso
al problema di determinare la soluzione dell’equazione
x = g(x)
ossia il valore x∗ per cui x∗ = g(x∗). x∗ si dice punto fisso di g(x).
Infatti, data f (x) = 0 in [a, b], sia φ(x) una funzione che non si
annulla ed è limitata in [a, b]:
0 < |φ(x)| < ∞
x ∈ [a, b]
Preso g(x) = x − φ(x)f (x), il problema
f (x) = 0
x ∈ [a, b]
è equivalente a trovare le soluzioni di
x = g(x)
x ∈ [a, b]
Se infatti x∗ è punto fisso di g(x), ossia x∗ = g(x∗), si ha che
x∗ − g(x∗)
f (x ) =
=0
φ(x∗)
∗
∗
φ(x ) 6= 0
Viceversa se f (x∗) = 0, allora
∗
∗
∗
∗
g(x ) = x − φ(x )f (x ) = x
∗
Pertanto si riporta il problema di determinare lo zero di f (x) in [a, b] a
quello di individuare il punto fisso di g(x) in [a, b]. Geometricamente
questo significa calcolare l’intersezione tra la retta y = x (bisettrice
del I e III quadrante) e la funzione y = g(x). Una possibile scelta di
φ(x) è φ(x) = ±1.
1.5
1
0.5
0
−0.5
0
0.5
1
1.5
Teorema. Sia g(x) continua in [a, b] e tale che g(x) ∈ [a, b]. Sia L
una costante 0 ≤ L < 1 tale che, per ogni x, y ∈ [a, b], vale che
|g(x) − g(y)| ≤ L|x − y|
(ossia g(x) è una contrazione in [a, b]). Allora esiste un unico punto
fisso x∗ di g(x) in [a, b].
Dimostrazione. (Esistenza). Sia h(x) = x − g(x). Poichè g(x) ∈ [a, b], g(a) ≥ a e g(b) ≤ b.
Se g(a) = a o g(b) = b, allora si è già trovato il punto fisso. In caso contrario, è g(a) > a e
g(b) < b. Dunque,
h(a) = a − g(a) < 0
h(b) = b − g(b) > 0
e poichè h(x) è continua, per il teorema degli zeri di una funzione continua, esiste x∗ ∈ (a, b) tale
che h(x∗ ) = 0 e dunque x∗ = g(x∗ ).
(Unicità). Supponiamo che ci siano due punti fissi x∗ e y ∗ in [a, b]. Allora, se x∗ =
6 y ∗ , segue
∗
∗
∗
∗
∗
∗
∗
∗
|x − y | = |g(x ) − g(y )| ≤ L|x − y | < |x − y |
Ciò è assurdo ¤.
Se g(x) è derivabile in [a, b] con |g 0(x)| ≤ L < 1 per x ∈ [a, b],
allora g(x) è una contrazione. Infatti per il teorema di Lagrange, esiste
ξ ∈ [a, b], tale che
g(x) − g(y)
0
= g (ξ) x < ξ < y
x−y
Allora
0
|g(x) − g(y)| = |g (ξ)||x − y| ≤ L|x − y|
Il viceversa non è vero poichè g(x) può non essere differenziabile.
4
3.5
g(x)
b
3
2.5
2
1.5
a
1
0.5
b
a
0
0
0.5
1
1.5
2
2.5
3
3.5
4
Occorre g(x) ∈ [a, b]
4
3.5
b
3
g(x)
2.5
2
1.5
a
1
0.5
b
a
0
0
0.5
1
1.5
2
2.5
3
3.5
4
Occorre g(x) continua perchè ci sia un punto fisso
4
3.5
b
3
g(x)
2.5
2
1.5
a
1
0.5
b
a
0
0
0.5
1
1.5
2
2.5
3
3.5
4
Occorre che g(x) non oscilli troppo, ossia che sia una contrazione,
perchè ci sia un unico punto fisso.
Esempi.
1. g(x) = x in [0, 1] ha infiniti punti fissi. x è continua in [0, 1] e
x ∈ [0, 1]. Ma g 0(x) = 1 per x ∈ [0, 1].
2. g(x) = x − sin(πx) in [0, 1] ha due punti fissi x = 0 e x = 1.
g(x) è continua in [0, 1]. Ma g(x) non appartiene a [0, 1]
(g(1/2) = −1/2).
3. g(x) = (x2 −1)/3 in [−1, 1]. g(x) è continua e g(x) ∈ [−1, 1].
Inoltre g 0(x) = 32 x e |g 0(x)| ≤ 23 per x ∈ [−1, 1]. Dunque esiste
2
un unico punto fisso in√ [−1, 1]. Esso è x 3−1 = x ⇒ x2 −3x−1 =
∗
3− 13
0. Perciò
x
=
. In [3, 4], g(x) ha un altro punto fisso
2
√
x∗ = 3+2 13 . Ma g(x) non appartiene a [3, 4] e g 0(4) = 8/3 > 1.
Qui non sono soddisfatte le ipotesi del teorema. Infatti queste sono
solo condizioni sufficienti.
Data una approssimazione iniziale x0 di x∗, punto fisso di g(x) in
[a, b], si genera una successione di iterati mediante il metodo delle
approssimazioni successive o del punto fisso o iterazione funzionale:
xk+1 = g(xk )
Se g(x) è continua e la successione {xk } degli iterati è convergente
per k → ∞ a un punto x∗, allora x∗ è punto fisso fi g(x). Infatti
∗
∗
x = lim xk+1 = lim g(xk ) = g(lim xk ) = g(x )
k→∞
k→∞
k→
Dal punto di vista geometrico, il metodo dell’iterazione funzionale
equivale alla costruzione di una poligonale con lati orizzontali e verticali
orientata nel piano xy . Le figure seguenti aiutano a individuare le
condizioni da imporre a g(x) perchè i vertici della poligonale convergano
a (x∗, g(x∗)).
4
3.5
b
3
g(x)
2.5
2
1.5
a
1
0.5
0
0.5
1
1.5
x0
x1
x2
a
0
2
2.5
b
3
3.5
4
Convergenza monotona:
{xk } converge a x∗ approssimando sempre per eccesso o per difetto.
4
3.5
b
3
g(x)
2.5
2
1.5
a
1
0.5
a
0
0
0.5
1
x0
1.5
x2
2
x3
2.5
x1
b
3
3.5
4
Convergenza alternata:
{xk } converge a x∗ approssimando per eccesso e per difetto.
4
3.5
g(x)
b
3
2.5
2
1.5
a
1
0.5
a
0
0
0.5
1
b
1.5
2
2.5
3
2
2.5
3
3.5
4
3.5
4
g 0 (x) > 1
4
3.5
g(x)
b
3
2.5
2
1.5
a
1
0.5
a
0
0
0.5
1
g 0 (x) < −1
b
1.5
Per |g 0 (x)| > 1 non c’è convergenza.
Teorema di convergenza globale del metodo
delle approssimazioni successive
Sia g(x) una funzione definita in un intervallo [a, b]chiuso e limitato.
Sia:
• g(x) continua in [a, b];
• g(x) ∈ [a, b];
• g(x) sia una contrazione in [a, b].
Allora per ogni x0 ∈ [a, b], la successione delle approssimazioni
successive {xk } con xk = g(xk−1), k = 1, 2, ..., converge per
k → ∞ all’unico punto fisso x∗ di g(x) in [a, b].
Dimostrazione. Le ipotesi garantiscono l’esistenza e l’unicità di un unico punto fisso x∗ della funzione
g(x) in [a, b]. Poichè inoltre xk = g(xk−1 ), allora per ogni successione generata a partire da un
punto x0 ∈ [a, b], l’iterato xk è ben definito, ossia xk ∈ [a, b], poichè g(xk−1 ) ∈ [a, b].
Si consideri:
∗
|xk − x |
=
∗
∗
|g(xk−1 ) − g(x )| ≤ L|xk−1 − x | =
=
∗
2
∗
L|g(xk−2 ) − g(x )| ≤ L |xk−2 − x |...
≤
k
∗
L |x0 − x |
Poichè 0 < L < 1, per k → ∞ si ha limk→∞ Lk = 0 e dunque limk→∞ xk = x∗ .
Si può trovare una maggiorazione dell’errore, osservando che:
∗
∗
∗
|x0 − x | = |x0 − x1 + x1 − x | ≤ |x0 − x1 | + L|x0 − x |
Da ciò |x0 − x∗ | ≤ 1 |x1 − x0 |. Allora
1−L
Lk
∗
|xk − x | ≤
|x − x0 |
1−L 1
La velocità di convergenga dipende da L. Quanto più L è vicino a 1
quanto più la convergenza è lenta e viceversa.
Esempio. Si considerano vari modi di innescare un procedimento
iterativo di punto fisso per poter trovare la soluzione della funzione
3
2
x + 4x − 10 = 0
in [1, 2]
. Si considera come punto iniziale in tutti i casi x0 = 1.5.
(a). x = x − x3 − 4x2 + 10 = g1(x);
¢1/2
¡ 10
= g2(x) (da x3 = 10 − 4x2));
(b). x = x − 4x
(c). x = 12 (10 − x3)1/2 = g3(x) (da x2 = 14 (10 − x3));
´1/2
³
10
(d). x = x+4
= g4(x) (da x3 + 4x2 = 10);
(e). x = x −
k
1
2
(a)
-0.875
6.732
3
4
...
15
...
30
-469.7
1.08 108
diverge
x3 +4x2 −10
3x2 +8x
(b)
0.8165
2.9969
(−8.65)1/2
impossibile
= g5(x) (da x = x −
f (x)
).
f 0 (x)
(c)
1.286953768
1.402540804
(d)
1.348399725
1.367376372
(e)
1.373333333
1.365262015
1.345458374
1.375170253
...
1.365223680
...
1.365230013
1.364957015
1.365264748
...
1.365230013
1.365230014
1.365230013
Non tutte le scelte portano a un metodo convergente (caso (a)) o ben
definito (caso (b)). Tuttavia anche se il metodo è convergente, ci
sono funzioni che portano a una più rapida convergenza di altre (con il
metodo di bisezione sono necessarie 27 valutazioni di funzioni).
(a). g10 (x) = 1 − 3x2 − 8x, |g10 (x)| > 1 per x ∈ [1, 2];
√
√
(b). g2(x) è definita per − 10/2 ≤ x ≤ 10/2 ' 1.581113;
dunque g2(x) non appartiene a [1, 2];
(c).
g30 (x) = − 34
x2
;
(10−x3 )1/2
dunque |g30 (x)| ≤ 2.1213.
Tuttavia se ci si restringe a [1, 1.5], 1.28 ≤ g3(x) ≤ 1.5 e
max[1,1.5]|g30 (x)| = |g30 (1.5)| ' 0.6556 < 1;
q
0
x+4
(x)| ≤ 0.15; la convergenza è più
(d).
=
,
per
cui
|g
4
10
rapida che nel caso (c);
g40 (x)
1
2
4
3
2
−60x−80
(e). g50 (x) = 6x +32x(3x+32x
; in [1, 2], |g50 (x)| ≤ 0.6.
2 +8x)2
Tuttavia g5(x) è il metodo a convergenza più rapida. Ciò dipende
dal fatto che in [1, 1.5], |g50 (x)| ≤ 0.11. Invece |g40 (x)| ≤ 0.123.
Da ciò segue la più veloce convergenza del caso (e) rispetto a (d).
Spesso è difficile verificare la condizione: per x ∈ [a, b], g(x) ∈ [a, b]
che è essenziale nel teorema di convergenza globale; in tal caso è utile
un teorema di convergenza locale che assicura la convergenza di {xk }
a un punto fisso x∗ di g(x) se x0 è sufficientemente vicino a x∗. E’
necessario sapere a priori che x∗ è un punto fisso di g(x), ossia che
g(x) ha un punto fisso.
Teorema di convergenza locale. Sia x∗ un punto fisso di g(x);
si suppone che g(x) sia continua e sia una contrazione per ogni
x ∈ [x∗ − ρ, x∗ + ρ] = Iρ. Allora, per ogni x0 ∈ Iρ, la successione
degli {xk } è ben definita, ossia xk ∈ Iρ e converge per k → ∞ a x∗.
Inoltre x∗ è l’unico punto fisso di g(x) in Iρ.
Dimostrazione. Per ipotesi x0 ∈ Iρ e dunque
∗
|x0 − x | ≤ ρ
Preso g(x0 ) = x1 ,
∗
∗
∗
|x1 − x | = |g(x0 ) − g(x )| ≤ L|x0 − x | ≤ Lρ < ρ
poichè L < 1. Supposto ora che x2 , ..., xk ∈ Iρ , si dimostra che ciò vale anche per xk+1 :
∗
∗
∗
|xk+1 − x | = |g(xk ) − g(x )| ≤ L|xk − x | ≤ Lρ < ρ
La successione è ben definita. Inoltre,
∗
∗
2
∗
k
∗
k
|xk − x | ≤ L|xk−1 − x | ≤ L |xk−2 − x | ≤ ... ≤ L |x0 − x | ≤ L ρ
Per k → ∞, limk→∞ Lk = 0 e dunque xk è convergente a x∗ .
Supposto per assurdo che y ∗ sia un punto fisso di g(x) in Iρ diverso da x∗ , si ha che:
∗
∗
∗
∗
∗
∗
∗
∗
|x − y | = |g(x ) − g(y )| ≤ L|x − y | < |x − y |
Ciò è assurdo.
Anche in questo caso si prova che:
Lk
∗
|xk − x | ≤
|x − x0 |
1−L 1
Propagazione degli errori nel metodo delle
approssimazioni successive
Poichè si opera in aritmetica finita anzichè su numeri reali, è impossibile
calcolare esattamente la funzione g(x) per x assegnato. Piuttosto, per
x assegnato, si calcola una approssimazione di g(x), data da
a(x) = g(x) + δ(x)
ove δ(x) è l’errore commesso. Di solito è nota una maggiorazione
di tale errore |δ(x)| ≤ δ . Pertanto operando in aritmetica finita, il
metodo delle approssimazioni successive diventa:
wk+1 = a(wk ) = g(wk ) + δk
k = 0, 1, 2, ...
ove wk è il k–esimo iterato ottenuto operando con numeri finiti e
|δk | ≤ δ . In generale la successione dei wk non converge. Tuttavia è
possibile determinare, sotto opportune condizioni, una approssimazione
di x∗ tanto più accurata quanto più δ è piccolo.
Teorema. Sia x∗ un punto fisso di g(x) e supponiamo che, in un
intervallo Iρ = [x∗ − ρ, x∗ + ρ], g(x) sia continua e sia contrattiva;
δ
allora, per ogni w0 ∈ Iρ0 = [x∗ −ρ0, x∗ +ρ0], con ρ0 = ρ− 1−L
, con
δ ≥ |δk |, la successione dei wk , ottenuta da wk = g(wk−1) + δk−1
è tale che:
∗
|wk − x | ≤
δ
δ
k
+ L (ρ0 −
)
1−L
1−L
e i wk appartengono a Iρ.
Nella diseguaglianza il primo termine è indipendente da k e può essere
grande se L è prossimo a 1; il secondo termine tende a 0 per k → ∞.
Pertanto non si ha più convergenza della successione degli iterati a x∗.
Si osservi che
|wk+1 − wk |
∗
∗
=
|wk+1 − x + x − wk | ≤
≤
|wk+1 − x | + |x − wk |
≤
+
=
∗
∗
δ
δ
k
+ L (ρ0 −
)+
1−L
1−L
δ
δ
k+1
+ L (ρ0 −
)=
1−L
1−L
2δ
δ
k
+ L (L + 1)(ρ0 −
)
1−L
1−L
Per quanto k sia preso grande, la differenza tra due iterati successivi non
2δ
può essere più piccola di 1−L
, a causa degli errori di arrotondamento
nel calcolo di g(x).
Criteri di arresto per il metodo delle
approssimazioni successive
Occorre determinare un criterio per vedere se l’approssimazione ottenuta
è punto fisso di g(x), ossia se x − g(x) = φ(x)f (x) = 0. Si ritiene
che xk sia una approssimazione accettabile se contemporaneamente:
|f (xk )| ≤ ²1
e |xk − xk−1| ≤ ²2
oppure
|f (xk )|
|xk − xk−1|
≤ σ1
e
≤ σ2
fmax
|xk |
ove ²1, ²2, σ1, σ2 sono tolleranze assegnate e fmax = maxx∈Iρ |f (x)|.
La scelta delle tolleranze è cruciale. Può essere che |f (xk )| sia piccola
pur non essendo xk accettabile e, viceversa, può essere che |f (xk )| sia
grande pur essendo xk accettabile.
2δ
, poichè questo termine
²2 deve essere inoltre maggiore o uguale a 1−L
che tiene conto degli errori di arrotondamento non converge a 0 per
k → ∞. xk − xk−1 può convergere a 0, pur essendo le due successioni
divergenti. Se non si conosce nulla di f (x), conviene applicare i test
relativi.
Ordine di convergenza
Definizione. Sia x∗ un punto fisso di g(x). Se per ogni x0 ∈ Iρ =
[x∗ − ρ, x∗ + ρ], la successione generata con l’iterazione funzionale è
tale che esistono una costante positiva C e un positivo p tale che
∗
∗ p
|xk − x | ≤ C|xk−1 − x |
k≥1
con C > 0 per p > 1 e 0 < C < 1 per p = 1, allora il metodo
di dice un metodo iterativo di ordine p. Se p = 1, il metodo si dice
lineare; se p = 2, si dice che ha velocità di convergenza quadratica,...
Teorema. Se x∗ un punto fisso di g(x) e se il metodo d’iterazione è
un metodo di ordine p, allora per ogni x0 ∈ Iρ = [x∗ − ρ, x∗ + ρ] la
successione degli {xk } → x∗ per k → ∞.
Dimostrazione. Dato x0 ∈ Iρ si ha che
∗
|xk − x |
≤
∗p
C1 |xk−1 − x |
∗
|xk − x |
≤
∗
C2 |xk−1 − x | p = 1, 0 < C2 < 1
p > 1, C1 > 0
Per p = 1, si ha:
∗
∗
k
∗
k
|xk − x | ≤ C2 |xk−1 − x | ≤ ... ≤ C2 |x0 − x | ≤ C2 ρ
k → 0. Inoltre x ∈ I .
Per k → ∞, limk→∞ xk = x∗ , perchè C2
ρ
k
Se p > 1,
∗
|xk − x |
≤
p
∗p
∗ p2
C1 |xk−1 − x | ≤ C1 C1 |xk−2 − x |
≤ ...
≤
1−pk
k−1
k
p
p
1−p
∗p
∗ pk
|x0 − x |
= C1
C1 C1 ...C1
|x0 − x |
=
=
1
p−1
∗ pk −1
∗
(C1
|x0 − x |)
|x0 − x |
1
p−1
Se vale che C1
ρ < 1, allora
1
1−p pk −1
∗
∗
|xk − x | ≤ (C1
ρ)
|x0 − x |
Allora xk ∈ Iρ e per k → ∞, limk→∞ xk = x∗ .
Poichè un metodo di ordine p è localmente convergente in un opportuno
intorno di x∗, la definizione di ordine di convergenza può essere data
anche in modo alternativo.
Un metodo iterativo che genera una successione di iterati {xk }
convergenti a x∗, si dice che è di ordine p o ha velocità di convergenza
pari a p se esistono costanti C e p tali che:
|xk+1 − x∗|
lim
=C
k→∞ |xk − x∗ |p
p>1
oppure
|xk+1 − x∗|
lim
= C p = 1, 0 < C < 1
k→∞ |xk − x∗ |
Se p = 1 e 0 < C < 1, il metodo si dice lineare. Se invece è
|xk+1 −x∗ |
limk→∞ |x −x∗|
k
= 0, il metodo è superlineare, mentre se il limite
vale 1, il metodo si dice sublineare.
C si dice costante asintotica di errore. Vale che
∗
∗ p
p
ek+1 = |xk+1 − x | ≈ C|xk − x | = Cek
o anche
p
ek+1 = (C + δk )ek
con limk→∞ δk = 0.
Teorema. Sia x∗ un punto fisso di g(x). Supponiamo che g(x) sia
di classe C p in un opportuno intervallo Iρ = [x∗ − ρ, x∗ + ρ] con
g (i)(x∗) = 0, i = 1, 2, ..., p − 1 e g p(x∗) 6= 0 e in modulo minore di
1 se p = 1. Allora per ogni x0 ∈ Iρ opportuno, il metodo di iterazione
funzionale è un metodo convergente di ordine p.
Dimostrazione. Poichè g(x) ∈ C p ed è g 0 (x) = 0 oppure |g 0 (x)| < 1 per p = 1, allora esiste un
intervallo Iρ = [x∗ − ρ, x∗ + ρ] per cui |g 0 (x)| ≤ L < 1 per x ∈ Iρ ed g(x) ∈ Iρ. Infatti,
x0 ∈ Iρ , e vale che
∗
|x1 − x |
=
∗
0
∗
|g(x0 − g(x )| = |g (ξ)||x0 − x |
<
∗
|x0 − x | < ρ
In generale
∗
|xk − x |
=
∗
∗
|g(xk−1 ) − g(x )| ≤ L|xk−1 − x | ≤ ...
≤
k
∗
L |x0 − x | < ρ
Dunque xk ∈ Iρ e xk → x∗ per k → ∞.
Se si considera lo sviluppo in serie di Taylor di punto iniziale x∗ , si ha:
xk+1
=
+
g p−1 (x∗ )
∗
0 ∗
∗
∗ p−1
g(xk ) = g(x ) + g (x )(x − x ) + ... +
(x − x )
+
(p − 1)!
g p (ξk )
p!
∗ p
(x − x )
con ξk ∈ (xk , x∗ ) ⊂ Iρ . Allora
p
p
p ∗
lim g (ξk ) = g ( lim (ξk )) = g (x )
k→∞
k→∞
e, poichè
segue
xk+1 − x∗
g p (ξk )
=
(xk − x∗ )p
p!
xk+1 − x∗
g p (x∗ )
lim
=
p!
k→∞ (xk − x∗ )p
Se p = 1, |g 0 (x∗ )| < 1.
Conseguenze.
1. Se x∗ è punto fisso di g(x) e g ∈ C 1, con g 0(x∗) 6= 0 ed è
|g 0(x∗)| < 1, allora esiste un intorno Iρ = [x∗ − ρ, x∗ + ρ] per
cui |g 0(x)| < 1 per x ∈ Iρ. In tale intervallo, per ogni x0 ∈ Iρ, il
metodo iterativo converge al punto fisso in modo lineare.
2. Se x∗ è punto fisso di g(x) e g ∈ C 2, con g 0(x∗) = 0 e
g 00(x∗) 6= 0, allora esiste un intorno Iρ = [x∗ − ρ, x∗ + ρ] tale
che, per ogni x0 ∈ Iρ, il metodo iterativo converge al punto fisso
con velocità di convergenza quadratica e vale che
g 00(x∗)
xk+1 − x∗
lim
=
k→∞ (xk − x∗ )2
2
o equivalentemente
g 00(ξk )
∗ 2
xk+1 − x =
(xk − x )
2
∗
con ξk ∈ Iρ.
Se M è un valore maggiorante della derivata seconda di g(x) in
Iρ, allora
M 2
|ek+1| ≤
ek
2
M
2 è la costante che maggiora l’errore il cui valore asintotico è
g 00 (x∗ )
.
2
Data l’equazione f (x) = 0, si può determinare x∗, soluzione di
f (x) = 0, come punto fisso di
x = x − φ(x)f (x) = g(x)
con φ(x) 6= 0 per ogni x nell’intervallo in cui si cerca la soluzione.
Per esaminare la velocità di convergenza, si consideri g 0(x):
0
0
0
g (x) = 1 − φ(x)f (x) − φ (x)f (x)
In x∗, g 0(x∗) = 1 − φ(x∗)f 0(x∗). Il metodo iterativo ha velocità di
0
∗
1
convergenza lineare se φ0(x∗) 6= f 0(x
∗ ) , supposto che f (x ) 6= 0. Se
1
φ(x) è costante, φ(x) = m 6= f 0(x
∗ ) , il metodo è lineare.
La convergenza è quadratica se
∗
φ(x ) =
1
f 0(x∗)
con f 0(x∗) 6= 0. Allora o si pone φ(x) =
incognito), oppure si pone
φ(x) =
1
f 0 (x∗ )
costante (ma x∗ è
1
f 0(x)
ottenendo un metodo a convergenza quadratica dato da
xk+1 = xk −
f (xk )
f 0(xk )
Il metodo è detto metodo di Newton. Vale che
f 0(x∗)2 − f (x∗)f 00(x∗)
f (x∗)f 00(x∗)
g (x ) = 1 −
=
=0
f 0(x∗)2
f 0(x∗)2
0
∗
f 00(x∗)
g (x ) = 0 ∗
f (x )
Allora se f (x∗) = 0, f 0(x∗) 6= 0, f 00(x∗) 6= 0, il metodo di Newton
ha convergenza quadratica con costante asintotica di convergenza
f 00 (x∗ )
.
2f 0 (x∗ )
00
∗
Si dice anche metodo delle tangenti, perchè geometricamente xk+1
è il punto d’intersezione tra y = 0 e la retta tangente a f (x) in
(xk , f (xk )):
0
y = f (xk ) + f (xk )(x − xk )
8
7
f(x)
6
5
4
3
2
1
x*
0
x2
−1
0
0.5
1
x1
1.5
x0
2
2.5
3
Riassumiamo tutte le condizioni per la convergenza locale del metodo
di Newton:
Sia x∗ uno zero di f (x). Sia f (x) continua insieme alle sue derivate
prima, seconda e terza (continuità di g, g 0, g 00). Sia f 0(x) 6= 0 per x in
un opportuno interno di x∗ e sia f 00(x∗) 6= 0 ( ff0(x)
deve essere definita
(x)
e deve essere g 00(x∗) 6= 0). Allora, per ogni x∗ ∈ [x∗ − ρ, x∗ + ρ],
la successione generata dal metodo di Newton converge a x∗ in modo
quadratico.
Esempi.
¡ x ¢2
1. sin(x) − 2 = 0 in [1, 2].
f 00(x) = − sin(x) − 12
f 0(x) = cos(x) − x2 ;
¡ x ¢2
sin(xk ) − 2k
xk+1 = xk −
x
cos(xk ) − 2k
k
0
1
2
3
4
xk
1.5
2.14039
1.95201
1.93393
1.93375
f 0(xk )
-0.67926
-1.60948
-1.34805
-1.32217
f (xk )
0.434995
-0.303197
-0.024372
-0.000233
0.000005
Costante asintotica di errore
g 00 (x∗ )
2
2. x2 − γ = 0
xk+1
1
=
2
µ
=
−f (xk )/f 0(xk )
0.64039
-0.18838
-0.01808
-0.00018
f 00 (x∗ )
2f 0 (x∗ )
γ
xk +
xk
' 0.54.
¶
Per γ = 2, e [1, 2], si ha:
k
xk
0
1.5
1
1.41666666
2
1.41421568
3 1.414213561
4 1.414213562
La costante asintotica di errore vale f 00(x∗)/(2f 0(x∗)) =
√
1/(2 γ). Se γ è piccolo, la convergenza può essere lenta.
La complessità del metodo è pari a una valutazione di funzione e una
valutazione della derivata prima per passo; se la complessità di f 0 è
analoga a quella di f , si dice che il metodo richiede due valutazioni di
funzioni per passo.
Condizioni per la convergenza globale del
metodo di Newton
Teorema. Sia f ∈ C 2[a, b]. Sia inoltre:
1.
2.
3.
4.
f (a) < 0, f (b) > 0;
f 0(x) 6= 0;
f 00(x) ≤ 0;
|f (b)| ≤ (b − a)|f 0(b)|.
Allora il metodo di Newton genera una successione di iterati convergenti
all’unica soluzione di f (x) = 0 appartenente ad [a, b] a partire da un
qualunque x0 ∈ [a, b].
Il teorema resta valido se valogono le seguenti condizioni:
1. f (a) < 0, f (b) > 0;
2. f 0 (x) 6= 0;
3. f 00 (x) ≥ 0;
4. |f (a)| ≤ (b − a)|f 0 (a)|.
oppure
1. f (a) > 0, f (b) < 0;
2. f 0 (x) 6= 0;
3. f 00 (x) ≥ 0;
4. |f (b)| ≤ (b − a)|f 0 (b)|.
e, rispettivamente,
1. f (a) > 0, f (b) < 0;
2. f 0 (x) 6= 0;
3. f 00 (x) ≤ 0;
4. |f (a)| ≤ (b − a)|f 0 (a)|.
Definizione. Si dice che x∗ è uno zero di f (x) di molteplicità m se
f (x) = (x − x∗)mq(x), x 6= x∗, e limx→x∗ q(x) 6= 0.
Se m = 1, x∗ è uno zero semplice.
Teorema. Sia f ∈ C 0[a, b], ove [a, b] contiene uno zero x∗ di f (x).
x∗ è uno zero semplice ⇔ f (x∗) = 0, f 0(x∗) 6= 0.
Dimostrazione. Se x∗ è uno zero semplice, f (x∗ ) = 0 e f (x) = (x − x∗ )q(x), con
limx→x∗ q(x) 6= 0. Vale che:
0
∗ 0
f (x) = (x − x )q (x) + q(x)
Allora
0
0 ∗
lim f (x) = f (x ) = lim q(x) 6= 0
x→x∗
x→x∗
Se, viceversa, f (x∗ ) = 0, f 0 (x∗ ) 6= 0, allora
∗
∗ 0
∗ 0
f (x) = f (x ) + (x − x )f (ξ) = (x − x )f (ξ)
con ξ compreso tra x e x∗ . Posto q(x) = f 0 (ξ), si ha limx→x∗ f 0 (ξ) = f 0 (limx→x∗ ξ) =
f 0 (x∗ ) 6= 0.
Teorema. Sia f ∈ C m[a, b], ove [a, b] contiene uno zero x∗ di f (x).
x∗ è uno zero di molteplicità m ⇔ f (i)(x∗) = 0, i = 0, 1, ..., m−1
ed è f m(x∗) 6= 0.
Se x∗ è uno zero semplice di f (x), il metodo di Newton converge
quadraticamente.
Se x∗ è uno zero di molteplicità m, allora poichè
f (x) = (x − x∗)mq(x), con limx→x∗ q(x) 6= 0,
0
f (x)
=
∗ m−1
∗ m 0
m(x − x )
q(x) + (x − x ) q (x) =
=
∗ m−1
∗ 0
(x − x )
(mq(x) + (x − x )q (x))
=
∗ m−2
∗ m−1 0
m(m − 1)(x − x )
q(x) + m(x − x )
q (x) +
+
∗ m−1 0
∗ m 00
m(x − x )
q (x) + (x − x ) q (x) =
=
∗ m−2
(x − x )
.
.
0
∗
∗ 2 00
(m(m − 1)q(x) + 2mq (x)(x − x ) + (x − x ) q (x))
f (x)
f 0 (x)
=
∗
(x − x )
0
g (x)
=
f (x)f 00 (x)
f 0 (x)2
=
q(x)(m(m − 1)q(x) + 2mg 0 (x)(x − x∗ ) + (x − x∗ )2 q 00 (x))
=
(mq(x) + (x − x∗ )q 0 (x))2
=
(m2 − m)q(x∗ )2
1
=1−
6 0
=
m
m2 q(x∗ )2
00
f (x)
0 ∗
g (x )
q(x)
mq(x) + (x − x∗ )q 0 (x)
com m > 1. E’ g 0(x∗) < 1. Dunque il metodo di Newton diventa
convergente solo linearmente. Tuttavia se si modifica l’iterazione nel
seguente modo:
f (xk )
xk+1 = xk − m 0
f (xk )
la convergenza ritorna almeno quadratica:
f (x∗)f 00(x∗)
1
g (x ) = 1 − m + m
= 1 − m + m(1 − ) = 0
f 0(x∗)2
m
0
∗
Un altro modo per ottenere un metodo a convergenza quadratica
q(x)
∗
consiste nell’osservare che ff0(x)
=
(x
−
x
)
ha in
(x)
(mq(x)+(x−x∗ )q 0 (x))
x∗ uno zero di molteplicità 1. Dunque si applica il metodo di Newton
a ff0(x)
:
(x)
xk+1
f (xk )/f 0(xk )
= xk − 0
(f (xk )2 − f (xk )f 00(xk ))/f 0(xk )2
Se g(x) è sufficientemente regolare in un opportuno intervallo che
contiene x∗, allora si ha convergenza quadratica al punto fisso x∗.
Per xk sufficientemente vicino a x∗, f 0(x∗) e f (x∗) sono piccoli e si
possono avere problemi di cancellazione.
Il metodo di Newton si può derivare considerando lo sviluppo in serie
di Taylor a partire da xk e calcolandolo in x∗, trascurando i termini di
ordine superiore a 1.
∗
0 = f (x )
⇒
=
f 00(ξ) ∗
2
f (xk ) + f (xk )(x − xk ) +
(x − xk )
2
f (xk )
∗
x ' xk − 0
f (xk )
0
∗
Se si sostituisce la funzione f (x) con il polinomio di grado 1 tale che
p(xk ) = f (xk ) e p0(xk ) = f 0(xk ) (modello lineare di f (x)), si
ottiene il metodo di Newton.
Se si sostituisce la funzione f (x) con il polinomio di grado 2 anzichè
di grado 1, tale che il polinomio coincide con f (x) fino alla derivata
seconda, si ottiene la seguente iterazione funzionale:
0
xk+1 = xk −
f (xk ) ±
p
f 0(xk )2 − 2f (xk )f 00(xk )
f 00(xk )
Per uno zero semplice, il metodo ha ordine di convergenza 3.
Tuttavia queste iterazioni funzionali comportano alta complessità poichè
richiedono il calcolo non solo della funzione ma anche delle derivate ad
ogni passo.
Anzichè usare polinomi di Taylor per approssimare f (x) e calcolarne
uno zero, si possono usare polinomi di interpolazione. Da tale idea
nascono i metodi di interpolazione per la determinazione degli zeri di
una funzione.
Regula falsi
Sia a1 ≡ a, b1 ≡ b, tali che f (a).f (b) < 0, con f ∈ C[a, b]. Per
ogni k = 1, 2, ... si costruisce a partire da [ak , bk ] con f (ak )·f (bk ) <
0 una successione di iterati dati da:
ck+1 = bk −
f (bk
f (bk )−f (ak )
bk −ak
. Geometricamente ck+1 è l’intersezione tra l’asse delle x e la retta che
unisce i punti di coordinate (ak , f (ak )) e (bk , f (bk )):
y
=
0
y
=
f (bk ) +
f (bk ) − f (ak )
(x − bk )
bk − ak
Si calcola ck+1 e si pone
½
[ak+1, bk+1] =
[ak , ck+1]
[ck+1, bk ]
f (ak )f (ck+1) < 0
f (ak )f (ck+1) > 0
Se f (ck+1) = 0, x∗ = ck+1.
La regula falsi è convergente. L’ordine di convergenza è lineare.
Non è detto che abbia maggiore efficienza del metodo di bisezione. Ciò
dipende dalla particolare scelta della funzione. Si veda il comportamento
di f (x) = sin(x) − 0.9 nell’intervallo [0, 1.5].
Metodo delle secanti
xk+1 = xk −
f (xk )
f (xk )−f (xk−1 )
xk −xk−1
xk+1 è intersezione tra y = 0 e il polinomio che interpola f (x)
nei punti (xk−1, f (xk−1)) e (xk , f (xk )). Tuttavia non è detto che
f (xk ) e f (xk−1) siano di segno contrario (questo può dare problemi
di cancellazione che non ci sono con la regula falsi).
Si ha bisogno di due approssimazioni iniziali. La convergenza è ottenibile
solo se x0 e x1 appartengono a un intervallo sufficientemente piccolo
attorno a x∗, zero di f (x).
Se f ∈ C 2, si può dimostrare che il metodo delle secanti genera una
successione di iterati che converge alla soluzione x∗ con velocità di
convergenza frazionaria data da p = 1.618..., ove p à soluzione di
p2 − p − 1 = 0. Posto ek = M |xk − x∗|, ove M è una costante
positiva, si ha che:
ek+1 ≤ (K)
pk+1
pk p
= (K )
ove K è una costante positiva minore di 1.
Un passo del metodo delle secanti richiede una sola valutazione di
funzione. Dunque due passi hanno la stessa complessità del metodo
di Newton. Per quanto riguarda la convergenza, si ha: ek+2 ≤
k+2
k
2
k
= (K p )p ≤ (K p )p+1perchè p2 = p + 1. Per cui
(K)p
si un procedimento con velocità di convergenza p + 1 = 2.618...,
localmente più veloce di quello di Newton.
Generalizzazione del metodo delle secanti
Dati r + 1 valori approssimati xk , xk−1, ..., xk−r , si determina xk+1
come intersezione tra y = 0 e il polinomio di grado r , tale che
f (xk−i) = p(xx−i),
i = 0, 1, ..., r
Per r = 1, si ottiene il metodo delle secanti.
Per r = 2, si ottiene il metodo di Muller. Dati xk , xk−1, xk−2, si
determina
2
p(x) = a(x − xk ) + b(x − xk ) + c
tali che
p(xk )
=
f (xk ) = c
p(xk−1 )
=
2
f (xk−1 ) = a(xk−1 − xk ) + b(xk−1 − xk ) + c
p(xk−2 )
=
2
f (xk−2 ) = a(xk−2 − xk ) + b(xk−2 − xk ) + c
⇒
c
=
f (xk )
b
=
(xk−2 − xk )2 (f (xk−1 ) − f (xk )) − (xk−1 − xk )2 (f (xk−2 ) − f (xk ))
(xk−2 − xk )(xk−2 − xk−1 )(xk−1 − xk )
a
=
(xk−1 − xk )(f (xk−2 ) − f (xk )) − (xk−2 − xk )(f (xk−1 ) − f (xk ))
(xk−2 − xk )(xk−2 − xk−1 )(xk−1 − xk )
xk+1 = xk −
√
2c
b ± b2 − 4ac
Il segno è scelto in modo che xk+1 − xk sia più piccolo possibile, ossia
la quantità al denominatore più grande possibile:
xk+1 = xk −
2c
√
b + segno(b) b2 − 4ac
Se f ∈ C 3 e f 0(x∗) =
6 0, in prossimità di x∗ si ha convergenza con
ordine di convergenza p = 1.84, ove p è radice di p3 = p2 + p + 1.
Il metodo delle secanti possiede un’altra generalizzazione. Se f (x)
nell’intorno di x∗ è biunivoca, allora essa è invertibile, ossia esiste una
funzione g(y) tale che g(f (x)) = x. Pertanto vale che g(f (x∗)) =
g(0) = x∗.
Allora a partire da f (xk ), ..., f (xk−r ) si può costruire un polinomio
q(y) di grado r tale che q(f (xk−i)) = xk−i, i = 0, ..., r . Si
considera come nuovo iterato xk+1 il valore di q(0). Questi metodi
vengono detti metodi dell’interpolazione inversa. Per r = 1 si riottiene
il metodo delle secanti, per r = 2 il metodo dell’interpolazione
quadratica inversa. Si tratta di costruire un polinomio q(y) di grado 2
2
q(y) = α1y + α2y + α3
che passa per i punti (f (xk ), xk ), (f (xk−1), xk−1), (f (xk−2), xk−2),
e di considerare come nuovo iterato xk+1 = q(0) = α3. Il
procedimento viene poi reiterato.
La funzione di Matlab fzero è un polialgoritmo che usa al suo
interno il metodo di bisezione, il metodo delle secanti e il metodo
dell’interpolazione quadratica inversa. Si sceglie un metodo piuttosto
che l’altro in modo da garantire convergenza globale.