М.Н. Кирсанов Практика программирования в системе 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.