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