Функция Mathematica становится красной, не работает - PullRequest
3 голосов
/ 08 декабря 2011

Я пытаюсь найти минимальное связанное дерево, используя Mathematica, и я хочу использовать функцию MinimumSpanningTree из Combinatorica. Я использую следующий код.

Needs["Combinatorica`"] 
MinimumSpanningTree[GraphPlot[m]]

где m - матрица. Тем не менее, MinimumSpanningTree становится красным и не работает. Выход дает

out = MinimumSpanningTree[<maximum spanned tree>]  //can't show the tree here

Как я могу заставить работать MinimumSpanningTree? Почему он становится красным?

Ответы [ 2 ]

7 голосов
/ 08 декабря 2011

Функции становятся красными, когда вы сталкиваетесь с так называемой проблемой затенения. Подробнее об этом вы можете прочитать в документации . Эта проблема обсуждается во многих местах, в частности в книге Романа Мейдера «Программирование в Mathematica». Очень хорошим и подробным отчетом о теневом копировании является статья Дэвида Вагнера в Mathematica Journal, доступная здесь в формате pdf. Чтобы понять эту проблему, вам понадобится некоторое базовое понимание контекстов и пакетов. Следующие прошлые обсуждения SO также могут быть полезны:

Изготовление пакетов Mathematica

Проблема импорта пакетов в Mathematica

По сути, некоторые из функций Combinatorica` имеют то же имя, что и функции, связанные с новым системным графом версии 8, поэтому Mathematica не знает, какие из них вызывать. Если вы действительно хотите использовать функции Combinatorica`, то сначала вам нужно будет «тихо» загрузить Combinatorica`, не включив его впоследствии в $ContextPath, что, вероятно, легче всего выполнить как

.
Block[{$ContextPath}, Needs["Combinatorica`"]]

Затем вам придется ссылаться на функции Combinatorica` по их длинным именам, таким как Combinatorica`MinimumSpanningTree. Еще одна вещь, которую нужно иметь в виду, это то, что графическое представление в Combinatorica` отличается от представленного во встроенной функциональности v.8, поэтому вам может потребоваться преобразовать одно в другое, если вы хотите смешать их.

5 голосов
/ 08 декабря 2011

Я думаю, вы захотите преобразовать в график, как показано ниже.

MinimumSpanningTree[FromAdjacencyMatrix[m]]

Также возможно представляет интерес:

http://demonstrations.wolfram.com/ConnectingTownsUsingKruskalsAlgorithm/

...