Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <iomanip>
- #include <math.h>
- #include <vector>
- using namespace std;
- void recursion();
- void uniform();
- void exponent();
- int main()
- {
- cout << "Recursion method:" << endl; //2nd work, 1st task
- recursion();
- //cout << endl << endl << "Uniform distribution:" << endl;
- //uniform();
- //cout << endl << endl << "Exponential distribution:" << endl; //2nd work, 2nd task
- //exponent();
- system("pause");
- return 0;
- }
- void recursion()
- {
- double Mat, D, sigma, sum = 0, sumd = 0, sumd_buff;
- double Z[100], x[100];
- double x1[100], q;
- int n = 100;
- int Z_1 = 12345,
- Z0 = 97531,
- a0 = 1,
- a1 = 1,
- M = 5000;
- Z[0] = Z_1;
- Z[1] = Z0;
- for (int i = 2; i < n; i++)
- Z[i] = a0*Z[i - 2] + a1*Z[i - 1];
- cout << "x:" << endl;
- for (int i = 0; i < n; i++)
- {
- x[i] = fmod(Z[i], M);
- x1[i] = x[i] / M;
- cout << x1[i] << endl;
- }
- for (int i = 0; i < n; i++)
- {
- sum = sum + x1[i];
- sumd_buff = pow(x1[i], 2);
- sumd += sumd_buff;
- }
- Mat = sum / n;
- D = (sumd / n) - (pow(Mat, 2));
- sigma = sqrt(D);
- cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigma << endl;
- //-----------2nd work-----------//
- //интервалы
- double b = 0.9, t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
- e1 = sigma * t;
- Id1 = Mat - e1;
- Id2 = Mat + e1;
- for (int i = 0; i < n; i++)
- {
- us = x1[i] - Mat;
- u_buff = pow(us, 4);
- u_sum += u_buff;
- }
- u4 = u_sum / n;
- sigmaD = sqrt((u4/n)-(((n-3)/(n*(n-1)))*pow(D,2)));
- e2 = sigmaD * t;
- Im1 = D - e2;
- Im2 = D + e2; \
- cout << endl << "Intervals:" << endl;
- cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
- cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
- //Пирсон
- double Xnabl = 0, Xkrit = 11.0705, min = x1[0], max = x1[0], h, td;
- int k;
- for (int i = 0; i < n; i++)
- {
- if (x1[i] < min) min = x1[i];
- if (x1[i] > max) max = x1[i];
- }
- //cout << "Xmax = " << max << endl << "Xmin = " << min << endl;
- h = max - min;
- k = 1 + log2(n);
- td = h / k;
- //cout << "t = " << td << endl;
- vector<double> xi;
- for (int i = 0; i < k; i++)
- xi.push_back(min + i*td);
- xi.push_back(max);
- vector<int> mi;
- for (int i = 0; i < k; i++)
- mi.push_back(0);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < k; j++)
- {
- if (x1[i] >= xi[j] && x1[i] <= xi[j + 1])
- {
- mi[j]++;
- break;
- }
- }
- double mi_;
- double summi, sumpow, sumnabl = 0;
- for (int i = 0; i < k; i++)
- {
- mi_ = (xi[i+1] - xi[i])*n;
- summi = mi[i] - mi_;
- sumpow = pow(summi, 2);
- sumnabl += sumpow;
- }
- Xnabl = sumnabl / mi_;
- cout << endl << "Pirson:" << endl << "Xkrit (0.05; 5) = " << Xkrit << endl << "Xnabl = " << Xnabl << endl;
- if (Xnabl < Xkrit) cout << "H0 is not rejected" << endl;
- else cout << "H0 is rejected" << endl;
- //вывод гистограммы (все рассчитывалось в Пирсоне)
- cout << endl << "Gistogramm:" << endl;
- cout << "Fg:" << endl;
- double Fg;
- for (int i = 0; i < k; i++)
- {
- Fg = mi[i] / (n*td);
- cout << Fg << endl;
- }
- cout << "xi:" << endl;
- for (int i = 0; i < k; i++)
- {
- cout << xi[i] << endl;
- }
- }
- void uniform()
- {
- int n = 100;
- double r[100], x[100], Mat, D, sigmau, sum = 0, sumd_buff, sumd = 0, sigma;
- int b = rand(), a = rand() < b;
- cout << "a = " << a << ";" << setw(8) << "b = " << b << endl << "x:" << endl;
- for (int i = 0; i < n; i++)
- {
- r[i] = ((double)rand() / (RAND_MAX));
- x[i] = a + (b - a)*r[i];
- cout << x[i] << endl;
- }
- for (int i = 0; i < n; i++)
- {
- sum = sum + x[i];
- sumd_buff = pow(x[i], 2);
- sumd += sumd_buff;
- }
- Mat = sum / n;
- D = (sumd / n) - (pow(Mat, 2));
- sigmau = sqrt(D);
- cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigmau << endl;
- //------------2nd work---------//
- double t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
- e1 = sigmau * t;
- Id1 = Mat - e1;
- Id2 = Mat + e1;
- for (int i = 0; i < n; i++)
- {
- us = x[i] - Mat;
- u_buff = pow(us, 4);
- u_sum += u_buff;
- }
- u4 = u_sum / n;
- sigmaD = sqrt((u4 / n) - (((n - 3) / (n*(n - 1)))*pow(D, 2)));
- e2 = sigmaD * t;
- Im1 = D - e2;
- Im2 = D + e2;
- cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
- cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
- }
- void exponent()
- {
- int n = 100;
- double r[100], x[100], Mat, D, sigmau, sum = 0, sumd_buff, sumd = 0, sigma;;
- double jl = 0.8;
- cout << "x:" << endl;
- for (int i = 0; i < n; i++)
- {
- r[i] = ((double)rand() / (RAND_MAX));
- x[i] = (-1 / jl) * log(r[i]);
- cout << x[i] << endl;
- }
- for (int i = 0; i < n; i++)
- {
- sum = sum + x[i];
- sumd_buff = pow(x[i], 2);
- sumd += sumd_buff;
- }
- Mat = sum / n;
- D = (sumd / n) - (pow(Mat, 2));
- sigmau = sqrt(D);
- cout << "Mat = " << Mat << endl << "D = " << D << endl << "Sigma = " << sigmau << endl;
- //-----------2nd work----------//
- //интервалы
- double b = 0.9, t = 1.643, e1, e2, Id1, Id2, Im1, Im2, u4, us, u_buff, u_sum = 0, sigmaD;
- e1 = sigmau * t;
- Id1 = Mat - e1;
- Id2 = Mat + e1;
- for (int i = 0; i < n; i++)
- {
- us = x[i] - Mat;
- u_buff = pow(us, 4);
- u_sum += u_buff;
- }
- u4 = u_sum / n;
- sigmaD = sqrt((u4 / n) - (((n - 3) / (n*(n - 1)))*pow(D, 2)));
- e2 = sigmaD * t;
- Im1 = D - e2;
- Im2 = D + e2;
- cout << endl << "Intervals:" << endl;
- cout << "Id = (" << Id1 << "; " << Id2 << ")" << endl;
- cout << "Im = (" << Im1 << "; " << Im2 << ")" << endl;
- //пирсон
- double Xnabl = 0, Xkrit = 12.5916, min = x[0], max = x[0], h, td;
- int k;
- for (int i = 0; i < n; i++)
- {
- if (x[i] < min) min = x[i];
- if (x[i] > max) max = x[i];
- }
- //cout << "Xmax = " << max << endl << "Xmin = " << min << endl;
- h = max - min;
- k = 1 + log2(n);
- td = h / k;
- //cout << "t = " << td << endl;
- vector<double> xi;
- for (int i = 0; i < k; i++)
- xi.push_back(min + i*td);
- xi.push_back(max);
- vector<int> mi;
- for (int i = 0; i < k; i++)
- mi.push_back(0);
- for (int i = 0; i < n; i++)
- for (int j = 0; j < k; j++)
- {
- if (x[i] >= xi[j] && x[i] <= xi[j + 1])
- {
- mi[j]++;
- break;
- }
- }
- double mi_;
- vector<double> f;
- for (int i = 0; i < k+1; i++)
- f.push_back(1 - pow(2.72, (-jl*xi[i])));
- for (int i = 0; i < k; i++)
- {
- mi_ = (f[i+1]-f[i])*n;
- Xnabl += pow(mi[i] - mi_, 2) / mi_;
- }
- cout << endl << "Pirson:" << endl << "Xkrit (0.05; 6) = " << Xkrit << endl << "Xnabl = " << Xnabl << endl;
- if (Xnabl < Xkrit) cout << "H0 is not rejected" << endl;
- else cout << "H0 is rejected" << endl;
- //вывод гистограммы (все рассчитывалось в Пирсоне)
- cout << endl << "Gistogramm:" << endl;
- cout << "Fg:" << endl;
- double Fg;
- for (int i = 0; i < k; i++)
- {
- Fg = mi[i] / (n*td);
- cout << Fg << endl;
- }
- cout << "xi:" << endl;
- for (int i = 0; i < k; i++)
- {
- cout << xi[i] << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement