exponenta event banner

график

График с неориентированными рёбрами

Описание

graph объекты представляют неориентированные графики, которые имеют рёбра без направления, соединяющие узлы. После создания объекта графика можно узнать больше о графике, используя функции объекта для выполнения запросов к объекту. Например, можно добавить или удалить узлы или кромки, определить кратчайший путь между двумя узлами или найти определенный узел или кромку.

G = graph([1 1], [2 3]);
e = G.Edges
G = addedge(G,2,3)
G = addnode(G,4)
plot(G)

Создание

Описание

пример

G = graph создает пустой неориентированный объект графа, G, который не имеет узлов или ребер.

пример

G = graph(A) создает взвешенный график с использованием квадратной симметричной матрицы смежности, A. Расположение каждой ненулевой записи в A задает ребро для графика, а вес ребра равен значению записи. Например, если A(2,1) = 10, то G содержит границу между узлом 2 и узлом 1 с весом 10.

пример

G = graph(A,nodenames) дополнительно указывает имена узлов. Количество элементов в nodenames должно быть равно size(A,1).

G = graph(A,NodeTable) определяет имена узлов (и, возможно, другие атрибуты узлов) с помощью таблицы, NodeTable. Таблица должна иметь то же количество строк, что и A. Укажите имена узлов с помощью переменной таблицы Name.

пример

G = graph(A,___,type) задает треугольник матрицы смежности, который будет использоваться при построении графа. Необходимо указать A и дополнительно может указать nodenames или NodeTable. Использование только верхнего или нижнего треугольника A для построения графика, type может быть либо 'upper' или 'lower'.

пример

G = graph(A,___,'omitselfloops') игнорирует диагональные элементы A и возвращает граф без каких-либо автоциклов. В предыдущих синтаксисах можно использовать любую комбинацию входных аргументов.

пример

G = graph(s,t) задание ребер графика (s,t) в парах узлов. s и t может указывать индексы узлов или имена узлов. graph сортировка ребер в G сначала по исходному узлу, а затем по целевому узлу. При наличии свойств кромки в том же порядке, что и s и t, используйте синтаксис G = graph(s,t,EdgeTable) чтобы передать свойства рёбер таким образом, чтобы они были отсортированы таким же образом в полученном графике.

пример

G = graph(s,t,weights) также указывает веса кромок с массивом weights.

пример

G = graph(s,t,weights,nodenames) задает имена узлов с помощью массива ячеек символьных векторов или строкового массива, nodenames. s и t не может содержать имена узлов, отсутствующие в nodenames.

G = graph(s,t,weights,NodeTable) определяет имена узлов (и, возможно, другие атрибуты узлов) с помощью таблицы, NodeTable. Укажите имена узлов с помощью Name табличная переменная. s и t не может содержать имена узлов, отсутствующие в NodeTable.

пример

G = graph(s,t,weights,num) указывает количество узлов в графе с числовым скаляром num.

G = graph(s,t,___,'omitselfloops') не добавляет к графу никаких самокольцов. То есть любой k что удовлетворяет s(k) == t(k) игнорируется. В предыдущих синтаксисах можно использовать любую комбинацию входных аргументов.

G = graph(s,t,EdgeTable,___) использует таблицу для указания атрибутов кромки вместо указания weights. EdgeTable ввод должен быть таблицей со строкой для каждой соответствующей пары элементов в s и t. Задание веса кромок с помощью переменной таблицы Weight.

пример

G = graph(EdgeTable) использует таблицу EdgeTable для определения графика. С таким синтаксисом первая переменная в EdgeTable должно быть названо EndNodes, и это должен быть массив из двух столбцов, определяющий список рёбер графа.

пример

G = graph(EdgeTable,NodeTable) дополнительно задает имена (и, возможно, другие атрибуты) узлов графика с помощью таблицы, NodeTable.

G = graph(EdgeTable,___,'omitselfloops') не добавляет самокольцы к графу. То есть любой k что удовлетворяет EdgeTable.EndNodes(k,1) == EdgeTable.EndNodes(k,2) игнорируется. Необходимо указать EdgeTable и дополнительно может указать NodeTable.

