Você está na página 1de 6

Ceros de una función: El método de la

bisección
Antonio Rosales Garibay*

14 de febrero de 2018

Resumen
Los ceros de una función son los puntos en los que la gráfica corta al eje x. Encontrar
los ceros o raı́ces de una función equivale a resolver la ecuación f (x) = 0.
En este reporte se estudiará uno de los problemas básicos de la aproxiamción numérica:
el problema de la busqueda de raı́ces. Consiste en obtener una raı́z o solución de una
ecuación de la forma f (x) = 0 para una función dada f . Al número x se le llama
también cero de f .
El problema de encontrar una aproximación a la raı́z de una ecuación se remonta por
lo menos al ao 1700 a.C. Una tabla cuneiforme que pertenece a la Yale Babylonian
Collection , y que data de este periodo,
√ da un número sexagesimal (base 60) equivalente
a 1,414222 como aproximacion a 2, resultado que tiene una precisión de hasta 10−5 .
La primera técnica, que se basa en el teorema del valor medio, se conoce con el nombre
de método de bisección o de búsqueda binaria.
* tonyrosalesgaribay@hotmail.com

1
1. Teorı́a del programa
Supongamos que f es una función continua definida en el intervalo [a, b] con f (a) y f (b) de signos diferentes.
De acuerdo con el teorema del valor medio, existe un número p en (a, b) tal que f (p) = 0. Si bien el procedimiento
se aplica aunque exista mas de una raı́z en el intervalo (a, b), por razones de simplicidad suponemos que la raı́z de
ese intervalo es única. El método requiere dividir varias veces a la mitad los subintervalos de [a, b] y, en cada paso,
localizar la mitad que contenga a p.
Para empezar, supongamos que a1 = a y b1 = b, y sea p1 el punto medio de [a, b]; es decir,
b1 − a1 a1 + b1
p1 = a1 + = (1)
2 2
Si f (p1 ) = 0, entonces p = p1 ; de no ser ası́, entonces f (p1 ) tiene el mismo signo que f (a1 ) o f (b1 ). Si f (p1 )
y f (a1 ) tienen el mismo signo, entonces pϵ(p1 , b1 ) y tomamos a2 = p1 y b2 = p1 . Después volvemos a aplicar el
proceso al intervalo [a2 , b2 ]. Esto nos dá el método que se describirá en el algoritmo más adelante, y que se aprecia
gráficamente en la siguiente figura.

Figura 1: División de los intervalos en el método de la bisección.

Para conocer el error relativo de la aproximación, se usa la relación:

|p − pn |
<ϵ (2)
|p|
El error absoluto viene dado por:

|p − pn | (3)
donde p es el valor exacto de la raı́z, pn el valor de f (pn ) = 0. n es el número de iteraciones y ϵ es la tolerancia
o el margen de error.
Como no siempre es posible conocer el cero dela función y, además, es la intención del programa, el error se acota
por el siguiente teorema.
Teorema: Supongamos que f ϵC[a, b] y f (a) ∗ f (b) < 0. El método de la bisección (descrito en el algoritmo de la
siguiente sección) genera una sucesión p∞n=1 que aproxima un cero de p de f , tal que

b−a
|pn − p| ≤ (4)
2n
Es importante sealar que el teorema anterior solo da una cota del error de aproximación y que esta puede ser
extremadamente conservadora, es decir, que el error real puede ser mucho menor.

2
2. Estructura del programa
El código del programa para el método de la bisección se implementó en FORTRAN 90, bajo la dirección de
siguiente algoritmo:
Bisección:
Para obtener una solución a f (x) = 0 dada la función f continua en el intervalo [a, b], donde f (a) y f (b) tienen
signos opuestos:
ENTRADA extremos a, b; tolerancia TOL; número máximo de iteraciones N0 .
SALIDA solución aproximada p o mensaje de error.
Paso 1 Tome i = 1;
—————- F A = f (a).
Paso 2 Mientras i ≤ N0 haga los pasos 3-6.
———-Paso 3 Tome p = a + (b − a)/2; (Calcule pi )
—————————- F P = f (p)
———–Paso 4 Si F P = 0 o (b − a)/2 < T OL entonces
—————————- SALIDA(p); (Procedimiento terminado satisfactoriamente)
—————————- PARAR
———–Paso 5 Tome i = i + 1
———–Paso 6 Si F A ∗ F P > 0 entonces tome a = p; (Calcule ai , bi )
————————— F A = F P
——————— si no tome b = p.
Paso 7 SALIDA(’El método fracasó después de N0 , iteraciones, N0 =′ , N0 );
———— (Procedimiento terminado sin éxito.)
———— PARAR
A continuación se muestra el código del programa.
!Este programa calcula una raiz de una funcion en un intervalo dado por el algoritmo de la biseccion

program biseccion

integer :: n, i
real :: a, b, p, fp, fa, TOL, erroracotado

write(*,*)’Numero de iteraciones’
read(*,*) n
write(*,*)’Dame la cota inferior del intervalo’
read(*,*)a
write(*,*)’Dame la cota superior del intervalo’
read(*,*) b
Write(*,*)’Dame la tolerancia’
Read(*,*) TOL

