Práctico 3: método de la bisección

Descripción general

El método de bisección, conocido también como de corte binario, de par- tición de intervalos o de Bolzano, es un tipo de busqueda incremental en el que el intervalo se divide siempre a la mitad. Si la función cambia de signo sobre el intervalo, se evalúa el valor de la función en el punto medio. La po- sición de la raíz se determina situándola en el punto medio del subintervalo, dentro del cual ocurre un cambio de signo. El proceso se repite hasta obtener una mejor aproximación. Para el método de bisección tenemos el siguiente código realizado en Octave y compatible con MatLab.

Pseudocódigo

Entradas: f, a, b, Nmax, tol

fa = f(a)

if fa = 0
 "a es raíz aproximada"
 stop
end if

fb = f(b)

if fb = 0
 "b es raiz aproximada"
 stop
end if

if signo(fa) = signo (fb)
 stop
end if

error = b-a
c = (a+b)/2

fc = f(c)

k = 1

while k <= Nmax and error > tol y fc != 0
  aux = c
  if signo(fc) != signo (fa)
    b = c
    fb = fc
  else
    a = c
    fa = fc
  end if

  c = (a + b) / 2
  fc = f(c)
  error = |c-aux|
  k = k + 1
end while

if fc = 0
  "raiz aproximada x = c"
else if error <= tol
  "raiz aproximada x=c con error = error"
else
  "superado #maximo de iteraciones"
end

stop

Implementación

Implementar el algoritmo anterior en la m-function bisect.m de protótipo siguiente:

function [c,fc,err] = bisect(a,b,delta,nmax)

En esta implementación no se pasa f como parámetro, sino que se la pide al usuario al principio de la función bisect. Empezar la implementación como sigue:

function [c,fc,err] = bisect(a,b,delta,nmax)
  f = input("ingrese f(x): ", "s");
  f = inline(f);
  err = 0;
  ya = f(a);
  yb = f(b);
  ...
end

Para pasar una función como parámetro referirse a: