Advertisement
Guest User

lab5

a guest
May 15th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 7.18 KB | None | 0 0
  1. function MC_LR_5_KHMELEV
  2.  
  3.   V = 17;
  4.   U = oneOfArrays;
  5.   [N, m] = size(U);
  6.   printArr5(N, m);
  7.  
  8.  %_______________________________ЗАДАНИЕ I______________________________________
  9.          
  10.   printf('\n-------------\n  TASK NUMBER 1\n\n');
  11.  
  12.  
  13.   % пункт 1
  14.   printf('\n  Paragraph 1:\n\n');
  15.   TABLE_1 = TABLE_4 = TABLE_5 = TABLE2_1 = TABLE2_3 = [];
  16.   hyp1_1 = [];
  17.   for i = 1:3
  18.     % для первого пункта задания I:
  19.     Calculations( U(:, i-mod(1,i)), U(:, 0.5*(i-mod(i,2))+2) ) %столбцы (1,2), (1,3), (2,3)
  20.     TABLE_1(i, :) = [x, y, x2, y2, Sx, Sy, Tnn];
  21.     % для первого пункта задания II:
  22.     TABLE2_1(i, :) = [S1, S2, N-1, N-1, Fnn];
  23.     % для четвертого пункта задания I:
  24.     TABLE_4 = [TABLE_4, t_test_2(U(:, i-mod(1, i)), U(:, 0.5*(i-mod(i,2))+2))]; % добавляем к предыдущим элементам массива наовые: результаты теста для U(:, 1) и (U:, 2); для U(:, 1) и (U:,3); и затем для U(:, 2) и U(:, 3)
  25.     % для пятого пункта задания I:
  26.     TABLE_5 = [TABLE_5, welch_test(U(:, i-mod(1, i)), U(:, 0.5*(i-mod(i,2))+2))];
  27.     % для третьего пункта задания II:
  28.     TABLE2_3 = [TABLE2_3, var_test(U(:, i-mod(1, i)), U(:, 0.5*(i-mod(i,2))+2))];
  29.   endfor
  30.   printf('       x          y         x2         y2         Sx         Sy        Tnn\n');
  31.   disp(myround(TABLE_1, 5));
  32.   hypothesis(1.1, TABLE_1(:, end));
  33.  
  34.   % пункт 2
  35.   printf('\n\n  Paragraph 2:\n\n');
  36.   S_calculation(U); % гипотеза проверяется в этой же функции
  37.  
  38.   % пункт 3
  39.   printf('\n\n  Paragraph 3:\n\n');
  40.   pval = anova(U)
  41.   hypothesis(1.3, pval);
  42.  
  43.   % пункт 4
  44.   printf('\n\n  Paragraph 4:\n\n pval[t_test_2] \n');
  45.   disp(myround(TABLE_4', 5));
  46.   hypothesis(1.4, TABLE_4');
  47.  
  48.   % пункт 5
  49.   printf('\n\n  Paragraph 5:\n\n pval[welch_test] \n');
  50.   disp(myround(TABLE_5', 5));
  51.   hypothesis(1.5, TABLE_5');
  52.  
  53.  
  54.  
  55.  %_______________________________ЗАДАНИЕ II_____________________________________
  56.  
  57.  
  58.   printf('\n-------------\n  TASK NUMBER 2\n\n');
  59.   % все таблицы подсчитываются в цикле в задании I
  60.  
  61.   % пункт 1
  62.   printf('\n\n  Paragraph 1:\n\n');
  63.   printf('      S1        S2       k1        k2        Fnn\n');
  64.   disp(myround(TABLE2_1, 5));
  65.   hypothesis(2.1, TABLE2_1(:, 3:5));
  66.  
  67.   % пункт 2
  68.   printf('\n\n  Paragraph 2:\n\n');
  69.   pval = bartlett_test(U(:, 1), U(:, 2), U(:, 3))
  70.   hypothesis(2.2, pval);
  71.  
  72.   % пункт 3
  73.   printf('\n\n  Paragraph 3:\n\n pval[var_test] \n');
  74.   disp(myround(TABLE2_3', 5));
  75.   hypothesis(2.3, TABLE2_3');
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  %______________________________________________________________________________
  83.  
  84.  %%%%%%% ФУНКЦИИ, ВКЛЮЧЕННЫЕ В ОСНОВНУЮ ФУНКЦИЮ %%%%%%%
  85.  
  86.   function Calculations(X, Y)
  87.  
  88.     % для задания I:
  89.     x = summation(X, 1)/N;
  90.     x2 = summation(X, 2)/N;
  91.     y = summation(Y, 1)/N;
  92.     y2 = summation(Y, 2)/N;
  93.    
  94.     Sx = N/(N - 1)*(x2 - x^2);
  95.     Sy = N/(N - 1)*(y2 - y^2);
  96.    
  97.     Tnn = (x - y)/sqrt((Sx + Sy)*(N - 1))*sqrt(N*(N - 1)); % у нас M = N, поэтому функция выглядит проще
  98.    
  99.     % для задания II:
  100.     S1 = max(Sx, Sy);
  101.     S2 = min(Sx, Sy);
  102.    
  103.     Fnn = S1/S2;
  104.  
  105.   endfunction
  106.  
  107.  
  108.   function S_calculation(U)
  109.  
  110.     sum_U = sum(U); % три элемента, каждый из которых это сумма столбца от i = 1 до N
  111.     u = sum(sum_U)/(N*m); % u с чертой
  112.     uj = sum_U/N; % массив uj с чертой
  113.    
  114.     S_total = sum(summation(U - u, 2))
  115.     S_fact = N*summation(uj - u, 2)
  116.     S_ost = S_total - S_fact
  117.    
  118.     k1 = m-1;
  119.     k2 = m*(N-1);
  120.    
  121.     S2_fact = S_fact/k1
  122.     S2_ost = S_ost/k2
  123.    
  124.     k1
  125.     k2
  126.    
  127.     Fnm = S2_fact/S2_ost
  128.    
  129.     hypothesis(1.2, [k1, k2, Fnm]);
  130.    
  131.   endfunction
  132.  
  133.  
  134.   function hypothesis(number, param)
  135.   tf = 0;
  136.   aa = 0.05;
  137.   printf('\n  Proverka gipotezy (0 - NET, 1 - DA)\n\n');
  138.  
  139.   switch number
  140.  
  141.     case 1.1
  142.       TNN = abs(param);
  143.       tkp = tinv(0.975, 2*N-2)*ones(3, 1);
  144.      
  145.       tf = TNN <= tkp;
  146.      
  147.       printf('    |Tnn|     tkp(2N-2)    vyvod\n');
  148.       disp(myround([TNN, tkp, tf], 5));
  149.      
  150.     case 1.2
  151.       k1 = param(1);
  152.       k2 = param(2);
  153.       Fnm = param(3);
  154.       z = finv(0.95, k1, k2);
  155.      
  156.       tf = Fnm <= z;
  157.      
  158.       printf('vyvod: %i\n', tf);
  159.      
  160.     case 1.3
  161.       pval = param;
  162.      
  163.       tf = pval >= aa;
  164.      
  165.       printf('vyvod: %i\n', tf);
  166.      
  167.     case 1.4
  168.       PVAL = param;
  169.       AA = aa*ones(3, 1);
  170.      
  171.       tf = PVAL >= AA;
  172.       printf(' pval[t_test_2]   a        vyvod\n');
  173.       disp(myround([PVAL, AA, tf], 5));
  174.      
  175.     case 1.5
  176.       PVAL = param;
  177.       AA = aa*ones(3, 1);
  178.      
  179.       tf = PVAL >= AA;
  180.       printf(' pval[welch_test]  a        vyvod\n');
  181.       disp(myround([PVAL, AA, tf], 5));
  182.      
  183.     case 2.1
  184.       k1 = param(:, 1);
  185.       k2 = param(:, 2);
  186.       FNN = param(:, 3);
  187.       Fa = finv(0.975, k1, k2);
  188.      
  189.       tf = FNN <= Fa;
  190.       printf('    |Fnn|     F    vyvod\n');
  191.       disp(myround([FNN, Fa, tf], 5));
  192.      
  193.     case 2.2
  194.       pval = param;
  195.      
  196.       tf = pval >= aa;
  197.      
  198.       printf('vyvod: %i\n', tf);
  199.      
  200.     case 2.3
  201.       PVAL = param;
  202.       AA = aa*ones(3, 1);
  203.      
  204.       tf = PVAL >= AA;
  205.       printf(' pval[var_test]   a        vyvod\n');
  206.       disp(myround([PVAL, AA, tf], 5));
  207.      
  208.    
  209.   endswitch
  210.  
  211.   endfunction
  212.  
  213.  
  214.   function S = summation(t, k)
  215.     S = 0;% Суммирование элементов в степени
  216.  
  217.     S = sum(t.^k);
  218.    
  219.   endfunction
  220.  
  221.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  222.  
  223. end
  224.  
  225.  
  226. function R = myround(x, k) % округление до 5 знаков после запятой
  227.   R = 0;
  228.  
  229.   R = round(x*10^k)/10^k;
  230.  
  231. endfunction
  232.  
  233.  
  234. function arr = oneOfArrays % выдача массива
  235.   arr = []; %вариант 17
  236.  
  237.     arr = [ -2.42349, -2.03716, -1.93880;
  238.           -3.72517, 2.81466, -1.57690;
  239.           -3.74582, 0.74513, 3.97149;
  240.           1.40175, -0.80514, 0.57361;
  241.           -1.17462, -2.31128, 2.96124;
  242.           0.32442, -1.77895, 1.09566;
  243.           0.11940, 3.40010, -3.26145;
  244.           0.62900, -0.39564, -2.56283;
  245.           0.34779, -0.56814, 2.64745;
  246.           0.14588, 3.11038, -0.80312;
  247.           -0.41323, 1.45303, 0.38234;
  248.           -1.34367, 0.24958, -0.51843;
  249.           -2.80189, 2.21146, -0.92177;
  250.           0.18032, -0.60075, 1.43413;
  251.           1.73334, -1.12983, 2.33078;
  252.           -0.47590, -0.61128, -1.09554;
  253.           0.00733, 2.11087, 3.05404;
  254.           -2.26858, 0.24760, -1.85628;
  255.           2.08119, 1.19782, -0.50469;
  256.           0.07452, -2.51749, 0.87703 ];
  257.  
  258. endfunction
  259.  
  260.  
  261. function printArr5(N, m)
  262.   arr = oneOfArrays;
  263.   len = N*m;
  264.  
  265.   printf(' U = \n\n');
  266.   for i = 1:len
  267.     printf('%i', arr(i));
  268.     if mod(i, 3) == 0 && i ~= len
  269.       printf(';\n');
  270.     elseif i ~= len
  271.       printf(', ');
  272.     endif
  273.   endfor
  274.  
  275. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement