Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <iomanip>
  4. #include <math.h>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. void recursion();
  9. void uniform();
  10. void exponent();
  11.  
  12. int main()
  13. {
  14. cout << "Recursion method:" << endl; //2nd work, 1st task
  15. recursion();
  16. //cout << endl << endl << "Uniform distribution:" << endl;
  17. //uniform();
  18. //cout << endl << endl << "Exponential distribution:" << endl; //2nd work, 2nd task
  19. //exponent();
  20. system("pause");
  21. return 0;
  22. }
  23.  
  24. void recursion()
  25. {
  26. double Mat, D, sigma, sum = 0, sumd = 0, sumd_buff;
  27. double Z[100], x[100];
  28. double x1[100], q;
  29. int n = 100;
  30. int Z_1 = 12345,
  31. Z0 = 97531,
  32. a0 = 1,
  33. a1 = 1,
  34. M = 5000;
  35.  
  36. Z[0] = Z_1;
  37. Z[1] = Z0;
  38. for (int i = 2; i < n; i++)
  39. Z[i] = a0*Z[i - 2] + a1*Z[i - 1];
  40.  
  41. cout << "x:" << endl;
  42. for (int i = 0; i < n; i++)
  43. {
  44. x[i] = fmod(Z[i], M);
  45. x1[i] = x[i] / M;
  46. cout << x1[i] << endl;
  47. }
  48.  
  49. for (int i = 0; i < n; i++)
  50. {
  51. sum = sum + x1[i];
  52. sumd_buff = pow(x1[i], 2);
  53. sumd += sumd_buff;
  54. }
  55. Mat = sum / n;
  56. D = (sumd / n) - (pow(Mat, 2));
  57. sigma = sqrt(D);
  58. cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigma << endl;
  59.  
  60. //-----------2nd work-----------//
  61. //интервалы
  62. double b = 0.9, t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
  63. e1 = sigma * t;
  64. Id1 = Mat - e1;
  65. Id2 = Mat + e1;
  66. for (int i = 0; i < n; i++)
  67. {
  68. us = x1[i] - Mat;
  69. u_buff = pow(us, 4);
  70. u_sum += u_buff;
  71. }
  72. u4 = u_sum / n;
  73. sigmaD = sqrt((u4/n)-(((n-3)/(n*(n-1)))*pow(D,2)));
  74. e2 = sigmaD * t;
  75. Im1 = D - e2;
  76. Im2 = D + e2; \
  77. cout << endl << "Intervals:" << endl;
  78. cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
  79. cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
  80.  
  81. //Пирсон
  82. double Xnabl = 0, Xkrit = 11.0705, min = x1[0], max = x1[0], h, td;
  83. int k;
  84. for (int i = 0; i < n; i++)
  85. {
  86. if (x1[i] < min) min = x1[i];
  87. if (x1[i] > max) max = x1[i];
  88. }
  89. //cout << "Xmax = " << max << endl << "Xmin = " << min << endl;
  90. h = max - min;
  91. k = 1 + log2(n);
  92. td = h / k;
  93. //cout << "t = " << td << endl;
  94. vector<double> xi;
  95. for (int i = 0; i < k; i++)
  96. xi.push_back(min + i*td);
  97. xi.push_back(max);
  98. vector<int> mi;
  99. for (int i = 0; i < k; i++)
  100. mi.push_back(0);
  101. for (int i = 0; i < n; i++)
  102. for (int j = 0; j < k; j++)
  103. {
  104. if (x1[i] >= xi[j] && x1[i] <= xi[j + 1])
  105. {
  106. mi[j]++;
  107. break;
  108. }
  109. }
  110. double mi_;
  111. double summi, sumpow, sumnabl = 0;
  112. for (int i = 0; i < k; i++)
  113. {
  114. mi_ = (xi[i+1] - xi[i])*n;
  115. summi = mi[i] - mi_;
  116. sumpow = pow(summi, 2);
  117. sumnabl += sumpow;
  118. }
  119. Xnabl = sumnabl / mi_;
  120. cout << endl << "Pirson:" << endl << "Xkrit (0.05; 5) = " << Xkrit << endl << "Xnabl = " << Xnabl << endl;
  121. if (Xnabl < Xkrit) cout << "H0 is not rejected" << endl;
  122. else cout << "H0 is rejected" << endl;
  123.  
  124. //вывод гистограммы (все рассчитывалось в Пирсоне)
  125. cout << endl << "Gistogramm:" << endl;
  126. cout << "Fg:" << endl;
  127. double Fg;
  128. for (int i = 0; i < k; i++)
  129. {
  130. Fg = mi[i] / (n*td);
  131. cout << Fg << endl;
  132. }
  133. cout << "xi:" << endl;
  134. for (int i = 0; i < k; i++)
  135. {
  136. cout << xi[i] << endl;
  137. }
  138. }
  139.  
  140. void uniform()
  141. {
  142. int n = 100;
  143. double r[100], x[100], Mat, D, sigmau, sum = 0, sumd_buff, sumd = 0, sigma;
  144. int b = rand(), a = rand() < b;
  145. cout << "a = " << a << ";" << setw(8) << "b = " << b << endl << "x:" << endl;
  146. for (int i = 0; i < n; i++)
  147. {
  148. r[i] = ((double)rand() / (RAND_MAX));
  149. x[i] = a + (b - a)*r[i];
  150. cout << x[i] << endl;
  151. }
  152.  
  153. for (int i = 0; i < n; i++)
  154. {
  155. sum = sum + x[i];
  156. sumd_buff = pow(x[i], 2);
  157. sumd += sumd_buff;
  158. }
  159. Mat = sum / n;
  160. D = (sumd / n) - (pow(Mat, 2));
  161. sigmau = sqrt(D);
  162. cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigmau << endl;
  163.  
  164. //------------2nd work---------//
  165. double t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
  166. e1 = sigmau * t;
  167. Id1 = Mat - e1;
  168. Id2 = Mat + e1;
  169. for (int i = 0; i < n; i++)
  170. {
  171. us = x[i] - Mat;
  172. u_buff = pow(us, 4);
  173. u_sum += u_buff;
  174. }
  175. u4 = u_sum / n;
  176. sigmaD = sqrt((u4 / n) - (((n - 3) / (n*(n - 1)))*pow(D, 2)));
  177. e2 = sigmaD * t;
  178. Im1 = D - e2;
  179. Im2 = D + e2;
  180. cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
  181. cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
  182. }
  183.  
  184. void exponent()
  185. {
  186. int n = 100;
  187. double r[100], x[100], Mat, D, sigmau, sum = 0, sumd_buff, sumd = 0, sigma;;
  188. double jl = 0.8;
  189. cout << "x:" << endl;
  190. for (int i = 0; i < n; i++)
  191. {
  192. r[i] = ((double)rand() / (RAND_MAX));
  193. x[i] = (-1 / jl) * log(r[i]);
  194. cout << x[i] << endl;
  195. }
  196.  
  197. for (int i = 0; i < n; i++)
  198. {
  199. sum = sum + x[i];
  200. sumd_buff = pow(x[i], 2);
  201. sumd += sumd_buff;
  202. }
  203. Mat = sum / n;
  204. D = (sumd / n) - (pow(Mat, 2));
  205. sigmau = sqrt(D);
  206. cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigmau << endl;
  207.  
  208. //-----------2nd work----------//
  209. //интервалы
  210. double b = 0.9, t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
  211. e1 = sigmau * t;
  212. Id1 = Mat - e1;
  213. Id2 = Mat + e1;
  214. for (int i = 0; i < n; i++)
  215. {
  216. us = x[i] - Mat;
  217. u_buff = pow(us, 4);
  218. u_sum += u_buff;
  219. }
  220. u4 = u_sum / n;
  221. sigmaD = sqrt((u4 / n) - (((n - 3) / (n*(n - 1)))*pow(D, 2)));
  222. e2 = sigmaD * t;
  223. Im1 = D - e2;
  224. Im2 = D + e2;
  225. cout << endl << "Intervals:" << endl;
  226. cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
  227. cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
  228.  
  229. //пирсон
  230. double Xnabl = 0, Xkrit = 12.5916, min = x[0], max = x[0], h, td;
  231. int k;
  232. for (int i = 0; i < n; i++)
  233. {
  234. if (x[i] < min) min = x[i];
  235. if (x[i] > max) max = x[i];
  236. }
  237. //cout << "Xmax = " << max << endl << "Xmin = " << min << endl;
  238. h = max - min;
  239. k = 1 + log2(n);
  240. td = h / k;
  241. //cout << "t = " << td << endl;
  242. vector<double> xi;
  243. for (int i = 0; i < k; i++)
  244. xi.push_back(min + i*td);
  245. xi.push_back(max);
  246. vector<int> mi;
  247. for (int i = 0; i < k; i++)
  248. mi.push_back(0);
  249. for (int i = 0; i < n; i++)
  250. for (int j = 0; j < k; j++)
  251. {
  252. if (x[i] >= xi[j] && x[i] <= xi[j + 1])
  253. {
  254. mi[j]++;
  255. break;
  256. }
  257. }
  258. double mi_;
  259. vector<double> f;
  260. for (int i = 0; i < k+1; i++)
  261. f.push_back(1 - pow(2.72, (-jl*xi[i])));
  262. for (int i = 0; i < k; i++)
  263. {
  264. mi_ = (f[i+1]-f[i])*n;
  265. Xnabl += pow(mi[i] - mi_, 2) / mi_;
  266. }
  267. cout << endl << "Pirson:" << endl << "Xkrit (0.05; 6) = " << Xkrit << endl << "Xnabl = " << Xnabl << endl;
  268. if (Xnabl < Xkrit) cout << "H0 is not rejected" << endl;
  269. else cout << "H0 is rejected" << endl;
  270.  
  271. //вывод гистограммы (все рассчитывалось в Пирсоне)
  272. cout << endl << "Gistogramm:" << endl;
  273. cout << "Fg:" << endl;
  274. double Fg;
  275. for (int i = 0; i < k; i++)
  276. {
  277. Fg = mi[i] / (n*td);
  278. cout << Fg << endl;
  279. }
  280. cout << "xi:" << endl;
  281. for (int i = 0; i < k; i++)
  282. {
  283. cout << xi[i] << endl;
  284. }
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement