Ceros de Funciones¶
Problema:¶
Dada $f:\mathbb{R}\rightarrow \mathbb{R}$, 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:\mathbb{R}\rightarrow \mathbb{R} $ 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 $ x_0 \in (a,b) $ tal que $$f(x_0) = 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 )\ \ \text{ o }\ \ f ( a ) > 0 > f ( b ),$$ entonces existe almenos un $x^* \in (a,b)$ tal que $$f(x^*) = 0$$
El método:
Supongamos que tenemos un intervalo $[a_0, b_0]$ tal que $f(a_0)f(b_0)<0$ definimos
- $m_0:=\frac{a_0+b_0}{2}$ se induce una bisección al intervalo $[a_0, b_0]$: $[a_0, m_0]$ y $[m_0, b_0]$
- verificamos en cuál de estos se cumple la condición: $$f(a_0)f(m_0)<0$$ $$f(m_0)f(b_0)<0$$ es decir, en cuál de los intervalos se encuentra el cero de $f$.
- Redefinimos el intervalo $[a_0, b_0]$
In [1]:
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)
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^{*})')