Входные аргументы

развернуть все

Матрица смежности, заданная как полная или разреженная числовая матрица. Записи в A укажите сеть соединений (рёбер) между узлами графа. Расположение каждой ненулевой записи в A определяет ребро между двумя узлами. Значение этой записи определяет вес края. Логическая матрица смежности приводит к невзвешенному графу.

Ненулевые записи на главной диагонали A укажите самокольцы или узлы, которые соединены друг с другом ребром. Используйте 'omitselfloops' параметр ввода для игнорирования диагональных записей.

A должен быть симметричным, если type ввод указан. Использовать issymmetric для подтверждения матричной симметрии. Для треугольных матриц смежности укажите type для использования только верхнего или нижнего треугольника.

Пример: A = [0 1 5; 1 0 0; 5 0 0] описывает граф с тремя узлами и двумя рёбрами. Край между узлом 1 и узлом 2 имеет вес 1, и край между узлом 1 и узлом 3 имеет вес 5.

Типы данных: single | double | logical

Имена узлов, заданные как массив ячеек символьных векторов или строковый массив. nodenames должна иметь длину, равную numnodes(G) чтобы он содержал непустое уникальное имя для каждого узла в графе.

Пример: G = graph(A,{'n1','n2','n3'}) задает три имени узлов для матрицы смежности 3 на 3, A.

Типы данных: cell | string

Тип матрицы смежности, указанный как 'upper' или 'lower'.

Пример: G = graph(A,'upper') использует только верхний треугольник A для построения графика, G.

Пары узлов, указанные как индексы узлов или имена узлов. graph создает кромки между соответствующими узлами в s и t, которые оба должны быть числовыми, или оба должны быть символьными векторами, массивами ячеек символьных векторов, строковыми массивами или категориальными массивами. Во всех случаях: s и t должен иметь одинаковое количество элементов.

  • Если s и t числовые, то они соответствуют индексам узлов графа. Числовые индексы узлов должны быть положительными целыми числами, большими или равными 1.

  • Если s и t - символьные векторы, массивы ячеек символьных векторов или строковые массивы, затем задают имена узлов. Nodes свойство графа представляет собой таблицу, содержащую Name переменная с именами узлов, G.Nodes.Name.

  • Если s и t категориальные массивы, затем категории в s и t используются в качестве имен узлов на графике. Это может включать категории, которые не являются элементами в s или t.

  • Если s и t укажите несколько ребер между одними и теми же двумя узлами, в результате чего получится мультиграф.

В этой таблице показаны различные способы ссылки на один или несколько узлов по их числовым индексам узлов или по их именам.

ФормаОдин узелНесколько узлов
Индекс узла

Скаляр

Пример: 1

Вектор

Пример: [1 2 3]

Имя узла

Символьный вектор

Пример: 'A'

Массив ячеек символьных векторов

Пример: {'A' 'B' 'C'}

Строковый скаляр

Пример: "A"

Строковый массив

Пример: ["A" "B" "C"]

Категориальный массив

Пример: categorical("A")

Категориальный массив

Пример: categorical(["A" "B" "C"])

Пример: G = graph([1 2 3],[2 4 5]) создает граф с пятью узлами и тремя рёбрами.

Пример: G = graph({'Boston' 'New York' 'Washington D.C.'},{'New York' 'New Jersey' 'Pittsburgh'}) создает график с пятью именованными узлами и тремя ребрами.

Веса ребер, заданные как скаляр, вектор, матрица или многомерный массив. weights должен быть скаляром или массивом с таким же количеством элементов, как s и t.

graph сохраняет веса кромок в виде Weight переменной в G.Edges таблица свойств. Чтобы добавить или изменить веса после создания графика, можно изменить табличную переменную непосредственно, например: G.Edges.Weight = [25 50 75]'.

При указании weights как пустой массив [], то он игнорируется.

Пример: G = graph([1 2],[2 3],[100 200]) создает график с тремя узлами и двумя рёбрами. Края имеют вес 100 и 200.

Типы данных: single | double

