Processing math: 100%

Método de la Bisección

Bisección

Ceros de Funciones

Problema:

Dada f:RR, encontrar x tal que

f(x)=0

Método de la Bisección

El método de la Bisección está basado en el siguiente teorema:

Teorema del valor intermedio : Si f:RR es una función continua en un intervalo [a,b], Entonces para cada u tal que f(a)<u<f(b), entonces existe almenos un x0(a,b) tal que f(x0)=u.

De esta manera si tenemos una función f y un intervalo [a,b] en el que f(a)f(b)<0 es decir donde f(a)<0<f(b)   o   f(a)>0>f(b), entonces existe almenos un x(a,b) tal que f(x)=0

El método:

Supongamos que tenemos un intervalo [a0,b0] tal que f(a0)f(b0)<0 definimos

  • m0:=a0+b02 se induce una bisección al intervalo [a0,b0]: [a0,m0] y [m0,b0]
  • verificamos en cuál de estos se cumple la condición: f(a0)f(m0)<0 f(m0)f(b0)<0 es decir, en cuál de los intervalos se encuentra el cero de f.
  • Redefinimos el intervalo [a0,b0]
In [1]:
f  =@(x) x.^5+x.^4-5*x.^2+2*x.-10
f =

@(x) x .^ 5 + x .^ 4 - 5 * x .^ 2 + 2 * x - 10

In [2]:
fplot(f,[0 2])
In [3]:
function [x_0,N] =Bisec(a_0,b_0,f,eps)
x_0=(a_0+b_0)/2;
N=1;
    while abs(f(x_0))>eps  %Tolerancia
       m_0=(a_0+b_0)/2;
       
        if f(a_0)*f(m_0)<0
            b_0=m_0;
            x_0=m_0;
        end

        if f(m_0)*f(b_0)<0
            a_0=m_0;
            x_0=m_0;
        end
                
        N=N+1;
    end
end
In [4]:
a=0;
b=2;
f
[x_0,N] =Bisec(a,b,f,.00001)
f(x_0)
f =

@(x) x .^ 5 + x .^ 4 - 5 * x .^ 2 + 2 * x - 10

x_0 =  1.6662
N =  21
ans =   5.8576e-006
In [5]:
k=14;
epss=logspace(-k,-1,10*k+1);
N=zeros(1,length(eps));
t=zeros(1,length(eps));

a=0;
b=2;
f;
for i=1:length(epss)
    [x_0,n] =Bisec(a,b,f,epss(i));
    
    N(i)=n;
    zer(i)=abs(f(x_0));
end
In [9]:
subplot(1,2,1), semilogx(epss,N,'-o')
title('Numero de iteraciones contra tolerancia')
xlabel('\epsilon')
ylabel('N ')

subplot(1,2,2), loglog(epss,zer,'-o')
title('Valor de la funcion en x^{*} contra tolerancia')
xlabel('\epsilon')
ylabel('f(x^{*})')