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 Newton


Este método consiste en generar la sucesión

con el criterio de parada a partir de adivinanza inicial X0 suficientemente cerca de t, tal que f(t) = 0

Implementación

class Newton
{
    public static double EPSILON = 0.00005;
    public final static int MAX_ITER = 500;     
    
    private double x;
    
    private int cont;
    
    public void asignarDatos(double xi)
    {
        this.x = xi;
        this.cont = 0;
    }
    
    public int numIteraciones( )
    {
        return cont;    
    }    
    
    public double raiz(Evaluar funcion , Evaluar derivada)
    {
        double temp;
    
        do
        {
            temp = x;

            x -= funcion.f(x) / derivada.f(x);
            
            if (++cont > MAX_ITER ) break;
            
            if(Math.abs(x - temp) <= EPSILON) break;
    
        } while(true);    
    
        return x;
    }     

}

Programa de prueba

Consiste en evaluar una función y su respectiva derivada, usando método de Newton. Para el cálculo de la derivada, se optó por implementar el método derivar en una nueva clase (PolinomioNewton), que extiende a la clase Polinomio y que implementa a la interfaz Evaluar.


Interfaz

interface Evaluar
{
    double f(double x);    
}

Implementación de interfaz

class PolinomioNewton extends Polinomio implements Evaluar
{
    
    public PolinomioNewton(double coef[ ])
    {
        super(coef);
    }
    
    public double f(double x)
    {
        return evaluar(x);     
    }    
    
    public PolinomioNewton derivar(PolinomioNewton p)
    {
        double coef[ ] = p.obtenerCoeficientes( );
        Polinomio tmp = new Polinomio(coef);
        tmp = tmp.derivar(tmp);
        coef = tmp.obtenerCoeficientes( );
        return new PolinomioNewton(coef); 
    }
    
}

Código fuente

class pruebaNewton
{
    public static void impResult(double xo, Newton n, Evaluar funcion, Evaluar derivada)
    {
        n.asignarDatos(xo);
        
        System.out.println("\n\tEvaluacion de punto inicial : " + xo);
        System.out.println("\tf(" + xo + ") : " + funcion.f(xo));
        
        System.out.println("\traiz : " + n.raiz(funcion,derivada));
        System.out.println("\tNumero de iteraciones : " + n.numIteraciones( ));    
    }
    
    public static void main(String arg[ ])
    {
        Newton n = new Newton( );    
        
        /* polinomio : (x-3)(x+2)(x-1) = 6 - 5x - 2x^2 + x^3 */
        double coef[ ] = { 6.0 , -5.0 , -2.0 , 1.0  };
        
        PolinomioNewton fx = new PolinomioNewton(coef);
        
        PolinomioNewton dx = fx.derivar(fx);
        
        System.out.println("\n\tPrograma de prueba para metodo de Newton");
          System.out.println("\t----------------------------------------");
        
        
        System.out.println("\n\tPolinomio : " + fx.toString("x"));
        System.out.println("\n\tDerivada : " + dx.toString("x"));
        
        impResult(2.5  , n , fx,dx);
        impResult( -1.7 , n , fx,dx);
        impResult( 1.4 , n , fx,dx);
        
        System.out.println( );
    }        
}

bajar archivos
anterior siguiente