Advertisement
sashachca

Untitled

Oct 8th, 2018
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 5.53 KB | None | 0 0
  1. %function SP_LR_2_KHMELEV
  2. %% Вариант 16
  3. %
  4. %p1 = 0.662;
  5. %p2 = 0.208;
  6. %p3 = 0.13;
  7. %q1 = 0;
  8. %q2 = 1;
  9. %end
  10.  
  11.  
  12. function SP_LR_1_KHMELEV
  13.  
  14.   % task 1
  15.   printf('\n\n-------------\n  TASK NUMBER 1\n\n\n');
  16.  
  17.   P = [0.173, 0.287, 0.540; 0, 0.587, 0.413; 0, 0.159, 0.841];
  18.   n_min = 100;
  19.   delta = [];
  20.   n = 2;
  21.  
  22.   while n <= n_min
  23.  
  24.     P(:, :, n) = P(:, :, n-1) * P(:, :, 1); % 3-merny massiv, kotory soderjit vse matricy stepeney ot 1 do n_min
  25.     delta(n) = max(max(abs( P(:, :, n) - P(:, :, n-1) ))); % nahodim maksimalnoe otklonenie sredi vseh veroyatnostey mejdu nastoyacshey matricey i predyduschey
  26.    
  27.     if delta(n) < 0.00001
  28.       n_min = n;
  29.     endif
  30.    
  31.     n += 1;
  32.   endwhile
  33.  
  34.  
  35.   printf('\n\n %i Matricies:\n\n', n_min);
  36.   for n = 1:n_min
  37.  
  38.     disp(P(:, :, n));
  39.     printf('\n');
  40.    
  41.   endfor
  42.  
  43.   printf('\n\n And deltas from 2 to %i:\n\n', n_min);
  44.   for n = 2:n_min
  45.  
  46.     printf('   %i\n', myround(delta(n), 5));
  47.    
  48.   endfor
  49.  
  50.  
  51.  
  52.   % task 2
  53.  
  54.   % q - stolbets
  55.   % qP = q => qP - q = 0 => q(P - E) = 0, gde E - edinichnaya matrica, prichem v nashem kode eto eye(n)
  56.   % q = (r1, r2, r3)
  57.   % eye(n) - edinichnaya matrica n x n
  58.   printf('\n\n-------------\n  TASK NUMBER 2\n\n\n');
  59.  
  60.   A = P(:, :, 1)' - eye(3); % vychitaem edinichnuyu matricu
  61.   A = [A, zeros(3, 1)]; % pripisyvaem 4-y stolbets s nulevymi svobodnymi chlenami
  62.   A(3,:) = ones(1, 4); % t.k. vectory lineyno zavisimye, to vycherkivaem poslednyuyu stroku
  63.   % pri etom u nas est' uslovie normirovki: r1 + r2 + r3 = 1 -- stavim ego na mesto vycherknutoy stroki
  64.  
  65.   A = gauss(A); % reshaem SLAU
  66.  
  67.   printf('\n\n');
  68.   q = A(:, 4)' % q - naydennoe stacionarnoe raspredelenie
  69.   qP = q*P(:, :, 1) % Prover 04ka:
  70.  
  71.   if myround(q, 5) == myround(qP, 5)
  72.     disp(' => q = qP')
  73.   else
  74.     disp(' => q =/= qP')
  75.   endif
  76.  
  77.  
  78.  
  79.   % task 3
  80.  
  81.   % p(0) = ( p1(0), p2(0), p3(0) )
  82.   % p(n) = p(0)*P^n
  83.   % prichem v nashem kode P^n - eto "P(:, :, n)"
  84.   printf('\n\n-------------\n  TASK NUMBER 3\n\n\n');
  85.  
  86.   states = eye(3); % potomu chto sostoyaniya (1, 0, 0), (0, 1, 0), (0, 0, 1) - eto stolbtsy edinichnoy matricy
  87.   for p0 = states
  88.     printf('\n\n');
  89.    
  90.     p0 = p0';
  91.     ProbDistr(p0);
  92.  
  93.   endfor
  94.  
  95.  
  96.  
  97.   % task 4
  98.  
  99.   % orientiruyus' po kartinke na doske
  100.   printf('\n\n-------------\n  TASK NUMBER 4\n\n\n');
  101.  
  102.   Seq = [];
  103.   for i = 1:3
  104.  
  105.     Seq = [Seq; gen(i)];
  106.     printf('\n\n %i. State numbers for i_0 = %i through 100 steps:\n\n', i, i);
  107.     disp(Seq(i, 1:100));
  108.    
  109.   endfor
  110.  
  111.  
  112.   % task 5
  113.   printf('\n\n-------------\n  TASK NUMBER 5\n\n\n');
  114.  
  115.   R = [];
  116.   for state = 1:3
  117.     for i = 1:3
  118.       R(state, i) = sum(i == Seq(state,:));
  119.     endfor
  120.   endfor
  121.  
  122.   V = R/1000;
  123.   for i = 1:3
  124.  
  125.     printf('\n\n Frequencies for i_0 = %i:  (%i, %i, %i)\n', i, R(i, 1), R(i, 2), R(i, 3));
  126.     printf('\n\n Relative frequencies for i_0 = %i:  (%i, %i, %i)\n\n', i, V(i, 1), V(i, 2), V(i, 3));
  127.  
  128.   endfor
  129.    
  130.  
  131.   figure('Name','Relative frequencies');
  132.   x = [1, 2, 3];
  133.   plot(x, V(1, :), '-or', x, V(2, :), '-og', x, V(3, :), '-ob');
  134.     title('  Relative frequencies      red - 1; green - 2, blue - 3'), grid on
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.   %_____________________________________________________________________________
  144.  
  145.  
  146.   function ProbDistr(p0) % task 3
  147.       n = 1;
  148.       m_min = 100;
  149.      
  150.       while n <= m_min
  151.      
  152.         p(n, :) = p0 * P(:, :, n);
  153.         delta_(n) = max(abs( p(n, :) - q ));
  154.        
  155.         if delta_(n) < 0.00001
  156.           m_min = n;
  157.         endif
  158.        
  159.         n += 1;
  160.       endwhile
  161.  
  162.      
  163.       printf('\n\n   Probability distributions through %i steps for (%i, %i, %i):\n\n', m_min, p0(1), p0(2), p0(3));
  164.       for n = 1:m_min
  165.  
  166.         disp(myround(p(n, :), 5));
  167.         printf('\n');
  168.        
  169.       endfor
  170.      
  171.      
  172.       printf('\n\n And deltas from 0 to %i:\n\n', m_min);
  173.       delta0 = max(abs( p0 - q) );
  174.       delta_ = [delta0, delta_];
  175.       for n = 1:m_min
  176.      
  177.         printf('   %i\n', myround(delta_(n), 5));  
  178.        
  179.       endfor
  180.      
  181.       printf('   %i\n', delta_(end)); % pishu otdelno, chtoby  ne okruglyat' do nulya (nastolko malen'kaya delta)
  182.    
  183.    endfunction
  184.    
  185.    
  186.    
  187.    function I = gen(i) % task 4
  188.       I = [];
  189.       E = 0;
  190.    
  191.       for n = 1:1000
  192.         E = rand(1);
  193.              
  194.         if E < P(i, 1, 1)
  195.            i = 1;
  196.          elseif E < P(i, 1, 1) + P(i, 2, 1)
  197.            i = 2;
  198.          else
  199.            i = 3;
  200.          endif
  201.          
  202.          I(n) = i;
  203.       endfor
  204.  
  205.    endfunction
  206.  
  207.  
  208. end
  209.  
  210.  
  211.  
  212. function R = myround(x, k) % округление до 5 знаков после запятой
  213.   R = 0;
  214.  
  215.   R = round(x*10^k)/10^k;
  216.  
  217. endfunction
  218.  
  219.  
  220.      
  221. % for task 4      
  222. %        switch i
  223. %    
  224. %          case 1
  225. %            if E < P(1, 1, 1)
  226. %              i = 1;
  227. %            elseif E < P(1, 1, 1) + P(1, 2, 1)
  228. %              i = 2;
  229. %            else
  230. %              i = 3;
  231. %            endif          
  232. %            I(n) = i;
  233. %            
  234. %            
  235. %          case 2
  236. %            if E < P(2, 1, 1)
  237. %              i = 1;
  238. %            elseif E < P(2, 1, 1) + P(2, 2, 1)
  239. %              i = 2;
  240. %            else
  241. %              i = 3;
  242. %            endif      
  243. %            I(n) = i;
  244. %            
  245. %            
  246. %          case 3
  247. %            if E < P(3, 1, 1)
  248. %              i = 1;
  249. %            elseif E < P(3, 1, 1) + P(3, 2, 1)
  250. %              i = 2;
  251. %            else
  252. %              i = 3;
  253. %            endif      
  254. %            I(n) = i;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement