Advertisement
sashachca

lab3

Apr 28th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 13.80 KB | None | 0 0
  1. function MC_LR_3_KHMELEV
  2.   V = 17
  3.   a_ = -0.7; b_ = 7.3; % по условию
  4.  
  5.  
  6.  %_______________________________ЗАДАНИЕ I______________________________________
  7.  
  8.   xx = [];
  9.   xx = sort(oneOfArrays('nd')); % функция, выдающая выборку в соответствии с вариантом, в самом низу
  10.   [N, m] = SERIES(1, xx);
  11.   printf('\nThe number of items in our array: N = %i\nThe number of intervals: m = %i\n\n', N, m);
  12.  
  13.   Table(1); % первая таблица
  14.  
  15.  
  16.   % график плотности нормального распределения, наложенный на гистограмму относительных частот:
  17.   for j = 1:100
  18.     b(j) = a(1) + j*d/100;
  19.     c(j) = normpdf((b(j)-A)/sigma)/sigma;
  20.   endfor
  21.   figure('Name','Normal probability density function & histogram');
  22.   bar(x, w/h, 'hist'); % график гистограммы относительных частот
  23.    hold on % задерживаем предыдущий график, чтобы наложить на него график плотности:
  24.   plot(b, c, "r");
  25.    grid on % включаем сеточку
  26.    hold off
  27.  
  28.  
  29.   Table(2); % вторая таблица
  30.  
  31.  
  32.   % проверка гипотезы о соответствии выборки нормальному распределению:
  33.   X = myround(sum(NWP), 5); % наше значение критерия x
  34.   Hypothesis(1, X);
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  %_______________________________ЗАДАНИЕ II_____________________________________
  41.  
  42.   xx = [];
  43.   xx = sort(oneOfArrays('ud'));
  44.   [N, m] = SERIES(2, xx);
  45.   printf('\nThe number of items in our array: N = %i\nThe number of intervals: m = %i\n\n', N, m);  
  46.  
  47.  
  48.   % график плотности равномерного распределения на отрезке [a, b], наложенный на гистограмму относительных частот:
  49.   figure('Name','Uniform probability density function & histogram');
  50.   bar(x, w/h, 'hist');
  51.    hold on % задерживаем предыдущий график, чтобы наложить на него график плотности:
  52.   plot([x(1)-h/2, x(end)+h/2], [1/(b_-a_), 1/(b_-a_)], 'r');
  53.    grid on, hold off
  54.  
  55.  
  56.   Table(3); % третья таблица
  57.  
  58.  
  59.   % проверка гипотезы о соответствии выборки равномерному распределению на отрезке [a, b]:
  60.   X = myround(sum(NWP), 5);
  61.   Hypothesis(2, X);
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  %______________________________________________________________________________
  68.  
  69.   %%%%%%% ФУНКЦИИ, ВКЛЮЧЕННЫЕ В ОСНОВНУЮ ФУНКЦИЮ %%%%%%%
  70.  
  71.   function [N, m] = SERIES(task, xx) % ряд и гистограмма
  72.     m = N = d = h = n = k = 0;
  73.     a = w = x = [];
  74.     printf('\n\n-------------\n  TASK NUMBER %i\n\n\n', task);
  75.    
  76.     N = length(xx);
  77.     m = 1 + fix(log2(N)); % число интервалов по формуле Стерджеса (fix отбрасывает дробную часть)
  78.    
  79.     if task == 1
  80.       a(1) = xx(1); %а0
  81.       a(m+1) = xx(end); %аm
  82.     else
  83.       a(1) = a_; %а0
  84.       a(m+1) = b_; %аm
  85.     endif
  86.  
  87.     d = a(m+1) - a(1);
  88.     h = d/m; % шаг разбиения
  89.     for k = 1:m-1
  90.       a(k+1) = a(k) + h; %от а0 до аm (но у нас от а1 до а(m+1))
  91.     endfor
  92.    
  93.     [n, x] = hist(xx, m); % находим число значений xx, попавших в интервал [аk, аk+1] - это n[]; и середины таких интервалов - это x[]
  94.     w = n/N; % значения относительных частот
  95.  
  96.     printf('Interval series:\n\n['); % группированная выборка (интервальный вариационный ряд);
  97.     for i = 1:m
  98.       printf('%i, %i]\n n = %i, w = %i\n\n', a(i), a(i+1), n(i), myround(w(i), 5));
  99.       if i == m
  100.         printf('\n');
  101.         break
  102.       endif
  103.       printf('(');
  104.     endfor
  105.    
  106.  
  107.     A = 0; % мат. ожидание
  108.     A = mathExpect(w, x, a, 1);
  109.    
  110.     SIGMA2 = 0; % дисперсия
  111.     SIGMA2 = mathExpect(w, x, a, 2) - A^2 - h^2/12;
  112.    
  113.     sigma = 0;
  114.     sigma = sqrt(SIGMA2);
  115.    
  116.     if task == 1 % т.к. вывести эти значения требуется только в задании I
  117.       printf('Approx. Math. expectation: a = %i\nApprox. Variance: sigma^2 = %i\n', A, SIGMA2);
  118.     endif
  119.    
  120.   endfunction
  121.  
  122.  
  123.   function Table(number) % построение таблиц 1, 2 (для задания I) и 3 (для задания II)
  124.     p = [];
  125.     printf('\n------\n\n Table %i:\n\n', number);
  126.    
  127.     if number == 3 % для таблицы 3:
  128.       p = ones(1, m+1); % p(1) (или p(0), как указывается в задании) мы все равно потом выкинем (т.к. в задании счет начинается с 1, а не с 0), и их тогда будет m, а не m+1
  129.       p *= 1/m;
  130.     else % для таблиц 1 и 2:
  131.       t = (a - A)/sigma;
  132.       p(2) = Fi(t(2));
  133.       p(3:m) = Fi(t(3:m)) - Fi(t(2:m-1));
  134.       p(m+1) = 1 - Fi(t(m)); % та же ситуация, что и описанная чуть выше
  135.     endif
  136.      
  137.      
  138.     if number == 1 % таблица 1:
  139.       TABLE = [];
  140.    
  141.       f = fi(t)/sigma;
  142.       F = Fi(t);
  143.    
  144.       for k = 1:m+1 % индексы выводятся в соответствии с примером таблицы в задании
  145.         TABLE(k, :) = [k-1, a(k), t(k), f(k), F(k), p(k)];
  146.       endfor
  147.      
  148.       printf('      k        ak    (ak-A)/sgm  fi/sgm      Fi        pk\n');
  149.       disp(TABLE);
  150.      
  151.     else % таблицы 2 и 3:
  152.       WP = NWP = p(1) = []; % выкидываем p(1) (который по заданию является p(0))
  153.  
  154.       WP = abs(w - p);
  155.       NWP = N.*WP.^2 ./ p; % поэлементно возводим в квадрат и так же поэлементно делим на элементы массива p
  156.      
  157.       printf('   k   [a(k-1), a(k)]        wk       pk    |wk-pk|   N(wk-pk)^2/p\n\n');
  158.       for k = 1:m % индексы будут выводиться такими, какие требуется в задании (то есть без учета того, что в программе мы везде начинаем с единицы, а не с нуля)
  159.         printf('   %i [%i, %i]   %i   %i   %i     %i\n', k, a(k), myround(a(k+1), 5), myround(w(k), 5), myround(p(k), 5), myround(WP(k), 5), myround(NWP(k), 5));
  160.       endfor
  161.       printf('\n max|wk-pk| = %i\n sum(N(wk-pk)^2/p) = %i\n', myround(max(WP), 5), myround(sum(NWP), 5));
  162.       printf('\n-------\n\n');
  163.     endif
  164.    
  165.   endfunction
  166.    
  167.    
  168.   function Hypothesis(task, X) % проверка гипотезы о соответствии выборки
  169.     aa = 0.05; % aa - уровень значимости
  170.     Xkp(4:8) = [9.5, 11.1, 12.6, 14.1, 15.5] % таблица критических значений Xкр
  171.  
  172.     if task == 1
  173.       l = m - 3; % l - число степеней свободы для задания I
  174.     else
  175.       l = m - 1; % для задания II
  176.     endif
  177.  
  178.     if X <= Xkp(l)
  179.       printf('X = %i; Xkp(m-3) = %i, %i<=%i  =>  Gipoteza mozhet byt prinyata\n', X, Xkp(l), X, Xkp(l));
  180.     else
  181.       printf('X = %i; Xkp(m-3) = %i, %i>%i  =>  Gipoteza nie mozhet byt prinyata\n', X, Xkp(l), X, Xkp(l));
  182.     endif
  183.    
  184.   endfunction
  185.  
  186.   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  187.  
  188. end
  189.  
  190.  
  191.  
  192.  
  193. %_______________________________________________________________________________
  194.  
  195. %%%%%%%%%%%%%%%%%%% ОСТАЛЬНЫЕ ФУНКЦИИ %%%%%%%%%%%%%%%%%%%
  196.  
  197.  
  198. function A = mathExpect(w, x, a, t); %математическое ожидание
  199.     A = 0;
  200.  
  201.     A = sum(w.*x.^t); % x - это x* из условия МС_ЛР_3, уже посчитанный функцией hist()
  202.  
  203. endfunction
  204.  
  205.  
  206. function fi = fi(t) % плотность стандартного нормального распределения N(0,1)
  207.   fi = 0;  %f = 1/sqrt(pi = 2*3.1415926535)*exp(-t^2/2)
  208.  
  209.   fi = normpdf(t, 0, 1);
  210.  
  211. endfunction
  212.  
  213. function Fi = Fi(t) % функция распределения стандартного нормального закона N(0,1)
  214.   Fi = 0;
  215.  
  216.   Fi = normcdf(t, 0, 1);
  217.  
  218. endfunction
  219.  
  220.  
  221. %function A = mathExpect(w, m, a, t); %математическое ожидание, посчитанное без встроенных функций)
  222. %   A = 0;
  223. %
  224. %   for k = 1:m
  225. %       xk = ((a(k) + a(k+1))/2)^t;
  226. %       A += xk*w(k);
  227. %  endfor
  228. %
  229. %endfunction
  230.  
  231.  
  232. function R = myround(x, k)
  233.   R = 0;
  234.  
  235.   R = round(x*10^k)/10^k;
  236.  
  237. endfunction
  238.  
  239.  
  240. function arr = oneOfArrays(a)
  241.   arr = []; %вариант 17
  242.  
  243.     if a == 'nd'
  244.         arr = [ 2.34077, -0.47612, -0.59152, -1.33363, -0.63093, 0.48788, -4.95074, 0.56767, 1.19521, -2.79534, -1.20603, 1.30688, -2.85712, -0.55494, -1.90109, 3.60836, 0.21293, -1.17190, -1.21709, -0.86380, 2.78199, -1.12639, 0.16847, -0.15564, -0.04350, -3.22104, -1.94865, -1.30119, 0.14260, -0.97421, -1.37667, -7.28036, 4.31504, -2.30376, -4.21841, -4.12702, -2.45313, -0.68081, 0.65864, -0.38498, -2.20725, 1.80698, -1.46469, -2.83590, -1.91566, 2.85141, -3.82743, 3.16380, -1.75219, 1.81357, -2.26096, -3.19839, -0.37549, -1.86859, -0.31260, -1.28324, 2.38648, 1.75209, -1.12582, 3.20351, -0.85097, 0.61758, 2.75101, -1.15348, -3.24758, -0.62437, -0.31909, 0.95708, -1.08075, -1.05882, 0.32362, -5.49754, -3.43182, 0.95152, 2.93082, -0.44737, -0.60788, 0.25537, -2.80409, -2.22244, -6.27760, 0.76520, 3.15344, 1.98039, -4.35556, -2.92046, 3.17636, -1.54461, 3.19059, -0.62366, -2.41449, 2.34206, -0.56942, -1.25159, -2.00228, -0.72641, -3.44084, -2.72999, 1.97637, -5.51718, -0.04327, -1.63052, -1.65610, -1.57951, -4.70447, 2.95226, 1.90369, -2.50510, 2.34484, -1.85043, 1.79099, -1.45891, 3.46837, 1.89493, -2.40129, -3.11331, -0.95251, 0.99113, 1.88399, -0.42847, -2.58520, 1.38002, 1.22401, -2.92613, -0.07367, 1.31508, 2.17188, 0.24897, -0.70232, -0.16624, -1.26202, -3.24450, -1.17668, 0.84247, -0.59938, -2.10478, 1.74759, -0.00428, -1.54944, 0.16808, -0.12737, -3.62850, 1.72206, 0.69783, 1.25305, -2.32759, -1.58966, -2.53622, 4.07967, -1.01046, -0.29265, 0.08308, -0.91494, 4.14844, -2.13790, 4.27977, 0.97369, -3.21341, -1.90497, 1.57068, 0.90532, 1.32906, 0.00284, 0.30189, 1.55175, 0.50187, 2.82884, -6.23639, 0.48637, 2.99302, 2.01778, -4.05521, -3.84553, -1.39976, -2.65657, -0.57231, -5.44073, -0.01255, 2.45312, 0.38175, 0.33639, 0.10010, 0.56131, -0.94303, -5.03709, 0.31000, -2.87028, 0.51529, -1.88752, -0.48789, -5.28494, -0.91663, -0.05016, -0.60857, -1.48554, -0.71420, -1.29857, 1.67761, -2.78399, 0.55937, -0.48658, -0.16625, -1.35844, -2.03059, 2.35581, -0.40343, 1.90275, -1.30859, -0.74700, -3.78552, -4.86740, -0.98373, 0.21135, -0.05607, -4.51215, -0.37222, 2.70644, -1.46749, -0.36272, -0.28096, 2.05548, 1.03205, -3.97384, -3.26241, -1.67013, -4.65148, 1.31498, -2.49333, -1.70760, -1.31645, 2.15126, 1.01024, 1.36154, 0.70141, -3.75326, -4.25257, 0.61316, -4.97811, -0.64413, 0.54008, -0.15627, 0.95668, 2.33636, -0.10633, 0.18355, -0.66052, -2.62649, -0.33295, 1.16275, -4.06517, -3.07452, 0.03409, -0.53623, -2.65940, 3.00544, -0.52499, 0.59608, 3.77866, -2.25218, 1.91575, 1.46961, -1.45929, -0.89563, -0.85259, -3.96968, -0.97911, 2.14339, -5.94468, 2.08057, 0.47641 ];
  245.     elseif a == 'ud'
  246.         arr = [ 5.16392, 6.12984, 2.13544, 1.32408, 1.96856, 4.02600, 5.75448, 6.16088, 3.84952, 1.29904, 5.16816, 5.95720, 2.96240, 4.46312, 0.09080, 3.13536, 2.61328, 3.72544, 3.12392, 5.96696, 1.70104, 3.23016, 1.38256, 2.54120, 4.25520, 6.30704, 1.66768, 2.31632, 0.20840, 0.20296, 2.58312, 1.08168, 2.45432, 3.51280, 0.89648, 3.02304, 6.37296, 5.66424, 1.39224, 4.70040, 5.09552, 6.04120, 5.85832, 5.41784, 3.79408, 1.73416, 6.63960, 3.81488, 0.62632, 0.83240, 6.22136, 4.78584, 1.07128, 5.59656, 2.37768, 2.48632, 3.46456, 3.48200, 1.43648, 2.90848, 2.34792, -0.52328, 3.49880, -0.34240, 5.94280, 3.56072, -0.05208, 1.12792, 3.05880, 6.83288, 4.14928, 1.81496, 1.96480, 5.04352, -0.33960, 7.05272, 3.49360, 0.47408, 6.85448, 7.12656, 5.48552, 3.92768, 3.10816, 0.91832, 3.38720, 6.47200, 5.59824, -0.52552, 2.56408, 2.25192, 0.08120, 4.83488, 2.00104, 3.81152, 0.66064, 4.36624, 2.04064, 2.63544, 0.56288, 0.83376, 0.78960, 5.15960, 0.02120, 6.17336, 4.39728, 1.18256, 6.66152, 5.04624, 7.19472, 0.44624, 2.24224, 2.19896, -0.55984, 1.10120, -0.14064, 4.36096, 6.74456, 2.94256, 5.45328, 3.12000, 4.33264, -0.69456, 4.62424, 0.68104, 0.82648, 7.10696, 6.04744, -0.31392, 3.30640, 6.71200, 1.74944, 2.65432, 6.57728, 3.64768, 6.21944, 5.12928, -0.51664, 1.76864, 3.10448, -0.12808, 5.13712, 1.92320, 4.16928, 5.75504, 0.49512, 3.92760, 1.13736, 1.55192, 3.40408, 2.81448, 5.87832, 3.92568, -0.69184, 2.42792, 4.41704, 2.25088, 1.34296, 5.88008, 4.49728, 3.83904, 1.94536, 4.41712, 5.46872, 6.07192, 3.49144, 1.26456, 4.93832, 5.22912, 5.94144, 3.07192, 0.93896, -0.35784, 5.59520, 0.85528, 3.78480, 2.85904, 4.76072, 5.17104, 0.08912, 1.15784, 6.04888, 1.98080, 6.12296, 1.32280, 6.75840, 5.90520, 3.05696, 6.50248, 4.91984, 4.93072, -0.21440, 6.97032, 7.13704, 1.19496, 3.58536, 6.22376, -0.13648, 1.02504, 0.85336, 2.32040, 6.71400, 0.99768, 2.72640, 7.20304, -0.39520, 3.55688, 0.38304, 5.81256, 1.94352, 6.03600, 5.33640, 1.34592, 1.98472, 4.61624, 3.35552, 0.22360, 6.59256, 5.38112, -0.17688, 4.79592, 4.31848, 4.55432, 3.88256, -0.25816, 5.66152, 4.66528, 6.25184, 0.69288, 6.09736, -0.64000, 1.54936, 0.50144, 4.47960, 2.77216, 6.71168, 6.76128, 6.20568, 0.74952, 4.57984, 4.05544, 0.47800, 5.18040, 4.18304, 5.86688, 6.99248, 2.74312, 2.00624, 2.58472, 0.70040, 6.15032, 2.28496, 2.77224, 0.86704, -0.46992, 3.38904, 3.39376, 2.38592, 0.34264, 5.96712, 1.13424, 1.45568, 0.87744, -0.18328, 4.22968, 3.52856, -0.05936, 3.99336, 2.05608, 2.60672, 6.97056 ];
  247.     endif
  248.  
  249. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement