Sie sind auf Seite 1von 5

function raiz=biseccion(fun_ex2,a,b,imax)

%biseccion

%fun_ex5=funcion de prueba

%a,b=extremos del intervalo

%imax=maximo numero de iteraciones

%Resultados:

%raiz=solucion

%Forma de ejecutar el programa (en la ventana de comandos)

% biseccion('fun_ex5',-1,0,50) (es un ejemplo)

format long

error=0.001;

k=1;

m(1)=(a+b)/2;

fprintf(' Iter a b Pto. medio Err.Abs. \n');

fprintf('%8d %10.10f %10.10f %10.10f\n',...

k,a,b,m(1));

fxa=feval(fun_ex2,a); % evalua la funcion en x=a

fxb=feval(fun_ex2,b);

fxm=feval(fun_ex2,m(1));

if fxa*fxb>0 %test inicial

disp('LIMITES DEL INTERVALO INADECUADOS'); return

elseif fxa*fxm<0

b=m(1);

fxb=fxm;

elseif fxa*fxm>0
a=m(1);

fxa=fxm;

end

for k=2:imax

m(k)=(a+b)/2;

dif(k)=abs(m(k)-m(k-1))/abs(m(k)); %(calculo del error relativo)

fxa=feval(fun_ex2,a);

fxb=feval(fun_ex2,b);

fxm(k)=feval(fun_ex2,m(k));

fprintf('%8d %10.10f %10.10f %10.10f %10.10f\n',...

k,a,b,m(k),dif(k));

if fxa*fxm(k)<=0

b=m(k);

fxb=fxm(k);

else

a=m(k);

fxa=fxm(k);

end

if dif(k)<error, break

else

end

end

% Recuerde: feval(f,a)......... evalua la funcion f en el punto a


function y=fun_ex2(x)

y=(x./(1-x)).*sqrt((6./(x+2)))-0.05;

falsa posicin

function raiz=regulafalsi(fun_ex2,a,b,imax)

%regula falsi

%fun_ex2=funcion de prueba

%a,b=extremos del intervalo

%imax=maximo numero de iteraciones

%Resultados:

%raiz=solucion

%Forma de correr el programa(en la ventana de comandos):

% regulafalsi('fun_ex2',-1,0,50)

error=0.001;

k=1;

fxa=feval(fun_ex2,a);

fxb=feval(fun_ex2,b);

w(1)=(fxb*a-fxa*b)/(fxb-fxa);% calculo de la primera iteracion formula 1

%dif(1)=0;

fprintf(' Iter a b aproxim. Err.Abs. abs(f(xr))\n');

fprintf('%5d%10.5f%10.5f%10.5f\n',...

k,a,b,w(1));

fxw=feval(fun_ex2,w(1));

if fxa*fxb>0

disp('LIMITES DEL INTERVALO INADECUADOS'); return

elseif fxa*fxw<0
b=w(1);

fxb=fxw;

elseif fxa*fxw>0

a=w(1);

fxa=fxw;

end

for k=2:imax

w(k)=(fxb*a-fxa*b)/(fxb-fxa);

dif(k)=abs(w(k)-w(k-1))/abs(w(k));

fxa=feval(fun_ex2,a);

fxb=feval(fun_ex2,b);

fxw(k)=feval(fun_ex2,w(k));

ab(k)=abs(fxw(k));

fprintf('%5d%10.5f%10.5f%10.5f%10.5f%10.5f\n',...

k,a,b,w(k),dif(k),ab(k));

if fxa*fxw(k)<=0

b=w(k);

fxb=fxw(k);

else

a=w(k);

fxa=fxw(k);

end

if dif(k)<error, break

else

end

end
raiz=w(k);

Das könnte Ihnen auch gefallen