Metodo di bisezione e iterazioni di punto fisso
In questa pagina 4
Prerequisiti: Funzioni continue su un intervalloTeoremi sulle funzioni continue su un intervallo: zeri (con la bisezione), valori intermedi (f manda intervalli in intervalli), monotonia e continuità, continuità dell'inversa, Weierstrass (su [a, b] ci sono massimo e minimo).Funzioni continue su un intervallo → (teorema degli zeri), Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange → (valor medio), Condizionamento di un problema e stabilità di un algoritmoL'errore finale ha tre origini (dati, troncamento, arrotondamento). Un problema è ben posto se la soluzione esiste, è unica e dipende con continuità dai dati; il numero di condizionamento K = |x f'(x)/f(x)| misura di quanto un errore relativo sui dati si amplifica nel risultato (si perdono circa log10 K cifre). La stabilità riguarda invece l'algoritmo: un algoritmo instabile amplifica gli errori anche su un problema ben condizionato (ricorrenza I_n = 1 − n I_{n−1}); un problema mal condizionato non si salva con nessun algoritmo. Uno schema numerico converge se è consistente e stabile (derivata numerica: troncamento contro arrotondamento).Condizionamento di un problema e stabilità di un algoritmo → (condizionamento di una radice).
Si cerca uno zero di una funzione continua , cioè . Salvo casi particolari (polinomi di grado ) non esiste una formula risolutiva (per , , non si trova con le funzioni elementari): si costruisce una successione che converge ad e ci si ferma quando l'errore è sotto una tolleranza.
Il metodo di bisezione
Teorema (degli zeri). Se è continua in e , esiste con .
L'idea: se cambia segno su la radice sta nell'intervallo; guardando il segno di nel punto medio si capisce in quale metà sta, e si ripete.
Procedura (bisezione). Dato con . Per :
- (punto medio).
- Se ci si ferma. Se si pone , altrimenti .
Ad ogni passo cambia ancora segno nel nuovo intervallo, quindi .
Teorema (stima dell'errore). Il punto medio soddisfa
Dimostrazione. A ogni passo la lunghezza dell'intervallo si dimezza: . Poiché e stanno entrambi in e è il punto medio, ∎.
Quante iterazioni? Per avere basta , cioè È una stima a priori: si sa dall'inizio quante iterazioni servono, indipendentemente da . Per servono per , per , per : ogni 3,3 iterazioni si guadagna una cifra decimale.
Esempio svolto. su : e , quindi c'è una radice ().
Grafico interattivo: f(x) = x³ − x − 2: cambia segno in [1, 2], lo zero è α ≈ 1,5214
| maggiorante | ||||||
|---|---|---|---|---|---|---|
Come si legge una riga: a , ha , come ; quindi la radice è in . A , ha , come : la radice è in .
Osservazioni:
- L'errore non decresce monotonamente (a è dopo ): il maggiorante sì, l'errore effettivo no. Quindi bisezione è "garantita" ma non "uniformemente migliorante".
- Il metodo è robusto: servono solo la continuità e un cambio di segno, non la derivata. Converge sempre a una radice dell'intervallo. Non si può usare per le radici di molteplicità pari (ad esempio in ), dove tocca l'asse senza cambiare segno.
- È lento: la convergenza è lineare con fattore (un bit binario per passo). Per questo la si usa per localizzare la radice e poi si affina con metodi più veloci (Metodo di Newton, metodo delle secanti e ordine di convergenzaOrdine di convergenza p: |e_{k+1}| ≈ C|e_k|^p (p = 1 lineare, p = 2 quadratica: le cifre corrette raddoppiano a ogni passo). Newton x_{k+1} = x_k − f(x_k)/f'(x_k): zero della tangente, ordine 2 per radici semplici con e_{k+1} ≈ f''(α)/(2f'(α)) e_k²; per radici di molteplicità m è solo lineare con tasso (m−1)/m (si recupera con x − m f/f'). Secanti: sostituisce f' con un rapporto incrementale, ordine (1+√5)/2 ≈ 1,618, una sola valutazione di f per passo. Newton richiede un x_0 abbastanza vicino: può ciclare o divergere.Metodo di Newton, metodo delle secanti e ordine di convergenza →).
- Se nell'intervallo ci sono più radici con cambio di segno, converge a una di esse (non si sa quale).
Iterazioni di punto fisso
Si riscrive come . Gli zeri di sono i punti fissi di : . Si sceglie e si itera Se è continua e , allora passando al limite : il limite è un punto fisso.
Per una data ci sono molte riscritture. Per ad esempio , oppure , oppure . Non sono equivalenti dal punto di vista numerico.
Esempio: . La radice di è (il punto in cui le curve e si incontrano).
Grafico interattivo: Punti fissi di g(x) = cos x: l'intersezione tra y = cos x e y = x, α ≈ 0,7391
Si parte da (in radianti) e si itera . Errore :
Il rapporto tra errori successivi tende a un numero costante, : l'errore si moltiplica per a ogni passo. Il segno alterno dice che i valori oscillano attorno ad (si vede nel grafico a "ragnatela": ).
Condizioni di convergenza
Teorema (delle contrazioni, o del punto fisso). Sia derivabile con Allora: (1) ha un solo punto fisso ; (2) per ogni la successione converge ad ; (3) valgono le stime
Dimostrazione (idea). Per il teorema di Lagrange (Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange →) per ogni esiste tra loro con : accorcia le distanze (contrazione).
- Esistenza: è continua con e (perché ), quindi per gli zeri esiste con .
- Unicità: se sono punti fissi, , quindi e .
- Convergenza e stime: , che tende a perché . Inoltre e, sommando la serie geometrica, ; per si ha la stima a priori ∎.
Il caso locale: se è , e , per continuità in un intorno di e l'iterazione converge per abbastanza vicino ad . Se l'iterazione si allontana da (il punto fisso è "repulsivo").
Velocità. Da si ha : la convergenza è lineare con tasso . Quanto più è piccolo, tanto più veloce. Per guadagnare una cifra decimale servono circa iterazioni: per (), per .
Stesso problema, riscritture diverse
Esempio: , .
- . , e . Su è crescente con e , quindi e . Converge, con tasso :
Ogni iterazione dà quasi una cifra decimale in più.
- . , : il punto fisso è repulsivo. Da si ottiene : diverge.
La scelta di è parte del progetto del metodo. Una regola: se la convergenza è più che lineare (è il caso del metodo di Newton, nella prossima nota).
Criteri di arresto
Si ferma l'iterazione quando una di queste grandezze è sotto la tolleranza:
- Incremento . Per una contrazione, l'errore è al più volte l'incremento: se l'errore può essere volte l'incremento. Con vicino a un incremento piccolo non garantisce un errore piccolo.
- Residuo . Vale : se è piccolo (radice quasi multipla, problema mal condizionato) un residuo piccolo non significa errore piccolo. Esempio: , : ma l'errore è .
- Numero massimo di iterazioni, sempre, per evitare cicli infiniti.
Codice
import math
def bisezione(f, a, b, tol):
n = 0
while (b - a) / 2 > tol: # errore di c_n <= (b-a)/2^(n+1)
c = (a + b) / 2
if f(a) * f(c) <= 0: b = c
else: a = c
n += 1
return (a + b) / 2, n
def punto_fisso(g, x0, tol, nmax=200):
x = x0
for k in range(1, nmax + 1):
xn = g(x)
if abs(xn - x) <= tol:
return xn, k
x = xn
return x, nmax
print(bisezione(lambda x: x**3 - x - 2, 1, 2, 1e-6))
print(punto_fisso(math.cos, 1.0, 1e-6))
print(punto_fisso(lambda x: (x + 2)**(1/3), 1.5, 1e-10))Output:
(1.5213804244995117, 19)
(0.7390855263619245, 34)
(1.5213797067927244, 11)Bisezione: passi per (previsti ). Punto fisso con : iterazioni; con : iterazioni per . In MATLAB fzero(@(x) x.^3 - x - 2, [1 2]) combina bisezione e metodi più veloci.
Errori tipici
- Applicare la bisezione senza controllare , oppure su un'intervallo con radice di molteplicità pari.
- Dimenticare che deve mandare in sé: da sola, senza , non basta per la convergenza globale.
- Contare le iterazioni della bisezione dall'errore: ha maggiorante (non ).
- Credere che garantisca la convergenza da ogni : è una condizione locale, vale per abbastanza vicino ad .
Domande d'esame
- Quante iterazioni di bisezione servono per ridurre l'errore sotto partendo da un intervallo di lunghezza ? Risposta: .
- Enunciare il teorema delle contrazioni. Risposta: se e , il punto fisso è unico e converge per ogni con .
- Che ordine ha la convergenza di un'iterazione di punto fisso con ? Risposta: lineare, con tasso .
- Perché il residuo piccolo non basta come criterio di arresto? Risposta: l'errore è circa , grande se è piccola.
Versione ripasso
Bisezione (Funzioni continue su un intervalloTeoremi sulle funzioni continue su un intervallo: zeri (con la bisezione), valori intermedi (f manda intervalli in intervalli), monotonia e continuità, continuità dell'inversa, Weierstrass (su [a, b] ci sono massimo e minimo).Funzioni continue su un intervallo →): continua, . ; si tiene la metà dove cambia segno.
- Esempio su (): () ; () ; , , , (errore ). Per : passi ().
- Robusto (solo continuità e cambio di segno) ma lento (lineare, fattore ); l'errore effettivo non è monotono; non vale con radici di molteplicità pari.
Punto fisso , . Se converge, il limite è punto fisso. Molte riscritture possibili (: , ).
Teorema delle contrazioni: , punto fisso unico, convergenza da ogni , e
- Dimostrazione: Lagrange (Teoremi di Rolle e di LagrangeRolle: f continua su [a,b], derivabile in ]a,b[, f(a) = f(b) ⇒ esiste c in ]a,b[ con f'(c) = 0. Lagrange (valor medio): stesse ipotesi senza f(a) = f(b) ⇒ esiste c con f'(c) = (f(b) − f(a))/(b − a): la tangente in c è parallela alla corda. Conseguenza: su un intervallo f è costante se e solo se f' = 0; su un insieme che non è un intervallo è solo costante a tratti (arctan x + arctan(1/x)).Teoremi di Rolle e di Lagrange →) dà . Esistenza da con ; unicità da ; stime con la serie geometrica.
- Locale: se converge per vicino; se si allontana.
- Velocità: , lineare con tasso .
Esempi.
- , : ; (oscilla). iterazioni per .
- , : , errori (rapporto ), iterazioni per .
- : , da : , diverge.
Passaggi principali.
- Bisezione, numero di iterazioni per intervallo di lunghezza : ; ; (una cifra decimale ogni passi). Errori effettivi del primo esempio: (non monotoni) contro i maggioranti
- Dimostrazione bisezione: e con punto medio, quindi .
- Stima a priori: , poi e . Per su è : la stima è pessimistica ( per , mentre ne bastano ).
- Cifre per iterazione: , cioè per e per .
- , massimo su in : ; , (immagine in ).
Arresto: incremento (errore incremento: con fino a volte), residuo (; a : , errore ), numero massimo di iterazioni. MATLAB: fzero.
Errori tipici: bisezione senza verificare ; senza ; al posto di ; convergenza locale scambiata per globale.
Esercizi su questo argomento
- Esercizio - Bisezione per ex = 3x, numero di iterazioni e intervalli con segni uguali
- Esercizio - Criteri di arresto, incremento contro errore e residuo di (x-1)3
- Esercizio - Newton per x = cos x, confronto con il punto fisso e costante asintotica
- Esercizio - Punto fisso per x = e-x, teorema delle contrazioni e stima a priori
- Esercizio - Tre riscritture di x2 - 5x + 4 = 0 e punti fissi attrattivi