20 likes | 152 Views
Esercizio n.3. Scrivere un programma per calcolatore (in FORTRAN o C) che valuti l’integrale definito di una funzione data (e scritta nel programma stesso), dati gli estremi d’integrazione e il numero di intervalli da usare, mediante i tre metodi visti finora. Leggi n, a, b
E N D
Esercizio n.3 Scrivere un programma per calcolatore (in FORTRAN o C) che valuti l’integrale definito di una funzione data (e scritta nel programma stesso), dati gli estremi d’integrazione e il numero di intervalli da usare, mediante i tre metodi visti finora. Leggi n, a, b poni h= (b-a)/n; ret = 0; trap = 0; simps = 0; Esegui loop per i = 1,2,3...,n poni xret(i)=a + h*(i-0.5) Fine loop Esegui loop per i = 1,2,3...,n-1 poni x(i)=a + h*i Fine loop Esegui loop per i = 1,2,3...,n poni ret = ret + funz(xret(i)) Fine loop poni ret = ret * h Esegui loop per i = 1,3,5,...,n-1 poni trap = trap + 2*funz(x(i)) poni simps = simps + 4*funz(x(i)) Fine loop Esegui loop per i = 2,4,6,...,n-2 poni trap = trap + 2*funz(x(i)) poni simps = simps + 2*funz(x(i)) Fine loop poni trap = (trap + funz(a) + funz(b)) * h/2 poni simps = (simps + funz(a) + funz(b)) * h/3 Scrivi ret, trap, simps
for(i=1 ; i<n ; i=++i) { x[i]=a+h*(double)i; } for(i=1 ; i<=n ; i=++i) { ret=ret + f(xret[i]); } ret = ret * h; for(i=1 ; i<=n-1 ; i=i+2) { trap=trap + 2*f(x[i]); simps=simps + 4*f(x[i]); } for(i=2 ; i<=n-2 ; i=i+2) { trap=trap + 2*f(x[i]); simps=simps + 2*f(x[i]); } trap = (trap + f(a) + f(b)) * h/2; simps = (simps + f(a) + f(b)) * h/3; printf ("ret = %lf, trap = %lf, simps = %lf \n", ret,trap,simps); } double f ( double x) { double funz ; funz = pow(x,2); return funz; } Soluzione n.3 /* Programma per il calcolo numerico dell'int., tra gli estremi a e b, di una funzione data usando i metodi rettangolare, trapezoidale e di simpson con n intervalli. La funzione è specificata in f *** compilare con l'opzione -lm */ #include <stdio.h> #include <math.h> #define nmax 100 main() { /* dichiarazione variabili */ int n,i; double a,b,h; double ret,trap,simps; double xret[nmax],x[nmax]; double f( double ); /*-------------------------*/ printf ("introdurre a, b: "); fflush (stdin); scanf ("%lf,%lf", &a,&b); printf ("introdurre n: "); fflush (stdin); scanf ("%d", &n); h = (b-a)/(double)n; ret=0 ; trap=0 ; simps=0; for(i=1 ; i<=n ; i=++i) { xret[i]=a+h*((double)i-0.5); }