Hinamarth

Probability Distribution

Jan 16th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.60 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4.  
  5. #define e 2.7182818284
  6.  
  7. double xy( int, double );
  8.  
  9. void media_fraz( double [][1001], double [], int );
  10.  
  11. double xy( int n, double a ){
  12.   double x=0., y=0., C=0.;
  13.   while(y>=C){
  14.     x=((double)lrand48()/RAND_MAX*14)-4;
  15.     y=(double)lrand48()/RAND_MAX;
  16.     if(x>(-a)){
  17.       C=pow(e, (-pow(x,2.)/2.));
  18.     }
  19.     else{
  20.       C=(pow((n/a),n)*pow(e, pow(a,2.)/2.))*pow((n/a - a)-x, -n);
  21.     }
  22.   }
  23.   return x;
  24. }
  25.  
  26. void media_fraz( double x[][1001], double mf[], int n){
  27.   double media=0, frac=0;
  28.   int i;
  29.   for( i=1; i<1001; i++){
  30.     media+=x[n-1][i]/1000.;
  31.     if(fabs(x[n-1][i])<1){
  32.     frac++;
  33.     }  
  34.   }
  35.   mf[0]=media;
  36.   mf[1]=frac/1000.;
  37. }
  38.  
  39. main(){
  40.   double a, x[4][1001]={0}, mf[2]={0}, frac;
  41.   int i, n;
  42.   srand48(time(0));
  43.   printf("Questo programma calcola la media e la frazione degli eventi con |x| < 1 di un campione di dati distribuito secondo la distribuzione di probabilita` C(x) per vari valori del suo parametro n.\n");
  44.   printf("Inserisci un valore di alfa strettamente maggiore di zero che sarà utile a calcolare la distribuzione. \n a = ");
  45.   scanf("%lf", &a);
  46.   while(a<=0){
  47.     printf("Il valore di alfa è sbagliato! Reinseriscilo. \n a = ");
  48.     scanf("%lf", &a);
  49.   }
  50.   for(n=1; n<5; n++){
  51.     x[n-1][0]=1;
  52.     for(i=1; i<1001; i++){
  53.       x[n-1][i]=xy( n, a );
  54.     }
  55.     media_fraz( x, mf, n);
  56.     printf("I risultati per n = %d sono : \n < x > = %lf \n frac = %lf \n", n, mf[0], mf[1]);
  57.     if(mf[1]>0.68){
  58.       printf("Il valore di frac = %lf per n = %d è maggiore di 0.68.\n", mf[1], n);
  59.     }
  60.   }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment