martes, 17 de enero de 2012

Bisección en Matlab


%bisección
clear all; close all; clc;
fun=input('Ingrese la función f(x) entre comillas: ');
f=inline(fun);
a=input('Ingrese el límite inferior del intervalo: ');
b=input('Ingrese el límite superior del intervalo: ');
tol=input('Ingrese la tolerancia: ');
maxit=input('Ingrese el máximo de iteraciones: ');


fa=feval(f,a);
fb=feval(f,b);
k=0;


if fa*fb>0
    error('la función tiene el mismo signo en ambos extremos')
end


while abs(b-a)>tol & k<maxit
    if fa*fb==0
        
        if fa==0
            s=a;
            break
        else
            s=b;
            break
        end
        
    else
        
        k=k+1;
        s=(a+b)/2;
        fs=feval(f,s);
        if fa*fs<0
            b=s;
            fb=feval(f,b);
        else
            a=s;
            fb=feval(f,a);
        end
    end
end


disp('la solución es')
disp(s)


if abs(b-a)>tol
    error('Se alcanzó el número máximo de iteraciones')
end


disp(['se calculo en ' num2str(k) ' iteraciones'])

1 comentario: