• 9.1. Пакет планиметрии geometry
  • 9.1.1. Набор функций пакета geometry
  • 9.1.2. Пример применения расчетных функций пакета geometry
  • 9.1.3. Визуализация геометрических объектов с помощью пакета geometry
  • 9.2. Пакет стереометрии geom3d
  • 9.2.1. Набор функций пакета geom3d
  • 9.2.2. Пример применения пакета geom3d
  • 9.3. Пакет функций теории графов networks
  • 9.3.1. Набор функций пакета networks
  • 9.3.2. Примеры применения пакета networks
  • 9.3.3. Получение информации о графе
  • 9.4. Математические пакеты расширения специального назначения
  • 9.4.1. Инструментальный пакет для линейных рекуррентных уравнений — LREtools
  • 9.4.2. Пакет функций дифференциальных форм difforms
  • 9.4.3. Пакет работы с тензорами tensor
  • 9.4.4. Пакет Domains
  • 9.4.5. Пакет алгебры линейных операторов — Ore_algebra
  • 9.4.6. Пакет для работы с рациональными производящими функциями — genfunc
  • 9.4.7. Пакет операций для работы с конечными группами — group
  • 9.4.8. Пакет средств симметрии Ли — liesymm
  • 9.4.9. Пакет команд для решения уравнений SolveTools
  • 9.4.10. Пакет для работы с таблицами — Spread
  • 9.4.11. Пакет линейных операторов LinearOperators
  • 9.4.12. Пакет для работы с массивами ArrayTools
  • 9.4.13. Пакет анализа ошибок научных вычислений ScientificErrorAnalysis
  • 9.5. Пакеты расширения системного характера
  • 9.5.1. Пакеты генерации кодов — codegen и CodeGeneration
  • 9.5.2. Пакет создания контекстных меню context
  • 9.5.3. Пакет организации многопроцессорной работы — process
  • 9.5.4. Пакет поддержки стандарта MathML
  • 9.5.5. Пакет XMLTools
  • 9.5.6. Пакет StringTools для работы со строками
  • 9.5.7. Пакет создания внешних программ ExternalCalling
  • 9.5.8. Пакет работы с документами Worksheet
  • 9.6. Пакет расширения Student Package
  • 9.6.1. Состав пакета Student Package и его идеология
  • 9.6.2. Подпакет линейной алгебры Linear Algebra
  • 9.6.3. Средства визуализации векторных и матричных понятий
  • 9.6.4. Визуализация метода наименьших квадратов
  • 9.6.5. Подпакет вычислений для первокурсников Calculus1
  • 9.6.6. Подпакет вычислений Precalculus
  • 9.6.7. Другие возможности и особенности пакета Student Package
  • Глава 9

    Пакеты расширения Maple специального назначения

    В представленных выше главах описан ряд пакетов расширения системы Maple, которые широко применяются в практике математических и научно-технических расчетов. Эти пакеты были рассмотрены достаточно подробно. В этой небольшой главе обзорно описаны пакеты расширения системы Maple, представляющие ограниченный интерес для большинства пользователей системы. Но они интересуют опытных пользователей — математиков и специалистов по программированию. Заинтересовавшийся ими читатель может дополнить сведения об этих пакетах просмотром справки и демонстрационных примеров в ней.

    9.1. Пакет планиметрии geometry

    9.1.1. Набор функций пакета geometry

    Пакет геометрических расчетов загружается командой

    > with(geometry);

    которая возвращает весьма внушительный список из более чем 100 функций. Ввиду его громоздкости список не приводится. Функции пакета имеют типовые для объектов двумерной графики имена и рассчитаны на выборочное использование (это, кстати, характерно для средств и других пакетов этой главы).

    Этот пакет содержит средства расчета основных параметров ряда геометрических объектов. Для каждого объекта возможно задание различных исходных величин, так что пакет охватывает практически все виды классических геометрических расчетов на плоскости. Несомненно, этот пакет заинтересует всех, кто работает в области геометрии и смежных с нею областях.

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

    9.1.2. Пример применения расчетных функций пакета geometry

    Учитывал идентичность идеологии при работе с функциями этого пакета, большинство из которых имеет вполне прозрачные имена (правда, англоязычные), работу с пакетом поясним на примере одной из функций — circle. Она позволяет математически задать окружность и определить все ее геометрические параметры. Функция может иметь несколько форм записи. Например, в форме

    circle(с, [А, В, С], n, 'centername'=m)

    она определяет построение окружности, проходящей через три точки А, В и С. Необязательный параметр n — список с именами координатных осей. Параметр 'centername'=m задает имя центра.

    В форме

    circle(с, [А, В], n, 'centername'=m)

    задается окружность, проходящая через две точки А и В, а в форме

    circle(с, [A, rad], n, 'centername'=m)

    задается окружность, проходящая через одну точку А с заданным (и произвольным) радиусом rad и центром с. Наконец, функция circle в форме

    circle(с, eqn, n, 'centername'=m )

    позволяет задать окружность по заданным уравнению eqn и центру с.

    Проиллюстрируем применение функции circle на следующих примерах. Зададим характеристические переменные:

    > _EnvHorizontalName := m: _EnvVerticalName := n:

    Определим окружность с1, проходящую через три заданные точки А, В и С с указанными после их имен координатами и найдем координаты центра этой окружности:

    > circle(c1,[point(А,0,0), point(В,2,0),point(С,1,2)], 'centername'=O1):

    > center(c1), coordinates(center(c1));

    O1, [I, 3/4]

    Далее найдем радиус окружности

    > radius(c1);

    и уравнение окружности, заданное в аналитическом виде:

    > Equation(c1);

    Наконец, с помощью функции detail получим детальное описание окружности:

    > detail(c1);

    name of the object: c1 form of the object: circle2d name of the center: O1 coordinates of the center: [1, 3/4]

    9.1.3. Визуализация геометрических объектов с помощью пакета geometry

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

    Рис. 9.1 показывает построение из множества окружностей фигуры — кардиоиды. Вопреки обычному построению этой фигуры, используется алгоритм случайного (но удовлетворяющего требованиям построения данной фигуры) выбора положений центров и радиусов окружностей.

    Рис. 9.1. Построение кардиоиды из окружностей


    Рис. 9.2 дает графическую иллюстрацию к одной из теорем Фейербаха. Здесь эффектно используются средства выделения геометрических фигур цветом, что, увы, нельзя оценить по книжной чёрно-белой иллюстрации.

    Рис. 9.2. Графическая иллюстрация к теореме Фейербаха


    На следующем рисунке (рис. 9.3) показано построение фигуры, образованной вращением множества квадратов относительно одной из вершин. Это хороший пример применения функций point, square, rotation и draw из пакета geometry.

    Рис. 9.3. Фигура, полученная вращением квадрата


    Рис. 9.4 показывает гомологические преобразования квадрата. Заинтересовавшийся читатель может легко разобраться с деталями простого алгоритма этой программы.

    Рис. 9.4. Гомологические преобразования квадрата


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

    Наконец, на рис. 9.5 показан пример построения трех окружностей разного радиуса и с разным положением, имеющих две общие точки. Обратите внимание на вывод надписей «о», «о1» и «о2», указывающих положение центров окружностей на рисунке.

    Рис. 9.5. Три окружности, имеющие две общие точки


    Множество других примеров применения всех функций пакета geometry дано в одноименном с ним файле примеров.

    9.2. Пакет стереометрии geom3d

    9.2.1. Набор функций пакета geom3d

    Помимо существенного расширения пакета geometry, в систему Maple введен геометрический пакет geom3d. Он предназначен для решения задач в области стереометрии (трехмерной геометрии). При загрузке пакета командой

    with(geom3d)

    появляется доступ к весьма большому (свыше 140) числу новых функций. Ввиду громоздкости списка он также не приводится, но читатель может просмотреть его самостоятельно.

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

    9.2.2. Пример применения пакета geom3d

    Учитывая сказанное, ограничимся парой примеров применения этого пакета. Один из примеров представлен на рис. 9.6. На нем представлена сфера внутри «малого иглообразного» додекадрона (SinallStelletedDodecahedron).

    Рис. 9.6. Иллюстрация применения пакета geom3d


    Еще один пример представлен на рис. 9.7. Здесь представлено еще две объемные фигуры, расположенные друг в друге.

    Рис. 9.7. Еще один пример применения пакета geom3d


    Напоминаем, что цель пакета не в построении рисунков геометрических фигур, а в аналитическом представлении объектов в пространстве. Поэтому в обширной базе данных справочной системы по этому пакету вы встретите очень мало рисунков.

    9.3. Пакет функций теории графов networks

    9.3.1. Набор функций пакета networks

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

    > with(networks);

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

    9.3.2. Примеры применения пакета networks

    Рассмотрим некоторые избранные функции этого пакета, которые наиболее часто используются при работе с графами. Функции создания графов:

    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 — внешнее произведение двух ковариантных антисимметричных тензоров;

    frame — задает систему координат, которая приводит метрические компоненты к диагональной сигнатурной матрице (с положительными или отрицательными единицами);

    geodesic_eqns — уравнение Эйлера-Лагранжа для геодезических кривых;

    get_char — возвращает признак (ковариантный/контравариантный) объекта;

    getcompts — возвращает компоненты объекта;

    get_rank — возвращает ранг объекта;

    invars — инварианты тензора кривизны Римана (общая теория относительности);

    invert — обращение тензора второго ранга;

    lincom — линейная комбинация тензорных объектов;

    lower — опускает индексы;

    npcurve — компонента кривизны Ньюмена-Пенроуза в формализме Дебевера (общая теория относительности);

    npspin — компонент вращения Ньюмена-Пенроуза в формализме Дебевера (общая теория относительности);

    partial_diff — частная производная тензора;

    permute_indices — перестановка индексов;

    petrov — классификация Петрова тензора Вейля;

    prod — внутреннее и внешнее тензорное произведения;

    raise — поднятие индекса;

    symmetrize — симметризация тензора по любым индексам;

    transform — преобразование системы координат.

    Пакет представляет несомненный интерес для физиков-теоретиков, работающих в области общей теории относительности и ее приложений. Для них (но не для большинства пользователей) отмеченные выше данные полезны и понятны.

    9.4.4. Пакет Domains

    Этот небольшой пакет служит для создания доменов — таблиц операций для вычислений. При его загрузке появляется сообщение о переопределениях объектов и список из всего лишь шести функций:

    > restart;with(Domains);

    -------------------- Domains version 1.0 -----------------------

    Initially defined domains are Z and Q the integers and rationals

    Abbreviations, e.g. DUP for DenseUnivariatePolynomial, also made

    Warning, the protected names Array, Matrix and Vector have been

    redefined and unprotected

    [Array, Matrix, MatrixInverse, Vector, init, show]

    Пакет допускает применение следующих конструкций:

    Domains[domain]

    Domains[evaldomains]

    Domains[example]

    Domains[coding]

    Приведенный ниже пример поясняет создание и использование доменов Q (для рациональных данных) и Z (для целочисленных данных):

    > Q[`+`] (1/2,2/5,3/8);

    > Z[Gcd](660,130);

    10

    Следующая операция показывает, что домен Z является таблицей:

    > type(Z,table);

    true

    А функция show позволяет вывести полный перечень всех операций, доступных для домена Z:

    > show(Z,operations);

    ` Signatures for constructor Z`

    ` note: operations prefixed by — are not available`

    ` * : (Integers,Z) -> Z`

    ` * : (Z,Z*) -> Z`

    ` + : (Z,Z*) -> Z`

    ` - : Z -> Z`

    ` - : (Z,Z) -> Z`

    ` 0 : Z`

    ` 1 : Z`

    ` < : (Z,Z) -> Boolean`

    ` <= : (Z,Z) -> Boolean`

    ` <> : (Z,Z) -> Boolean`

    ` = : (Z,Z) -> Boolean`

    ` > : (Z,Z) -> Boolean`

    ` >= : (Z,Z) -> Boolean`

    ` Abs : Z -> Z`

    ` Characteristic : Integers`

    ` Coerce : Integers -> Z`

    ` Div : (Z,Z) -> Union(Z,FAIL)`

    ` EuclideanNorm : Z -> Integers`

    ` Factor : Z -> [Z, [ [Z,Integers]*]`

    ` Gcd : Z* -> Z`

    ` Gcdex : (Z,Z,Name) -> Z`

    ` Gcdex : (Z,Z,Name, Narre) -> Z`

    ` Input : Expression -> Union(Z,FAIL)`

    ` Inv : Z -> Union(Z,FAIL)`

    ` Lcm : Z* -> Z`

    ` Max : (Z,Z*) -> Z`

    ` Min : (Z,Z*) -> Z`

    ` Modp : (Z,Z) -> Z`

    ` Mods : (Z,Z) -> Z`

    ` ModularHomomorphism : () -> (Z -> Z,Z)`

    ` Normal : Z -> Z`

    ` Output : Z -> Expression`

    ` Powmod : (Z,Integers,Z) -> Z`

    ` Prime : Z -> Boolean`

    ` Quo : (Z,Z,Name) -> Z`

    ` Quo : (Z,Z) -> Z`

    ` Random : () -> Z`

    ` Relatively Prime : (Z,Z) -> Boolean`

    ` Rem : (Z,Z,Name) -> Z`

    ` Rem : (Z,Z) -> Z`

    ` Sign : Z -> UNION(1,-1,0)`

    ` SmallerEuclideanNorm : (Z,Z) -> Boolean`

    ` Sqrfree : Z -> [Z, [[Z,Integers]*]]`

    ` Type : Expression -> Boolean`

    ` Unit : Z -> Z`

    ` UnitNormal : Z -> [Z,Z,Z]`

    ` Zero : Z -> Boolean`

    ` ^ : (Z,Integers) -> Z`

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

    9.4.5. Пакет алгебры линейных операторов — Ore_algebra

    Пакет Ore_algebra содержит набор функций алгебры линейных операторов, состав которого можно получить после обращения к пакету:

    > with(Ore_algebra);

    Этот пакет поддерживает решение задач в области алгебры линейных операторов. Примеры на его применения можно найти в справке и в файле Ore_algebra, имеющимся на Интернет-сайте корпорации MapleSoft.

    9.4.6. Пакет для работы с рациональными производящими функциями — genfunc

    В пакете genfunc, предназначенном для работы с производящими функциями содержатся функции, список которых выводит команда:

    > with(genfunc);

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

    9.4.7. Пакет операций для работы с конечными группами — group

    Этот пакет содержит довольно представительный набор функций для работы с конечными группами. Вывод списка функций обеспечивает команда:

    > with(group);

    Функции этого пакета представляют интерес для математиков, работающих в области конечных групп. Но вряд ли они будут полезны большинству пользователей. Тем не менее, наличие таких функций говорит о полноте функциональных возможностей системы Maple.

    9.4.8. Пакет средств симметрии Ли — liesymm

    В этом пакете, являющемся реализацией алгоритма Харрисона-Эстабрука, имеется ряд функций, список которых выводит команда:

    > with(liesymm);

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

    9.4.9. Пакет команд для решения уравнений SolveTools

    Пакет команд с весьма многообещающим названием SolveTools на самом деле содержит вовсе не средства для решения уравнений, а несколько весьма специфических функций:

    > with(SolveTools);

    [Basis, CancelInverses, Combine, Complexity, GreaterComplexity, Linear, RationalCoefficients, SortByComplexity]

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

    9.4.10. Пакет для работы с таблицами — Spread

    Загрузка этого пакета командой

    > with(Spread);

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

    9.4.11. Пакет линейных операторов LinearOperators

    Пакет линейных операторов LinearOperators — новый пакет, содержащий средства для работы с линейными операторами. Состав пакета можно увидеть после его вызова командой:

    > with(LinearOperators);

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

    9.4.12. Пакет для работы с массивами ArrayTools

    Для упрощения работы с массивами в Maple 9 был введен пакет ArrawTools (файл at):

    > with(ArrayTools);

    [Alias, ComplexAsFloat, Copy, DataTranspose, Fill]

    Он вводит всего пять новых функций. Примеры их применения, взятые из справки по пакету, представлены ниже:

    Создание вектора-строки

    > М := Vector[row](10,i->i);

    М := [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    Дублирование первых 5 элементов в следующих 5 элементах

    > Copy(5,М,М,5), М;

    [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

    Очистка каждого второго элемента

    > Fill(0,М,1,2), М;

    [1, 0, 3, 0, 5, 0, 2, 0, 4, 0]

    Формирование матрицы 2×5

    > Alias(М, [2,5], С_order)

    Создание матрицы с комплексными элементами

    > М := Matrix(2,3,(i,j)->i+I*j, datatype=complex[8], order=C_order);

    Создание «двойной» матрицы с элементами в формате плавающей точки

    > Mr := ComplexAsFloat(М);

    Действие всех функций этого пакета вполне очевидно из приведенных примеров.

    9.4.13. Пакет анализа ошибок научных вычислений ScientificErrorAnalysis

    В Maple 9 был введен пакет расширения для анализа ошибок научных вычислений. Пакет вызывается командой

    > with(ScientificErrorAnalysis);

    С возможностями этого пакета можно познакомиться по справке. На Интернет-сайте корпорации MapleSoft можно найти раздел SEAApps с большим числом примеров применения этого пакета, полезного, прежде всего, физикам, занятым обработкой данных физических экспериментов и прогнозом ошибок в научных вычислениях.

    9.5. Пакеты расширения системного характера

    9.5.1. Пакеты генерации кодов — codegen и CodeGeneration

    Пакет codegen представляет собой набор команд, предназначенных для организации взаимодействия системы Maple с другими программными средствами:

    > with(codegen);

    Warning, the protected name MathML has been redefined and unprotected

    [C, GRAD, GRADIENT, HESSIAN, JACOBIAN, MathML, WebEQ, cost, declare, dontreturn, eqn, fortran, horner, intrep2maple, joinprocs, makeglobal, makeparam, makeproc, makevoid, maple2intrep, optimize, packargs, packlocals, packparams, prep2trans, renamevar, split, swapargs ]

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

    В Maple 9 появился пакет генерации кодов — CodeGeneration:

    > with(CodeGeneration);

    Warning, the name С has been rebound

    Warning, the protected name Matlab has been redefined and unprotected

    [C, Fortran, IntermediateCode , Java, LanguageDefinition, Matlab, Names, Translate, VisualBasic]

    Получение матрицы, элементы которой имеют нулевые действительные части:

    > Fill(0,Mr,0,2), М;

    Наиболее интересной в новом пакете является поддержка трансляции в коды языков Java, MATLAB и VisualBasiс. Ниже даны примеры трансляции Maple-выражений в codegen):

    > х := 'х': s := 's': t := 't': r := 'r':

    > cs := [s=1.0+x, t=sin(s)*exp(-x), r=ln(-x)+x/c];

    > Matlab(cs);

    s = 0.10e1 + x;

    t = sin(s) * exp(-x);

    r = log(-x) + x / t;

    > f := proc(x) local a; if x =1.0 then a := 1.0 else a := sin(x)/x end if; return a; end proc:

    VisualBasic(f);

    Imports System.Math

    Public Module CodeGenerationModule

     Public Function f(ByVal x As Double) As Double

      Dim a As Double

      If (x = 0.10E1) Then

       a = 0.10E1

      Else

       a = Sin(x) /x

      End If

      Return a

     End Function

    End Module

    Применение этих пакетов имеет важное значение при обеспечении совместной работы различных программных средств.

    9.5.2. Пакет создания контекстных меню context

    Пакет context служит для создания контекстных меню. Он содержит небольшое число функций:

    > with(context);

    [buildcontext, clearlabels, defaultcontext, display, installcontext, restoredefault, testactions, troubleshoot]

    Этот пакет используется довольно редко и, в основном, пользователями, решающими в среде Maple не вычислительные, а системные задачи. Описание таких задач выходит за рамки данной книги. Множество примеров применения пакета можно найти в справке и в файле context_exmples, который можно найти на Интернет-сайте корпорации MapleSoft.

    9.5.3. Пакет организации многопроцессорной работы — process

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

    > with(process);

    [block, exec, fork, kill, launch, pclose, pipe, popen, wait]

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

    9.5.4. Пакет поддержки стандарта MathML

    Для представления математической информации на страницах Интернета в последние годы был создан специальный язык MathML. Пока для большинства пользователей MathML просто «экзотика», но так как наряду с XML его поддерживает World Wide Web Consortium, его вынуждены поддерживать все солидные фирмы — причем не только создающие системы компьютерной математики. Среди них такие крупные корпорации, как Intel, IBM и Microsoft. Уже в Maple 7 была предусмотрена новая возможность поддержки стандарта MathML 2.0. Для такой поддержки используется MathML Viewer и пакет MathML.

    Пакет MathML дает минимальный набор функций для использования языка MathML:

    > with(MathML);

    [Export, ExportContent, ExportPresentation, Import, ImportContent]

    Первые три функции служат для экспорта выражений:

    Export(expr) — преобразует Maple-выражение expr в параллельное MathML-выражение;

    ExportContent(expr) — преобразует Maple-выражение expr в MathML-выражение формате содержания;

    ExportPresentation(expr) — преобразует Maple-выражение expr в MathML-выражение в формате представления.

    Еще две функции служат для импорта строки в формате MathML и его преобразования в Марк-выражение:

    Import(mmlstring

    и

    ImportContent(mmlstring)

    Следующий пример наглядно иллюстрирует применение функций пакета расширения MathML для преобразования математического выражения а*х+b вначале в запись на MathML, а затем преобразование этой записи str в Maple-выражение:

    > str :=MathML[Export] ( а*х + b );

    str := "<math xmlns='http://www.w3.org/1998/Math/MathML'><semantics><mrow xref='id1'><mo \

    >&InvisibleTimes;</mo><mi xref='id2'>x</mi></mrow><mo>+</ mo><mi xref='id4'>b</mi></mrow><annotation-xml encoding='MathML-Content'><apply>< \

    ci id='id '>a</ci><ci id='id2'>x</ci></apply: \

    apply> \

    </annotation></semantics></math>"

    > Import(str);

    ax + b

    Этот пример показателен тем, что дает представление о виде записей на языке MathML. Нетрудно заметить, что это достаточно громоздкий язык. Функции, представленные выше, автоматизируют процесс составления записей на языке MathML обычных математических выражений, что делает доступной для обычных пользователей подготовку публикации в Интернете, содержащей математические выражения.

    9.5.5. Пакет XMLTools

    Пакет XMLTools служит для поддержки средств языка XML, широко используемого в Интернете. Этот пакет предоставляет весьма внушительное число функций. Для получения их списка достаточно исполнить команду:

    > with(XMLTools);

    Рассмотрение этих средств (как и средств поддержки HTML) далеко выходит за пределы тематики данной книги, хотя многие из них достаточно просты.

    9.5.6. Пакет StringTools для работы со строками

    Для расширенной работы со строками служит пакет StringTools. При исполнении команды:

    > with(StringTools);

    Выводится весьма внушительный список функций этого пакета. Применительно к математическим расчетам этот пакет расширения находит ограниченное применение. Скорее он нужен для такой «экзотики», как обработка в Maple текстовой информации. В связи с этим ограничимся несколькими примерами применения его функций:

    > Char(65);Char(66);Char(70);

    "А" "В" "F"

    > IsASCII('А');

    true

    > Reverse(Hello);

    "olleH"

    Более полно с возможностями пакета можно познакомиться по справке о нем.

    9.5.7. Пакет создания внешних программ ExternalCalling

    Пакет ExternalCalling служит для создания внешних программ, записанных на языке Maple (или С++). Состав пакета представлен небольшим числом функций:

    DefineExternal(fn,extlib) — используя функцию define_external Maple задает внешнюю функцию fn в таблице функций внешних библиотек extlib;

    ExternalLibraryName(basename, precision) — задает имя basename функции и точность вычислений precision для функции внешней библиотеки.

    Детальное знакомство с этим пакетом мы опускаем. Заинтересованный читатель найдет нужные сведения в справке по этому пакету.

    9.5.8. Пакет работы с документами Worksheet

    В Maple 9 был введен пакет расширения для работы и подготовки документов — Worksheet вводится командой:

    > with(Worksheet);

    [Compare, Convert, Display, DisplayFile, FromString, ReadFile, ToString, Writefile, worksheet]

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

    9.6. Пакет расширения Student Package

    9.6.1. Состав пакета Student Package и его идеология

    Одним из самых серьезных усовершенствований системы Maple 9 стал необычный пакет расширения Student Package. Он состоит из трех частей — подпакетов:

    • Calculus1 — пакет вычислений с функциями одной переменной для студентов первого курса;

    • Linear Algebra — расширенный пакет по линейной алгебре;

    • Precalculus — пакет вычислений по стандартному курсу математики.

    В принципе, пакет Student Package не имеет чего-либо принципиально нового, по сравнению со средствами математических вычислений, описанными в предшествующих главах. Однако подборка его средств наилучшим образом соответствует задачам обучения студентов вузов. Наряду с со средствами командного режима, новый пакет содержит множество специальных интерактивных панелей (окон) в которых весьма наглядно представлены данные для вычислений и результаты вычислений. Эти панели имеют стандартный вид, так что мы ограничимся только несколькими характерными примерами применения данного пакета.

    9.6.2. Подпакет линейной алгебры Linear Algebra

    Подпакет Linear Algebra содержит свыше 60 операторов и функций линейной алгебры. С ними можно познакомиться, используя команду:

    > with(Student[LinearAlgebra]);

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

    Student[LinearAlgebra][command](arguments)

    Приведем пример вычисления определителя (детерминанта) матрицы М при вызове функции вычисления определителя Determinant двумя возможными способами:

    > М := <<1,2,3>|<4,5,6>|<7,9,8>>;

    > with(Student[LinearAlgebra]):Determinant(M);

    9

    > Student[LinearAlgebra][Determinant](M);

    9

    В разделе Interactive… справки по этому пакету можно найти интерактивные примеры по линейной алгебре: вычислению собственных значений и векторов матриц, методам исключения Гаусса и Гаусса-Джордана, обращению матриц и решению систем линейных уравнений. В названии функций присутствует слово «Tutor». Например, команда

    EigenvaluesTutor(М)

    вызывает появление интерактивного окна, вычисляющего характеристический полином и вектор собственных значений матрицы М. Например, введем команды:

    > М := <<1,2,3>|<2,3,2>|<1,2,1>>;

    > EigenvaluesTutor(М);

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

    Рис. 9.12. Окно вычисления характеристического полинома матрицы


    Активизируя кнопку Solve for eigenvalues можно вычислить корни характеристического полинома. Окно с ними показано на рис. 9.13.

    Рис. 9.13. Окно с вычисленными корнями характеристического полинома


    Аналогичным образом организовано решение отмеченных задач линейной алгебры в интерактивном режиме. Важно, что при этом обеспечивается наглядный контроль вычислений на каждом шаге. Такая детальность вряд ли нужна инженеру или научному работнику при проведении вычислений, но она полезна студентам при освоении разделов линейной алгебры.

    9.6.3. Средства визуализации векторных и матричных понятий

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

    На рис. 9.14 представлены примеры на применение функции VectorSumPlot, показывающие расположение векторов на плоскости (первый пример) и в пространстве, а также дающее построение результирующего вектора.

    Рис. 9.14. Иллюстрация сложения векторов на плоскости и в пространстве


    Действие функции вычисления кросс-произведения векторов и построение плоскости в которой находятся векторы демонстрирует рис. 9.15. Для визуализации этих понятий используются функции Cross Product Plot и PlanePlot.

    Рис. 9.15. Визуализация кросс-произведения векторов и построение плоскости векторов


    Довольно часто используется понятие о проекции вектора на прямую или на плоскость. Эти возможности реализует функция Projection Plot. Примеры ее применения представлены на рис. 9.16.

    Рис. 9.16. Визуализация проекции вектора на прямую и на плоскость


    Важное значение имеет визуализация решения систем линейных уравнений. Для этого используется функция LinearSystemPlot. Примеры ее применения для визуализации решения систем из двух и трех уравнений представлены на рис. 9.17.

    Рис. 9.17. Визуализация решения систем из двух и трех линейных уравнений.


    Здесь полезно обратить внимание на то, что графические функции визуализации используют необходимые для такой визуализации методы вычислений. Например, при визуализации решения систем линейных уравнений решаются сами уравнения. Если исполнить команду вывода хотя бы одного уровня информации, то можно получить вывод решений в числовой форме. Это и сделано на рис. 9.17.

    Еще пара примеров, представленных на рис. 9.18 демонстрирует выполнение линейных преобразований двумерных и трехмерных матриц.

    Рис. 9.18. Визуализация линейных преобразований


    Рис. 9.19 и рис. 9.20 дают примеры визуализации собственных значений и векторов матрицы. Обеспечивается не только их наглядное графическое представление, но и вывод численных значений.

    Рис. 9.19. Визуализация собственных значений и векторов двумерной матрицы (пример 1)


    Рис. 9.20. Визуализация собственных значений и векторов двумерной матрицы (пример 2)


    Аналогичный пример для трехмерной матрицы представлен на рис. 9.21. Любопытно, что график рис. 9.21 отличается от такового, построенного в системе Maple 9, что указывает на недоработку в одной из систем.

    Рис. 9.21. Визуализация собственных значений и векторов трехмерной матрицы

    9.6.4. Визуализация метода наименьших квадратов

    Задача приближения облака точек данных отрезком прямых или линией с минимальной ошибкой (регрессия) обычно решается методом наименьших квадратов. Приближающая линия проходит в облаке точек так, чтобы алгебраическое значение площади всех квадратов со сторонам, равными отклонениям точек от линии приближения (регрессии) было равно нулю. Как правило, реализация метода наименьших квадратов основана на решении соответствующим образом подготовленной системы линейных уравнений. Функция LeastSquareFlot обеспечивает наглядную визуализацию результатов метода наименьших квадратов.

    Рис. 9.22 показывает пример визуализации одномерной линейной регрессии для 6 точек. Выводятся данные регрессии (ее уравнение и погрешности — среднеквадратическая и максимальная), линия регрессии, исходные точки и квадраты, характеризующие площади отклонения.

    Рис. 9.22. Визуализация одномерной линейной регрессии


    На другом рисунке (рис. 9.23) представлен пример визуализации для полиномиальной регрессии (полином третьей степени). В данном случае функция регрессии существенно нелинейна.

    Рис. 9.23. Визуализация полиномиальной регрессии


    Наконец рисунок 9.24 показывает пример визуализации линейной регрессии для данных, приближаемых линейной функцией двух переменных. В данном случае характеристикой отклонения являются объемы кубов.

    Рис. 9.24. Визуализация двумерной линейной регрессии


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

    9.6.5. Подпакет вычислений для первокурсников Calculus1

    Подпакет вычислений для первокурсников Calculus1 содержит довольно изысканные средства для решения задач математического анализа. Практически все из них уже были рассмотрены в Главе 4 применительно к работе в командном режиме. Поэтому отметим лишь возможности этого подпакета в интерактивном режиме.

    В интерактивном режиме подпакет Calculus1 имеет эффектные средства для визуализации таких операций, как вычисление производных и интегралов, представление касательных и перпендикуляров, дуг, линий уравнений, поверхностей и т.д. Эти средства находятся в разделе справки Interactivе данного подпакета. С ними легко познакомиться, поэтому ограничимся парой примеров.

    Пусть надо вычислить корень уравнения 0.1*х^3-100 = 0. Для этого исполним команды:

    > with(Student[Calculus1]):

    NewtonsMethodTutor(.1*х^3-100, x=0..2);

    Заданное в функции NewtonMethodTutor выражение появится в интерактивном окне, представленном на рис. 9.25, в его правой части. Уравнение можно скорректировать. Кроме того, можно задать пределы изменения x, а и b, начальное значение х=х0 и число итераций. В левой части окна представлен график функции и точки, соответствующие значениям выражения в каждой итерации (они даны ниже) Точки соединены отрезками прямых, что дает наглядное представление о ходе итераций. В частности видно, что в нашем случае после кратковременного выбега итерационного процесса он приобретает быстро сходящийся характер.

    Рис. 9.25. Иллюстрация итераций при решении нелинейного уравнения методом Ньютона


    А теперь рассмотрим вычисление длины дуги, заданной произвольным выражением, например 2-х^3 в интервале изменения х от 0 до 2. Для этого исполним команду (вызов подпакета опущен, поскольку был выполнен ранее):

    > ArcLengthTutor(2-х^3, х=0..2);

    Интерактивное окно для этого примера представлено на рис. 9.26. График дает представление исходной функции и функции, описывающей изменение значения длины дуги в заданном интервале изменения х. Кроме того выводится выражение для длины дуги, вычисленное значение длины дуги на заданном интервале и вид команды для вычисления длины дуги в командном режиме (внизу окна).

    Рис. 9.26. Иллюстрация к вычислению длины дуги

    9.6.6. Подпакет вычислений Precalculus

    Пакет вычислений Precalculus служит для визуализации таких операций, как вычисление полиномов, нахождение пределов функций, решение систем неравенств, представление функций и др. Он содержит только интерактивные средства, построенные по аналогии с приведенными ранее средствами. Поэтому и здесь мы ограничимся парой примеров.

    Например, для получения графика и корней полинома х^3 + 3*х^2 - 2 достаточно исполнить команды:

    > with(Student[Precalculus]):

    > PolynomialTutor(х^3+3*х^2-2);

    В появившемся интерактивном окне можно наблюдать график полинома и список его действительных корней — рис. 9.27.

    Рис. 9.27. Окно с графиком полинома и его вычисленными корнями


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

    > StandardFunctionsTutor();

    При таком задании в окне задается функция синуса, но ее можно изменить на другую функцию или выражение со стандартными функциями — например, sin(x)/x (рис. 9.28). Кроме графика исходной функции (он дан красным цветом) строится график преобразованной функции. Используется линейное преобразование с набором заданных параметров а, b, с и d.

    Рис. 9.28. Окно с графиком основной и преобразованной функциями

    9.6.7. Другие возможности и особенности пакета Student Package

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

    К сожалению, ввиду новизны пакета он содержит явные недоработки. Например, на рис. 9.25 непонятно, что выводит третья кривая на рисунке — объяснения по этому поводу нет в справке по примененной функции. При больших x места на графике для представления чисел, отложенных по осям, явно не хватает и цифры отображаются с большими искажениями. Впрочем, стоит отметить, что по пакету представлены исходные коды на Maple-языке, так что чересчур требовательный пользователь может довести пакет «до ума». Несомненно, что корпорация Maple-Soft планирует существенное расширение средств Maplets в программных утилитах, включенных в пакеты расширений систем Maple.







     

    Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх