80 likes | 200 Views
Esercizio n.5. Dato e la formula del metodo trapezoidale. a ) Dimostrare che, dato un qualunque > 0, se m’ : | I m’ + 1 I m’ | allora. supponendo che f ( x ) C 2 [ a , b ].
E N D
Esercizio n.5 Dato e la formula del metodo trapezoidale a) Dimostrare che, dato un qualunque > 0, se m’ :|Im’ + 1Im’ | allora supponendo che f(x) C 2 [a,b]. Ciò consente, prefissato un certo > 0, errore massimo assoluto voluto nella approssimazione del calcolo di I, di trovare un n sufficientemente grande da verificare la: affinché sia verificata la |In I| per tutti gli n successivi.
c) Si verifichi la bontà del metodo applicandolo al calcolo dell’integrale per vari gradi di precisione e confrontando il risultato con la soluzione analitica per verificare che l’errore effettivo sia compatibile con la precisione richiesta. Esercizio n.5 b) Si scriva un programma in C per trovare una stima di I col metodo trapezoidale e in modo che l’accuratezza sia determinabile a priori secondo il metodo descritto in a).
Esercizio n.5 d) Si applichi il metodo al calcolo dell’integrale con tre cifre significative.
Soluzione n.5a a) Indichiamo con Dato un > 0, supponiamo che m : allora, essendo, si ha che (5.1) ma sappiamo che* quindi da cui e dalla (5.1) Dunque abbiamo dimostrato che se allora ma quest’ultima disuguaglianza è in realtà valida n > m poiché m è sempre decrescente c.v.d. Nota: la stessa vale anche per il metodo rettangolare, mentre per Simpson va sostituito l’esponente 2 con 4 nella frazione n/(n+1) che va a sua volta sostituita con n/(n+2) *vero a patto che f(x) C2[a,b] e ricordando che, in questo caso, |RT| < M/n2
Soluzione n.5b Algoritmo Leggi a, b, delta Poni n = 2; h = b - a; deltaI = 1 Poni trap0 = (funz(b) + funz(a)) * h / 2 Esegui loop la prima volta e poi finché deltaI > c1 Poni c1 = delta * (1-n^2/(n+1)^2) Poni h= (b-a)/n Poni trap = 0 Esegui loop per i = 1,2,3,...,n-1 poni trap = trap + 2*funz(a + h*i) Fine loop Poni trap = (trap + funz(a) + funz(b))*h/2 Poni deltaI = Ass(trap - trap0) Poni n = n + 1 Poni trap0 = trap Fine loop Scrivi trap0, n - 1 Fine
Soluzione n.5b /* ESERCIZIO 5 programma per il calcolo numerico dell'integrale di una funzione data analiticamente, tra gli estremi a e b che, usando il metodo trapezoidale, si arresta ad un numero di intervalli tali da dare una stima con errore assoluto inferiore a un delta dato. La funzione e‘ specificata in f *** compilare con l'opzione -lm */ #include <stdio.h> #include <math.h> main() { /* dichiarazione variabili */ int i,n; double nf; double a,b,h,delta,deltaI,c1; double trap,trap0; double f( double ); /*-------------------------*/ printf ("introdurre a, b, delta: "); fflush (stdin); scanf ("%lf,%lf,%lf", &a,&b,&delta); n=2; h=b-a; trap0=(f(b)+f(a))*h*0.5; do { nf=(double)n; c1=delta*(1-pow(nf/(nf+1),2)); h=(b-a)/nf; trap=0; for (i=1; i < n; i=++i) { trap = trap +f(a+h*(double)i); } trap = h*trap + (f(a)+f(b))*h*0.5; deltaI = fabs (trap - trap0); n=n+1; trap0=trap; } while (deltaI > c1) printf ("integrale = %lf \n",trap); printf ("dopo %d passi. \n", n); } double f ( double x) { double funz ; funz = exp(x); return funz; }
Soluzione n.5c Il margine d’errore imposto è sempre compatibile ( maggiore) con quello effettivamente commesso. OK! Attenzione: le variabili nel programma devono essere in doppia precisione!
Soluzione n.5d il risultato è I = 0.7127 0.0005 che si ottiene con 58 intervalli di integrazione