Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.49 KB | None | 0 0
  1. #include <iostream>
  2. #include<math.h>
  3. #include<cmath>
  4. #include <fstream>
  5. #include <gsl/gsl_rng.h>
  6. #include "timer.h"
  7. #include "time.h"
  8. #include <gsl/gsl_randist.h>
  9. #include "lab2.h"
  10. using namespace std;
  11. #define lp 5e4
  12.  
  13.  
  14.  
  15.  
  16.  
  17. char* intToStr(int n)
  18. {
  19.      int i = 0;
  20.      char *tmp = (char*)malloc(12); // stdlib
  21.      char *ret = (char*)malloc(12);
  22.      if(n < 0) {
  23.           *ret = '-';
  24.           i++;
  25.           n = -n;
  26.      }
  27.      do {
  28.           *tmp = n % 10 + 48;
  29.           n -= n % 10;
  30.           if(n > 9) *tmp++;
  31.      }
  32.      while(n /= 10);
  33.      while(ret[i++] = *tmp--);
  34.      return ret;
  35. }
  36.  
  37.  
  38. void lab2_zad1(){
  39.  
  40.     int k[] = {11,51,101};
  41.     for (int k_idx = 0; k_idx < 3; k_idx++)
  42.     {
  43.         int *histogram1, *histogram2, *histogram3;
  44.         histogram1 = new int[k[k_idx]];
  45.         histogram2 = new int[k[k_idx]];
  46.         histogram3 = new int[k[k_idx]];
  47.         for (int idx = 0; idx < k[k_idx]; idx++)
  48.         {
  49.             histogram1[idx]=0;
  50.             histogram2[idx]=0;
  51.             histogram3[idx]=0;
  52.         }
  53.  
  54.         time_t ttt ;
  55.         struct tm date;
  56.         time(&ttt);
  57.         localtime_s(&date,&ttt);
  58.         int r=(date).tm_year+1900;
  59.         int m=(date).tm_mon;
  60.         int d=(date).tm_mday;
  61.         int g=(date).tm_hour;
  62.         int min=(date).tm_min;
  63.         int s=(date).tm_sec;
  64.         int X0=r+100*(m-1+12*(d-1+31*(g+24*(min+60*s))));
  65.  
  66.         gsl_rng * generatorek1, *generatorek2;
  67.         generatorek1 = gsl_rng_alloc(gsl_rng_mt19937);
  68.         generatorek2 = gsl_rng_alloc(gsl_rng_randu);
  69.        
  70.         gsl_rng_set(generatorek1, X0);
  71.         gsl_rng_set(generatorek2, X0);
  72.         srand(X0);
  73.  
  74.         for (int i = 0; i < lp; i++){
  75.             histogram1[(int)floor(k[k_idx]*gsl_rng_uniform(generatorek1))]++;
  76.             histogram2[(int)floor(k[k_idx]*gsl_rng_uniform(generatorek1))]++;
  77.             histogram3[(int)floor(k[k_idx]*rand()/(double)RAND_MAX)]++;
  78.         }
  79.         gsl_rng_free(generatorek1);
  80.         gsl_rng_free(generatorek2);
  81.        
  82.         if (k_idx==0)
  83.         {
  84.             ofstream plik1("zad1_mt_k10.txt");
  85.             ofstream plik2("zad1_randu_k10.txt");
  86.             ofstream plik3("zad1_rand_k10.txt");
  87.             for (int i = 0; i < k[k_idx]; i++)
  88.             {
  89.                 plik1 << i+1 << " " << histogram1[i] << endl;
  90.                 plik2 << i+1 << " " << histogram2[i] << endl;
  91.                 plik3 << i+1 << " " << histogram3[i] << endl;
  92.             }
  93.         }else if (k_idx==1)
  94.         {
  95.             ofstream plik1("zad1_mt_k50.txt");
  96.             ofstream plik2("zad1_randu_k50.txt");
  97.             ofstream plik3("zad1_rand_k50.txt");
  98.             for (int i = 0; i < k[k_idx]; i++)
  99.             {
  100.                 plik1 << i+1 << " " << histogram1[i] << endl;
  101.                 plik2 << i+1 << " " << histogram2[i] << endl;
  102.                 plik3 << i+1 << " " << histogram3[i] << endl;
  103.             }
  104.         }else{
  105.             ofstream plik1("zad1_mt_k100.txt");
  106.             ofstream plik2("zad1_randu_k100.txt");
  107.             ofstream plik3("zad1_rand_k100.txt");
  108.             for (int i = 0; i < k[k_idx]; i++)
  109.             {
  110.                 plik1 << i+1 << " " << histogram1[i] << endl;
  111.                 plik2 << i+1 << " " << histogram2[i] << endl;
  112.                 plik3 << i+1 << " " << histogram3[i] << endl;
  113.             }
  114.         }
  115.     }
  116.  
  117.  
  118. }
  119.  
  120.  
  121. void lab2_zad2(){
  122.  
  123.     time_t ttt ;
  124.             struct tm date;
  125.             time(&ttt);
  126.             localtime_s(&date,&ttt);
  127.             int r=(date).tm_year+1900;
  128.             int m=(date).tm_mon;
  129.             int d=(date).tm_mday;
  130.             int g=(date).tm_hour;
  131.             int min=(date).tm_min;
  132.             int s=(date).tm_sec;
  133.             int X0=r+100*(m-1+12*(d-1+31*(g+24*(min+60*s))));
  134.  
  135.             gsl_rng * generatorek1, *generatorek2;
  136.             generatorek1 = gsl_rng_alloc(gsl_rng_mt19937);
  137.             //generatorek2 = gsl_rng_alloc(gsl_rng_randu);
  138.        
  139.             gsl_rng_set(generatorek1, X0);
  140.             //gsl_rng_set(generatorek2, X0);
  141.             //srand(X0);
  142.  
  143.     int *chi_histogram;
  144.     int num =100;
  145.     chi_histogram= new int[num];
  146.     for (int i = 0; i < num; i++)
  147.     {
  148.         chi_histogram[i]=0;
  149.     }
  150.     for (int chi_idx = 0; chi_idx < lp; chi_idx++)
  151.     {
  152.         if (chi_idx%100==0)
  153.         {
  154.             cout<<chi_idx<<endl;
  155.         }
  156.    
  157.         int k[] = {10,50,100};
  158.         for (int k_idx = 0; k_idx < 1; k_idx++)
  159.         {
  160.             int *histogram1/*, *histogram2, *histogram3*/;
  161.             histogram1 = new int[k[k_idx]];
  162.             /*histogram2 = new int[k[k_idx]];
  163.             histogram3 = new int[k[k_idx]];*/
  164.             for (int idx = 0; idx < k[k_idx]; idx++)
  165.             {
  166.                 histogram1[idx]=0;
  167.                 /*histogram2[idx]=0;
  168.                 histogram3[idx]=0;*/
  169.             }
  170.  
  171.            
  172.  
  173.             for (int i = 0; i < lp; i++){
  174.                 histogram1[(int)floor(k[k_idx]*gsl_rng_uniform(generatorek1))]++;
  175.                 //histogram2[(int)floor(k[k_idx]*gsl_rng_uniform(generatorek1))]++;
  176.                 //histogram3[(int)floor(k[k_idx]*rand()/(double)RAND_MAX)]++;
  177.             }
  178.            
  179.             //gsl_rng_free(generatorek2);
  180.        
  181.             //if (k_idx==0)
  182.             //{
  183.             //  ofstream plik1("zad2_mt_k10.txt");
  184.             //  /*ofstream plik2("zad2_randu_k10.txt");
  185.             //  ofstream plik3("zad2_rand_k10.txt");*/
  186.             //  for (int i = 0; i < k[k_idx]; i++)
  187.             //  {
  188.             //      plik1 << i+1 << " " << histogram1[i] << endl;
  189.             //      /*plik2 << i+1 << " " << histogram2[i] << endl;
  190.             //      plik3 << i+1 << " " << histogram3[i] << endl;*/
  191.             //  }
  192.             //}else if (k_idx==1)
  193.             //{
  194.             //  ofstream plik1("zad2_mt_k50.txt");
  195.             //  /*ofstream plik2("zad2_randu_k50.txt");
  196.             //  ofstream plik3("zad2_rand_k50.txt");*/
  197.             //  for (int i = 0; i < k[k_idx]; i++)
  198.             //  {
  199.             //      plik1 << i+1 << " " << histogram1[i] << endl;
  200.             //      /*plik2 << i+1 << " " << histogram2[i] << endl;
  201.             //      plik3 << i+1 << " " << histogram3[i] << endl;*/
  202.             //  }
  203.             //}else{
  204.             //  ofstream plik1("zad2_mt_k100.txt");
  205.             //  /*ofstream plik2("zad2_randu_k100.txt");
  206.             //  ofstream plik3("zad2_rand_k100.txt");*/
  207.             //  for (int i = 0; i < k[k_idx]; i++)
  208.             //  {
  209.             //      plik1 << i+1 << " " << histogram1[i] << endl;
  210.             //      /*plik2 << i+1 << " " << histogram2[i] << endl;
  211.             //      plik3 << i+1 << " " << histogram3[i] << endl;*/
  212.             //  }
  213.             //}
  214.    
  215.             double chi=0,suma=0;
  216.             for (int i=0;i<k[k_idx];i++) suma+=pow(histogram1[i],2.0);
  217.             chi=(float)k[k_idx]/(float)lp*suma-lp;
  218.             //cout<<"Statystyka chi kwadrat dla MT = "<<chi<<endl;
  219.             if (chi > 49)
  220.             {
  221.                 chi=49;
  222.                 cout<<"chi >49" <<endl;
  223.             }
  224.             chi_histogram[(int)floor(chi*2)]++;
  225.             /*chi=0,suma=0;
  226.  
  227.             for (int i=0;i<k[k_idx];i++) suma+=pow(histogram2[i],2.0);
  228.             chi=(float)k[k_idx]/(float)lp*suma-lp;
  229.             cout<<"Statystyka chi kwadrat dla randu = "<<chi<<endl;*/
  230.             free(histogram1);
  231.             //Sleep(100);
  232.         }
  233.  
  234.        
  235.  
  236.     }
  237.     ofstream plik("zad2_chi_histogram.txt");
  238.         double suma_chi=0;
  239.         for (int i = 0; i < 100; i++)
  240.                 {
  241.                     plik << 0.5*(i+1) << "\t" << chi_histogram[i]/lp/0.5 << endl;
  242.                     suma_chi+=chi_histogram[i]/lp/0.5;
  243.                     /*plik2 << i+1 << " " << histogram2[i] << endl;
  244.                     plik3 << i+1 << " " << histogram3[i] << endl;*/
  245.                 }
  246.         cout<<suma_chi<<endl;
  247.     gsl_rng_free(generatorek1);
  248.     ofstream plik10("zad2_chi_histogram_teo.txt");
  249.     for (int i = 0; i < 49; i++)
  250.     {
  251.         plik10 <<(i)*0.5 <<"\t"<<gsl_ran_chisq_pdf(i/2,10)<<endl;
  252.     }
  253.    
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement