MatLabMorena

miércoles, 27 de febrero de 2008

Metodo de la Biseccion

fprintf('\t\tmetodo de biseccion\n');
fun=input('ingrese la funcion:','s');
a=input('ingrese el punto inicial:');
b=input('ingrese el punto final:');
tol=input('ingrese la tolerancia:');
it=0;
x=a;
f_a=eval(fun);
x=b;
f_b=eval(fun);
if(f_a*f_b>0)
fprintf('\t\tEn este intervalo no hay raices\n');
fprintf('\t\tBuscar otro intervalo\n');
return
else
n=ceil(log((b-a)/tol)/log(2));
fprintf('\n=%10.6f\n',n);
fprintf(' it a b c f(a) f(b) f(c) abs(b-a)/2\n');
while 1
it=it+1;
c=(a+b)/2;
x=c;
f_c=eval(fun);
fprintf('%5.0f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f %10.9f\n',it,a,b,c,f_a,f_b,f_c,abs(b-a)/2);
if(abs(b-a)/2<=tol)
fprintf('n se satisface la tolerancia\n');
break end if(it>n)
fprintf('\numero de iteraciones excedido');
break
end
if(f_c*f_b<=0) a=c;
f_a=f_c;
else b=c;f_b=f_c;
end
end
fprintf('La raiz pedida es= %10.6f\n',c)
fprintf('La tolerancia es= %10.6f\n',abs(b-a)/2);
x=-100:0.1:100;
ezplot(fun),
grid on end


Ejemplo:

metodo de biseccion
ingrese la funcion:
3*x-2+exp(x)-x^2
ingrese el punto inicial:
0
ingrese el punto final:
1
ingrese la tolerancia:
10^(-5)

= 17.000000



n se satisface la tolerancia

La raiz pedida es= 0.257530

La tolerancia es= 0.000008

1 comentario:

Unknown dijo...

EL PSEUDOCODIGO ESTA EXCELENTE SOLO FALTA UBICAR BIEN EL FIN DE UN CICLO, PUESTO QUE EL END ESTA EN EL LUGAR EQUIVOCADO EL RESTO CORRIO BIEN