Advertisement
Guest User

Untitled

a guest
Sep 24th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 4.47 KB | None | 0 0
  1. // анализ графа
  2. function graphA(adjacency)
  3.     n = length(adjacency(1, :));
  4.     m = sum(adjacency) / 2;
  5.    
  6.     disp(adjacency, 'Матрица смежности:');
  7.    
  8.     vertex = [];
  9.     for i = 1:n
  10.         vertex(i,:) = [sum(adjacency(i, :)), sum(adjacency(:, i))];
  11.     end
  12.    
  13.     for i = 1:n
  14.         str = '';
  15.         if vertex(i, 1) == vertex(i, 2) & vertex(i, 1) == 0 then
  16.             str = 'Изолированная вершина:';
  17.         elseif vertex(i, 2) == 0 then
  18.             str = 'Висячая вершина:';
  19.         elseif vertex(i, 1) == 0 then
  20.             str = 'Тупиковая вершина:';
  21.         end
  22.        
  23.         disp(i, str);
  24.     end
  25.    
  26.     R = 0.5 * sum(adjacency) / (n - 1) - 1;
  27.    
  28.     disp(R, 'Структурная избыточность:');
  29.        
  30.     p_ = (2 * m) / n;
  31.     e2 = sum((sum(adjacency, 'r') - p_) .^ 2);
  32.    
  33.     disp(e2, 'Неравномерность связей в структуре:');
  34.  
  35.     Q = 0;
  36.    
  37.     for i = 1:n
  38.         Q = Q + sum(shortestPath(adjacency, i));
  39.     end
  40.    
  41.     disp(Q, 'Структурная близость элементов между собой:');
  42.     Qmin = n * (n - 1);
  43.     Qrel = Q / Qmin - 1;
  44.    
  45.     disp(Qrel, 'Структурная компактность:');
  46.    
  47.     function res=z(i)
  48.         res = sum((Q ./ 2) .* sum(shortestPath(adjacency, i)));
  49.     endfunction
  50.    
  51.     zi = [];
  52.     for i = 1:m
  53.         zi(i) = z(i);
  54.     end
  55.    
  56.     zmax = max(zi);
  57.     sigma = (n - 1) * (2 * zmax - n) / (zmax ^ (n - 2));
  58.    
  59.     disp(sigma, 'Индекс центральности:');
  60.    
  61.     k = 3;
  62.    
  63.     ri = (sum(adjacency, 'r') .^ k) / sum(adjacency);
  64.    
  65.     disp([1:n; ri]', 'Ранги элементов:');
  66. endfunction
  67.  
  68. // алгоритм Дейсктры для поиска длин кратчайших путей до вершины
  69. function [res]=shortestPath(adjacency, goal)
  70.     maximum = 999;
  71.    
  72.     count = 0;
  73.     index = 0;
  74.     i = 0;
  75.     u = 0;
  76.    
  77.     s = length(adjacency(1,: ));
  78.     pathLength = ones(1, length(adjacency(1,: ))) * maximum;
  79.     checked = zeros(1, length(adjacency(1,: )));
  80.     m = goal + 1;
  81.    
  82.     pathLength(1, goal) = 0;
  83.     for count = 1: (s - 1)
  84.         minimum = maximum;
  85.         for i = 1: s
  86.             if checked(1, i) == 0 & pathLength(1, i) <= minimum then
  87.                 minimum = pathLength(1, i);
  88.                 index = i;
  89.             end
  90.         end
  91.        
  92.         u = index;
  93.         checked(1, u) = 1;
  94.         for i = 1: s
  95.             if checked(1, i) == 0 & adjacency(u, i) < > 0 & pathLength(1, u) < > maximum & (pathLength(1, u) + adjacency(u, i)) < pathLength(1, i) then
  96.                 pathLength(1, i) = adjacency(u, i) + pathLength(1, u);
  97.             end
  98.         end
  99.     end
  100.    
  101.     res = pathLength;
  102. endfunction
  103.  
  104. consequential = [
  105.   0, 1, 0, 0, 0;
  106.   1, 0, 1, 0, 0;
  107.   0, 1, 0, 1, 0;
  108.   0, 0, 1, 0, 1;
  109.   0, 0, 0, 1, 0;
  110. ];
  111.  
  112. disp('===== ПОСЛЕДОВАТЕЛЬНАЯ СТРУКТУРА')
  113. graphA(consequential);
  114.  
  115. circular = [
  116.   0, 1, 0, 0, 1;
  117.   1, 0, 1, 0, 0;
  118.   0, 1, 0, 1, 0;
  119.   0, 0, 1, 0, 1;
  120.   1, 0, 0, 1, 0;
  121. ];
  122.  
  123. disp('===== КОЛЬЦЕВАЯ СТРУКТУРА')
  124. graphA(circular);
  125.  
  126. radial = [
  127.   0, 1, 1, 1, 1;
  128.   1, 0, 0, 0, 0;
  129.   1, 0, 0, 0, 0;
  130.   1, 0, 0, 0, 0;
  131.   1, 0, 0, 0, 0;
  132. ];
  133.  
  134. disp('===== РАДИАЛЬНАЯ СТРУКТУРА')
  135. graphA(radial);
  136.  
  137. // ------------- ДРЕВОВИДНАЯ
  138. tree = [
  139.   0, 1, 1, 0, 0;
  140.   1, 0, 0, 0, 0;
  141.   1, 0, 0, 1, 1;
  142.   0, 0, 1, 0, 0;
  143.   0, 0, 1, 0, 0;
  144. ];
  145.  
  146. disp('===== ДРЕВОВИДНАЯ СТРУКТУРА')
  147. graphA(tree);
  148.  
  149. full = [
  150.   0, 1, 1, 1, 1;
  151.   1, 0, 1, 1, 1;
  152.   1, 1, 0, 1, 1;
  153.   1, 1, 1, 0, 1;
  154.   1, 1, 1, 1, 0;
  155. ];
  156. disp('===== ПОЛНЫЙ ГРАФ')
  157. graphA(full);
  158.  
  159. nonadjacent = [
  160.   0, 1, 1, 0, 0;
  161.   1, 0, 0, 0, 0;
  162.   1, 0, 0, 0, 0;
  163.   0, 0, 0, 0, 1;
  164.   0, 0, 0, 1, 0;
  165. ];
  166.  
  167. disp('===== НЕСВЯЗНАЯ СТРУКТУРА')
  168. graphA(nonadjacent);
  169.  
  170. individualGraph = [
  171.    0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0;
  172.    0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0;
  173.    1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0;
  174.    0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0;
  175.    0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0;
  176.    0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0;
  177.    0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0;
  178.    0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1;
  179.    0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1;
  180.    0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1;
  181.    0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0
  182. ];
  183.  
  184. disp('===== ИНДИВИДУАЛЬНЫЙ ГРАФ')
  185. graphA(individualGraph);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement