#include #include #include main(){ int i,N,seed,cont; double area,x,y,funcx; /* Generalizzazione dell'algoritmo presentato a lezione per il calcolo dell'area del cerchio: */ /* Calcolo dell'area sottesa alla curva Exp[-x^2]*Cos[10*x]^2 tra 0,1*/ /* O per i piu' matematici calcolo dell'integrale della funzione Exp[-x^2]*Cos[10*x]^2 tra 0 e 1*/ printf("Inserisci N\n"); scanf("%i",&N); seed=time(0); srand48(seed); cont=0; /*Il calcolo procede come nel caso dell'esercitazione: */ /*1) la funzione e' inscritta all'interno di un quadratino di lato 1 che la contiene nell'intervallo [0:1] */ /*2) generiamo coppie x,y distribuite uniformemente sul piano cartesiano all'interno del quadratino e tra queste ne contiamo quante cadono sotto la curva*/ /*3) come spiegato a lezione: il rapporto tra il numero di coppie sotto la curva e quelle totali e' una STIMA della probabilita' che una coppia sia sotto la curva ma che a sua volta e' rigorosamente definita dal rapporto tra l'area della curva e quella del quadratino*/ /*4)Quindi... #punti sotto la curva/#punti totali una stima della probabilita che a rigore e' data da AREACURVA/AREAQUADRATINO Dunque l'area della curva e' approssimabile come AREAQUADRATINO*#punti sotto la curva/#punti totali In questo caso l'area del quadratino e' 1*/ /*L'area di questa curva tra 0 e 1 e 0.381388 (calcolato con Matematica)*/ /*Verifichiamo che funzioni...*/ for (i=1;i<=N;i++){ x=(double)lrand48()/RAND_MAX; y=(double)lrand48()/RAND_MAX; funcx=exp(-pow(x,2))*pow(cos(10*x),2); if (y<=funcx) cont++; area=(double)cont/i; printf("%lf %lf \n",area,fabs(area-0.381388)); } }