Usted estaba en el camino correcto: sólo tiene que utilizar la fórmula de error para obtener
$$h^2 \leq \sqrt{\frac{12 \text{Tol}}{7e}}$$
lo que da como resultado para $\text{Tol} = 10^{-3}$ :
$h \approx 0.025$ y por lo tanto $n \approx 40$ . En definitiva, sólo hay que poner $n>40$ y observará un error absoluto menor que $\text{Tol}$ en su simulación.
El siguiente fragmento de C++ muestra este hecho
#include <iostream>
#include <cmath>
#include <iomanip> // std::setprecision
double trapz(double f(double),int n, int a, int b){
double sum{f(a) + f(b)};
double h = double(b-a)/double(n);
for (int i=1; i<n; ++i) {
sum+=2*f(a+i*h);
// std::cout << a+i*h <<std::endl; bound checking
}
return (0.5*h)*sum;
}
double f(double x){
return x*x*exp(x);
}
int main(){
double exact{exp(1)- 2};
int n;
std::cout <<"Set n: " <<std::endl;
std::cin >> n;
double res{trapz(f,n,0,1)};
std::cout << "Numerical integration with n= " << n << " yields: "<< std::setprecision(9) << res
<< " with an error of " << std::scientific << std::fabs(exact - res) << std::endl;
return 0;
}
Si no estás familiarizado con C/C++, sólo tienes que ir a tu terminal (en MacOS y Linux es lo mismo) y escribir lo siguiente para compilar tu código fuente
g++ -o file_name -std=c++14 file_name.cpp
A continuación, ejecútelo con
./file_name
para ver la salida
Con $n=40$ Lo entiendo:
Numerical integration with n= 40 yields: 0.718706544 with an error of 4.247156195e-04