0 votos

encontrar $\int_{0}^{1} x^2 e^x$ utilizando la regla trapezoidal con un error inferior a $10^{-3}$

La cuestión es encontrar $$\int_{0}^{1} x^2 e^x$$ utilizando la regla trapezoidal con un error inferior a $10^{-3}$

Que es otra forma de decir: "Encuentra h" en primer lugar. Así que sabemos que :

$f(x)=x^2 e^x$

$f’(x)=2xe^x+x^2e^x$

$f’’(x)=2e^x+4xe^x+x^2e^x= e^x(2+4x+x^2)$

Así que..: $| f’’(x)|=| 2e^x+4xe^x+x^2e^x | \le 7e$ Así que el límite superior (M)sería 7e

Utilizando $\frac{b-a}{12} h^2 M\le 10^3$ Tengo que encontrar h y luego usar la regla trapezoidal para encontrar T(h) Pero el problema es que h sería muy pequeño y usar la regla trapezoidal sería demasiado largo para hacerlo sin usar programas matemáticos

¿Alguna ayuda?

0voto

feddy Puntos 26

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X