4. Aproximar una integral definida

Donada una funció \(f\) definida en un interval \([a, b]\) tal que pren valors positius, podem aproximar la integral definida de \(f\) en aquest interval com una suma d’àrees de rectangles. Per això, considerem un paràmetre \(n\) que serà el nombre de trossos en què dividirem l’interval \([a, b]\):

\[\int_{a}^{b} f(x)dx \approx \sum_{i=0}^{n-1} f(\frac{x_i+x_{i+1}}{2})\frac{b-a}{n}\]

on \(x_i=a+i\frac{b-a}{n}\) per \(i=0, \ldots, n\).

En aquest exercici, considerem \(f(x)=2x^2 + \sin x + 4\)

Dissenya les dues funcions següents i desa-les al mòdul integrals (fitxer integrals.py):

integrals.integra(a, b, n)

Retorna l’aproximació de la integral definida entre \(a\) i \(b\) dividint en \(n\) trossos l’interval, seguint la fórmula anterior.

Observa el següent joc de proves:

>>> round(integra(1, 2, 8), 3)
9.621
>>> round(integra(1, 2, 40), 3)
9.623
>>> round(integra(1, 2, 4), 3)
9.615
>>> round(integra(1, 2, 2), 3)
9.591
>>> round(integra(5, 10, 8), 1)
604.1
>>> round(integra(5, 10, 40), 1)
604.4
>>> round(integra(5, 10, 10), 1)
604.3
>>> round(integra(5, 10, 2), 1)
599.6

Pots descarregar el fitxer amb tests test-integra.txt.


integrals.quants_trossos(a, b, eps)

Retorna el valor més petit d'n tal que l’aproximació s’acosta a la integral de \(f\) a l’interval \([a, b]\) amb un error menor que eps, és a dir,

\[\left| \int_{a}^{b} f(x)dx - \sum_{i=0}^{n-1} f(\frac{x_i+x_{i+1}}{2})\frac{b-a}{n} \right| < \text{eps.}\]

Nota

Recorda que un dels mètodes per calcular la integral definida és a partir del càlcul de primitives: \(\int_{a}^{b} f(x)dx = F(b) - F(a)\). En aquest problema, \(F(x) = 2\frac{x^3}{3} - \cos x + 4x\) és una primitiva de la funció \(f(x)\).

Observa el següent joc de proves:

>>> r = quants_trossos(1, 2, 0.1)
>>> r
2
>>> r = quants_trossos(1, 2, 0.01)
>>> r
4
>>> r = quants_trossos(1, 2, 0.001)
>>> r
12
>>> r = quants_trossos(5, 10, 0.1)
>>> r
15
>>> r = quants_trossos(5, 10, 0.01)
>>> r
45
>>> r = quants_trossos(5, 10, 0.001)
>>> r
141

Pots descarregar el fitxer amb tests test-quants_trossos.txt.