Advertisement
sashachca

lab4

Apr 30th, 2018
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 10.49 KB | None | 0 0
  1. function MC_LR_4_KHMELEV
  2.  
  3.  
  4.  %_______________________________ЗАДАНИЕ I______________________________________
  5.  
  6.   a_ = -0.7; b_ = 7.3; % по условию
  7.   printf('\n-------------\n  TASK NUMBER 1\n');
  8.  
  9.   X = sort(oneOfArrays('ud-2'));
  10.   N = length(X);
  11.  
  12.   for j = 1:N
  13.     F(j) = f(X(j));
  14.     FNx(j) = Fn(j, 'x');
  15.     FNx0(j) = Fn(j, '0');
  16.   endfor
  17.   [Dn, j] = max(max( abs(FNx - F), abs(FNx0 - F) ));
  18.  
  19.   x_ = X(j); % x_ - это x*,   X[] - это выборка, состоящая из элементов x от 1 до N
  20.   DnN = Dn*sqrt(N);
  21.  
  22.   printf('\n------\nTABLE 1:\n a = %i\n b = %i\n N = %i\n Dn = %i\n Dn√N = %i\n x* = %i\n F(x*) = %i\n Fn(x*) = %i\n Fn(x*-0) = %i\n------\n\n', a_, b_, N, Dn, myround(DnN, 5), x_, myround(f(x_), 5), myround(Fn(j, 'x*'), 5), myround(Fn(j, '0'), 5));
  23.  
  24.  
  25.   % график эмпирической функции распределения и график функции распределения равномерного закона на отрезке [a , b]:
  26.   v = 0.1; % шаг по вертикали
  27.   h = 1; % шаг по горизонтали
  28.  
  29.   high = 1 + v;
  30.   left = fix(a_); right = fix(b_);
  31.   low = 0 - v;
  32.   xticks = [left:h:right];
  33.   yticks = [low:v:high];
  34.  
  35.   figure('Name','EDF & uniform distribution');
  36.   plot(X, FNx, 'b', X, F, 'g'); % FNx - точки эмпирической функции, F - точки функции равномерного закона
  37.    title('blue - EDF; green - cumulative distribution function'), grid on
  38.   set(gca,'xtick', xticks);
  39.   set(gca,'ytick', yticks);
  40.   xlim([left, right]);
  41.   ylim([left, high]);
  42.  
  43.   % Проверка гипотезы о соответствии выборки равномерному распределению
  44.   a = 0.05; % уровень значимости
  45.  
  46.     % первый способ:
  47.     printf('Hypothesis'' check,\nthe first method:\n');
  48.     ka = K(a);
  49.     if DnN <= ka
  50.       printf('Dn√N = %i; ka = %i, %i<=%i  =>  Gipoteza mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  51.     else
  52.       printf('Dn√N = %i; ka = %i, %i>%i  =>  Gipoteza nie mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  53.     endif
  54.        
  55.     % второй способ:
  56.     printf('\nthe second method:\n');
  57.     pval = kolmogorov_smirnov_test(X, "unif", a_, b_);
  58.    
  59.     if pval >= a
  60.       printf('pval = %i; a = %i, %i>=%i  =>  Gipoteza mozhet byt prinyata\n', myround(pval, 5), a, myround(pval, 5), a);
  61.     else
  62.       printf('pval = %i; a = %i, %i<%i  =>  Gipoteza nie mozhet byt prinyata.\n', myround(pval, 5), a, myround(pval, 5), a);
  63.     endif
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  %_______________________________ЗАДАНИЕ II_____________________________________
  70.  
  71.   printf('\n\n-------------\n  TASK NUMBER 2\n');
  72.  
  73.   Y = sort(oneOfArrays('ud-3'));
  74.   M = length(Y);
  75.  
  76.   FNy = []; % Fn(y(k))
  77.   FMy = []; % Fm(y(k))
  78.   FMy0 = []; % Fm(y(k) - 0)
  79.  
  80.   for k = 1:M
  81.     for j = 2:N-1
  82.       if X(j) <= Y(k) && Y(k) < X(j+1)
  83.         FNy(k) = Fn(j, 'y');
  84.       endif
  85.     endfor
  86.     if Y(k) < X(1)
  87.       FNy(k) = 0;
  88.     elseif Y(k) >= X(N)
  89.       FNy(k) = 1;
  90.     endif
  91.    
  92.     FMy(k) = Fm(k, 'y');
  93.     FMy0(k) = Fm(k, '0');
  94.   endfor
  95.  
  96.   FMx = []; %Fm(x(j))
  97.   for j = 1:N
  98.     for k = 2:M-1
  99.       if Y(k) <= X(j) && X(j) < Y(k+1)
  100.         FMx(j) = Fm(k, 'x');
  101.       endif
  102.     endfor
  103.     if X(j) < Y(1)
  104.       FMx(j) = 0;
  105.     elseif X(j) >= Y(M)
  106.       FMx(j) = 1;
  107.     endif
  108.   endfor
  109.  
  110.   x_ = 0; % x*
  111.   [xmax, j] = max(max( abs(FNx - FMx), abs(FNx0 - FMx) ));
  112.   [ymax, k] = max(max( abs(FNy - FMy), abs(FNy - FMy0) ));
  113.  
  114.   if xmax > ymax
  115.     Dnm = xmax;
  116.     x_ = X(j);
  117.     jk = j;
  118.   else
  119.     Dnm = ymax;
  120.     x_ = Y(k);
  121.     jk = k;
  122.   endif
  123.  
  124.   Knm = Dnm*sqrt(N*M/(N+M));
  125.  
  126.   printf('\n------\nTABLE 2:\n N = %i\n M = %i\n Dnm = %i\n Knm = %i\n x* = %i\n Fn(x*) = %i\n Fn(x*-0) = %i\n Fm(x*) = %i\n Fm(x*-0) = %i\n------\n\n', N, M, myround(Dnm, 5), myround(Knm, 5), x_, myround(Fn(jk, 'x*'), 5), myround(Fn(jk, '0'), 5), myround(Fm(jk, 'x*'), 5), myround(Fm(jk, '0'), 5));
  127.  
  128.  
  129.   % графики эмпирических функций наших выборок:
  130.   figure('Name','EDFs');
  131.   plot(X, FNx, 'b', Y, FMy, 'r');
  132.    title('blue - EDF of ud-2; red - EDF of ud-3'), grid on
  133.   set(gca,'xtick', xticks); % xticks и yticks указаны в задании I
  134.   set(gca,'ytick', yticks);
  135.   xlim([left, right]); % так же как и left и right
  136.   ylim([left, high]);
  137.  
  138.  
  139.  
  140.   % Проверка гипотезы о соответствии выборки равномерному распределению
  141.   a = 0.02; % уровень значимости
  142.  
  143.     % первый способ:
  144.     printf('Hypothesis'' check,\nthe first method:\n');
  145.     ka = K(a);
  146.     if Knm <= ka
  147.       printf('Dn√N = %i; ka = %i, %i<=%i  =>  Gipoteza mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  148.     else
  149.       printf('Dn√N = %i; ka = %i, %i>%i  =>  Gipoteza nie mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  150.     endif
  151.        
  152.     % второй способ:
  153.     printf('\nthe second method:\n');
  154.     pval = kolmogorov_smirnov_test_2(X, Y);
  155.    
  156.     if pval >= a
  157.       printf('pval = %i; a = %i, %i>=%i  =>  Gipoteza mozhet byt prinyata\n', myround(pval, 5), a, myround(pval, 5), a);
  158.     else
  159.       printf('pval = %i; a = %i, %i<%i  =>  Gipoteza nie mozhet byt prinyata.\n', myround(pval, 5), a, myround(pval, 5), a);
  160.     endif
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  %______________________________________________________________________________
  168.  
  169.  %%%%%%% ФУНКЦИИ, ВКЛЮЧЕННЫЕ В ОСНОВНУЮ ФУНКЦИЮ %%%%%%%
  170.  
  171.   function Fn = Fn(j, param) % Fn(x(j) - 0)
  172.     Fn = 0;
  173.  
  174.     if param == '0'
  175.       Fn = (j - 1)/N;
  176.     else
  177.       Fn = j/N;
  178.     endif
  179.    
  180.   endfunction
  181.  
  182.  
  183.   function Fm = Fm(k, param) % Fm(y(k) - 0)
  184.     Fm = 0;
  185.    
  186.     if param == '0'
  187.       Fm = (k - 1)/M;
  188.     else
  189.       Fm = k/M;
  190.     endif
  191.    
  192.   endfunction
  193.    
  194.  
  195.  
  196.   function F = f(x)
  197.     F = 0;
  198.    
  199.     if x < a_
  200.       F = 0;
  201.       return
  202.     elseif x > b_
  203.       F = 1;
  204.       return
  205.     endif
  206.    
  207.     F = (x-a_)/(b_-a_);
  208.    
  209.   endfunction
  210.  
  211.    
  212.    
  213.  
  214.  
  215.   function ka = K(a) % критические значения распределения Колмогорова
  216.     ka = 0;
  217.    
  218.     switch a % уровни значимости
  219.    
  220.       case 0.01
  221.         ka = 1.63;
  222.       case 0.02
  223.         ka = 1.57;
  224.       case 0.05
  225.         ka = 1.36;
  226.       case 0.1
  227.         ka = 1.22;
  228.       case 0.2
  229.         ka = 1.07;
  230.        
  231.     endswitch
  232.   endfunction
  233.  
  234.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  235. end
  236.  
  237.  
  238. function R = myround(x, k) % округление до 5 знаков после запятой
  239.   R = 0;
  240.  
  241.   R = round(x*10^k)/10^k;
  242.  
  243. endfunction
  244.  
  245.  
  246. function arr = oneOfArrays(a) % выдача массива
  247.   arr = []; %вариант 17
  248.  
  249.     if a == 'ud-2'
  250.         arr = [ -0.39944, 6.75288, 3.31944, -0.48104, 2.61992, 5.96608, 5.66712, 4.99512, 3.20880, 3.06232, 2.20880, -0.11496, 4.19288, 7.12520, 3.03560, -0.56360, 0.43696, 4.32168, 0.81152, -0.06968, -0.61544, 5.30408, 3.98192, 0.07384, 1.54960, 4.06720, 0.45048, 2.57456, 7.04328, 1.64072, 2.83576, 2.44760, 4.22840, 6.32536, 0.18424, 0.95256, 4.69024, 5.25800, 1.66920, 3.89008, 4.64128, 0.43728, 3.15824, 0.35560, 2.09704, 7.03984, 7.13752, 0.83640, 2.63864, -0.62744, 6.64240, 1.05056, 1.45264, 6.26824, 5.71104, 2.18056, -0.18240, 4.26096, 3.40840, 1.65960, 3.66640, 4.17248, 1.61944, 0.45624, 5.40328, 5.01400, 4.35712, -0.52176, 0.55720, 1.09208, -0.35032, 2.42904, 1.67488, 6.21360, 6.42264, -0.56240, 1.92344, 1.76880, 0.38584, 2.94968, 4.02616, 5.09936, 6.16928, 0.13368, 6.87656, 3.73112, 4.09616, 0.58224, 7.07080, 2.60096, 4.55792, 4.91496, 4.02120, 1.55648, 0.38624, 0.09968, 5.12928, 5.38552, -0.14792, 3.30696, 5.98192, 5.84112, 3.79000, 7.28200, 2.92104, -0.12168, 6.14240, 3.45272, 0.21008, 3.28312, 3.36880, 0.87608, 1.14888, 4.54560, 5.97800, 0.07280, 4.23640, -0.25800, 2.65880, -0.38464, 5.64496, -0.00864, 1.15808, -0.50472, 0.92080, 2.99072, 1.41280, 3.70256, 0.43632, 4.90456, 1.51096, 7.21520, 3.36024, 3.51312, 4.10872, 3.53424, 4.57088, 1.60248, 1.51760, 6.46240, 5.62552, 1.93408, 2.88712, 0.59824, 3.36392, 6.77608, 4.60576, 6.11392, 2.80656, 3.53128, 2.81800, 1.56672, 2.97120, 4.60296, 4.93376, 4.05208, 6.54216, 1.67656, -0.04072, 6.37000, 4.02336, 1.32976, 4.99040, 3.11976, 5.62544, 3.48656, 2.31432, 1.71704, 4.66264, 4.10344, 2.15032, 5.22112, -0.69224, 2.71608, 7.20856, 5.63312, 0.65536, 0.12864, 4.88544, 1.27200, 2.84016, 7.24824, 3.16328, 2.26544, 6.39216, 0.01832, 5.36344, 5.97456, 2.63144, 4.16824, 3.62856, -0.02200, 3.99360, 5.43744, 2.90744, 1.01976, 5.27976, -0.10112, 1.18800, 6.06552, 2.56688, 2.88288, 1.66056, 1.90168, 6.26872, 1.58360, 4.89144, 1.95688, 5.61112, 6.07032, 7.17096, 5.30800, 3.07528, 0.77632, 5.78792, 5.25768, 3.28296, 2.67496, -0.15960, 4.46120, 2.02616, 1.37648, 2.91520, 0.65480, -0.39344 ];
  251.   elseif a == 'ud-3'
  252.         arr = [ 6.31552, 4.11264, 6.56736, -0.48704, 0.43344, 0.60616, 0.90928, 5.76784, 6.62000 6.50536, -0.06320, 4.48152, 1.29048, 0.01656, 3.42600, 4.59536, 4.95592, 2.11648 1.07640, 5.57536, 1.45536, 6.79088, 6.59208, 0.37488, 2.33232, 1.90840, 1.17848 0.49480, 6.47288, 6.96040, 6.07528, 5.53096, 2.33072, 3.07584, 1.08968, 2.48720 6.33360, 1.14640, 1.17712, 4.08704, 5.41472, 1.88368, 3.61904, 6.86976, 2.24624 3.85440, 3.68752, 3.78248, 6.53288, 3.31800, 5.03600, 2.00872, 5.79824, 3.23256 5.09064, 2.22064, 5.92912, 3.36816, 0.60736, 4.61112, 4.09192, 6.24808, 6.29184 6.97784, 7.19656, 1.95384, -0.42848, 4.97408, 4.11192, 4.33032, 5.09344, 0.28168 5.15720, 1.85880, 0.67072, 2.46776, 0.52416, -0.23392, 2.25904, 1.72624, 7.20104 0.10808, 5.30144, 3.00144, 4.38832, 7.01656, 3.00272, 0.46944, 1.89472, 6.84232 -0.51504, 7.13128, 0.48152, 3.97552, 0.25880, -0.33232, 7.15312, 4.35944, 3.67256 2.06088, 2.43432, 2.87704, 1.84080, 0.22936, 3.69592, 1.20304, 0.15944, 3.86696 2.31088, 6.51296, 1.91040, 0.71304, -0.39056, 1.02632, 3.53840, 1.14864, 1.59424 1.21120, 6.30400, 3.31000, 4.15016, 0.44560, 4.75040, 1.24392, 1.93936, 4.10968 5.69208, 2.26176, 0.72632, 5.15096, 5.14464, -0.04216, 6.96768, 1.65728, 6.93440 1.84528, 2.96392, 1.27104, 6.26928, 1.59512, 5.68664, -0.35936, 2.78648, 1.15728 0.42272, 0.85120, 6.88056, 4.27968, 0.44752, 6.06968, 0.91632, 2.80912, 5.19872 5.39200, 6.13736, 6.26920, 3.72552, 5.78648, 4.01912, 0.06312, 5.04096, 6.52192 5.62768, -0.37712, 0.49000, 2.67504, 5.74976, 3.87840, 3.95752, 4.07392, 4.96000 1.08176, 5.18920, 3.07328, 5.69696, 2.26976, 5.53432, 1.39512, 0.16264, 3.91384 ];
  253.   endif
  254.  
  255. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement