Esercizio n.3

Post on 18-Jan-2016

17 views 3 download

description

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 - PowerPoint PPT Presentation

Transcript of Esercizio n.3

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, bponi 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 loopEsegui loop per i = 1,2,3...,n-1

poni x(i)=a + h*iFine loopEsegui loop per i = 1,2,3...,n

poni ret = ret + funz(xret(i))Fine loopponi ret = ret * hEsegui loop per i = 1,3,5,...,n-1

poni trap = trap + 2*funz(x(i)) poni simps = simps + 4*funz(x(i))

Fine loopEsegui loop per i = 2,4,6,...,n-2

poni trap = trap + 2*funz(x(i)) poni simps = simps + 2*funz(x(i))

Fine loopponi trap = (trap + funz(a) + funz(b)) * h/2poni simps = (simps + funz(a) + funz(b)) * h/3Scrivi ret, trap, simps

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); }

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;}