ShowGraph [{{e1, e2}, {e1, e3}}, {e1, e2, e3}]; // в чем здесь проблема? - PullRequest
0 голосов
/ 31 мая 2010

не показывает указанный график в пакете Mathematica Graph Theory 'Combinatorica'.

Ответы [ 4 ]

4 голосов
/ 01 июня 2010

Важно отметить, что Mathematica имеет две более или менее независимые графические среды: одну, включенную в пакет Combinatorica, и пакет GraphUtilities.

По моему ограниченному опыту, пакет Combinatorica - это довольно большая машина, которую нужно задействовать, и вам действительно нужно использовать фреймворк для ее использования. GraphUtilities, с другой стороны, интуитивно понятен, имеет больше возможностей для настройки графики и больше ощущений от Mathematica.

Чтобы построить пример графика, все что вам нужно это

Needs["GraphUtilities`"]
GraphPlot[{e1 -> e2, e1 -> e3}, VertexLabeling -> True, DirectedEdges -> True]
3 голосов
/ 31 мая 2010

Если вам нужен общий неориентированный граф с 3 вершинами с ребрами между вершиной 1 и вершиной 2 и между вершиной 1 и вершиной 3, это будет делать следующее:

Needs["Combinatorica`"]
ShowGraph@AddEdges[EmptyGraph[3], {{1, 2}, {1, 3}}]

Чтобы узнать больше о создании, отображении и анализе графиков, перейдите к «Представляющие графы» в Mathematica Combinatorica Tutorial .

1 голос
/ 26 октября 2010

Хорошо, спасибо всем. Позвольте мне собрать все эти обсуждения. Прежде всего, как упоминал Янус, в Mathematica есть два способа рисования графиков. Во-первых, способ Combinatorica, который идет как надстройка. Во-вторых, способ GraphPlot, который является родной реализацией Mathematica для рисования графиков. GraphPlot использует Spring макет для рисования графиков. Как сказали дривы, мы используем ShowGraph [] для рисования графиков Combinatorica.

Чтобы понять, почему упомянутый код не работает, мы должны очень хорошо понимать команду ShowGraph []. Mathematica 7 определяет,

ShowGraph [g] отображает график г.

Теперь, что такое график?

График [e, v, opts] представляет объект графа, где e - список ребер, аннотированных графическими опциями, v - список вершин, аннотированных графическими опциями, и opts представляет собой набор глобальных опций графа "

Проблема в том, что Combinatorica, похоже, не работает точно так, как указано выше. Давайте рассмотрим ... предположим, что вы создали граф Combinatorica с именем g . Теперь g[[0]] будет печатать Graph, g[[1]] будет печатать список ребер, g[[2]] будет печатать opts . Где список вершин ??

Как вы можете видеть выше, вы можете вручную создать g[[1]] и g[[2]] и передать их в Graph. Давайте создадим это:

e = {{1,2}, {{1,3}}}
opts = {{{0,0}}, {{-5,5}}, {{5,5}}}
g = Graph[e, opts]

Это создаст граф с вершинами 1, 2 и 3. Теперь, как вы можете их пометить? В Combinatorica вы делаете это с помощью опции VertexLabel ShowGraph []. Если вы используете VertexLabel-> True, он будет показывать только метки по умолчанию, то есть 1, 2 и 3 здесь. Чтобы использовать свои собственные ярлыки, сделайте следующее:

ShowGraph[g, VertexLabel->{a,b,c}]

Интересно, правда? :.)

Теперь к точному ответу на мой вопрос. Проблема упомянутого кода связана с использованием литеральных значений вместо целых. Combinatorica исключает только целочисленные значения как список ребер или вершин.

Запомните, хотя это возможно, полезно только создавать небольшие графики. Для больших графиков вы должны использовать генераторы графиков по умолчанию для создания вашего графика. Мол, для случайного графа используйте:

g = Random[10, 0.23]

Создает граф с 10 вершинами с вероятностью ребра 0,23.

Вака, вака,
на этот раз для Combinatorica!

0 голосов
/ 05 сентября 2011
ShowGraph[
 Graph[
 {{{1, 2}}, {{2, 3}}, {{3, 1}}}, 
 {{{0, 0}, VertexLabel -> v1}, 
  {{2, 5}, VertexLabel -> v2}, 
  {{5, 5}, VertexLabel -> v3}}
 ]
]

Я думаю, что это то, что вы искали.

Способ, которым Combinatorica создает объект Graph, кажется очень громоздким. Я бы подумал, что проще создать промежуточную функцию, которая бы вырабатывала объект Graph с синтаксисом, аналогичным GraphPlot. Таким образом, вам не нужно было бы явно записывать координаты вершины или использовать громоздкую нотацию {{x, y}, opts}, которая становится {{x, y}}, когда у вас нет опций для указания.

Итак, вы можете иметь такую ​​функцию, как:

myGraphPlot[{{e1,e2},{e1,e3}},{e1,e2,e3}]

с кодом вверху.

...