/* =============================================================================================
Wilfredo Cruz Yarlequé wcruzy@gmail.com
Piura, Perú, Noviembre 28 de 2024
=============================================================================================
Cálculo del área bajo la curva f(x) entre dos límites (x_inicio y x_final) utilizando el
método del trapecio.
Paso 1
Es un cálculo iteractivo que empieza calculando el área se realiza calculando el área de un
trapecio cuyas bases son (fx_inicio), f(x_final) y con altura (x_final - x_inicio)
Paso 2
El siguiente cálculo del área toma dos trapecios, el primero con bases f(x_inicio) y
f(x_medio), y altura (x_final + f_inicio)/2. El segundo trapecio con bases f(x_medio) y
f(final), con altura (x_final + f_inicio)/2. El área total será la suma de la primera área
más la segunda área.
Paso 3
Si la diferencia absoluta del área del paso 1 menos el area del paso 2 es menor o igual al
error_limite (valor que se lee o se determina fijo), habremos llegado al área buscada, caso
contrario, se calculará el área con cuatro trapecios, luego con ocho trapecios y así
sucesivamente hasta encontrar dos áreas calculadas consecutivamente con una diferencia menor
o igual al error_limite
Para la siguiente función:
f(x) = - 3x^3 - 6.25x^2 + 21x + 500
Calcular el área bajo la curva entre 1 y 4 respectivamente con un error de 0.01.
============================================================================================= */
#include <stdio.h>
#include <math.h>
float fx(float);
void main()
{
float a, b;
float m, n, x, area, areai, arean, error;
float l1;
int k;
n = 2.0;
printf("\n---------------------------------------------------\n");
printf("Ingrese limite inferior: ");
scanf("%f", &a);
printf("Ingrese limite superior: ");
scanf("%f", &b);
printf("\nIngrese error: ");
scanf("%f", &error);
printf("\n---------------------------------------------------\n");
area = (fx(a) + fx(b)) / 2 * (b - a);
printf("\nArea inicial: %6.2f", area);
arean = area;
do
{
areai = arean;
m = (b - a) / n;
arean = 0.0;
k = 1;
l1 = a;
while (k <= (int)n)
{
arean = arean + (fx(l1) + fx(l1 + m)) / 2 * m;
l1 = l1 + m;
k++;
printf("\nArea bajo la curva: %8.3f", arean);
}
n=n+n;
printf("\n");
} while (fabs(areai - arean) > error);
printf("\n\nArea bajo la curva: %8.3f\n\n", arean);
return;
}
float fx(float x)
{
float fx;
fx = - 3.0 * pow(x, 3) - 6.25 * pow(x, 2) + 21.0 * x + 500.0;
return fx;
}