function [c,err]=T21_bisec(f,a,b,tol,niter) % % function [c,err]=T21_bisec(f,a,b,tol,niter) %Resuelve una ecuacion no lineal utilizando biseccion % %Entrada % f nombre de la funcion (pasado como caddena de caracteres-fichero) % a,b extremos del intervalo % tol tolerancia de la raiz y de la función respectivamente % niter numero de iteraciones %Salida % c raiz aproximada % err error estimado para la raiz y de la función respectivamente % % Ejemplo: [sol,errores]=T21_bisec(F1,-3,-2,0.001) % F1 con inline if (nargin<5),niter=1000;end % Verificacion de los argumentos de entrada if (nargin<4),tol=[eps eps];end if (length(tol)~=2),tol=[tol(1) tol(1)];end if nargin<3,error('ERROR T21_bisec: Numero insuficiente de argumentos');end % % Valoración de la función en los extremos ya=feval(f,a); yb=feval(f,b); if (ya*yb>0),error('ERROR T21_bisec: la funcion no cambia de signo');end niter=min(niter,max(1,ceil((log(b-a)-log(tol(1)))/log(2)))); % Calculo del numero maximo de iteraciones for k=1:niter c=(a+b)/2;% Calculo del nuevo valor yc=feval(f,c); if abs(yc) < tol(2);break;end; % Valor de la función menor que la tolerancia if (sign(yc)==sign(yb)) % Cambio de los extremos b=c;yb=yc; else a=c;ya=yc; end if abs(b-a)niter,disp('Agotadas las iteraciones sin convergencia');k=niter;end if nargout>1, err=[abs(b-a) yc];end % Errores generados