Forelesning 6: Numerisk integrasjon#
Det bestemte integralet#
def f(x):
return x**2
a = 0 # Nedre integrasjonsgrense
b = 2 # Øvre integrasjonsgrende
n = 10000 # Antall rektangler
dx = (b - a)/n # Bredden av hvert rektangel
A = 0 # Arealet av rektanglene
x = a
for i in range(n):
# Summere opp arealet av hvert rektangel
A = A + f(x) * dx
x = x + dx
print(A)
2.666266679999545
def rektangelmetoden_venstre(f, a, b, n = 100000):
dx = (b - a)/n # Bredden av hvert rektangel
A = 0 # Arealet av rektanglene
x = a
for i in range(n):
# Summere opp arealet av hvert rektangel
A = A + f(x) * dx
x = x + dx
return A
def rektangelmetoden_høyre(f, a, b, n = 100000):
dx = (b - a)/n # Bredden av hvert rektangel
A = 0 # Arealet av rektanglene
x = a + dx
for i in range(n):
# Summere opp arealet av hvert rektangel
A = A + f(x) * dx
x = x + dx
return A
def rektangelmetoden_midtpunkt(f, a, b, n = 100000):
dx = (b - a)/n # Bredden av hvert rektangel
A = 0 # Arealet av rektanglene
x = a + dx/2
for i in range(n):
# Summere opp arealet av hvert rektangel
A = A + f(x) * dx
x = x + dx
return A
print(rektangelmetoden_venstre(f, 1, 2))
print(rektangelmetoden_høyre(f, 1, 2))
print(rektangelmetoden_midtpunkt(f, 1, 2))
2.333318333360897
2.3333483333608975
2.3333333333359163
def trapesmetoden(f, a, b, n = 100000):
dx = (b - a)/n # Bredden av hvert rektangel
A = (f(a) + f(b))/2*dx # Arealet av rektanglene
x = a
for i in range(1, n):
# Summere opp arealet av hvert rektangel
A = A + f(x) * dx
x = x + dx
return A
trapesmetoden(f, 1, 2)
2.3333033337608957
Bruke biblioteksfunksjoner til å integrere#
Benytter scipy-biblioteket.
from scipy.integrate import trapezoid, simpson, quad
x1 = np.linspace(0,1,10000)
y1 = f(x)
trapes = trapezoid(y = y1, x = x1)
trapes
0.3333333350003334
simps = simpson(y = y1, x = x1)
simps
0.3333333333333333
kvadratur = quad(f, 0, 1)
kvadratur
(0.3333333333333333, 3.700743415417188e-15)