|
|||||||
|
|
|
|||||
|
|
|||||||
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