Regola del trapezio
In analisi numerica, la regola del trapezio fornisce un procedimento per il calcolo approssimato di un integrale definito della forma
.
La regola del trapezio o di Stevin, nella sua formulazione elementare, propone di approssimare l'integrale, cioè l'area della regione piana compresa fra il grafo della funzione
e l'asse delle ascisse con l'area del trapezio di vertici (a,f(a)), (b,f(b)), (b,0) e (a,0). Di conseguenza
.
Come è visivamente intuibile, questa approssimazione è accettabile se nell'intervallo di integrazione la funzione ha un andamento che si scosta poco dal lineare. Se questo non accade si può suddividere l'intervallo complessivo
in un numero n opportuno di sottointervalli in ciascuno dei quali in genere accade che la funzione ha andamento poco lontano dal lineare; quindi la regola del trapezio nella forma composta dice di applicare l'approssimazione precedente a tutti i sottointervalli. Si ottiene quindi la formula
La regola del trapezio fa parte della famiglia di formule per l'integrazione numerica chiamate formule di Newton-Cotes. Di questa famiglia fa parte anche la regola di Cavalieri-Simpson che dà spesso risultati più accurati. La regola di Cavalieri-Simpson e altri metodi simili migliorano la regola dei trapezi per gran parte delle funzioni dotate di due derivate continue. Accade però per certe funzioni dal comportamento irregolare che la più semplice regola del trapezio risulti preferibile. Inoltre la regola del trapezio tende a diventare molto accurata per gli integrali di funzioni periodiche nei rispettivi intervalli di periodicità; questo comportamento viene chiarito in relazione alla formula di Eulero-Maclaurin.
Indice |
Implementazione sul calcolatore [modifica]
In Python [modifica]
def IntegraleTrap(f,a,b,m): """ Funzione che calcola l'integrale di una funzione nell'intervallo [a,b] con il metodo dei trapezi. """ i=a ris=0 k=float(b-a)/m while (i<=b): try: ris+=((f(i)+f(i-k))*k)/2.0 i+=k except: i+=k continue return ris
In Java [modifica]
public abstract class Integral { public abstract double f(double x); private double trapArea(double b1, double b2, double h) { return (b1+b2)*h/2; } public double trapRule(double x0, double x1, int div) { double area = 0; double h = (x1 - x0) / div; double x = x0; for (int i=0; i<div-1; i++) { area = area + trapArea(f(x), f(x+h), h); x = x + h; } area = area + trapArea(f(x), f(x1), x1-x); return area; } } public class functionIntegral extends Integral { public double f(double x) { return Math.sin(x); } public static void main(String args[]) { // Calcolo l'integrale della funzione seno tra 0 e 2 pigreco functionIntegral integral = new functionIntegral(); System.out.println(integral.trapRule(0,2*Math.PI,50)); } }
Bibliografia [modifica]
- Richard L. Burden, J. Douglas Faires (2000): Numerical Analysis, (7th Ed.), Brooks/Cole. ISBN 0534382169
Voci correlate [modifica]
|
|
.
.