Created: 2024-03-20 mer 22:49
I calcolatori sanno fare soltanto le operazioni che vi hanno insegnato alle elementari: \(+, \times , -, \%\)
Non hanno nemmeno il concetto di continuita', ragionano sempre in termini discreti.
Non ci concentreremo quindi sulle tecniche di integrazione, che avete visto a matematica.
Vedremo piu' nello specifico il "significato" dell'integrale in calcolo numerico.
L'integrale e' l'area sottesa alla curva descritta da una funzione.
Ad esempio:
Bernhard Riemann agli inizi del 600' descrive una tecnica interessante per poter calcolare l'area sottesa di qualsiasi funzione.
Si basa su un'idea semplice che ha portato alle tecniche di integrazione usate oggi, ma che grazie ai calcolatori puo' anche essere applicata direttamente.
Definiamo la somma inferiore di rieman la seguente quantita':
con
Formula:
Idea:
Quindi per risolvere l'integrale \(\int_{a}^{b}\) dx, gli step da seguire sono questi:
Dividere l'intervallo di interesse in \(n\) intervalli, quindi prendendo \(n-1\) punti equidistanziati in \([a,b]\).
Partendo dal secondo punto (\(k=1\)), per ogni punto si calcolano:
l'immagine di \(x_{k}\)
l'immagine di \(x_{k-1}\)
Si applica la formula per ottenere la somma finale.
In teoria, secondo la formula che avete visto a matematica, bisognerebbe passare al limite perche' il calcolo abbia senso.
E' quindi necessario che gli intervalli diventino estremamente piccoli.
Come fare?
Basta prendere \(n\) grande: piu' grande sara' \(n\), piu' piccoli saranno gli intervalli, e di conseguenza piu' preciso il nostro integrale.
Definiamo i parametri \(a,b,n\)
n = 2000000
a = 2
b = 6
step = (b-a)/n
Prendiamo i punti \({x_k}\) equidistanziati in base all'intervallo scelto:
step = (b-a)/n
x = [a+step*i for i in range(0,n+1)]
Ora possiamo creare gli intervalli usando delle tuple in cui inseriamo l'elemento \(x_{k}\) e il successivo (stessa cosa che il precedente). Inizializziamo la variabile che conterra' il risultato finale a zero.
c = [(x[i], x[i+1]) for i in range(n)]
a = 0
Definiamo la funzione \(f = 3x^2\):
def f(x):
return 3*pow(x,2)
Traduciamo la sommatoria con un for loop, e stampiamo il risultato finale.
for x1, x2 in c:
b = x2-x1
h = max(f(x2),f(x1))
a += (b*h)
print(a)