Число узлов графа, указанное как положительное скалярное целое число. num должно быть больше или равно наибольшим элементам в s и t.

Пример: G = graph([1 2],[2 3],[],5) создает граф с тремя связными узлами и двумя изолированными узлами.

Таблица информации о границах. Если не указать s и t, то первая переменная в EdgeTable должен быть матрицей из двух столбцов, массивом ячеек символьных векторов или строковым массивом с именем EndNodes определяет ребра графика. Для веса кромок используйте переменную Weight, поскольку это имя табличной переменной используется некоторыми графовыми функциями. При наличии переменной Weight, то он должен быть числовым вектором столбца. Посмотрите table для получения дополнительной информации о построении таблицы.

После создания графика запросите таблицу информации о кромках с помощью G.Edges.

Пример: EdgeTable = table([1 2; 2 3; 3 5; 4 5],'VariableNames',{'EndNodes'})

Типы данных: table

Таблица информации о узле. NodeTable может содержать любое количество переменных для описания атрибутов узлов графика. Для имен узлов используйте переменную Name, поскольку это имя переменной используется некоторыми графовыми функциями. При наличии переменной Name, то это должен быть массив ячеек символьных векторов или строковый массив, указывающий уникальное имя в каждой строке. Посмотрите table для получения дополнительной информации о построении таблицы.

После создания графика выполните запрос к информационной таблице узла с помощью G.Nodes.

Пример: NodeTable = table({'a'; 'b'; 'c'; 'd'},'VariableNames',{'Name'})

Типы данных: table

Выходные аргументы

развернуть все

Неориентированный граф, возвращенный как graph объект. Список кромок в G.Edges.EndNodes сортируется сначала по исходному узлу, а затем по целевому узлу.

Свойства

развернуть все

Рёбра графа, возвращаемые в виде таблицы. По умолчанию это Mоколо-1 таблица, где M - количество рёбер в графе. Список кромок в G.Edges.EndNodes сортируется сначала по исходному узлу, а затем по целевому узлу.

  • Чтобы добавить в график новые свойства ребер, создайте новую переменную в Edges таблица.

  • Чтобы добавить или удалить ребра из графика, используйте addedge или rmedge функции объекта.

Пример: G.Edges возвращает таблицу со списком рёбер на графике

Пример: G.Edges.Weight возвращает числовой вектор весов ребер.

Пример: G.Edges.Weight = [10 20 30 55]' задает новые веса ребер для графика.

Пример: G.Edges.NormWeight = G.Edges.Weight/sum(G.Edges.Weight) добавляет новое свойство кромки в таблицу, содержащую нормализованные веса кромок.

Типы данных: table

Узлы графа, возвращаемые в виде таблицы. По умолчанию это пустое Nоколо-0 таблица, где N - количество узлов в графе.

  • Чтобы добавить в график новые свойства узла, создайте новую переменную в Nodes таблица.

  • Чтобы добавить или удалить узлы из графика, используйте addnode или rmnode функции объекта.

Пример: G.Nodes возвращает таблицу со списком свойств узла графика. По умолчанию эта таблица пуста.

Пример: G.Nodes.Names = {'Montana', 'New York', 'Washington', 'California'}' добавляет имена узлов к графу, добавляя переменную Names в Nodes таблица.

