You are on page 1of 2

Método de la interpolación

El método anterior puede ser optimizado para lograr que el programa converja
más rápidamente. La idea es que en pequeños tramos las funciones se comportan
como líneas rectas. A partir de este supuesto, como se indica en la siguiente
figura, se puede trazar una línea recta entre (x0,y0) y (x1,y1), y estimar x2 como
la raíz de esta línea recta.

El punto de la intesección está dado por:

x2= (x0*y1-x1*y0)/(y1-y0)

A continuación se descarta (x0,y0), se calcula y2=f(x1) y se determina x3 como


raíz de la línea recta que pasa por (x1,y1) y (x2,y2). Y así en adelante, hasta que
yn sea menor que un error suministrado por el usuario.

El programa se modifica de la siguiente forma:


print("error= ? ");
double error= readDouble();
double y0= eval(x0);
double y1= eval(x1);
int cont= 0;
while (abs(y1)>error) {
double xn= (x0*y1-x1*y0)/(y1-y0);
x0= x1;
y0= y1;
x1= xn;
y1= eval(x1);
cont= cont+1;
}
println("raiz aprox.= "+x1);
println("f(raiz)= "+y1);
println("iteraciones= "+cont);
Observe que en este caso, el criterio de detención es distinto del método anterior,
porque el error se estima en el eje y, y no en el eje x.

Resultados:
x0= ? 3
x1= ? 8
error= ? 0.0000000001
raiz aprox.= 1.5174899135519972
f(raiz)= -6.732392421326949E-13
iteraciones= 10
El resultado es que el método tarda sólo 10 iteraciones en encontrar una solución.
Incluso, esta solución es mejor que la del método anterior, puesto que la
evaluación de la función es más cercana a 0 que la anterior.

Las ventajas de este esquema son que (i) converge más rápidamente y (ii) no
necesita puntos en que la función se evalúe con signos opuestos.

You might also like