Advertisement
sashachca

lab4

Apr 29th, 2018
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 9.05 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. %  ax = plot(X, FNx, X, F); % FN - точки эмпирической функции, F - точки функции равномерного закона
  37. %   grid on
  38. %  set(gca,'xtick', xticks);
  39. %  set(gca,'ytick', yticks);
  40. %  xlim([left, right]);
  41. %  ylim([left, high]);
  42. %   hold off
  43.  
  44.   % Проверка гипотезы о соответствии выборки равномерному распределению
  45.   a = 0.05; % уровень значимости
  46.  
  47.     % первый способ:
  48.     printf('Hypothesis'' check,\nthe first method:\n');
  49.     ka = K(a);
  50.     if DnN <= ka
  51.       printf('Dn√N = %i; ka = %i, %i<=%i  =>  Gipoteza mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  52.     else
  53.       printf('Dn√N = %i; ka = %i, %i>%i  =>  Gipoteza nie mozhet byt prinyata;\n', DnN, ka, DnN, ka);
  54.     endif
  55.        
  56.     % второй способ:
  57.     printf('\nthe second method:\n');
  58.     pval = kolmogorov_smirnov_test(X, "unif", a_, b_);
  59.    
  60.     if pval >= a
  61.       printf('pval = %i; a = %i, %i>=%i  =>  Gipoteza mozhet byt prinyata;\n', pval, a, pval, a);
  62.     else
  63.       printf('pval = %i; a = %i, %i<%i  =>  Gipoteza nie mozhet byt prinyata;\n', pval, a, pval, a);
  64.     endif
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  %_______________________________ЗАДАНИЕ II_____________________________________
  71.  
  72.   printf('\n\n-------------\n  TASK NUMBER 2\n');
  73.  
  74.   Y = sort(oneOfArrays('ud-3'));
  75.   M = length(Y);
  76.  
  77.   FNy = []; % Fn(y(k))
  78.   FMy = []; % Fm(y(k))
  79.   FMy0 = []; % Fm(y(k) - 0)
  80.  
  81.   for k = 1:M
  82.     for j = 2:N-1
  83.       if X(j) <= Y(k) && Y(k) < X(j+1)
  84.         FNy(k) = Fn(j, 'y');
  85.       endif
  86.     endfor
  87.     if Y(k) < X(1)
  88.       FNy(k) = 0;
  89.     elseif Y(k) >= X(N)
  90.       FNy(k) = 1;
  91.     endif
  92.    
  93.     FMy(k) = Fm(k, 'y');
  94.     FMy0(k) = Fm(k, '0');
  95.   endfor
  96.  
  97.   FMx = []; %Fm(x(j))
  98.   for j = 1:N
  99.     for k = 2:M-1
  100.       if Y(k) <= X(j) && X(j) < Y(k+1)
  101.         FMx(j) = Fm(k, 'x');
  102.       endif
  103.     endfor
  104.     if X(j) < Y(1)
  105.       FMx(j) = 0;
  106.     elseif X(j) >= Y(M)
  107.       FMx(j) = 1;
  108.     endif
  109.   endfor
  110.  
  111.   x_ = 0; % x*
  112.   [xmax, j] = max(max( abs(FNx - FMx), abs(FNx0 - FMx) ));
  113.   [ymax, k] = max(max( abs(FNy - FMy), abs(FNy - FMy0) ));
  114.  
  115.   if xmax > ymax
  116.     Dnm = xmax;
  117.     x_ = X(j);
  118.     jk = j;
  119.   else
  120.     Dnm = ymax;
  121.     x_ = Y(k);
  122.     jk = k;
  123.   endif
  124.  
  125.   Knm = Dnm*sqrt(N*M/(N+M));
  126.  
  127.   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));
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  %______________________________________________________________________________
  136.  
  137.  %%%%%%% ФУНКЦИИ, ВКЛЮЧЕННЫЕ В ОСНОВНУЮ ФУНКЦИЮ %%%%%%%
  138.  
  139.   function Fn = Fn(j, param) % Fn(x(j) - 0)
  140.     Fn = 0;
  141.  
  142.     if param == '0'
  143.       Fn = (j - 1)/N;
  144.     else
  145.       Fn = j/N;
  146.     endif
  147.    
  148.   endfunction
  149.  
  150.  
  151.   function Fm = Fm(k, param) % Fm(y(k) - 0)
  152.     Fm = 0;
  153.    
  154.     if param == '0'
  155.       Fm = (k - 1)/M;
  156.     else
  157.       Fm = k/M;
  158.     endif
  159.    
  160.   endfunction
  161.    
  162.  
  163.  
  164.   function F = f(x)
  165.     F = 0;
  166.    
  167.     if x < a_
  168.       F = 0;
  169.       return
  170.     elseif x > b_
  171.       F = 1;
  172.       return
  173.     endif
  174.    
  175.     F = (x-a_)/(b_-a_);
  176.    
  177.   endfunction
  178.  
  179.    
  180.    
  181.  
  182.  
  183.   function ka = K(a) % критические значения распределения Колмогорова
  184.     ka = 0;
  185.    
  186.     switch a % уровни значимости
  187.    
  188.       case 0.01
  189.         ka = 1.63;
  190.       case 0.02
  191.         ka = 1.57;
  192.       case 0.05
  193.         ka = 1.36;
  194.       case 0.1
  195.         ka = 1.22;
  196.       case 0.2
  197.         ka = 1.07;
  198.        
  199.     endswitch
  200.   endfunction
  201.  
  202.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  203. end
  204.  
  205.  
  206. function R = myround(x, k) % округление до 5 знаков после запятой
  207.   R = 0;
  208.  
  209.   R = round(x*10^k)/10^k;
  210.  
  211. endfunction
  212.  
  213.  
  214. function arr = oneOfArrays(a) % выдача массива
  215.   arr = []; %вариант 17
  216.  
  217.     if a == 'ud-2'
  218.         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 ];
  219.   elseif a == 'ud-3'
  220.         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 ];
  221.   endif
  222.  
  223. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement