Ознакомительная версия.
new — создает пустой граф (без ребер и узлов);
void — создает пустой граф (без ребер);
duplicate — создает копию графа;
complete — создает полный граф;
random — возвращает случайный граф;
Petersen — создает граф Петерсена.
Функции модификации графов:
addedges — добавляет в граф ребро;
addvertex — добавляет в граф вершины;
connect — соединяет одни заданные вершины с другими;
delete — удаляет из графа ребро или вершину.
Функции контроля структуры графов:
draw — рисует граф;
edges — возвращает список ребер графа;
vertices — возвращает список узлов графа;
show — возвращает таблицу с полной информацией о графе;
ends — возвращает имена вершин графа;
head — возвращает имя вершины, которая является головой ребер;
tail — возвращает имя вершины, которая является хвостом ребер;
incidence — возвращает матрицу инцидентности;
adjacency — возвращает матрицу смежности;
eweight — возвращает веса ребер;
vweight — возвращает веса вершин;
isplanar — упрощает граф, удаляя циклы и повторяющиеся ребра, и проверяет его на планарность (возвращает true, если граф оказался планарным и false в противном случае).
Функции с типовыми возможностями графов:
flow — находит максимальный поток в сети от одной заданной вершины к другой;
shortpathtree — находит кратчайший путь в графе с помощью алгоритма Дейкстры.
Каждая из этих команд имеет одну или несколько синтаксических форм записи. Их можно уточнить с помощью справочной системы. С ее помощью можно ознакомиться и с назначением других функций этого обширного пакета. Проиллюстрируем его применение на нескольких типичных примерах.
На рис. 9.8 показан пример создания графа, имеющего четыре вершины, и графа Петерсона с выводом их графиков графической функцией draw.
Рис. 9.8. Построение графов
На рис. 9.9 показан другой пример работы с графами — построение графа функцией complete и затем его преобразование путем удаления части вершин. Исходный и преобразованный графы строятся функцией draw.
Рис. 9.9. Преобразование графа удалением части вершин
В третьем примере (рис. 9.10) граф формируется по частям — вначале задается пустой граф функцией new, а затем с помощью функций addvertex и addedge в него включаются вершины и ребра. Далее функция connect соединяет вершину a с вершиной с, делая граф замкнутым. Функция draw строит сформированный таким образом граф, а функции head и tail используются для выявления «голов» и «хвостов» графа.
Рис. 9.10. Формирование графа и определение его «голов» и «хвостов»
В четвертом примере, представленном на рис. 9.11, показано создание графа G2 (его изображение было приведено на рис. 9.9) с вычислением для этого графа максимального потока от вершины 1. Обратите внимание, что в параметрах функции flow, использованной для этого, заданы две переменные: eset — принимает значение множества с ребрами, по которым проходит максимальный поток, и comp — принимает значение множества, в котором содержатся вершины, по которым проходит максимальный поток. Значения этих переменных выведены в области вывода. В заключительной части этого примера показано применение функции shortpathtree, ищущей наиболее короткий путь от вершины 1 до других вершин.
Рис. 9.11. Пример вычисления максимального потока и наиболее коротких путей для заданного графа
9.3.3. Получение информации о графе
Приведенный ниже еще один пример иллюстрирует работу функции show, выдающей таблицу с полной информацией о графе, созданном функцией complete:
> restart:with(networks):G2:=complete(4):
> show(G2);
table([_Counttrees = _Counttrees, _Vertices = {1,2,3,4}, _Vweight = table(sparse, []), _Edges = {e1,e2,e3,e4,e5,e6}, _Bicomponents = _Bicomponents, _Emaxname = 6, _Head = table([]), _Tail = table([]), _EdgeIndex = table(symmetric, [(3,4)={e6},(2,3)={e4},(1,4)={е3},(1,2)={е1},(1,3)={е2},(2,4)={e5}]), _Neighbors = table([1={2,3,4},2={1,3,4},3={1,2,4},4={1,2,3}]), _Econnectivity = _Econnectivity, Ends = table([e4={2,3},e1={1,2},{1,4},e6={3,4},e5={2,4},e2={1,3}]), _Countcuts = _Countcuts, _Eweight = table([e4=1, e1=1, e3=1, e6=1, e5=1, e2=1]), _Status = {SIMPLE, COMPLETE}])
Разумеется, приведенные примеры далеко не исчерпывают всех задач, которые можно решать с применением графов. Но они наглядно демонстрируют, что для большинства пользователей пакет networks превращает графы из окутанного ореолом таинственности модного средства в простой рабочий инструмент.
9.4. Математические пакеты расширения специального назначения
9.4.1. Инструментальный пакет для линейных рекуррентных
уравнений — LREtools
Этот пакет полезен математикам, часто использующим рекуррентные отношения и формулы. Он дополняет функцию rsolve основной библиотеки и содержит следующие функции:
> with(LREtools);
[REcontent, REcreate, REplot, REpritnpart, REreduceorder, REtoDE, REtodelta, REtopeoc, autodispersion, constcoeffsol, dispersion, divconq, firstlin, hypergeomsols, polysols, ratpolysols, riccati, shift]
9.4.2. Пакет функций дифференциальных форм difforms
В пакете дифференциальных форм содержится следующий ряд функций:
> with(difforms);
[&^, d, defform, formpart, parity, scalarpart, simpform, wdegree]
Демонстрационные материалы по применению этого пакета входят в поставку Maple, так что заинтересованный читатель может их просмотреть.
9.4.3. Пакет работы с тензорами tensor
Этот пакет впервые появился в реализации Maple V R5. Он дает средства для работы с тензорами и вычислениями, используемыми в общей теории относительности. В нем использован специальный тип данных tensor_type в виде таблиц с двумя полями: компонентов и характеристик индексов. Поле компонентов — массив с размерностью, эквивалентной рангу объекта. Поле характеристик индексов задается списком чисел 1 и -1. При этом 1 на i-й позиции означает, что соответствующий индекс контравариантный, а -1 — что он ковариантный.
Процедура tensor_type возвращает логическое значение true, если ее первый аргумент удовлетворяет свойствам тензора, и false, если он этому свойству не удовлетворяет.
Каждому тензору соответствуют еще две таблицы. Таблица коэффициентов вращения задает коэффициенты вращения Ньюмена-Пенроуза, которые вычисляются функцией tensor[npspin] и индексируются именами греческих букв alpha, beta, gamma, epsilon и т.д. Другая таблица (компонент кривизны) содержит компоненты кривизны Ньюмена-Пенроуза. Они представлены тремя полями: полем Phi в виде массива размерности (0..2,0..2) с компонентами Риччи, поле Psi с массивом размерности (0..4) с компонентами Вейля и поле R со скаляром Риччи.
Объявление
> with(tensor);
дает доступ к множеству функций пакета:
Christoffel1 — вычисление символов Кристоффеля первого рода;
Christoffel2 — вычисление символов Кристоффеля второго рода;
Einstein — возвращает тензор Эйнштейна;
display_alJGR — описывает ненулевые компоненты всех тензоров и параметров, вычисленных командой tensorsGR (общая теория относительности);
displayGR — описывает ненулевые компоненты конкретного тензора (общая теория относительности);
Jacobian — Якобиан преобразования координат;
Killing_eqns — вычисляет компоненты для уравнений Киллинга (имеет отношение к симметриям пространства);
LeviCivita — вычисляет ковариантные и контравариантные псевдотензоры Леви-Чивита;
Lie_diff — вычисляет производную Ли тензора по отношению к контравариантному векторному полю;
Ricci — тензор Риччи;
Ricciscalar — скаляр Риччи;
Riemann — тензор Римана;
RiemannF — тензор кривизны Римана в жесткой системе отсчета;
tensorsGR — вычисляет тензор кривизны в данной системе координат (общая теория относительности);
Weyl — тензор Вейля;
act — применяет операции к элементам тензора, таблицам вращений или кривизны;
antisymmetrize — антисимметризация тензора по любым индексам;
change_basis — преобразование системы координат;
commutator — коммутатор двух контравариантных векторных полей;
compare — сравнивает два тензора, таблицы вращений или кривизны;
conj — комплексное сопряжение;
connexF — вычисляет связующие коэффициенты для жесткой системы координат;
contact — свертка тензора по парам индексов;
convertNP — преобразует связующие коэффициенты или тензор Римана к формализму Ньюмена-Пенроуза;
cov_diff — ковариантное дифференцирование;
create — создает тензорный объект;
d1metric — первая частная производная метрики;
d2metric — вторая частная производная метрики;
directional_diff — производная по направлению,
dual — осуществляет дуальную операцию над индексами тензора;
entermetric — обеспечивает ввод пользователем координатных переменных и ковариантных компонент метрического тензора;
exterior_diff — внешнее дифференцирование полностью антисимметричного ковариантного тензора;
exterior_prod — внешнее произведение двух ковариантных антисимметричных тензоров;
Ознакомительная версия.