Metodo della bisezione

Da testwiki.
Vai alla navigazione Vai alla ricerca
Alcuni passi del metodo della bisezione, applicato all'intervallo [a1;b1]. Il punto rosso è la radice della funzione.

In analisi numerica il metodo di bisezione (o algoritmo dicotomico) è il metodo numerico più semplice per trovare le radici di una funzione. La sua efficienza è scarsa e presenta lo svantaggio di richiedere ipotesi particolarmente restrittive. Ha però il notevole pregio di essere stabile in ogni occasione e quindi di garantire sempre la buona riuscita dell'operazione.[1]

Descrizione

Data l'equazione f(x)=0 definita e continua in un intervallo [a,b], tale che f(a)f(b)<0, è allora possibile calcolarne un'approssimazione in [a,b] (vedi teorema degli zeri).

Si procede dividendo l'intervallo in due parti uguali e calcolando il valore della funzione nel punto medio di ascissa a+b2. Se risulta f(a+b2)=0 allora a+b2 è la radice cercata; altrimenti tra i due intervalli [a,a+b2] e [a+b2,b] si sceglie quello ai cui estremi la funzione assume valori di segno opposto. Si ripete per questo intervallo il procedimento di dimezzamento. Così continuando si ottiene una successione di intervalli [a1,b1],[a2,b2],,[an,bn],, incapsulati, cioè ognuno incluso nel precedente. Questi intervalli hanno come ampiezze bnan=ba2n per n=1,2,3,

I valori ai sono valori approssimati per difetto della radice, i valori di bi sono invece i valori della radice approssimati per eccesso. Gli an formano una successione crescente limitata ed i bn formano una successione decrescente limitata. Le due successioni ammettono lo stesso limite che è la radice dell'equazione esaminata.

Come approssimazione della radice α si considera il punto medio degli intervalli, cioè cn=an+bn2, per n=1,2,

L'algoritmo viene arrestato quando f(cn) è abbastanza vicino a 0 e/o quando l'ampiezza dell'intervallo [an,bn] è inferiore ad una certa tolleranza ε. Dunque come stima di α alla fine avremo un certo cn. Si dimostra facilmente che per l'errore commesso en vale la seguente relazione:

|en|=|cnα|ba2n+1.

Un importante corollario è che

limn|en|=0,

quindi la convergenza del metodo è globale.

Se richiediamo |en|ε otteniamo la seguente condizione per n:

nlog2baε1.

Essendo log2103,32 servono in media più di tre bisezioni per migliorare di una cifra significativa l'accuratezza della radice, quindi la convergenza è lenta. Inoltre la riduzione dell'errore a ogni passaggio non è monotona, cioè non è detto che |en+1|<|en| per ogni n=1,2, Non si può definire quindi un vero e proprio ordine di convergenza per questo metodo.

Algoritmo

Di seguito si fornisce lo pseudocodice di questo metodo:[2]

N ← 1
While NNMAX # limite alle iterazioni per impedire loop infiniti
  c ← (a + b)/2 # new midpoint
  If f(c) = 0 or (ba)/2 < TOL then # soluzione individuata
    Output(c)
    Stop
  EndIf
  NN + 1 # incremento del contatore
  If sign(f(c)) = sign(f(a)) then ac else bc # nuovo intervallo
EndWhile
Output("Operazione non riuscita.") # massimo numero di iterazioni superato

Esempio

È possibile utilizzare il metodo di bisezione per trovare la radice del seguente polinomio:

f(x)=x3x2.

Innanzitutto bisogna individuare due numeri a e b tali che f(a) e f(b) hanno segno discorde. Per la funzione summenzionata, a=1 e b=2 soddisfano tale criterio, in quanto

f(1)=(1)3(1)2=2

e

f(2)=(2)3(2)2=+4.

Essendo la funzione continua, le ipotesi del teorema di Bolzano sono rispettate e deve esservi una radice compresa tra [1,2].

Essendo gli estremi dell'intervallo che abbiamo considerato a1=1 e b1=2, il punto medio sarà:

c1=2+12=1,5

Il valore della funzione al punto medio sarà f(c1)=(1,5)3(1,5)2=0,125. Essendo f(c1) negativa, a=1 viene sostituita con a=1,5 per la prossima iterazione affinché f(a) e f(b) abbiano segno discorde. Con la continuazione di questo processo l'intervallo fra a e b diverrà drasticamente sempre più piccolo, sino a convergere nella radice ricercata. Si consulti, in tal senso, la tabella successiva:

Iterazione an bn cn f(cn)
1 1 2 1.5 −0.125
2 1,5 2 1,75 1,6093750
3 1,5 1,75 1,625 0,6660156
4 1,5 1,625 1,5625 0,2521973
5 1,5 1,5625 1,5312500 0,0591125
6 1,5 1,5312500 1,5156250 −0,0340538
7 1,5156250 1,5312500 1,5234375 0,0122504
8 1,5156250 1,5234375 1,5195313 −0,0109712
9 1,5195313 1,5234375 1,5214844 0,0006222
10 1,5195313 1,5214844 1,5205078 −0,0051789
11 1,5205078 1,5214844 1,5209961 −0,0022794
12 1,5209961 1,5214844 1,5212402 −0,0008289
13 1,5212402 1,5214844 1,5213623 −0,0001034
14 1,5213623 1,5214844 1,5214233 0,0002594
15 1,5213623 1,5214233 1,5213928 0,0000780

Dopo tredici iterazioni è evidente che si verifica una convergenza in 1,521 come radice del polinomio.

Note

  1. Burden & Faires 1985, p. 35.
  2. Burden & Faires 1985, p. 29.

Bibliografia

  • Burden, Richard L.; Faires, J. Douglas (1985), "2.1 The Bisection Algorithm", Numerical Analysis (terza edizione), PWS Publishers, ISBN 0-87150-857-5.

Voci correlate

Altri progetti

Template:Interprogetto

Collegamenti esterni

Template:Portale