Table Of ContentМ.Н. Кирсанов
Практика программирования
в системе Maple
Учебное пособие для студентов МЭИ, обучающихся по всем
направлениям подготовки
Москва Издательский дом МЭИ 2011
УДК 681.3.06:531.3
ББК 22.213
K 435
Утверждено учебным управлением МЭИ в качестве учебного
пособия для студентов
Кирсанов М.Н.
K 435 Практика программирования в системе Maple: учеб-
ное пособие/М.Н. Кирсанов. — М.: Издательский дом МЭИ,
2011.— 208 с.: ил.
ISBN 978-5-383-0061-3
Описаныосновныекомандысистемыаналитическихвы-
числений Maple 13. Приведено содержание пакетов системы:
LinearAlgebra, ImageTools, plot, plot3d, plottools, DEtools. Да-
ны примеры программирования пользовательского интерфейса
Maplet. Алфавитный предметный и именной указатель к ко-
мандам и операторам содержит более 1100 имен и терминов.
Большинство описаний годится для всех версий системы, на-
чиная с Maple 8.
Книга может быть использована как при очной, так и
придистанционной формах обучения.
Для студентов и преподавателей МЭИ и других техни-
ческих вузов.
УДК 681.3.06:531.3
ББК 22.213
ISBN978-5-383-0061-3 (cid:2)c Кирсанов М.Н., 2011
(cid:2)c ЗАО "Издательский дом МЭИ", 2011
СОДЕРЖАНИЕ
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Глава 1. Введение в Maple. . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.Ввод информации и простейшие вычисления. . . . . . . . . . . . . 7
1.2.Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1.Оператор цикла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.2. Условный оператор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.3. Процедуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.4.Функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.Преобразование и упрощение выражений . . . . . . . . . . . . . . . 14
1.3.1.Оператор simplify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3.2. Оператор combine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.3. Операторы factor, ifactor . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.4.Оператор collect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.5. Оператор isolate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.6. Оператор subs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.7. Операторы ввода и вывода . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4.Алгебраические операции . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.1.Простые операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.4.2.Пакет LinearAlgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5.Графики и рисунки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1.5.1.Простые возможности операторов plot и plot3d . . . . . . . . . 43
1.5.2. Основные опции оператора plot . . . . . . . . . . . . . . . . . . . . 45
1.5.3. Пакет ImageTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1.5.4.Пакет plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
1.5.5. Основные операторы пакета plottools . . . . . . . . . . . . . . . . 60
1.5.6. Основные опции оператора plot3d . . . . . . . . . . . . . . . . . . 69
1.5.7. Графические структуры . . . . . . . . . . . . . . . . . . . . . . . . . . 72
1.5.8. Пример 3D-анимации в Maple . . . . . . . . . . . . . . . . . . . . . 73
1.6.Дифференциальные уравнения . . . . . . . . . . . . . . . . . . . . . . . 76
1.6.1.Оператор dsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
1.6.2. Пакет DEtools для обыкновенных дифференциальных
уравнений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Глава 2. Программирование Maplet . . . . . . . . . . . . . . . . . . . 88
2.1. Первая программа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
2.2. BoxColumn, BoxRow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4 Содержание
2.3. Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
2.4. Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
2.5. Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.6. TextField . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
2.7. CheckBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
2.8. TextBox. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
2.9. ToggleButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
2.10. Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
2.11. Slider. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
2.12. RadioButton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
2.13. Plotter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
2.14. MathMLViewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
2.15. DropDownBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
2.16. ComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
2.17. ListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
2.18. Диалоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
2.19. Maplet Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
Глава 3. Maple-программы . . . . . . . . . . . . . . . . . . . . . . . . . .122
3.1.Ферма. Задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
3.2.Ферма. Маплет . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
3.3.Растяжение и сжатие. Задача . . . . . . . . . . . . . . . . . . . . . . . .134
3.4.Растяжение и сжатие бруса. Маплет . . . . . . . . . . . . . . . . . .136
3.5.Геометрическиехарактеристики сечения. Задача . . . . . . . . . .139
3.6.Геометрическиехарактеристики сечения. Маплет. . . . . . . . .143
3.7.Секториальные характеристики. Теория и задача. . . . . . . . . .151
3.8.Секториальные характеристики сечения. Маплет . . . . . . . . .159
3.9.Изгиб балки. Задача. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
3.10.Изгиб балки. Маплет. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
3.11.Линии влияния в разрезной балке. Задача . . . . . . . . . . . . . .178
3.12.Линии влияния в разрезной балке. Маплет . . . . . . . . . . . . .181
3.13.Устойчивость. Задача . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
3.14.Устойчивость. Маплет . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189
Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Предметный и именной указатель . . . . . . . . . . . . . . . . . . . . . . . .195
Предисловие 5
Предисловие
В последнее время в сложившейся схеме решения научных и тех-
нических задач появилось новое направление, основанное на приме-
нении систем компьютерной алгебры, работающих с аналитическими
вычислениями. Обзор систем можно найти в [14]. Основными си-
стемами, близкими по возможностям и удобству работы, на данный
момент являются Mathematica и Maple. Системой Mathematica чаще
пользуются профессиональные математики. В этой системе больше
возможностейпо решениюдифференциальныхуравнений,вычислению
интегралов по сложным областям [22]. Система Maple распространена
в технических вузах, хотя по своим аналитическим возможностям
она почти не уступает системе Mathematica. Большим преимуществом
Maple является возможность программирования пользовательского ин-
терфейса — маплета. Хотя программа, записанная в виде маплета,
уступает аналогичным программам, созданным Delphi или C Builder, и
неимеетнезависимостиотсистемы,т.е.работаеттольконакомпьютере
с установленной системой Maple, она имеет огромное преимущество
в аналитических вычислениях, недоступных в указанных программах.
Кроме того, размер маплета очень невысок, и сам маплет имеет тек-
стовую форму и может быть запрограммирован в обычном Microsoft
Блокноте. Примеры программирования маплетов содержатся в гл. 3.
Дан разбор особенностей применения различных операторов и команд
системы, рекомендации по программированию. Почти все программы
работоспособны в более ранних версиях Maple, а используемые алго-
ритмымогутпереноситьсяинадругиесистемы(Mathcad,Mathematica,
MATLAB).Программированиемаплетов(глава2)существенноотлича-
етсяотпривычныхструктури правилязыкав Maple,поэтомуосвоение
маплетов потребует некоторых усилий.
Основы работы в Maple, описания специальных пакетов (линейная
алгебра, дифференциальные уравнения, графика) даны в гл. 1. Эту
главу можно считать самостоятельным учебником Maple, рассчитан-
ным не только на начинающих пользователей, но и профессионалов,
работающих с математическими пакетами. Все операторы и команды
сведены в подробный алфавитный указатель, содержащий более 1100
наименований.
Архив всех программ из книги можно найти на сайте автора по
адресу http://vuz.exponenta.ru/mprogr.rar.
Книга написана на основе опыта преподавания теоретическоймеха-
ники и математических моделей естествознания в МЭИ(ТУ).
Все замечания о книге автор с благодарностью примет по адресу:
[email protected].
Глава 1
ВВЕДЕНИЕ В MAPLE
Математическая система Maple создана как мощный инструмент
для аналитических и численных математических расчетов. Она может
быть использована в научных и учебных целях. В Maple можно ре-
шать алгебраические, дифференциальные и рекуррентные уравнения,
брать интегралы, строить графики. Число функций, операторов, раз-
личных специализированных пакетов в этой системе огромно. Полная
документация к Maple, вероятно, существует только в электронном
виде — во встроенной системе помощи. На русском языке есть спра-
вочная и учебная литература по различным версиям этой системы
[6,9,10,14,20,24,26]. Надо заметить, что от версии к версии система
Mapleразвивается,кнейдобавляютсяновыепакетыифункции,расши-
ряются возможности численного и аналитического счета, улучшается
совместная работа с другими системами. Однако на элементарном
уровне язык программирования и основные принципы практически не
меняются.
Будем считать, что программа установленапо умолчаниюв каталог
C:\Program Files\Maple 13. В последних версиях Maple преду-
смотреныдве графическиеоболочки для работы в системе. Как первая
cwmaple.exe, так и вторая maplew.exe расположены в каталоге
\Maple 13\bin.win. Программы отличаются в основном способом
ввода и отображения информации.Они обе обращаются к одним и тем
же процедурам, и результаты вычислений почти не отличаются. Про-
граммаcwmaple.exe(MapleклассическаяилиClassicWorksheet)по
своемуинтерфейсусовпадаетспрежнимиверсиямиMapleиудобнадля
пользователей,привыкшим работать с командной строкой. Кроме того,
она менее требовательна к памяти и может работать как в Windows,
так и в системах типа UNIX. Современная версия maplew.exe по
умолчанию считается основной и называется Standard Worksheet.
При инсталляции ярлык именно этой программы выносится на ра-
бочий стол, и пользователь, как правило, начинает работать в ней,
не подозревая о существовании Classic Worksheet. Версия Standard
Worksheet немного медленней загружается, но скорость счета обеих
программ, вероятно, одинаковая. В большинстве случаев разница за-
мечена не была. Существенным плюсом программы maplew.exe яв-
ляется возможность пользоваться различными современными инстру-
ментами аналитических вычислений и программирования. Например,
доступна удобная программа визуального программирования маплетов
1.1. Ввод информации и простейшие вычисления 7
Maplet Builder, о которой пойдет речь в гл. 2, с. 119, анализатор
обыкновенныхдифференциальныхуравненийODEAnalyzer 1 и другие
средства, работающие по принципу маплетов. Программы Standard
Worksheet и Classic Worksheet отличаются и расширением своих
рабочих файлов.
Классическая оболочка работает с расширением mws, при-
нятым еще в первых версиях 80-х и 90-х годов, современная
графическая — с расширением mw и mws. Переключить ас-
социацию расширений файлов можно с помощью программы
\Maple 13\bin.win\ToggleAssociation.exe(рис. 1).
Рис. 1
Для пользователей cwmaple.exe рекомендуем сразу зайти в
\Maple 13\bin.win и правой клавишей мыши вынести на рабочий
стол ярлык этой программы — кленовый лист желтого цвета с цифрой
13. Ярлык программы maplew.exe такой же, но красного цвета.
1.1. Ввод информации и простейшие вычисления
Запустив программу cwmaple.exe, пользователь видит экран с
мигающимкурсоромна пустой строке,начинающейсясо знака[>. Это
знак приглашения для ввода информации. Форма его идет еще со вре-
менDOS,ужезабытойоперационнойсистемы,следыоткоторойможно
наблюдать и в современной Windows (см. кнопку "Пуск", команду
"Выполнить..", cmd). Команда interface(prompt="* ") позволяет
при необходимости заменить стандартное приглашение "галочка" на
любое другое, в данном случае на * и два пробела. В бесплатной
демонстрационной версии программы Maple V Release 4 2 в качестве
приглашения стоит слово DEMO (рис. 2). После приглашения можно
ввести вычисляемое выражение или некоторую функцию или команду,
1Интерактивную программу ODE Analizer можно вызвать и из Classic
Worksheet, см. с. 77.
2www.exponenta.ruили http://vuz.exponenta.ru/MVR4DEMO.rar
8 Введение в Maple Глава 1
например[> sin(Pi);. В конце надо поставить двоеточие или точку
с запятой и нажать клавишу Enter.
Рис. 2
Если в конце введенного выражения стоит точка с запятой, то
результат можно сразу увидеть на экране, если двоеточие, то команда
будет выполнена, но результат на экран не выводится. Часто это
используется для того, чтобы не загромождать экран промежуточны-
ми вычислениями. Слева от приглашающей галочки стоит квадратная
скобка.Это символ блока вычислений.При нажатии Enter выполняют-
сявседействиявблоке,появляетсярезультатиновый,ещепустойблок
[>. Если необходимо выполнить сразу несколько операций, то блоки
можно объединять. Для этого служит функциональная клавиша F4.
Ставим курсор в блок, нажимаем F4, и текущий блок объединяется
со следующим. Можно нажать F4 несколько раз, тогда объединятся
несколько блоков. Иногда это необходимо при программировании. Ко-
манды в одном операторе цикла, например, не могут быть в разных
блоках. Это же относится и к процедурам, модулям, условным опера-
торам и т.д. Поставить разрыв в блоке можно с помощью клавиши F3.
Операция присваивания (не путать с равенством!) обозначена как
в языке Pascal — двоеточием с равенством. Ввод зависит от регистра
букв. За этим надо следить. Например, выражения [> Pi и [> pi
имеют разный смысл. Это же относится и ко всем встроенным функ-
циям, константам и операторам.
Вот, например, как выглядит простейшая операция возведения раз-
ности x и y в куб:
⎡
> z:=(x-y)^3;
⎢
⎢ > evalm(z);
⎢
⎣ z :=(x−y)3
x3−3x2y+3xy2−y3
Здесь объединены в один блок две команды — присваивания выра-
жения и операции раскрытия скобок evalm . Возведение в степень
можно обозначить также как **. Если степень отрицательная или
1.2. Программирование 9
является некоторым выражением, то показатель следует заключить
в скобки, иначе возможны досадные ошибки. Например, x^1/3 даст
x
результат , а чтобы извлечь кубический корень (что, вероятно, и
3
предполагалось) степень надо было бы записать в скобках: x^(1/3).
В дальнейшем для упрощения записи символ блока — квадратные
скобки слева — ставить в текстах программ не будем, тем более,
что выбор блоков не меняет результат вычисления, если, конечно,
не ставить разрыв там, где это нельзя (например, внутри операторов
цикла, условных операторов или в процедурах).
В гл. 3 приведены программы для различных расчетов. Обратим
внимание, что все они начинаются с команды обнуления регистров
памяти restart. После restart можно ставить точку или точку
с запятой — это безразлично. Но следует следить за реакцией про-
граммы. Если после выполнения этой команды на экране не появилась
какая-нибудьнадписьтипа restrt,то все в порядке,командасработала.
Если же в записи команды допущена ошибка (здесь для примера
пропущена буква a), то Maple воспринимает эту запись как некую
пользовательскую переменную, выведенную на экран. В общем такая
ошибка совсем не опасна, если переменные программы уникальны и
ранее при запуске Maple не использовались, но лучше этого избегать.
Чаще всего начинающие пользователи пишут Restart, а Maple ре-
гистрочувствительная программа и различает строчные и прописные
буквы (за редким исключением) в написании команд и переменных.
1.2. Программирование
Систему Maple можно использовать просто для вычисления или
преобразования каких-то выражений, вычисления производных или
интегралов, решения уравнений, построения графиков и.т.д. Однако
всистему заложенозначительнобольше.Встроенныйязыкпрограмми-
рования, напоминающий известные языки C, Pascal, позволяет писать
собственные программы с вводом данных, выводом результатов, доста-
точно развитым интерфейсом.Для этого в языке Maple предусмотрены
все полагающиеся операторы: операторы цикла, условные операторы и
т.п. К сожалению,пользовательские программы, созданные в Maple не
автономны, exe-файлы Maple не создает. Для работы с программами
нужна установленная на компьютере система Maple.
1.2.1. Оператор цикла
Как и в других алгоритмических языках, в операторе цикла надо
указать переменную цикла, начальное ее значение (from), шаг (by),
конечноезначение(to)иусловиевыполнения(while).Телоцикла,да-
жееслионосостоитизодногооператора,располагаетсямеждуdoиod.
Закрывающая скобка od может быть заменена просто на end или end
10 Введение в Maple Глава 1
do. Не все элементы оператора цикла обязательные. По умолчанию
под начальным значением понимается 1, в этом случае from=1 можно
не писать. Аналогично шаг цикла равен по умолчанию 1, а условие
выполненияwhile,еслиданоконечноезначениедляпеременойцикла,
следует указывать только при необходимости досрочного выхода из
цикла. И, наоборот, если дано условие while, то конечное значение
можно не писать.
Пример:
> k:=0;
> for i from 1 by 2 to 12 while (k<3) do k:=i od;
В результате выполненияцикла(он закончитсядосрочно,как толь-
ко переменная k станет равной 3) на экране появятся две записи k:=1
и k:=3, отражающие факт присвоения переменной значений 1 и 3.
Перед выполнением цикла переменной k необходимо было присвоить
какое-нибудь значение, иначе при проверке условия k<3 система даст
сообщениеоневозможностипроверкиусловия(Error,cannotdetermine
ifthisexpressionistrueorfalse).Переменнаяциклапослееговыполне-
ния сохраняет свое последнее значение.В данном случае это 5. Чтобы
вывестизначениеiнаэкраннетребуетсяобычныйоператортипаprint
или write. Достаточно записать имя переменной и поставить точку с
запятой:
> i;
Если вместо точки с запятой поставить двоеточие после конца
цикла, то действия внутри цикла на экран не выводятся. А если цикл
двойной, например:
> for i to 5 do for j to 6 do i*j od;od;
то независимо от точки с запятой или двоеточия в конце циклов,
результат промежуточных действий внутри цикла (необходимый, в
частности, для отладки) можно будет видеть, если только применить
оператор вывода, например print(i*j).
В другом варианте цикла дается список значений, которые должна
принять переменная цикла
> for i in [2,1,3] do k:=i end;
В результате выполнения этого цикла получим
k:=2
k:=1
k:=3
Можно, как и в предыдущем случае, дать условие на досрочный
выход из цикла, например while (k<3). Если вместо упорядочен-
ного списка (в квадратных скобках) задать множество (в фигурных
скобках),последовательностьвывода будет не всегда предсказуемой.В
данном примере результаты будут выданы по возрастанию k.
Оператор немедленного завершения цикла — break.