Пример: G.Nodes.WiFi = logical([1 0 0 1 1]') добавляет переменную WiFi в Nodes таблица. Это свойство указывает, что некоторые аэропорты имеют беспроводной доступ в Интернет.

Типы данных: table

Функции объекта

развернуть все

addedgeДобавить новое ребро к графу
rmedgeУдалить ребро из графика
addnodeДобавить новый узел в график
rmnodeУдалить узел из графика
findedgeНайти ребро на графике
findnodeНайти узел на графике
numedgesКоличество рёбер в графике
numnodesКоличество узлов в графе
edgecountКоличество ребер между двумя узлами
reordernodesПереупорядочить узлы графика
subgraphИзвлечь подграф
centralityИзмерение важности узла
conncompСвязанные компоненты графика
biconncompДвухсвязные компоненты графика
bctreeСекущий блок древовидный график
isisomorphicОпределить, являются ли два графика изоморфными
isomorphismВычислить изоморфизм между двумя графами
ismultigraphОпределение наличия нескольких рёбер на графике
simplifyСокращение мультиграфа до простого графика
bfsearchПоиск графов по ширине
dfsearchПоиск по графу с первой глубиной
shortestpathКратчайший путь между двумя одиночными узлами
shortestpathtreeДерево кратчайшего пути от узла
distancesКратчайшие расстояния пути для всех пар узлов
maxflowМаксимальный расход на графике
minspantreeМинимальное покрывающее дерево графика
allpathsПоиск всех путей между двумя узлами графика
hascyclesОпределить, содержит ли график циклы
allcyclesНайти все циклы на графике
cyclebasisФундаментальная циклическая основа графика
adjacencyМатрица смежности графа
incidenceМатрица частоты падения графика
laplacianГрафовая лапласианская матрица
degreeСтепень узлов графика
neighborsСоседи узла графа
nearestБлижайшие соседи в радиусе
outedgesИсходящие кромки из узла
plotПечать узлов и ребер графика

Примеры

свернуть все

Создать graph объект с тремя узлами и двумя ребрами. Один край находится между узлом 1 и узлом 2, а другой край находится между узлом 1 и узлом 3.

G = graph([1 1],[2 3])
G = 
  graph with properties:

    Edges: [2x1 table]
    Nodes: [3x0 table]

Просмотрите таблицу кромок графика.

G.Edges
ans=2×1 table
    EndNodes
    ________

     1    2 
     1    3 

Добавьте имена узлов в график, а затем просмотрите новые таблицы узлов и кромок. Конечные узлы каждого ребра теперь выражаются с использованием их имен узлов.

G.Nodes.Name = {'A' 'B' 'C'}';
G.Nodes
ans=3×1 table
    Name 
    _____

    {'A'}
    {'B'}
    {'C'}

G.Edges
ans=2×1 table
       EndNodes   
    ______________

    {'A'}    {'B'}
    {'A'}    {'C'}

Можно добавить или изменить дополнительные переменные в Nodes и Edges таблицы для описания атрибутов узлов или ребер графика. Однако непосредственно изменить количество узлов или рёбер на графике, изменив эти таблицы, невозможно. Вместо этого используйте addedge, rmedge, addnode, или rmnode для изменения количества узлов или рёбер в графике.

Например, добавьте ребро к графу между узлами 2 и 3 и просмотрите новый список ребер.

G = addedge(G,2,3)
G = 
  graph with properties:

    Edges: [3x1 table]
    Nodes: [3x1 table]

G.Edges
ans=3×1 table
       EndNodes   
    ______________

    {'A'}    {'B'}
    {'A'}    {'C'}
    {'B'}    {'C'}

Создайте симметричную матрицу смежности, A, что создает полный график порядка 4. Используйте логическую матрицу смежности для создания графа без весов.

A = ones(4) - diag([1 1 1 1])
A = 4×4

     0     1     1     1
     1     0     1     1
     1     1     0     1
     1     1     1     0

G = graph(A~=0)
G = 
  graph with properties:

    Edges: [6x1 table]
    Nodes: [4x0 table]

Просмотр списка кромок графика.

G.Edges
ans=6×1 table
    EndNodes
    ________

     1    2 
     1    3 
     1    4 
     2    3 
     2    4 
     3    4 

Создайте верхнюю треугольную матрицу смежности.

A = triu(magic(4))
A = 4×4

    16     2     3    13
     0    11    10     8
     0     0     6    12
     0     0     0     1

Создайте график с именованными узлами, используя матрицу смежности. Определить 'omitselfloops' чтобы игнорировать записи на диагонали A, и указать type как 'upper' указать, что A является верхнетреугольной.

names = {'alpha' 'beta' 'gamma' 'delta'};
G = graph(A,names,'upper','omitselfloops')
G = 
  graph with properties:

    Edges: [6x2 table]
    Nodes: [4x1 table]

Просмотрите сведения о ребре и узле.

G.Edges
ans=6×2 table
           EndNodes           Weight
    ______________________    ______

    {'alpha'}    {'beta' }       2  
    {'alpha'}    {'gamma'}       3  
    {'alpha'}    {'delta'}      13  
    {'beta' }    {'gamma'}      10  
    {'beta' }    {'delta'}       8  
    {'gamma'}    {'delta'}      12  

G.Nodes
ans=4×1 table
      Name   
    _________

    {'alpha'}
    {'beta' }
    {'gamma'}
    {'delta'}

Создайте и постройте график куба, используя список конечных узлов каждого ребра.

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 8 3 7 4 6 5 6 8 7 8];
G = graph(s,t)
G = 
  graph with properties:

    Edges: [12x1 table]
    Nodes: [8x0 table]

plot(G)

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

Создайте и постройте график куба, используя список конечных узлов каждого ребра. Укажите имена узлов и веса кромок как отдельные входные данные.

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 8 3 7 4 6 5 6 8 7 8];
weights = [10 10 1 10 1 10 1 1 12 12 12 12];
names = {'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H'};
G = graph(s,t,weights,names)
G = 
  graph with properties:

    Edges: [12x2 table]
    Nodes: [8x1 table]

plot(G,'EdgeLabel',G.Edges.Weight)

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

Создайте взвешенный график, используя список конечных узлов каждого ребра. Укажите, что график должен содержать в общей сложности 10 узлов.

s = [1 1 1 1 1];
t = [2 3 4 5 6];
weights = [5 5 5 6 9];
G = graph(s,t,weights,10)
G = 
  graph with properties:

    Edges: [5x2 table]
    Nodes: [10x0 table]

Постройте график. Дополнительные узлы отсоединены от основного подключенного компонента.

plot(G)

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

Создание пустого объекта графика, G.

G = graph;

Добавьте к графу три узла и три ребра. Соответствующие записи в s и t определите конечные узлы рёбер графика. addedge автоматически добавляет соответствующие узлы в график, если они еще не присутствуют.

s = [1 2 1];
t = [2 3 3];
G = addedge(G,s,t)
G = 
  graph with properties:

    Edges: [3x1 table]
    Nodes: [3x0 table]

Просмотр списка кромок. Каждая строка описывает ребро в графике.

G.Edges
ans=3×1 table
    EndNodes
    ________

     1    2 
     1    3 
     2    3 

Для лучшей производительности создайте графики сразу с помощью одного вызова graph. Добавление узлов или рёбер в цикл может быть медленным для больших графов.

Создание таблицы кромок, содержащей переменные EndNodes, Weight, и Code. Затем создайте таблицу узлов, содержащую переменные. Name и Country. Переменные в каждой таблице определяют свойства узлов и ребер графика.

s = [1 1 1 2 3];
t = [2 3 4 3 4];
weights = [6 6.5 7 11.5 17]';
code = {'1/44' '1/49' '1/33' '44/49' '49/33'}';
EdgeTable = table([s' t'],weights,code, ...
    'VariableNames',{'EndNodes' 'Weight' 'Code'})
EdgeTable=5×3 table
    EndNodes    Weight      Code   
    ________    ______    _________

     1    2         6     {'1/44' }
     1    3       6.5     {'1/49' }
     1    4         7     {'1/33' }
     2    3      11.5     {'44/49'}
     3    4        17     {'49/33'}

names = {'USA' 'GBR' 'DEU' 'FRA'}';
country_code = {'1' '44' '49' '33'}';
NodeTable = table(names,country_code,'VariableNames',{'Name' 'Country'})
NodeTable=4×2 table
     Name      Country
    _______    _______

    {'USA'}    {'1' } 
    {'GBR'}    {'44'} 
    {'DEU'}    {'49'} 
    {'FRA'}    {'33'} 

Создайте график с помощью таблиц узлов и кромок. Постройте график, используя коды стран в качестве меток узлов и краев.

G = graph(EdgeTable,NodeTable);
plot(G,'NodeLabel',G.Nodes.Country,'EdgeLabel',G.Edges.Code)

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

Вопросы совместимости

развернуть все

В R2018a изменилось поведение

Представлен в R2015b