11/01/10 11:48
stella.p
Ciao a tutti, avrei bisogno di un suggerimento. Ho scritto un codice sull'approssimazione di un integrale definito e il risultato si trova, ma in ultimo la traccia chiede di stampare la sequenza degli errori ed il rapporto tra gli errori consecutivi qualcuno sa darmi qualche suggerimento??? GRAZIE MILLE A TUTTI..
/*APPLICARE IL METODO DEI TRAPEZI, DELLE PARABOLE E DEI RETTANGOLI ALL'APPROSSIMAZIONE DELL'INTEGRALE DEFINITO e^(-x^2) NELL'INTERVALLO [1,2]. SUDDIVIDERE PROGRESSIVAMENTE L'INTERVALLO DI INTEGRAZIONE IN 2^k SOTTOINTERVALLI, k=0,1,...,11. STAMPARE LA SEQUENZA DEGLI ERRORI ED IL RAPPORTO TRA GLI ERRORI CONSECUTIVI.*/ #include <math.h> #include <stdlib.h> #include <stdio.h> #define A 1 /* Estremi dell’intervallo */ #define B 2 /* di integrazione */ double funzione(double x); double rettangoli(double(*fp)(double), double a, double b, int n_int); double trapezi(double(*fp)(double), double a, double b, int n_int); double simpson(double(*fp)(double), double a, double b, int n_int); int main(void){ int k, N_INT; for (k=0;k<=11;k++) N_INT=pow(2,k); printf("\nL’ integrale della funzione vale :\n\n"); printf("Metodo dei rettangoli: %f\n", rettangoli(funzione, A, B, N_INT)); printf("Metodo dei trapezi : %f\n", trapezi(funzione, A, B, N_INT)); printf("Metodo simpson : %f\n", simpson(funzione, A, B, N_INT)); system ("pause"); return 0; } double funzione(double x){ return exp(-(x*x)); /* Funzione da integrare */ } double rettangoli(double(*fp)(double), double a, double b, int n_int){ double h=0, value=0, i=0; h=(b-a)/n_int; for(i=a;i<b;i+=h) value+=h*(*fp)(i+h/2); return value; } double trapezi(double(*fp)(double), double a, double b, int n_int){ double h=0, value=0, i=0; h=(b-a)/n_int; for(i=a;i<b;i+=h) value+=(((*fp)(i)+(*fp)(i+h))*h/2); return value ; } double simpson(double(*fp)(double), double a, double b, int n_int){ double h=0, i=0, par=0, dis=0; int j=0; if ( n_int % 2 ) ++n_int; h=(b-a)/n_int; for(i=a+h;i<b;i+=h){ if(j%2==0) par+=(*fp)(i); else dis+=(*fp)(i); j++; } return h* ((*fp)(a)/3 + 4*par/3 + 2*dis/3 + (*fp)(b)/3); }
aaa