StatMech
Loading...
Searching...
No Matches
maximum_randN.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.ndata 3.InFile\n");
19 exit(EXIT_FAILURE);
20 }
21 Integer_t i, j, k, n, count, itemp;
22 Integer_t const ndata = atoi(argv[1]);
23 Integer_t const MAX = 1000;
24
25 Integer_t seed=0;
26 Integer_t nu = 7;
27 double max, maxData, dtemp;
28 double rand, rand1, rand2;
29 double SampleMean, SampleStddev;
30 double CDF[MAX]; for(i = 0;i < MAX; ++i) CDF[i] = 0;
31
32 Integer_t subMax;
33 Integer_t *histogram, maxCount;
34 double mean, stddev, mode;
35 double binwidth, binratio=0.01;
36
37 Integer_t const BUFSIZE = 1000;
38 char str[BUFSIZE];
39 char *filename = str;
40
41 FILE *Infp;
42 strcpy(str, argv[2]);
43 Infp = fopen(filename, "r");
44 if (Infp == NULL) {
45 printf("Can't open a file %s\n", filename);
46 exit(EXIT_FAILURE);
47 }
48 skip_header(Infp);
49 count=0;
50 while( fscanf(Infp, "%lld %lld %le", &i, &j, &dtemp) != EOF ) {
51 count+=1;
52 CDF[i] = dtemp;
53 printf("(count=%lld) %lld %lld %le\n", count, i, j, CDF[i]);
54 fflush(stdout);
55 }
56
57
58 FILE *Outfp;
59 sprintf(str, "Dist_maximum_raw.txt");
60 Outfp = fopen(filename, "w");
61 if (Outfp == NULL) {
62 printf("Can't open a file %s\n", filename);
63 exit(EXIT_FAILURE);
64 }
65 fprintf(Outfp, "#(ndata=%lld, seed=%lld) Distribution of maximum of |x| \n\n", ndata, seed);
66
67 init_genrand(seed);
68 maxData = NAN;
69 mean = 0;
70 stddev = 0;
71 for(i = 0;i < ndata; ++i) {
72 //******************** Choose the number of random variables
73 rand1 = genrand_real3();
74 for(j = 0;j < MAX; ++j) if(CDF[j] > rand1) break;
75 n = (Integer_t)( (j-1)/10.0 );
76 // n = 1;
77 //******************** (END) Choose the number of random variables
78 max = NAN;
79 for(j = 0;j < n; ++j) {
80 SampleMean = 0;
81 SampleStddev = 0;
82 for(k = 0;k <= nu; ++k) {
83 rand1 = genrand_real3();
84 rand2 = genrand_real3();
85 rand = -sqrt(-2.0*log(rand1)) *cos(2*M_PI*rand2);
86 SampleMean += fabs(rand);
87 SampleStddev += rand*rand;
88 }
89 SampleMean /= (double)(nu+1);
90 SampleStddev /= (double)(nu+1);
91 SampleStddev = SampleStddev -SampleMean*SampleMean;
92 SampleStddev = sqrt( SampleStddev/nu );
93
94 rand = fabs( SampleMean/SampleStddev );
95 max = fmax(max, rand);
96 // max = rand;
97 }
98 // subMax = (Integer_t)(max/binwidth) +1;
99 // if(subMax > MAX) {
100 // i -=1;
101 // continue;
102 // }
103 maxData = fmax(maxData, max);
104 mean += max;
105 stddev += max*max;
106 fprintf(Outfp, "%lld %le\n", i, max);
107 }
108 mean /= (double)ndata;
109 stddev /= (double)ndata;
110 stddev = sqrt( stddev -mean*mean );
111 binwidth = binratio*stddev;
112 subMax = (Integer_t)(maxData/binwidth) +1;
113 histogram = alloc_ivector(subMax); for(i = 0;i < subMax; ++i) histogram[i] = 0;
114
115 sprintf(str, "Dist_maximum_raw.txt");
116 Infp = fopen(filename, "r");
117 if (Infp == NULL) {
118 printf("Can't open a file %s\n", filename);
119 exit(EXIT_FAILURE);
120 }
121 skip_header(Infp);
122
123 count=0;
124 while ( fscanf(Infp, "%lld %le", &i, &max) != EOF ) {
125 itemp = (Integer_t)(max/binwidth);
126 if(itemp >= subMax) continue;
127 if(itemp < 0) continue;
128 histogram[itemp] += 1;
129 count += 1;
130 }
131
132 maxCount = 0;
133 for(i = 0;i < subMax; ++i) {
134 if(maxCount < histogram[i]) {
135 mode = binwidth*(i+0.5);
136 maxCount = histogram[i];
137 }
138 }
139
140 sprintf(str, "Dist_maximum.txt");
141 Outfp = fopen(filename, "w");
142 if (Outfp == NULL) {
143 printf("Can't open a file %s\n", filename);
144 exit(EXIT_FAILURE);
145 }
146 fprintf(Outfp, "# Input: %s\n", argv[2]);
147 fprintf(Outfp, "# mean=%le, stddev=%le, mode=%le\n", mean, stddev, mode);
148 fprintf(Outfp, "# 1.Maximum value 2.Probability density\n\n");
149 for(i = 0;i < subMax; ++i) {
150 fprintf(Outfp, "%le %le\n", binwidth*(i+0.5), histogram[i]/(binwidth*count));
151 }
152
153 return 0;
154}
double CDF(double x)
Definition maximum.c:16
MKL_INT Integer_t
Definition mytypes.hpp:359