Está en la página 1de 1

function biseccion_n(f_nombre,a,b);

f_nombre;
x=[a:.0001:b];
yp=feval(f_nombre,x);
plot(x,yp);xlabel('x');ylabel('y');title('Mtodo de biseccin');grind;pausa;close;
a=input('Introduce el limite inferior de tu intervalo: ');
b=input('Introduce el limite superior de tu intervalo: ');
tol=input('Introduce el grado de tolerancia que deseas obtener: ');
N=input('Introduce el numero de iteraciones que deseas realizar: ');
clc;
disp('"Mtodo de biseccin"');
disp
('---------------------------------------------------------------------------------------');
disp('| NO | a |
b
|
c | f(a) |
f(b)
| f(c)
|');
n=0;
f_a=feval(f_nombre,a);
f_b=feval(f_nombre,b);
x=[a:.001:b];
yp=feval(f_nombre,x);
plot(x,yp,'r');xlabel('x');ylabel('y');grid;
title('"Metodo de biseccion"'),hold on;
ymin=min(yp);ymax(yp);wid_y=ymax-ymin;
plot([a,a],[f_a,0]);text(a,-0.1*wid_y,'x=a');
plot([b,b],[f_b,0]);text(b,-0.1*wid_y,'x=b');pause;
if(f_a*f_b)>0
disp
('-----------------------------------------------------------------------------------');
disp('No es un intervalo adecuado ya que no cambia de signo');break
else
while n<N
n=n+1;
c=(a+b)/2;
f_c=feval(f_nombre,c);
plot([c,c],[f_c,0],':');plot(c,0,'*');pause;
fprintf('|%3.0f |%10.6f |%10.6f |',n,a,b);
fprintf('%10.6f |%10.6f
|%10.6f
|%10.6f | \n',c,f_a,f_b,f_c);
if(abs(b-a)<=tol)
disp
('---------------------------------------------------------------------------');
disp('Se satisface la tolerancia');break
end
if(n>N)
disp('-----------------------------------------------------------------------');
disp('Se excedio el limite de iteraciones');break
close;
end
if(f_a*f_c<=0)
b=c;
f_b=f_c;
else
a=c;
f_a=f_c;
end
end
disp('-------------------------------------------------------------------------------');
fprintf('Raiz aproximada: %12.6fb \n',c);
end
x=c
plot([x,x],0.05*wid_y,0.2*wid_y);
text(x,0.25*wid_y,'Solucion final');pause;close

También podría gustarte