exponenta event banner

Графики и матрицы

Этот пример показывает применение разреженных матриц и объясняет взаимосвязь между графиками и матрицами.

Граф - это набор узлов с заданными связями или рёбрами между ними. Графики бывают разных форм и размеров. Одним из примеров является график связности геодезического купола Бакминстера Фуллера, который также имеет форму футбольного мяча или молекулы углерода-60.

В MATLAB ® можно использовать bucky для формирования графика геодезического купола.

[B,V] = bucky;
G = graph(B);
p = plot(G);
axis equal

Figure contains an axes. The axes contains an object of type graphplot.

Можно также указать координаты узлов для изменения отображения графика.

p.XData = V(:,1);
p.YData = V(:,2);

Figure contains an axes. The axes contains an object of type graphplot.

bucky может использоваться для создания графа, поскольку он возвращает матрицу смежности. Матрица смежности является одним из способов представления узлов и рёбер в графе.

Чтобы построить матрицу смежности графа, узлы нумеруются от 1 до N. Тогда каждый элемент (i, j) матрицы N-by-N устанавливается в 1, если узел i соединен с узлом j, и 0 в противном случае. Таким образом, для неориентированных графов матрица смежности симметрична, но это не обязательно имеет место для направленных графов.

Например, здесь представлен простой граф и связанная с ним матрица смежности.

% Define a matrix A.
A = [0 1 1 0 ; 1 0 0 1 ; 1 0 0 1 ; 0 1 1 0];

% Draw a picture showing the connected nodes.
cla
subplot(1,2,1);
gplot(A,[0 1;1 1;0 0;1 0],'.-');
text([-0.2, 1.2 -0.2, 1.2],[1.2, 1.2, -.2, -.2],('1234')', ...
   'HorizontalAlignment','center')
axis([-1 2 -1 2],'off')

% Draw a picture showing the adjacency matrix.
subplot(1,2,2);
xtemp = repmat(1:4,1,4);
ytemp = reshape(repmat(1:4,4,1),16,1)';
text(xtemp-.5,ytemp-.5,char('0'+A(:)),'HorizontalAlignment','center');
line([.25 0 0 .25 NaN 3.75 4 4 3.75],[0 0 4 4 NaN 0 0 4 4])
axis off tight

Разреженные матрицы особенно полезны для представления очень больших графов. Это происходит потому, что каждый узел обычно подключен только к нескольким другим узлам. В результате плотность ненулевых записей в матрице смежности часто относительно мала для больших графов. Ярким примером может служить матрица смежности бакки-шара, так как она представляет собой симметричную разреженную матрицу 60 на 60 с только 180 ненулевыми элементами. Плотность этой матрицы составляет всего 5%.

Так как матрица смежности определяет график, можно построить график части бакового шара, используя подмножество записей в матрице смежности.

Используйте adjacency для создания новой матрицы смежности для графа. Отображение узлов в одной полусфере гребенчатого шара путем индексации в матрицу смежности для создания нового меньшего графика.

figure
A = adjacency(G);
H = graph(A(1:30,1:30));
h = plot(H);

Figure contains an axes. The axes contains an object of type graphplot.

Для визуализации матрицы смежности этой полусферы используйте spy функция для построения графика силуэта ненулевых элементов в матрице смежности.

Заметим, что матрица симметрична, так как если узел i соединен с узлом j, то узел j соединен с узлом i.

spy(A(1:30,1:30))
title('Top Left Corner of Bucky Ball Adjacency Matrix')

Figure contains an axes. The axes with title Top Left Corner of Bucky Ball Adjacency Matrix contains an object of type line.

Наконец, вот spy график всей матрицы смежности бакового шара.

spy(A)
title('Bucky Ball Adjacency Matrix')

Figure contains an axes. The axes with title Bucky Ball Adjacency Matrix contains an object of type line.

См. также

|