StatMech
Loading...
Searching...
No Matches
maximum.c File Reference

Functions

int main (int argc, char **argv)
 

Function Documentation

◆ main()

int main ( int  argc,
char **  argv 
)
16 {
17 if (argc < 3) {
18 printf("Usage: 1.This 2.n 3.ndata\n");
19 exit(EXIT_FAILURE);
20 }
21 Integer_t i, j, k, l, count;
22 Integer_t const n = atoi(argv[1]);
23 Integer_t const ndata = atoi(argv[2]);
24 Integer_t seed=1;
25 Integer_t nu = 100;
26 double max, maxData;
27 double rand, rand1, rand2;
28 double SampleMean, SampleStddev;
29
30 Integer_t subMax, itemp;
31 Integer_t *histogram;
32 double mean, stddev;
33 double binwidth, binratio=0.01;
34 Integer_t const MAX=1000;
35
36 Integer_t const NumCoeff=3;
37 double random[MAX], randCoeff[NumCoeff];
38 for(i = 0; i < NumCoeff; ++i) {
39 rand1 = genrand_real3();
40 rand2 = genrand_real3();
41 // randCoeff[i] = rand1 -0.5;
42 randCoeff[i] = -sqrt(-2.0*log(rand1)) *cos(2*M_PI*rand2);
43 }
44
45 char str[100];
46 char *filename = str;
47
48 FILE *Infp;
49 FILE *Outfp;
50 sprintf(str, "Dist_maximum_%lld_raw.txt", n);
51 Outfp = fopen(filename, "w");
52 if (Outfp == NULL) {
53 printf("Can't open a file %s\n", filename);
54 exit(EXIT_FAILURE);
55 }
56 fprintf(Outfp, "#(n=%lld, seed=%lld) Distribution of maximum of |x| \n\n", n, seed);
57
58 init_genrand(seed);
59 maxData = NAN;
60 mean = 0;
61 stddev = 0;
62 for(i = 0;i < ndata; ++i) {
63 max = NAN;
64 for(j = 0;j < n; ++j) {
65 SampleMean = 0;
66 SampleStddev = 0;
67 for(k = 0;k < nu; ++k) {
68 rand1 = genrand_real3();
69 rand2 = genrand_real3();
70 random[k] = -sqrt(-2.0*log(rand1)) *cos(2*M_PI*rand2);
71 // random[k] = pow(rand1, 2); if(rand2 < 0.5) random[k] *= -1;
72 SampleStddev += random[k]*random[k];
73 }
74 for(k = 0;k < nu; ++k) for(l = k;l < k+1; ++l) {
75 SampleMean += (random[k]*random[l]) *randCoeff[ (Integer_t)(NumCoeff*genrand_real3()) ];
76 }
77 rand = fabs( SampleMean/SampleStddev );
78 max = fmax(max, rand);
79 // max = rand;
80 }
81 // subMax = (Integer_t)(max/binwidth) +1;
82 // if(subMax > MAX) {
83 // i -=1;
84 // continue;
85 // }
86 maxData = fmax(maxData, max);
87 mean += max;
88 stddev += max*max;
89 fprintf(Outfp, "%lld %le\n", i, max);
90 }
91 mean /= (double)ndata;
92 stddev /= (double)ndata;
93 stddev = sqrt( stddev -mean*mean );
94 binwidth = binratio*stddev;
95 // binwidth = 1.0;
96 // binwidth = 0.01;
97 subMax = (Integer_t)(maxData/binwidth) +1;
98 if(subMax > MAX) subMax = MAX;
99 subMax=MAX;
100 // printf("n=%lld, subMax=%lld, MAX=%lld, maxData=%le, binwidth=%lf\n", n, subMax, MAX, maxData, binwidth);
101 histogram = alloc_ivector(subMax); for(i = 0;i < subMax; ++i) histogram[i] = 0;
102
103 sprintf(str, "Dist_maximum_%lld_raw.txt", n);
104 Infp = fopen(filename, "r");
105 if (Infp == NULL) {
106 printf("Can't open a file %s\n", filename);
107 exit(EXIT_FAILURE);
108 }
109 skip_header(Infp);
110
111 count=0;
112 while ( fscanf(Infp, "%lld %le", &i, &max) != EOF ) {
113 itemp = (Integer_t)(max/binwidth);
114 if(itemp >= subMax) continue;
115 if(itemp < 0) continue;
116 histogram[itemp] += 1;
117 count += 1;
118 }
119
120 sprintf(str, "Dist_maximum_%lld.txt", n);
121 Outfp = fopen(filename, "w");
122 if (Outfp == NULL) {
123 printf("Can't open a file %s\n", filename);
124 exit(EXIT_FAILURE);
125 }
126 fprintf(Outfp, "# mean=%le, stddev=%le\n\n", mean, stddev);
127 fprintf(Outfp, "# 1.Maximum value 2.Probability density\n\n");
128 for(i = 0;i < subMax; ++i) {
129 fprintf(Outfp, "%le %le\n", binwidth*(i+0.5), histogram[i]/(binwidth*count));
130 }
131
132 return 0;
133}
MKL_INT Integer_t
Definition mytypes.hpp:359