NEWTON

NEWTON

martes, 20 de septiembre de 2011

Tercer Programa: Regla Falsa

REGLA FALSA:
Otro método que comúnmente se emplea es el de Regula Falsa. Este método también tiene otras denominaciones, como son: Regla falsa, Posición falsa o Interpolación Lineal. Su nombre original que está en latín, denota su antigüedad. La idea del método es bastante similar al del método de bisección. Requiere un intervalo que cumpla los mismos supuestos que el método de Bisección. En lugar de obtener el punto medio en cada iteración, el método busca reemplazar la función original por otra a la cual sea más simple localizar su raíz. Dado que comenzamos con solo un intervalo, es decir, sólo tenemos 2 puntos, buscamos la curva más simple que pase por estos 2 puntos. Lógicamente usamos una línea recta. Entonces en vez de obtener puntos medios en este método se halla las raíces de las rectas que pasen por
los puntos que determinen nuestros intervalos.

Codigo para Octave:
%Metodo de la Regla Falsa
disp('METODO :  REGLA FALSA');
disp('por:');
disp('Carolina Perez Gaviria');
disp('Jennifer Olano Arrieta');
disp('Carlos Trujillo');
disp('  ');
format long;
Xi=input('Cual es el valor de Xi: ');
Xu=input('Cual es el valor de Xu: ');
tol=input('Ingrese la tolerancia: ');
Ite=input('Cantidad de iteraciones: ');
Fun=input('ingrese la ecuacion entre comillas = ','S');
f=inline(Fun);
Yi=f(Xi);
Yu=f(Xu);
if Yi==0
    fprintf('Xi es raiz: ');
else
    if Yu==0
        fprintf('Xu es raiz: ');
    else
        if Yi*Yu>0
            fprintf('No existe raiz: ');
        else
            Xm=(Xu)-((f(Xu)*(Xi-Xu))/(f(Xi)-f(Xu)));
            Ym=f(Xm);
            Error=tol+1;
            Cont=1;
            M=[Cont,Xi,Xu,Xm,Ym,Error];
            while Ym~=0 & Error>tol & Cont<Ite  %expresion
                auxiliar=Xm;                    %orden
                if Yi*Ym<0
                    Xu=Xm;
                    Yu=Ym;
                else
                    Xi=Xm;
                    Yi=Ym;
                end
                Xm=(Xu)-((f(Xu)*(Xi-Xu))/(f(Xi)-f(Xu)));
                Ym=f(Xm);                               
                Error=abs(Xm-auxiliar);                 
                Cont=Cont+1;                            
                M(Cont,1)=Cont;                        
                M(Cont,2)=Xi;                           
                M(Cont,3)=Xu;                           
                M(Cont,4)=Xm;                           
                M(Cont,5)=Ym;                           
                M(Cont,6)=Error;                             
            end
            if Ym==0
                fprintf('Xm es raiZ: ');
            else
                if Error<tol
                    fprintf('Xm es raiz y tiene un valor de %g con un error de %g: ',Xm,Error),
                else
                    fprintf('No hay soluci—n en las iteraciones dadas: ');
                end
            end
            fprintf('           xi       Xu        Xm       Ym       Error: ')
            disp(M);
        end
    end
end

1 comentario: