Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial 7
Tutorial 7
Temas
Anlisis numrico en Java
Bsqueda de races
Integracin
Ejercicios de la clase adicional
Ejercicios de diseo
Posteriormente, podemos utilizar esta interfaz para declarar una clase con una funcin
concreta:
class Function1 implements MathFunction
{
public double func(double x)
{
return x * x - 2; //definicin para una funcin concreta,
//aqu, por ejemplo, representa f(x) = x*x-2;
}
}
Ahora ya podemos definir nuestra funcin de bsqueda de races del siguiente modo:
public class RootFinder
{
public static double rootFindingMethod( MathFunction mathf, ...)
{
// busca la raz para una funcin concreta
...
}
}
Por ejemplo, el siguiente cdigo buscar la raz para Function1( f(x) = x2-2) utilizando el
mtodo de biseccin definido en el siguiente apartado (suponga que el mtodo de
biseccin est definido en la clase RootFinder): // mtodo main() de la clase RootFinder
public static void main(String[] args) {
double root= RootFinder.bisect(new Function1(), -1.0, 2.0, 0.0001);
System.out.println("Raz: " + root);
System.exit(0);
} }
Bsqueda de races
Existen cuatro mtodos "elementales" para buscar races. Entre ellos, el mtodo de
biseccin y el mtodo de Newton se pueden utilizar para resolver problemas reales en
determinadas circunstancias. Los mtodos de la secante y de posicin falsa (regula
falsi) tienen nicamente un valor pedaggico. Consulte la referencia de frmulas de C
para analizar stos y otros mtodos si realmente necesita buscar races; las primeras
pginas del texto de cada mtodo son relativamente legibles y reveladoras.
En el caso de los mtodos de biseccin, secante y posicin falsa, ofrecemos el
razonamiento que se esconde detrs de cada uno de ellos y un fragmento de
pseudocdigo que lo implementa. Este cdigo es meramente ilustrativo, no es fiable y
no debe utilizarse para problemas reales.
Biseccin
Comience con un intervalo conocido para acotar una raz.
Divdalo por la mitad, para reducir el intervalo a la mitad conocida y
contener una raz. Repita esta accin hasta que el intervalo sea lo
suficientemente pequeo
public static double bisect( MathFunction f, double x1, double x2, double epsilon)
{
double m;
for (m= (x1+x2)/2.0; Math.abs(x1-x2)> epsilon; m= (x1+x2)/2.0)
if (f.func(x1)*f.func(m) <= 0.0)
x2= m;
// Utiliza el subintervalo izquierdo
else
x1= m;
// Utiliza el subintervalo derecho
return m;
}
Secante
Uno de los mtodos de bsqueda de races, el mtodo secante, comienza con un
intervalo conocido para contener una raz. Llama a los puntos finales del intervalo x1 y
x2. El mtodo funciona ajustando una lnea recta entre los dos puntos actuales (x1,
f(x1)) y (x2, f(x2)) y buscando el punto x* en el que la lnea interseca el eje x. El punto
final x1 se restablece con el valor de x2. Por su parte, el punto x* pasa a ser el nuevo
punto final (x2). Este procedimiento se repite hasta que, o bien el intervalo es muy
pequeo, o si se encuentra una raz de la funcin. A continuacin se incluye el cdigo
para implementar el mtodo.
comenzar con x1 y x2
ajustar una lnea recta entre f(x1) y f(x2)
buscar x*, la raz de la lnea recta
si x* se aproxima a x2, devolver el valor como la raz de la ecuacin original
De lo contrario, restablecer el valor de x1 con x2 y x2 con x* e intentar ejecutar
el mtodo de nuevo.
public static double secant(MathFunction f, double x1, double x2, double epsilon)
{
double root = x1;
double y1, y2;
while (Math.abs(x2 - x1) > epsilon)
{
y1 = f.func(x1);
y2 = f.func(x2);
root = x1-y1*(x2-x1)/(y2-y1);
x1 = x2;
x2 = root;
}
return root;
}
Posicin falsa (regula falsi)
El mtodo de posicin falsa es prcticamente igual que el mtodo secante. La
diferencia reside en que cuando el punto x* pasa a ser uno de los puntos finales del
siguiente intervalo, el otro punto final es cualquier de los x1 y x2 que garantice que el
nuevo intervalo sigue conteniendo una raz de la funcin, esto es, el mtodo de
posicin falsa selecciona el punto previo para mantener acotado el cero en lugar de
utilizar siempre slo los dos ltimos puntos.
comenzar con x1 y x2
ajustar una lnea recta entre f(x1) y f(x2)
buscar x*, la raz de la lnea recta
si f(x*) se aproxima a 0, devolver el valor x* como la raz de la ecuacin original
De lo contrario, restablecer (x1, x2) en (x1, x*) o en (x*, x2) (el nuevo intervalo
que contiene una raz de la funcin) e intentar ejecutar el mtodo de nuevo.
public static double regulaFalsi(MathFunction f, double x1, double x2, double epsilon)
{
double y1, y2, root, yroot;
do {
y1 = f.func(x1);
y2 = f.func(x2);
root = x1-y1*(x2-x1)/(y2-y1);
yroot = f.func(root);
if (yroot*y2 < 0.0)
x1=root;
else
x2=root;
} while (Math.abs(yroot)>epsilon);
return root;
}
Newton
Iniciar en el mismo punto x del eje x
ajustar una lnea tangente a f(x) en x
obtener la solucin para el punto y en la interseccin de la tangente con el eje x
repetir el proceso hasta que |x-y| < epsilon, y devolver y
Este cdigo est disponible en el material de clase.
Integracin
La integracin numrica se utiliza en el clculo de integrales definidas. Los mtodos
elementales de integracin numrica se basan en el sumatorio de todas las reas
pequeas (secciones) de la curva de una funcin, y entre dos lmites x1 y x2.
Segn se calcule cada rea del segmento, obtendremos los siguientes mtodos
elementales o pedaggicos:
Regla rectangular
El mtodo se basa en las reas de rectngulos. El rea de cada uno se calcula
como:
o
, donde
es el rea del
segmento A.
Regla trapezoidal
Este mtodo es igual de sencillo que el de la regla rectangular, pero a menudo resulta
mucho ms preciso. Est basado en las reas de trapezoides. El rea de cada segmento
A se calcula como:
Regla de Simpson
La regla de Simpson utiliza 3 puntos para aproximar la funcin con un
polinomio de segundo grado. El rea de cada segmento se calcula como:
double h = (b - a) / nPanels;
for(int i=1; i <= nPanels; i++)
{
answer += (f.func(x) + 4 * f.func(x + h / 2) + f.func(x + h)) / 6;
x = a + i * h;
}
return h * answer;
}
Para resolver problemas reales, debe utilizar la ampliacin de la regla de Simpson, que
es la versin utilizable ms sencilla. El mtodo ampliado de Simpson se trata en la
Clase nmero 20 del material de clase.
Ejercicios de diseo
Realice el diseo de las tres clases siguientes: RootFinder, Integration y
NumericalTest. RootFinder implementar versiones elementales de los tres
mtodos de bsqueda de races (biseccin, secante y posicin falsa de los
apuntes de las clases adicionales, no del material de clase).
Integration implementar versiones elementales de los tres mtodos de
integracin (rectangular, trapezoidal y Simpson).
Y NumericalTest contar con un mtodo main para probar los tres mtodos de
bsqueda de races y buscar la raz para:
f1(x) = x5 + 4x3 + 7x - 10; (buscar la raz en el intervalo -1.0, 2.0, con
epsilon= 0.0001)