p=(a+b)/2
erroracotado = abs(b-a)/(2**n)

do i=1,n
Write(*,*)’Iteracion no.’,i
fp=sqrt(p)-cos(p)
!fp=p**3+4*p**2-10
Write(*,*)’f(p)=’,fp

!fa=(a)**3+4*((a)**2)-10
fa=sqrt(a)-cos(a)
v=(fa)*(fp)
Er=abs(fp)

if(fp==0 .or. Er<=TOL)then


Write(*,*) ’La raiz es’, p,’con un error(acotadp) de’, erroracotado
exit

3
else
if(v>0)then
a=p
p=(a+b)/2

else if(v<0)then
b=p
p=(a+b)/2

end if

end if

end do

end program

Para armar el programa ocupamos dos enteros y cinco reales. El programa primeramente pide los datos de
numero de iteraciones, extremos del intervalo y la tolerancia. Después parte el intervalo principal en dos, calcula la
cota de error con el teorema descrito arriba y entra al ciclo a evaluar las f (p) y las f (a) de la función programada
internamente.
En el primer if, si se cumple el Paso 4 del algoritmo, el programa ya encontro la raı́z y el proceso termina; si no,
realiza los Paso 5 y Paso 6 para seguir partiendo el intervalo hasta que encuentre su cero y cumpla que f (pi ) = 0

3. Funcionamiento del programa



El código fue probado con dos funciones, a saber, f (x) = x3 + 4x2 − 10 en [1, 2] y f (x) = x − cos(x) en [0, 1].
Para la primera función, tiene una raı́z en el intervalo dado, ya que f (1) = −5 y f (2) = 14 or lo que cumple con
la condición para aplicar bisección. En la gráfica de esta función podemos ver que, en efecto, existe una raı́z en ese
intervalo.

Figura 2: Gráfica de f (x) = x3 + 4x2 − 10, donde se aprecia que en el intervalo [1, 2] existe un cero de la función.

Al compilar el programa nos queda lo siguiente:

tony@Tony-Lenovo:~$ gfortran biseccion.f90 -o bbb


tony@Tony-Lenovo:~$ ./bbb
Numero de iteraciones
13
Dame la cota inferior del intervalo

4
1
Dame la cota superior del intervalo
2
Dame la tolerancia
0.001
Iteracion no. 1
f(p)= 2.37500000
Iteracion no. 2
f(p)= -1.79687500
Iteracion no. 3
f(p)= 0.162109375
Iteracion no. 4
f(p)= -0.848388672
Iteracion no. 5
f(p)= -0.350982666
Iteracion no. 6
f(p)= -9.64088440E-02
Iteracion no. 7
f(p)= 3.23562622E-02
Iteracion no. 8
f(p)= -3.21502686E-02
Iteracion no. 9
f(p)= 7.24792480E-05
La raiz es 1.36523438

Se aprecia que en la iteración no. 9 alcanza el cero con la tolerancia pedida. Arroja un valor de 1.36523438 y el
valor real es 1.36523000 por lo que alcanzó una precisión de 5 cifras significativas. Las iteraciones se imprimen para
ver en cual se llega o aproxima a f (p) = 0.
Ahora, con la segunda función, f (0) = −1 y f (1) = 0,459697 por lo que cumple para hallar su cero con la bisección.
Veamos su gráfica:


Figura 3: Gráfica de f (x) = x − cos(x), donde se aprecia que en el intervalo [0, 1] existe un cero de la función.

Al correr el programa en la Terminal, tenemos:

tony@Tony-Lenovo:~$ gfortran biseccion.f90 -o bbb


tony@Tony-Lenovo:~$ ./bbb
Numero de iteraciones
15
Dame la cota inferior del intervalo
0
Dame la cota superior del intervalo
1

5
Dame la tolerancia
0.001
Iteracion no. 1
f(p)= -0.170475781
Iteracion no. 2
f(p)= 0.134336531
Iteracion no. 3
f(p)= -2.03936696E-02
Iteracion no. 4
f(p)= 5.63212633E-02
Iteracion no. 5
f(p)= 1.78067088E-02
Iteracion no. 6
f(p)= -1.33180618E-03
Iteracion no. 7
f(p)= 8.22776556E-03
Iteracion no. 8
f(p)= 3.44556570E-03
Iteracion no. 9
f(p)= 1.05625391E-03
Iteracion no. 10
f(p)= -1.37925148E-04
La raiz es 0.641601562

A pesar de haber puesto un máximo de 15 iteraciones, la máquina consigue encontrar la raı́z dentro de las primeras
10. Arroja un valor de 0.641601562 y un valor mas aproximado es 0.641714370 y vemos que es exacto en 4 cifras
significativas, por lo que es una buena aproximación.

Referencias
[1] Burden, Richard L., Douglas Faires,J. Análisis Numérico, 7a Edición, Editorial Thomson Learning, 2002, Cap.
2, pp. 48-53.

Você também pode gostar