Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Método de la Regula False


Supongamos f continua en [ a , b ] tal que

f(a) * f(b) <= 0

y además que existe una única raíz t en dicho intervalo.

Algoritmo

Datos : a , b , EPSILON y f(x)

Paso 1) pastc = 2b - a

Paso 2) c = b - f(b) * (b -a)
                        f(b) - f(a)                 

Paso 3) SI ( f(a) * f(c) <= 0) ENTONCES
                b = c
           SINO
                a = c

Paso 4) SI ( Valor Absoluto(c - pastc ) <= EPSILON ) ENTONCES
                raiz = c   y   fin
           SINO
                seguir

Paso 5) pastc = c  y volver a Paso 2)

Implementación

class RegulaFalse
{
    public static double EPSILON = 0.00005;
    public final static int MAX_ITER = 500; 
    
    private double a,b,c,pastc;
    
    private int cont;
    
    public void asignarDatos(double a,double b)
    {
        this.a = a;
        this.b = b;
        this.cont = 0;
    }
    
    public int numIteraciones( )
    {
        return cont;    
    }
    
    public double raiz(Evaluar e)
    {
        pastc = 2*b - a;
        
        while(true)
        { 
            double aux = e.f(b) - e.f(a);
            
            if (aux != 0.0 )
                c = b - ( e.f(b) * (b - a) ) / aux;
            else
                break;
            
            if ( e.f(a) * e.f(c) <= 0 )
                b = c;
            else
                a = c;
            
            if (Math.abs(c - pastc) <= EPSILON) break;

            pastc = c;
            
            cont++;
            if (cont > MAX_ITER ) break;
        }    

        return c;
    }     
}

Programa de prueba

Consiste en encontrar la raíz de la función Exponencial de x, menos x elevado a cinco, usando Regula False, con su respectivas interfaces e implementaciones.

Interfaz

interface Evaluar
{
    double f(double x);    
}

Función a evaluar e implementación de la interfaz

class funcExp implements Evaluar
{
    public double f (double x)
    {
        return Math.exp(x) - Math.pow(x,5);     
    }
}

Código fuente del programa de prueba

class pruebaExp
{
    public static void main(String arg[ ])
    {
        RegulaFalse r = new RegulaFalse( );    
        
        funcExp exp = new funcExp( );
        
        r.asignarDatos(1.0 , 2.0);
        
        System.out.println("\n\tPrograma de prueba para Regula False");
        System.out.println("\t------------------------------------");
        
        System.out.println("\n\tf(1.0) : " + exp.f(1.0));
        System.out.println("\tf(2.0) : " + exp.f(2.0));
        
        System.out.println("\n\traiz : " + r.raiz(exp));
    
        System.out.println("\n\tnumero de iteraciones : " + r.numIteraciones( ));

        System.out.println( );
    }    
}
bajar archivos
anterior siguiente