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

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

График является набором узлов с заданными соединениями, или ребрами, между ними. Графики имеют много форм и размеров. Одним из примеров является графиков связности геодезического купола Бакминстера Фуллера, который также имеет форму футбольного мяча или молекулы углерода-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.

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

Чтобы создать матрицу смежности графика, узлы нумеруются 1 к N. Затем каждый элемент (i, j) матрицы N на 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%.

Поскольку матрица смежности задает граф, можно построить график фрагмента bucky ball с помощью подмножества записей в матрице смежности.

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

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.

См. также

|