Esercizio n.5

annuncio pubblicitario
Esercizio n.5
Dato
b
I   f ( x)dx
e la formula del metodo trapezoidale
a
n 1
h

I n   f (a )  f ( xn )  2 f ( xi ) ; xi  a  ih ; xn  b
2
i 1

a) Dimostrare che, dato un qualunque  > 0, se m’ : | Im’ + 1  Im’ |   allora
  m 
m  m : I m  I   1  


m

1



2 1



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:
  n 2 
I n 1  I n   1  
 
n

1

 

affinché sia verificata la | In  I |   per tutti gli n successivi.
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).
c) Si verifichi la bontà del metodo applicandolo al calcolo dell’integrale
1
per vari gradi di precisione e confrontando il risultato
I  e x dx
0
con la soluzione analitica per verificare che l’errore effettivo sia
compatibile con la precisione richiesta.

Esercizio n.5
d) Si applichi il metodo al calcolo dell’integrale
con tre cifre significative.
I 
10

1
sin x
dx
x
1,E+00
8,E-01
sin x
x
6,E-01
4,E-01
2,E-01
0,E+00
-2,E-01 1
-4,E-01
2
3
4
6
7
8
9
10
Soluzione n.5a
a) Indichiamo con  n  I n  I
Dato un  > 0, supponiamo che  m : I m1  I m   allora, essendo,
I m1  I m  I m  I m1  I m  I  ( I m1  I )   m   m1 si ha che  m   m1  
ma sappiamo che*
 n1
n2
 n
(n  1)2
quindi  m   m1
(5.1)
m2
 m  m
(m  1)2
  m 2 
m 

da cui e dalla (5.1)  m   m 
     m   1  
 
m

1
m

1


 
 
2
1
1
  m 2 
Dunque abbiamo dimostrato che se I m1  I m   allora I m  I   1  
 
m

1
 
 
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
*/
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);
#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;
double f ( double x)
{
double funz ;
funz = exp(x);
return funz;
}
Soluzione n.5c

0.005
0.0005
0.00005
0.000005
5E-07
n
8
20
56
172
538
In
Errore effettivo
1.721203
0.0029212
1.718678
0.0003962
1.718329
0.0000472
1.718287
0.0000052
1.718282
0.0000002
I = 1.718282
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
I 
10

1
sin x
dx
x
il risultato è I = 0.7127  0.0005 che si ottiene con 58 intervalli di
integrazione
Scarica