Temas:
en donde la función f(x) y los valores a y b son conocidos.
En este tipo de problemas se pueden obtener dos tipos de soluciones:
en donde delta=(a-b)/n. Si n es suficientemente grande (o equivalentemente delta es suficientemente pequeño), el área de los trapecios será aproximadamente el área pedida. El área de los trapecios se calcula de la siguiente forma:
Programa:
Esta solución es análoga a la que se programó para buscar los ceros
de una función. El problema de esta solución es que sucede cuando
se requiere calcular la integral de varias funciones distintas. Hay
que programar una función para calcular el área de cada función.
double area(double a, double b, int n) {
double delta= (b-a)/n;
double sum= (eval(a)+eval(b))/2; // 1/2*(f(a)+f(b))
double x= a;
for (int i=1; i<n; i++) { // + f(a+i*delta), con i=1 ... n-1
x+= delta;
sum+= eval(x);
}
return delta*sum;
}
double eval(double x) {
...
return ...;
}
Con esta clase ahora es posible calcular en un solo programa el
área de sin(x), de exp(x) y de x^k:
class Funcion extends Program {
double eval(double x) {
return 0.0;
}
double area(double a, double b, int n) {
// el mismo método de antes
return ...;
}
}
(Ver el programa completo en Trapecios.java.)
class FunSin extends Funcion {
double eval(double x) {
return sin(x);
}
// area se hereda
}
class FunExp extends Funcion {
double eval(double x) {
return exp(x);
}
// area se hereda
}
class FunXk extends Funcion {
int k;
FunXk(int k) {
this.k= k;
}
double eval(double x) {
return pow(x, k);
}
// area se hereda
}
...
void run() {
println("area sin(x)= " + new FunSin().area(0.0, PI/2, 100));
println("area exp(x)= " + new FunExp().area(0.0, 1.0, 100));
println("area x^3= " + new FunXk(3).area(0.0, 1.0, 100));
}
En la clase Funcion también se pueden incluir otros métodos para:
Cada subintervalo entre xi y x(i+2), con i un entero par, se aproxima por un polinomio de la forma:
en donde ai, bi y ci se calcula de tal forma que:
Al resolver el problema se llega a una formula bastante simple para el área:
Tarea:
Escriba el método simpson que calcula el área utilizando el método de simpson.
(Compare su solución con el programa Simpson.java.)