Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // анализ графа
- function graphA(adjacency)
- n = length(adjacency(1, :));
- m = sum(adjacency) / 2;
- disp(adjacency, 'Матрица смежности:');
- vertex = [];
- for i = 1:n
- vertex(i,:) = [sum(adjacency(i, :)), sum(adjacency(:, i))];
- end
- for i = 1:n
- str = '';
- if vertex(i, 1) == vertex(i, 2) & vertex(i, 1) == 0 then
- str = 'Изолированная вершина:';
- elseif vertex(i, 2) == 0 then
- str = 'Висячая вершина:';
- elseif vertex(i, 1) == 0 then
- str = 'Тупиковая вершина:';
- end
- disp(i, str);
- end
- R = 0.5 * sum(adjacency) / (n - 1) - 1;
- disp(R, 'Структурная избыточность:');
- p_ = (2 * m) / n;
- e2 = sum((sum(adjacency, 'r') - p_) .^ 2);
- disp(e2, 'Неравномерность связей в структуре:');
- Q = 0;
- for i = 1:n
- Q = Q + sum(shortestPath(adjacency, i));
- end
- disp(Q, 'Структурная близость элементов между собой:');
- Qmin = n * (n - 1);
- Qrel = Q / Qmin - 1;
- disp(Qrel, 'Структурная компактность:');
- function res=z(i)
- res = sum((Q ./ 2) .* sum(shortestPath(adjacency, i)));
- endfunction
- zi = [];
- for i = 1:m
- zi(i) = z(i);
- end
- zmax = max(zi);
- sigma = (n - 1) * (2 * zmax - n) / (zmax ^ (n - 2));
- disp(sigma, 'Индекс центральности:');
- k = 3;
- ri = (sum(adjacency, 'r') .^ k) / sum(adjacency);
- disp([1:n; ri]', 'Ранги элементов:');
- endfunction
- // алгоритм Дейсктры для поиска длин кратчайших путей до вершины
- function [res]=shortestPath(adjacency, goal)
- maximum = 999;
- count = 0;
- index = 0;
- i = 0;
- u = 0;
- s = length(adjacency(1,: ));
- pathLength = ones(1, length(adjacency(1,: ))) * maximum;
- checked = zeros(1, length(adjacency(1,: )));
- m = goal + 1;
- pathLength(1, goal) = 0;
- for count = 1: (s - 1)
- minimum = maximum;
- for i = 1: s
- if checked(1, i) == 0 & pathLength(1, i) <= minimum then
- minimum = pathLength(1, i);
- index = i;
- end
- end
- u = index;
- checked(1, u) = 1;
- for i = 1: s
- if checked(1, i) == 0 & adjacency(u, i) < > 0 & pathLength(1, u) < > maximum & (pathLength(1, u) + adjacency(u, i)) < pathLength(1, i) then
- pathLength(1, i) = adjacency(u, i) + pathLength(1, u);
- end
- end
- end
- res = pathLength;
- endfunction
- consequential = [
- 0, 1, 0, 0, 0;
- 1, 0, 1, 0, 0;
- 0, 1, 0, 1, 0;
- 0, 0, 1, 0, 1;
- 0, 0, 0, 1, 0;
- ];
- disp('===== ПОСЛЕДОВАТЕЛЬНАЯ СТРУКТУРА')
- graphA(consequential);
- circular = [
- 0, 1, 0, 0, 1;
- 1, 0, 1, 0, 0;
- 0, 1, 0, 1, 0;
- 0, 0, 1, 0, 1;
- 1, 0, 0, 1, 0;
- ];
- disp('===== КОЛЬЦЕВАЯ СТРУКТУРА')
- graphA(circular);
- radial = [
- 0, 1, 1, 1, 1;
- 1, 0, 0, 0, 0;
- 1, 0, 0, 0, 0;
- 1, 0, 0, 0, 0;
- 1, 0, 0, 0, 0;
- ];
- disp('===== РАДИАЛЬНАЯ СТРУКТУРА')
- graphA(radial);
- // ------------- ДРЕВОВИДНАЯ
- tree = [
- 0, 1, 1, 0, 0;
- 1, 0, 0, 0, 0;
- 1, 0, 0, 1, 1;
- 0, 0, 1, 0, 0;
- 0, 0, 1, 0, 0;
- ];
- disp('===== ДРЕВОВИДНАЯ СТРУКТУРА')
- graphA(tree);
- full = [
- 0, 1, 1, 1, 1;
- 1, 0, 1, 1, 1;
- 1, 1, 0, 1, 1;
- 1, 1, 1, 0, 1;
- 1, 1, 1, 1, 0;
- ];
- disp('===== ПОЛНЫЙ ГРАФ')
- graphA(full);
- nonadjacent = [
- 0, 1, 1, 0, 0;
- 1, 0, 0, 0, 0;
- 1, 0, 0, 0, 0;
- 0, 0, 0, 0, 1;
- 0, 0, 0, 1, 0;
- ];
- disp('===== НЕСВЯЗНАЯ СТРУКТУРА')
- graphA(nonadjacent);
- individualGraph = [
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0;
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0;
- 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0;
- 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0;
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0;
- 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0;
- 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0;
- 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1;
- 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1;
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1;
- 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0
- ];
- disp('===== ИНДИВИДУАЛЬНЫЙ ГРАФ')
- graphA(individualGraph);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement