Advertisement
Guest User

lab5

a guest
May 15th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 7.43 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-------------\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-------------\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.     endswitch
  209.  
  210.   endfunction
  211.  
  212.  
  213.   function S = summation(t, k)
  214.     S = 0;% Суммирование элементов в степени
  215.  
  216.     S = sum(t.^k);
  217.    
  218.   endfunction
  219.  
  220.  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  221.  
  222. end
  223.  
  224.  
  225. function R = myround(x, k) % округление до 5 знаков после запятой
  226.   R = 0;
  227.  
  228.   R = round(x*10^k)/10^k;
  229.  
  230. endfunction
  231.  
  232.  
  233. function arr = oneOfArrays % выдача массива
  234.   arr = []; %вариант 17
  235.  
  236.     arr = [ -2.42349, -2.03716, -1.93880;
  237.           -3.72517, 2.81466, -1.57690;
  238.           -3.74582, 0.74513, 3.97149;
  239.           1.40175, -0.80514, 0.57361;
  240.           -1.17462, -2.31128, 2.96124;
  241.           0.32442, -1.77895, 1.09566;
  242.           0.11940, 3.40010, -3.26145;
  243.           0.62900, -0.39564, -2.56283;
  244.           0.34779, -0.56814, 2.64745;
  245.           0.14588, 3.11038, -0.80312;
  246.           -0.41323, 1.45303, 0.38234;
  247.           -1.34367, 0.24958, -0.51843;
  248.           -2.80189, 2.21146, -0.92177;
  249.           0.18032, -0.60075, 1.43413;
  250.           1.73334, -1.12983, 2.33078;
  251.           -0.47590, -0.61128, -1.09554;
  252.           0.00733, 2.11087, 3.05404;
  253.           -2.26858, 0.24760, -1.85628;
  254.           2.08119, 1.19782, -0.50469;
  255.           0.07452, -2.51749, 0.87703 ];
  256.  
  257. endfunction
  258.  
  259.  
  260. function printArr5(N, m)
  261.   arr = oneOfArrays;
  262.   len = N*m;
  263.  
  264.   printf('U = \n\n');
  265.   for i = 1:len
  266.     printf('%i', arr(i));
  267.     if mod(i, 3) == 0 && i ~= len
  268.       printf(';\n');
  269.     elseif i ~= len
  270.       printf(', ');
  271.     endif
  272.   endfor
  273.  
  274. %  for j = 1:m
  275. %    printf('\n');
  276. %    for i = 1:N
  277. %      printf('%i\n', arr(i, j));
  278. %    endfor
  279. %  endfor
  280.  
  281. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement