Предисловие
Автор данной книги, как и многие почитатели компьютерных вычислений, прошел долгий путь их реализации: от программируемых микрокалькуляторов до работы на малых и персональных ЭВМ, использующих универсальные языки программирования высокого уровня. Это нашло отражение в его ранних книгах [1-3]. Совсем недавно пользователь ЭВМ, решая даже простые численные задачи, был вынужден осваивать основы программирования и готовить кустарные программы, вряд ли нужные кому-либо еще, кроме их создателя. Между тем возможности компьютеров постоянно росли. Сейчас персональный компьютер (ПК) с микропроцессором класса Pentium II, III или 4 намного превосходит по своим возможностям первые ЭВМ, занимавшие целые комнаты и залы. А скорость вычислений нынешних ПК в сотни раз превосходит скорость вычислений легендарных IBM PC XT и AT (первых ПК) и вплотную приближается к скорости вычислений суперЭВМ недавнего прошлого.
В связи с этим стал меняться взгляд на назначение компьютера. На первое место вышло применение их для работы с текстовыми процессорами (например, Microsoft Word) и прикладными программными системами для автоматизации офисной деятельности. Увы, при этом многие пользователи стали забывать о том, что ЭВМ изначально создавались для вычислений, а вовсе не для замены ими популярной, но ставшей неудобной пишущей машинки. Развитие мультимедиа привело к бурному применению компьютеров в роли игровых автоматов. В результате главный стимул развития «электронного помощника» создается отнюдь не высокоинтеллектуальными задачами.
Однако времена меняются и вечные ценности, к коим принадлежат разум и образование, вновь возвращаются. В последние годы во всем мире существенно возрос интерес к серьезному применению ПК, в том числе в области математических расчетов. Этому в большой степени способствовала разработка специальных компьютерных математических программных систем, резко снизивших потребность в написании собственных программ при решении математических задач. Первое поколение таких систем [4-10] было ориентировано на операционную систему MS-DOS и появилось, казалось бы, совсем недавно — в начале 90-х гг. Так или иначе, но компьютерный мир вновь заговорил об «искусственном интеллекте», понимая под этим способность электронной машины выдавать нетривиальные решения и обучаться решению новых задач. Интерес к компьютерному моделированию в самых широких областях заметно возрос после шахматных баталий между суперкомпьютером фирмы IBM и бывшим чемпионом мира по шахматам Гарри Каспаровым. Как известно, они завершились триумфальной победой машины — или, точнее говоря, коллективного разума тех, кто создал ее и ее программное обеспечение.
В последние годы показателем интеллектуальной мощи компьютеров, в том числе и персональных, стали уже не программы для игры в шахматы, а новейшие программные системы символьной математики или компьютерной алгебры [17-38]. Созданные для проведения символьных преобразований математических выражений, эти системы были доведены до уровня, позволяющего резко облегчить, а подчас и заменить, труд самой почитаемой научной элиты мира — математиков: теоретиков и аналитиков. Уже появились открытия, сделанные с помощью таких систем — но не ими самими! Вряд ли есть хоть один действительно серьезный научный проект, связанный с математикой, где они не применялись бы в деле.
Системы символьной математики долгое время были ориентированы на большие компьютеры, С появлением ПК класса IBM PC и Macintosh и с ростом их возможностей эти системы были переработаны под них и доведены до уровня массовых серийных программных систем. Сейчас системы символьной математики (или компьютерной алгебры) выпускаются самого разного «калибра» — от рассчитанной «на всех» системы Mathcad [11-21], поразительно компактной, быстрой и удобной для простых символьных вычислений системы Derive [22-24] и до компьютерных монстров Mathematica [26-28], MATLAB [29-31] и Maple [32-38], имеющих тысячи встроенных и библиотечных функций и изумительные возможности графической визуализации вычислений:
Все эти системы работают на персональных компьютерах, оснащенных популярными операционными системами класса Windows 95/98/NT/2000. Но не только на них — есть версии под операционные системы Linux, Unix, Mac и др. Они давно знакомы пользователям больших компьютеров и даже суперкомпьютеров.
К среднему уровню таких систем относятся интенсивно развиваемые системы класса Mathcad," имеющие (в дополнение к прекрасным средствам числовых вычислений) приобретенное по лицензии у фирмы Waterloo Maple Inc. (создателя систем Maple) ядро символьных вычислений. Ядро системы Maple используется и в другой маститой системе — MATLAB, придавая ей необычные для нее возможности символьной математики.
В данной книге впервые дается достаточно полное описание одной из самых мощных и интеллектуальных систем компьютерной алгебры — Maple под Windows, ее последней реализации — Maple 7. Эта система была создана группой ученых, занимающихся символьными вычислениями (The Symbolic Group), организованной Кейтом Геддом (Keith Geddes) и Гастоном Гонэ (Gaston Gonnet) в 1980 году в университете Waterloo, Канада. Вначале она была реализована на больших компьютерах и прошла долгий путь апробации, вобрав в свое ядро и библиотеки большую часть математических функций и правил их преобразований, выработанных математикой за столетия развития. Есть реализации программы на платформах ПК Macintosh, Unix, Sun и др.
Системам класса Maple посвящены сотни книг. Отметим лишь некоторые из них [39-56], изданные за рубежом. Достаточно полный список (около 400 наименований) книг по системам Maple можно найти на сайте разработчика этой системы — компании Waterloo Maple Software (www.maplesoft.com). Однако книг по системе Maple 7 (за исключением фирменных руководств по ней) на момент сдачи рукописи данной книги в этом списке не было.
Вряд ли эта мощная математическая система, разделяющая претензии на мировое лидерство с системами Mathematica фирмы Wolfram Research Inc., нужна секретарше или даже директору небольшой коммерческой фирмы. Но, несомненно, любая серьезная научная лаборатория или кафедра вуза должны располагать подобной системой, если они всерьез заинтересованы в автоматизации выполнения математических расчетов любой степени сложности. Несмотря на свою направленность на серьезные математические вычисления, системы класса Maple необходимы довольно широкой категории пользователей: студентам и преподавателям вузов, инженерам, аспирантам, научным работникам и даже учащимся математических классов общеобразовательных и специальных школ. Все они найдут в Maple многочисленные достойные возможности для применения.
По мнению автора данной книги, сравнение системы Maple 7 с лидером среди систем компьютерной математики — системой Mathematica 4.1 — непродуктивно. У каждой программы есть свои достоинства и недостатки. А главное — у них есть свои приверженцы, которых бесполезно убеждать, что иная система в чем-то лучше. Это все равно, что сравнивать великих исполнителей джазовой и рок-музыки Луи Амстронга и Би Би Кинга. Все, кто всерьез применяют системы компьютерной математики, должны работать с несколькими системами, ибо только это гарантирует высокий уровень надежности сложных вычислений.
И все же надо отметить, что интерфейс Maple 7 более интуитивно понятен, чем у строгой Mathematica 4.1. Maple 7 на первый взгляд имеет несколько менее мощную графику, но простота управления параметрами и легкость подготовки графических процедур часто позволяет визуализировать решения математических задач с меньшими усилиями, чем при использовании системы Mathematica 4.1. Обе системы в последних реализациях сделали качественный скачок в направлении эффективности решения задач в численном виде, в частности за счет повышения скорости выполнения матричных операций.
Особенно эффективно использование Maple при обучении математике. Высочайший «интеллект» этой системы символьной математики объединяется в ней с прекрасными средствами математического численного моделирования и просто потрясающими возможностями графической визуализации решений. Применение таких систем, как Maple, возможно при преподавании и самообразовании от самых основ до вершин математики.
Практика (да и личный опыт автора) показывает, что самым трудным является первый этап освоения системы. Первое знакомство с программой многих пользователей просто подавляет — убедившись в невероятном множестве возможностей системы и не имея ее систематизированного описания (а оно поставляется в виде трех книг приличного размера, включая книги учебного характера [39, 40]), многие пользователи помещают систему в архив, где она «пылится» без дела.
Эта книга впервые основательно знакомит читателя с новейшей версией системы Maple — Maple 7 в форме подробного учебного курса. Книга написана на основе ранее изданного учебного курса по системе Maple 6 [37], существенно переработанного и дополненного. Среди новых материалов, появившихся в книге, следует отметить:
Основное внимание в книге уделено обучению основам и приемам эффективной работы с системой Maple 7. На роль всеобъемлющего справочного руководства книга не претендует, хотя во многих случаях способна выполнять роль справочника или руководства пользователя Maple 7. Хотя эта книга одна из самых обширных среди русскоязычных книг, посвященных системе Maple, автор был вынужден ограничить описание ряда важных возможностей программы. Основной акцент в книге сделан на описание возможностей системы в области математических расчетов и интерфейса пользователя. Менее подробно, а порой просто не описаны средства расширения системы и пакеты узкоспециального назначения (электронная база данных по системе Maple 7 дает полное представление о всех свыше 3000 операторов и функций этой системы, большинство из которых используется крайне редко).
Хотя книга посвящена версии Maple 7, большинство материала может использоваться и пользователями предшествующей версии Maple 6. В частности, это достигнуто выделением новых возможностей Maple 7 в отдельные разделы книги. Остальные разделы книги без каких-либо ограничений могут быть отнесены к наиболее распространенной версии Maple — Maple 6.
Структура книги
Книга содержит 17 уроков и составлена так, что эти уроки постепенно знакомят читателя с возможностями системы. Уже после прохождения урока 1 вы сможете начать осмысленно и плодотворно работать с системой. Этот урок является как бы ознакомительным курсом по работе с системой Maple 7. Он может быть полезен как для быстрого самостоятельного освоения системы не слишком требовательным пользователем, так и как основа вводного курса по системе в вузах и школах, где для основательного изучения Maple 7 не предусмотрено достаточного количества учебных часов. Кроме того, этот урок знакомит читателя с основами интерфейса пользователя и правилами работы с панелями инструментов и форматирования выражений. По сравнению с учебным курсом по системе Maple 6 [37] этот урок существенно переработан и дополнен. В частности, подробно описана инсталляция системы Maple 7 и аппаратные требования для работы с ней. Последующие уроки расширяют заведенное знакомство и постепенно готовят читателя к серьезной самостоятельной работе практически без применения какой-либо иной документации, кроме встроенной в систему справочной базы данных. Урок 2 посвящен знакомству с мощной справочной базой данных системы Maple 7 и информационной поддержкой этой системы в Интернете. Данные разделы намеренно вынесены в начало книги, поскольку успех освоения системы Maple 7 до профессионального уровня требует обучения работе со справочной базой данных. В уроке 3 описаны основные приемы работы с файлами документов, которые готовятся в Maple 7. Урок 4 дает систематизированное описание интерфейса, хотя и без многих подробностей, известных всем пользователям операционных систем класса Windows 95/98/NT/2000.
Остальные уроки посвящены базовым математическим возможностям системы Maple 7 и основам практической работы в ней. В уроке 5 описаны основные типы данных системы, а в уроке 6 — основные виды встроенных операторов и функций. Урок 7 посвящен основам программирования в среде Maple 7. Читатель должен понимать, что все описанные и в других главах команды системы Maple 7 являются одновременно и командами ее языка программирования. Именно это позволяет считать язык программирования Maple 7 языком программирования сверхвысокого уровня, проблемно ориентированным на математические расчеты. Урок 8 является одним из наиболее важных. Он посвящен решению типовых задач математического анализа, таких как вычисление сумм и произведений последовательностей, производных и интегралов, разложений функций в ряд и т. д. При этом особое внимание уделяется технике аналитических вычислений, где возможности системы Maple 7 вызывают особый интерес. Но и техника численных расчетов рассмотрена достаточно детально, в частности арифметика высокой точности. Работа с функциями и степенными многочленами (полиномами) описана в уроке 9. Урок 10 посвящен изучению главной «козырной карты» системы Maple 7 — ее возможностям в области символьной математики. Здесь описано много тонкостей работы с математическими выражениями и другими объектами системы, позволяющими выполнять множество математических преобразований и подстановок.
Два больших урока — уроки 11 и 12 — посвящены графическим возможностям системы. При этом урок 11 описывает обычные графические средства, а в уроке 12 дается описание расширенных средств, позволяющих эффективно решать задачи визуализации решений математических проблем — вплоть до подготовки графиков с элементами анимации.
Учитывая огромную роль дифференциальных уравнений в решении ряда математических, физических и технических задач, работе с ними посвящен отдельный урок 13. Наряду с решением одиночных дифференциальных уравнений первого и второго порядка рассматривается решение систем линейных и нелинейных дифференциальных уравнений как аналитическими, так и численными методами. Большое внимание уделено графической визуализации решений и построению наглядных фазовых портретов решения. В уроке отражены новые возможности Maple 7 в решении дифференциальных уравнений.
В уроке 14 рассмотрены важнейшие пакеты системы Maple 7 математической направленности. Эти пакеты поставляются вместе с системой, и применение функций из них столь же важно, как и применение средств ядра системы. Описанные в уроке 14 пакеты рассмотрены достаточно полно.
В отдельный урок 15 вынесены широко используемые на практике средства решения задач линейной алгебры. Это операции с векторами и матрицами, различные их преобразования и техника решения систем линейных уравнений. Здесь описаны такие важные пакеты, как linalg (стандартные средства линейной алгебры) и LinearAlgebra. В последний пакет входят новые средства линейной алгебры повышенной эффективности на основе алгоритмов, заимстованных из знакомого математикам пакета программ NAG (Numbering Algorithms Group). Впервые описан новый пакет анализа линейных функциональных систем LinearFunctionalSystems, появившийся в версии Maple 7.
Остальные пакеты, относящиеся к сравнительно узким областям математики и п-редставляющие ограниченный интерес для большинства читателей, рассмотрены обзорно или в виде аннотации в уроке 16. К сожалению, материал по всем пакетам расширения Maple 7 настолько обширен, что его невозможно отразить в одной книге (тем более в форме учебного курса). Тем не менее в отличие от учебного курса по системе Maple 6 [37] этот урок существенно расширен и в нем впервые описан ряд новых пакетов системы Maple, в частности пакеты PolymomialTools, OrthogonalSeries, RandomTools, MathML и XMLTools.
Последний урок 17 описывает законченное решение ряда конкретных и интересных задач из области математики, физики и радиоэлектроники. Таким образом, читатель получает возможность познакомиться с широким спектром применения системы Maple 7 — от примеров простых расчетов и вычислений (таких в книге тысячи) до решения конкретных научных и технических проблем. Материал книги иллюстрируется многими сотнями копий экрана как в виде отдельных рисунков, так и фрагментов вычислений и программных процедур в тексте книги. Они дают наглядное представление о реальном диалоге с системой и о форматах ввода и вывода.
Большинство примеров в книге оригинальны и отражают взгляд автора на методологию изучения системы Maple. В то же время в книге использованы и лучшие (и наиболее поучительные) примеры, которые приведены в обширной библиотеке процедур, составленных пользователями систем Maple разных реализаций со всего мира, и примеры из ряда учебников по системе — в том числе новейших электронных (таких; как Power Tools), размещенных в Интернете. Все заимствованные примеры также специально адаптированы применительно к новейшей версии системе Maple 7, описанной в книге.
Урок 1.
Краткая характеристика систем класса Maple
Назначение и место систем Maple
Maple — система компьютерной математики, рассчитанная на широкий круг пользователей. До недавнего времени ее называли системой компьютерной алгебры, Ито указывало на особую роль символьных вычислений и преобразований, которые способна осуществлять эта система. Но такое название сужает сферу применения системы. На самом деле она уже способна выполнять быстро и эффективно не только символьные, но и численные расчеты, причем сочетает это с превосходными средствами графической визуализации и подготовки электронных документов.
Казалось бы, нелепо называть такую мощную систему, как Maple 7 математической системой «для всех». Однако по мере ее распространения она становится полезной для многих пользователей ПК, вынужденных в силу обстоятельств (работа, учеба, хобби) заниматься математическими вычислениями и всем, что с ними связано. А все это простирается от решения учебных задач в вузах до моделирования сложных физических объектов, систем и устройств, и даже создания художественной графики (например, фракталов).
Для наших читателей (в том числе и для математиков-профессионалов) возможности систем символьной математики, реализованных на массовых ПК класса IBM PC, порой являются полной неожиданностью и вызывают вполне заслуженное удивление и восхищение, но иногда и резкое отрицание. Впрочем, последнее характерно скорее для тех, кто с системой Maple просто не работал и относится к ней, как дама из анекдота о паровозе — увидев паровоз впервые, она воскликнула: «Не может быть, что он едет без лошадей!» Maple — тщательно и всесторонне продуманная система компьютерной математики. Она с равным успехом может использоваться как для простых, так и для самых сложных вычислений и выкладок. Заслуженной популярностью системы Maple (всех версий) пользуются в университетах — свыше 300 самых крупных университетов мира (включая и наш МГУ) взяли эту систему на вооружение. А число только зарегистрированных пользователей системы уже давно превысило один миллион. Ядро системы Maple используется в ряде других математических систем, например в MATLAB и Mathcad, для реализации в них символьных вычислений.
Добавьте к этому куда большее число незарегистрированных пользователей — ведь система записана на многих компакт-дисках, лихо продаваемых в России по вполне доступным ценам. Если учесть все это, то оказывается, что популярность системы Maple ничуть не ниже, а то и выше, чем у гораздо более простых систем, таких как Derive и Mathcad. Вот и решайте, какая из систем и впрямь рассчитана на всех!
Maple — типичная интегрированная система. Она объединяет в себе:
Ко всем этим средствам имеется полный доступ прямо из программы. Maple — одна из самых мощных и «разумных» интегрированных систем символьной математики, созданная фирмой Waterloo Maple, Inc. (Канада).
Во многих обзорах систем компьютерной алгебры Maple справедливо считается одним из первых кандидатов на роль лидера среди них. Это лидерство она завоевывает в честной конкурентной борьбе с другой замечательной математической системой — Mathematica 4.1. Каждая из данных двух систем имеет свои особенности, но в целом эти две лидирующие системы практически равноценны. Однако надо отметить, что появление новейшей версии Maple 7 означает очередной виток в соревновании этих систем за место лидера мирового рынка. Причем виток на этот раз раньше сделала система Maple 7.
Система Maple прошла долгий путь развития и апробации. Она реализована на больших ЭВМ, рабочих станциях Sun, ПК, работающих с операционной системой Unix, ПК класса IBM PC, Macintosh и др. Все это самым положительным образом повлияло на ее отработку и надежность (в смысле высокой вероятности правильности решений и отсутствия сбоев в работе). Не случайно ядро системы Maple V используется целым рядом других мощных систем компьютерной математики, например системами класса Mathcad и MATLAB. А совсем недавно упрощенная версия Maple для операционной системы Windows СЕ стала использоваться в миниатюрных компьютерах фирмы Casio — Cassiopeia.
Известен ряд версий системы Maple, называемых реализациями. Одной из самых известных реализаций является реализация Maple V R5. В ней появилась возможность работы с электронными таблицами, несколько улучшен интерфейс пользователя (введены палитры для ввода математических символов и расширены возможности управления мышью), стала возможной запись файлов в формате HTML и введена возможность обмена объектами между документами методом перетаскивания (Drag and Drop).
Основное достоинство предшествующей версии Maple 6 — это существенное ускорение вычислений с большими матрицами, достигнутое применением алгоритмов матричных вычислений известного пакета NAG (Numbering Algorithms Group). Хотя данная книга посвящена новейшей реализации системы Maple 7, ее основной материал будет полезен и пользователя реализации Maple 6.
Новейшая версия систем Maple — Maple 7 появилась 21 июня 2001 г. Корпорация Waterloo Maple оценивает ее появление как новый виток в борьбе за мировое лидерство в области автоматизации математических вычислений — как численных, так и, в особенности, символьных. Являясь одними из лучших и надежных систем компьютерной математики, Maple 6 и Maple 7 становятся мировым стандартом в области математических вычислений.
На многих пользователей систем символьной математики удручающее впечатление может произвести наличие хотя и редких, но ошибочных решений. В самом деле, мы немедленно стерли бы с жесткого диска табличный процессор, давший ошибку в бухгалтерских расчетах, и перестали бы доверять системе проверки орфографии, дающей ошибки при проверке. Впрочем, последнее случается сплошь и рядом — пока нет таких систем, которые корректно проверяли бы орфографию и грамматику. Тот же текстовый процессор Word 97/2000 постоянно ошибается при проверке орфографии текстов, в чем автор не раз убеждался, готовя с его помощью большие книги.
У систем компьютерной алгебры нет проблем с обработкой естественного языка — математика полностью формализованная наука. Однако в них много своих условностей и неоднозначностей, которые здесь как бы заранее запрограммированы. К примеру, что считать более простым выражением: tan(x) или sin(x)/cos(x)? Система Derive полагает более простым выражением tan(x) и преобразует к нему выражение sin(x)/cos(x). А вот система Maple V ничуть не менее справедливо считает, что функции sin(x) и cos(x) математически более простые, чем tan(.r), и вообще — tan(x), по сути, не самостоятельная функция, a sin(x)/cos(x). Поэтому Maple V везде вместоtm(x) будет выводить sin(x)/cos(x).
Представьте себе, что таких условностей десятки и вы ничего об этом не знаете. Поэтому не стоит удивляться, что символьное значение какой-либо производной или интеграла может заметно отличаться по виду от приводимого в том справочнике, из которого взято исходное выражение для проверки правильности работы системы. Часто, чтобы получить результат в необходимом виде, необходимо приложить определенные усилия либо дать конкретные указания системе о типе преобразований в ходе вычислений. Указания реализуются в виде параметров к командам и функциям системы.
По образному выражению автора обзора [40], решение задач в символьном виде напоминает переход через поле, густо напичканное минами. Удивительно не то, что системы символьной математики могут ошибаться и «взрываться», а то, что число этих ошибок мало и уже на нынешнем этапе развития таких систем это не мешает их серьезному практическому применению. Стоит еще раз подчеркнуть, что Maple в этом отношении является одной из лучших систем, реализованных на ПК класса IBM PC и Macintosh с достаточно умеренными техническими характеристиками. Кстати говоря, для ПК Macintosh последней реализацией пока что является Maple V R4.
Один знакомый автор любил говорить, что компьютеры делают умных людей умнее, а глупых — глупее. Пожалуй, это более чем справедливо для людей, сидящих у ПК с установленной на нем системой символьной математики. Лишь те, кто понимают суть математических вычислений и имеют должную математическую интуицию и подготовку, могут получить от таких систем самые серьезные и даже новые результаты. Те же, кто думает, что системы символьной математики заменят им математические знания, глубоко ошибаются и могут получить красочно выглядящие, но абсолютно неверные и даже псевдонаучные результаты!
Однако вряд ли следует утрировать вероятность выдачи системами символьной математики ошибочных результатов — даже самые опытные математики-аналитики тоже могут ошибаться в своих вычислениях. В разработке таких систем, как Maple или Mathematica принимают участие крупные математические школы всего мира! Эти системы — кладезь математических понятий, сведений и знаний. Они способны заменить самые серьезные справочники по математическим вычислениям в любой области науки, техники и образования. Кроме того, они имеют множество средств для проверки корректности выполняемых вычислений, например путем подстановки полученных результатов в исходные выражения.
Кстати, одно из самых действенных приемов проверки таких средств — решение задачи одновременно на нескольких системах символьной математики. Не случайно уже сейчас можно заметить тенденцию к объединению математических систем. Эта новая и безусловно прогрессивная тенденция в ближайшее время приведет к созданию автоматизированных рабочих мест математиков и ученых других близких специальностей. Разработки таких рабочих мест (разумеется, компьютер на них — главный инструмент), в том числе с использованием систем Maple, уже появились и о них немного говорится в заключении. В добавление к сказанному надо отметить, что Maple 7 — одна из самых надежных систем компьютерной математики. Надежных прежде всего в смысле высокой достоверности получения правильных результатов при сложных символьных вычислениях. Эта первая система компьютерной математики, успешно прошедшая полное тестирование на задачах повышенной сложности, предлагаемых для оценки качества подобных систем.
Основой для работы с символьными преобразованиями в Maple является ядро системы. Оно содержит сотни базовых функций и алгоритмов символьных преобразований. В новых реализациях объем ядра достигает 6-7 Мбайт. Имеется также основная библиотека операторов, команд и функций. Многие встроенные в нее функции, как и функции ядра, могут использоваться без какого-либо объявления, другие нуждаются в объявлении. Кроме того, имеется ряд подключаемых пакетов (packages).
Дополнительные функции из пакетов могут применяться после объявления подключения пакета с помощью команды with(name), где name — имя применяемого пакета. Общее число функций, с учетом встроенных в ядро и размещенных в пакетах в системе Maple V R4 приближается к 2500, в реализации R5 — к 2700, а в Maple бив Maple 7 оно уже превышает 3000. Это означает, что большинство задач может решаться в режиме прямого диалога с системой без использования каких-либо средств программирования.
Maple способна решить огромное число задач вообще без какого-либо программирования в общепринятом смысле этого понятия. Достаточно лишь описать алгоритм решения задачи и разбить его на отдельные вопросы, на которые система Maple способна дать ответы. Более того, есть тысячи задач, алгоритмы решения которых уже реализованы в виде функций и команд системы. Тем не менее это вовсе не означает, что в Maple нельзя программировать. На самом деле Maple поддерживает три собственных языка: входной, реализации и программирования.
Maple имеет входной язык сверхвысокого уровня, ориентированный на решение математических задач практически любой сложности. Он служит для задания системе вопросов или, говоря иначе, задания входных данных для последующей их обработки. Это язык интерпретирующего типа и по своей идеологии напоминает добрый старый Бейсик. И такое сходство вовсе не недостаток, а огромное достоинство — ведь именно с Бейсика начался подлинный диалог пользователя напрямую с компьютером! Входной язык имеет большое число заранее определенных математических и графических функций, а также обширную библиотеку, подключаемую по мере необходимости.
Имеет Maple и свой язык процедурного программирования — Maple-язык. Этот язык имеет вполне традиционные средства структурирования программ: операторы циклов, операторы условных и безусловных переходов, операторы сравнения, логические операторы, команды управления внешними устройствами, функции пользователя, процедуры и т. д. Он также включает в себя все команды и функции входного языка, ему доступны все специальные операторы и функции. Многие из них являются весьма серьезными программами, например символьное дифференцирование, интегрирование, разложение в ряд Тейлора, построение сложных трехмерных графиков и т. д.
Не следует путать входной язык и язык программирования системы (Maple-язык) с языком ее реализации. Им является один из самых лучших и мощных универсальных языков программирования — Си. На нем написано ядро системы, содержащее тщательно оптимизированные процедуры. Большинство же функций, которые содержатся в пакетах, написаны на Maple-языке, благодаря чему их можно модифицировать и даже писать свои собственные библиотеки. По разным оценкам, лишь от 5 до 10 % средств Maple создано на языке реализации — все остальное написано на Maple-языке. Таким образом, система имеет развитые возможности для расширения и адаптации к задачам пользователя. Для подготовки программ на языке Maple могут использоваться внешние редакторы, но система имеет и свой встроенный редактор, вполне удовлетворяющий требованиям большинства пользователей. Он открывается командами New и Open в меню File. Этот редактор можно использовать для редактирования файлов программ или математических выражений. Версии Maple для MS-DOS имеют свой редактор программ и отладчик с функциями проверки синтаксиса. После версии Maple V для Windows необходимость в этих средствах практически отпала.
Синтаксис структурных операторов языка Maple напоминает смесь Бейсика и Паскаля. Это облегчает знакомство с ним тем, кто имеет хотя бы начальный опыт программирования на этих языках. По близким к Бейсику правилам (и при помощи общепринятых математических сокращений) выполняется и ввод математических выражений в диалоговом режиме работы с системой.
Вообще говоря, системы Maple ориентированы на решение сложных задач, хотя и решение в них простых задач вполне возможно и уместно. Возможно, для решения таких задач вполне подойдет весьма простая, быстрая и надежная система Derive или система Mathcad, в которую (начиная с версии 3.0 под Windows) включен приобретенный по лицензии фирмы Waterloo Maple упрощенный символьный процессор Maple. Однако по числу доступных пользователю математических функций эти скромные системы не идут ни в какое сравнение с патриархом символьной математики — системой Maple.
Система Maple 7 может с успехом применяться для решения самых серьезных математических задач аэродинамики, теории поля, теплопроводности и диффузии, теоретической механики и др. Решение таких задач нередко является многолетним трудом элитных научных коллективов.
Впрочем, поскольку система может быть установлена на любом современном ПК, ее можно (да и нужно) применять как можно чаще и по любому поводу. Это способствует как приобретению практических навыков работы с Maple, так и росту математических познаний тех, кто с ней работает.
Перечислим основные возможности предшествующей версии системы Maple 6.
Интерфейс:
Символьные и численные вычисления:
Работа с уравнениями в численном и символьном виде:
Работа с функциями:
Линейная алгебра:
Графическая визуализация результатов вычислений:
Программирование:
Система Maple 7 приобрела ряд новых возможностей. Кратко отметим их:
В сочетании с сохраненными возможностями предшествующей версии системы это дает новой версии Maple 7 обширные возможности в эффективном решении широкого класса математических и научно-технических задач, а также задач в области образования.
В этой книге рассматривается реализация системы Maple 7, требующая:
Установка системы производится обычно с компакт-диска. Обычно компакт-диск с инсталляционной версией Maple 7 стартует автоматически. При этом появляется окно Мастера установки со шкалой выполнения предварительной подготовки, показанное на рис. 1.1.
Затем Мастер автоматически переходит к окну, в котором просит ввести серийный номер программного продукта, который имеется в документации к системе или указан на конверте с компакт-диском.
Для продолжения установки следует щелкнуть на кнопке Next. Это приводит к появлению следующего окна и т. д. В каждом окне после указания необходимых данных нужно нажать кнопку Next или Yes. Работа с остальными окнами мастера установки описана ниже.
Рис. 1.2. Окно с приглашением к установке системы Maple 7
На рис. 1.3 показано следующее окно Мастера, которое служит для задания папки, в которой будут установлены файлы Maple 7. Вы можете оставить предлагаемую по умолчанию папку, а можете ввести любую другую.
Если папка, заданная по умолчанию в поле Destination Folder вас не устраивает, то вы можете определить другую. Для этого щелкните на кнопке Browser. Появится стандартное окно Choose Folder, показанное на рис. 1.4. В этом окне можно задать желаемую папку, либо явно указав ее имя в поле Path, либо выбрав существующую в дереве Directories.
Система Maple 7 может быть установлена как для индивидуального пользователя, так и для многих пользователей (сетевой вариант). Данный выбор можно осуществить в следующем окне Мастера установки, показанном на рис. 1.5. В этом окне надо задать вариант установки, щелкнув в соответствующем положении переключателя. Здесь же можно уточнить директорию (по умолчанию Users) для хранения файлов пользователей.
Следующий этап установки — определение имени ярлыка, активизацией которого в дальнейшем будет запускаться система. Для этого служит окно Мастера установки, показанное на рис. 1.6. В этом окне можно оставить имя ярлыка Maple 7, предлагаемое по умолчанию, ввести вместо него другое или выбрать имя из списка, представленного в нижней части окна. Разумно согласиться с предложенным Мастером именем.
Рис. 1.3. Окно задания папки для размещения файлов системы Maple 7
Рис. 1.4. Задание имени папки для размещения файлов системы Maple 7
Рис. 1.5. Выбор установки системы Maple 7 для одного пользователя или для многих пользователей
Рис. 1.6. Выбор ярлыка для запуска системы Maple 7
На этом предварительная часть установки завершается, и нажатием кнопки Next в окне рис. 1.6 можно перейти к этапу копирования файлов в намеченную папку (учтите, что часть файлов копируется и в папки с операционной системой Windows, установленной на вашем ПК). В процессе копирования файлов окно Мастера установки сменяется информационными окнами, которые сообщают о возможностях Maple 7. Одно из таких окон представлено на рис. 1.7. Кроме того, на экране будет отображаться окно с индикатором процесса копирования файлов, который позволяет судить о том, какая часть работы уже проделана, а также какие файлы копируются в данный момент.
Рис. 1.7. Информационное окно и индикатор процесса копирования файлов
В процессе копирования файлов могут быть ситуации, когда встречается файл с таким же именем, что и копируемый. В этом случае Мастер установки сообщит вам об этом с помощью соответствующего сообщения. Чаще всего такая ситуация встречается, если Maple 7 устанавливается поверх прежней версии системы Maple. Если пользователь твердо намерен установить новую версию системы, то рекомендуется предварительно удалить предшествующую версию (с помощью соответствующих программ и средств, разумеется). В противном случае придется решать, какой файл будет занимать место на диске — останется старый или его заменит новый (естественно, рекомендуется установить новый файл).
По завершении копирования файлов появляется окно Мастера с запросом о том, надо ли помещать ярлык запуска системы на рабочий стол, изображенное на рис. 1.8.
Рис. 1.8. Запрос о размещении ярлыка запуска Maple 7 на рабочий стол
Рис. 1.9. Окно Мастера установки с сообщением о ее завершении
Вы можете отказаться от такого размещения и запускать Maple 7 из меню Пуск или из Проводника. Но, если вы намерены работать с Maple 7 часто, то рекомендуется поместить ярлык на рабочий стол Windows.
Установка завершается вывбдом окна Мастера установки, в котором сообщается о ее успешном завершении. Данное окно представлено на рис. 1.9.
В этом окне достаточно нажать кнопку Finish для завершения установки. Maple 7 будет установлена на вашем компьютере и готова к работе.
Проблемы, связанные с установкой и возможными конфликтами, описаны в файле readme.txt, который рекомендуется просмотреть перед инсталляцией системы. К сожалению, он подготовлен па английском языке, как и вся встроенная в Maple 7 документация.
Запуск Maple 7 производится, как обычно, из меню Пуск (рис. 1.10). Найдя строчку Maple 7, необходимо открыть подменю и щелкнуть на команде Maple 7 (рис. 1.10).
Рис. 1.10. Запуск Maple 7 из меню Пуск
Возможен также запуск с помощью ярлыка, помещенного на рабочий стол. В любом случае, вначале на некоторое время появляется красочное окно-заставка, показанное в центре рис. 1.1. После этого появляется рабочее окно системы, изображенное на рис. 1.11.
Рис. 1.11. Окно системы Maple 7
Долгое время системы Maple имели довольно архаичный (хотя и неплохой) пользовательский интерфейс, ориентированный на операционную систему MS-DOS. Но затем версия Maple V R3, далее Maple V R4, Maple V R5 и, наконец, Maple 6 и Maple 7 приобрели вполне современный графический пользовательский интерфейс, характерный для приложений операционных систем Windows. Это намного повысило удобство работы с Maple и обеспечило интеграцию со многими другими программными продуктами.
Как у всех приложений под Windows интерфейс Maple 7 имеет ряд характерных элементов, видимых на рис. 1.11 и перечисленных ниже:
Пользовательский интерфейс Maple 7 позволяет готовить документы, содержащие одновременно текстовые комментарии, команды входного языка (с возможным преобразованием их в естественную математическую форму), результаты вычислений в виде обычных математических формул и графические данные. Это обеспечивает понятное представление исходных данных и результатов вычислений, а также удобство их повторного использования.
В основе пользовательского интерфейса Maple 7 лежит графический многооконный интерфейс операционной системы Windows. Управление системой Maple 7 возможно с помощью главного меню, панелей инструментов и палитр, а также «горячих» клавиш. Поддерживаются также многие возможности мыши, присущие приложениям под Windows.
Важно отметить и прекрасно реализованную справочную систему Maple 7. Преодолев первые трудности общения с системой, пользователь быстро осваивает систему справки, которая позволяет без какой-либо бумажной документации получить исчерпывающую информацию о любом операторе, функции или пакете (разумеется, на английском языке). На каждой странице справки нахддит-ся по несколько примеров, причем их можно скопировать и перенести в редйк-тор или в окно исполняемых документов системы. Это способствует быстрому обучению пользователя. Подробное описание справочной системы Maple 7 дано в уроке 2.
Пользователь Maple 7 (как и ряда других математических систем) работает с документами, которые являются одновременно описаниями алгоритмов решения задач, программами и результатами их исполнения. Все данные команды и результаты размещаются в соответствующих ячейках. Графические построения выполняются как в ячейках документа, так и в отдельных окнах, и имеют свои меню для оперативного управления параметрами.
Наиболее полные возможности управления предоставляет главное меню системы Maple 7. Оно, как обычно, расположено непосредственно под строкой заголовка. Меню предоставляет доступ к основным операциям и параметрам пользовательского интерфейса системы. Ниже дан перечень меню, доступных при наличии открытого документа:
Главное меню Maple 7 является контекстно-зависимым. Это означает, что его вид может меняться в зависимости от текущего состояния (контекста) системы. Например, если все документы закрыты, то главное меню содержит только три заголовка меню: File, Options и Help. При этом место для окон документов пусто и окрашено в серый цвет. Вид меню также меняется в зависимости от того, какие объекты в документе выделены. Более подробно работу с меню системы Maple 7 мы рассмотрим позже, начиная с урока 3.
Полезно сразу обратить внимание на возможность модификации интерфейса системы Maple 7 с помощью команд меню View. В этом меню (оно показано на рис. 1.11 в открытом состоянии) можно увидеть список палитр Palettes, предназначенных для ввода математических знаков. Установив флажки соответствующих палитр, можно вывести их на экран и переместить в любое место. Все четыре палитры математических символов представлены на рис. 1.11. При этом палитра VECTOR введена в Maple 7 впервые.
Назначение знаков в палитрах очевидно из их названий:
SYMBOL — ввод отдельных символов (греческих букв и некоторых математических знаков);
EXPRESSION — ввод шаблонов математических операторов и операций;
MATRIX — ввод шаблонов матриц разных размеров;
VECTOR — ввод шаблонов векторов разных размеров и типов (векторы-столбцы или векторы-строки).
Следует отметить, что не всегда введенный на палитре символ буквально повторяет представленный на кнопке. Например, вместо символа а может быть введено слово alpha. Так происходит, если установлен действующий по умолчанию Maple-режим представления символов. Палитра ввода векторов введена в Maple 7 впервые, что сделало ввод векторов более удобным.
Еще один важный и полезный элемент интерфейса — всплывающие подсказки. Они появляются, если навести курсор мыши на тот или иной элемент интерфейса. На рис. 1.11 показана одна из всплывающих подсказок. Подсказки имеют вид облачка, которое вытекает из указанного элемента интерфейса. Особенно удобны подсказки для пояснения назначения кнопок палитр и панелей инструментов. В дальнейшем мы будем неоднократно приводить примеры всплывающих подсказок при работе с интерфейсом.
После загрузки и запуска системы можно начать диалог с ней, используя ее операторы и функции (с параметрами) для создания и вычисления математических выражений.
ВНИМАНИЕ
Во избежании грубых ошибок при исполнении того или иного примера рекомендуется перед этим исполнить команду restart которая снимает определения со всех использованных ранее переменных и позволяет начать вычисления «с чистого листа».
На рис. 1.12 представлен реальный диалог с системой (в виде копии экрана) при решении простейших арифметических задач и построении графика функции sin(x)/x.
Рис. 1.12. Начало диалога с системой Maple 7
Уже из этого простого примера видны особенности диалога с Maple и синтаксиса ее входного языка, то есть языка, на котором системе задаются вопросы. Диалог идет в стиле: «задал вопрос, получил ответ». Вопросы и ответы занимают отдельные блоки, выделяемые в левой части квадратными скобками. Длина квадратных скобок зависит от размера выражений — исходных (вопроса) и результатов вычислений (ответов на вопросы). Знак > является знаком приглашения к заданию вопроса. Мигающая вертикальная черта | — маркер ввода (курсор).
Ввод выражений (вопросов) задается по правилам, давно принятым для строчных редакторов. Они хорошо известны, и мы не будем на них останавливаться подробно. Отметим лишь, что клавиша Ins позволяет задавать два основных режима ввода — замены и вставки. В режиме замены вводимый символ заменяет существующий символ, который отмечен маркером ввода. А в режиме вставки новый символ вставляется в текст, не уничтожая имеющиеся символы.
Перемещение маркера ввода осуществляется клавишами перемещения курсора <- и -> Клавиша Backspace стирает символ слева от маркера ввода, а клавиша Del — справа от маркера ввода. Для ввода любого символа надо нажать соответствующую клавишу. Клавиша Shift включает верхний регистр для ввода заглавных (прописных) букв, а клавиша Caps Lock переключает верхний и нижний регистры клавиш с буквами (они меняются местами).
Знак фиксации конца выражения : (точка с запятой) указывает, что результат его вычисления должен быть выведен на экран, а знак : (двоеточие) отменяет вывод и может использоваться как знак разделителя при записи нескольких выражений в одной строке. Клавиши перемещения курсора позволяют передвигаться по ранее введенным строкам на экране.
Важным понятием системы Maple 7 (да и математики вообще) является понятие функции. Функция возвращает результат некоторого преобразования исходных данных — параметров функции. Maple 7 имеет множество встроенных функций, включенных в его ядро и в пакеты.
Функция в выражениях задается вводом ее имени и списка параметров функции (одного или нескольких), заключенного в круглые скобки, например sqrt(2) задает функцию вычисления квадратного корня с параметром 2 (численной константой). Основным признаком функции является возврат значения в ответ на обращение к ней по имени (идентификатору) с указанием списка параметров функции. Например:
Обратите внимание на особую роль десятичной точки — здесь она служит указанием к выполнению вычисления значения sin( 1.0) (или, что то же самое, sin( 1.)). А вот синус целочисленного аргумента 1 не вычисляется — считается, что вычисленное значение менее ценно, чем точное значение sin(1).
В данном случае надо понимать, что Maple предпочитает иметь с дело точными значениями функций. Логично, что точное значение синуса от 1 записывается в виде sin(f). — Прим. ред.
Ради единства терминологии мы будем пользоваться расширительным понятием функции, относя к нему и те объекты, которые в некоторых языках программирования именуют процедурами или командами. Например, слова plot и plot3d мы также будем называть функциями, которые возвращают графики аргументов. Под командами же мы будем подразумевать прежде всего команды, содержащиеся в меню. Помимо функций в математических системах для записи математических выражений используются специальные знаки — операторы. К примеру, вычисление квадратного корня часто записывается с помощью его специального знака — V. Достаточно хорошо известны операторы сложения +, вычитания -, умножения *, деления / и некоторые другие. Операторы обычно используются с операндами в виде констант или переменных, например в записи 2* (3+4) числа 2, 3 и 4 — это операнды, а знаки * и + — операторы. Скобки используются для изменения порядка выполнения операций. Так, без них 2*3+4=10, тогда как 2*(3+4)=14, поскольку вначале вычисляется выражение в скобках. Пожалуй, самым распространенным оператором является оператор присваивания ':=. Он используется для задания переменным конкретных значений, например:
Этот простой пример наглядно иллюстрирует эволюцию переменных и особую роль оператора присваивания в системе Maple. В частности, в этом примере переменные х, у и z взаимосвязаны с помощью операций присваивания. Поэтому задание значения 2 переменной z приводит к тому, что и переменные у и х принимают то же значение.
Другой распространенный оператор — оператор равенства = — используется для задания равенств и логических условий (например, а=b), указания областей изменения переменных (например, 1=1..5 означает формирование диапазона изменения i от 1 до 5) и определения значений параметров в функциях и командах (например, color=b1ack для задания черного цвета у линий графиков).
Операторы сами по себе результат не возвращают. Но они, наряду с функциями и своими параметрами (операндами), позволяют конструировать математические выражения, которые при их вычислении также возвращают результат. В силу этого математические выражения, содержащие операторы и операнды, могут быть параметрами функций. Выражения в Maple бывают очень простыми (например, имена переменных х и у или константы 1 и 2), а могут содержать многие тысячи знаков. С позиции канонов символьной математики квадратный корень из двух уже является основным результатом вычислений. Поэтому такая функция обычно не вычисляется в численном виде, а выводится в естественном виде с применением знака квадратного корня V. Для вычисления в привычном виде (в виде десятичного числа с мантиссой и порядком) надо воспользоваться функцией evalf(sqrt(2)) — эта функция обеспечивает вычисление символьного выражения, заданного ее параметром (числом 2).
При работе с системой Maple 7 надо строго придерживаться правил корректного ввода выражений и иных объектов Maple-языка, называемых синтаксисом языка. Однако, как гласит русская пословица, не ошибается только тот, кто ничего не делает. Даже у опытного пользователя возможны ошибки в ходе ввода выражений и задания алгоритмов вычислений.
Алгоритмические, но синтаксически корректные ошибки часто могут не распознаваться системой. Например, если в выражении a*sin(x) вы вместо аргумента х взяли аргумент b, то есть записали a*sin(b), то такую ошибку Maple 7 распознать не может, ибо синтаксически как a*sin(x), так и a*sin(b) абсолютно корректны. Если вы перепутаете синус с косинусом и запишете a*cos(x), то такая ошибка также не будет распознана.
ПРИМЕЧАНИЕ
Ошибки в записи выражений, описывающих те или иные алгоритмы вычислений, не нарушающие синтаксическую корректность, системой Maple 7 не распознаются. Контроль за такими ошибками целиком лежит на пользователе.
Приведем еще один характерный пример ошибки, которую Maple 7 не может распознать. Вводя выражение X/Y*Z, мы можем предположить, что это означает X/(Y*Z). Однако в Maple 7 приоритет операций деления и умножения одинаков. Поэтому Maple 7 вначале делит X на Y, а затем полученный результат умножает на Z:
Ошибки такого рода называют семантическими. Если бы мы не проверили вывод с помощью оператора вычисления предыдущего выражения (%), то эта ошибка осталась бы нераспознанной. Выявление и устранение семантических ошибок выполняется на этапе отладки вычислений и программ.
ПРИМЕЧАНИЕ
Используйте блокировку вычислений с помощью знака двоеточия только в том случае, когда вы абсолютно уверены в правильности записи выражения. Иначе вы можете не заметить вкравшейся в вычисления серьезной ошибки.
В нашем примере мы получили бы верный результат, заключив выражение Y*X в круглые скобки. Как обычно, они предназначены для задания явного приоритета выполнения операций — в нашем случае вначале будет вычислено выражение в скобках (Y*Z), а затем уже X будет поделено на это выражение:
Но вернемся к ситуации с синтаксическими ошибками, которые система Maple 7 распознает с помощью встроенного в нее синтаксического анализатора. Например, если вы задали неправильное имя функции, то это будет опознано синтаксическим анализатором и вычисления не будут выполняться. Maple 7 просто повторит выражение в строке вывода:
В этом примере вместо имени функции sin введено ошибочное имя son. Maple воспринимает его как некую введенную пользователем функциональную зависимость и потому просто повторяет запись и не выводит сообщение об ошибке. А вот другая ситуация — имя функции sin введено верно, но вместо десятичной точки при задании вещественного числа 1.0 использована запятая:
В данном случае Maple 7 «знает», что работа идет с его встроенной функцией синуса, которая должна иметь единственный аргумент. Задание (1,0) означает, что растяпа-пользователь ввел вместо вещественного числа два целочисленных числа, разделенных запятой. Этого синтаксический анализатор Maple 7 стерпеть уже не смог, и он отреагировал выдачей сообщения об ошибке (на экране дисплея оно имеет малиновый цвет). Исправьте ошибку, и синус единицы будет благополучно вычислен:
А вот еще одна типичная ситуация — в последовательности выражений опущен знак-разделитель (двоеточие или точка с запятой):
Тут Maple 7 не только реагирует на ошибку, но и пытается подсказать, что именно пропущено. Более того, маркер ввода в виде мигающей вертикальной черточки будет помещен на место ошибки и вы сможете тут же устранить ошибку. Правда, подсказки не всегда точны — в нашем случае явно пропущен разделитель в виде двоеточия, a Maple 7 сообщает о пропуске точки с запятой. Впрочем, откуда системе знать, хотим мы вывести результат операции Y:=4 сразу (для этого нужен разделитель в виде точки с запятой) или откладываем на потом (с помощью символа двоеточия).
Вот еще один пример характерной ошибки — три знака * подряд:
Здесь Maple 7 подсказывает, что один оператор * надо убрать — два знака * подряд означают вполне законный вариант оператора — возведение в степень. При этом маркер ввода вновь указывает место ошибки. Проанализируйте следующие простые примеры:
В этом примере Maple 7 вначале вычисляет функцию синуса, затем производит возведение в степень и лишь потом операцию умножения. Впрочем, такой приоритет операций принят практически во всех системах компьютерной математики и в языках программирования.
Некоторые пользователи версии системы Maple V R5 наблюдали, что русская буква «я» в конце программного комментария (он вводится после символа #) вела к зависанию программы, что требовало ее перезагрузки. В Maple 7 этот недостаток устранен:
> #Буква "я" в конце комментария уже не вызывает зависания
>
Позже, при описании программирования в Maple 7, мы опишем более развитые средства контроля над допускаемыми пользователем ошибками. Пока же ограничимся приведенными 'Выше сведениями, полезными уже в начале диалога с системой.
Для управления состоянием ячеек можно использовать контекстное меню, появляющееся при нажатии правой кнопки мыши. Если установить указатель мыши на входной ячейке, то это меню будет содержать три команды:
Также в зависимости от состояния буфера обмена и наличия выделения в контекстном меню могут присутствовать команды Cut, Copy и Paste.
Левая кнопка мыши может использоваться для передачи фокуса управления или переноса маркера ввода, а также выделения частей документа.
На рис. 1.12 показано, как задается функция пользователя f(x) с одним параметром х. Нетрудно заметить, что параметр указывается в скобках после имени функции а для записи выражения функции используется знак присваивания := (двоеточие со знаком равенства). Для построения графика функции f (х) используется функция plot в форме:
Нетрудно заметить, что при наличии нескольких параметров функции (в нашем случае их два) они разделяются запятыми. Выражение х=-15. .15 задает, во-первых, указание, относительно какой переменной строится график, а во-вторых, говорит, в какой области значений меняются значения этой переменной — в нашем случае от -15 до +15. Шаг изменения переменной выбирается автоматически в зависимости от размеров и вида графика.
Столь же просто, как и график обычной функции в декартовой системе координат, можно построить график трехмерной поверхности. Это показано на примере рис. 1.13. В данном случае задана функция двух переменных z(x,y) :=sin(x*y) и ее график строится с использованием графической функции plot3d. Правила задания пределов изменения переменных х и у соответствуют описанным выше.
Рис. 1.13. Построение графика трехмерной поверхности
Возможно, многих читателей вполне удовлетворят уже описанные возможности, но сила системы Maple 7 прежде всего в возможности выполнения аналитических (символьных) вычислений. Поэтому мы перейдем к обсуждению некоторых из них.
Форматы математических выражений
Приведенные выше примеры реализуют обычную форму представления документа. В нем имеются текстовые комментарии (для их ввода надо нажать клавишу F5), сформулированные на Maple-языке задания на вычисления, результаты вычислений в виде обычных математических формул и, там где это указано, графики.
Эта выстраданная форма представления документов является компромиссом между наглядностью и простотой ввода исходных данных. Может показаться, что в этом отношении намного дальше продвинулись системы класса Mathcad — у них исходные данные и описание алгоритмов вычислений давно задаются в виде естественных математических символов и формул. За исключением, правда, функций символьных вычислений, пока не имеющих общепринятых специальных математических символов и вводимых путем указания их имен.
Однако это достоинство кажется явным лишь на первый взгляд. Ввод сложных формул довольно трудоемок и требует специфических навыков, отсутствующих даже у самых опытных пользователей. В Mathcad эту проблему решили созданием панелей (палитр) с полным набором всех математических символов и шаблонов для представления сложных формул, таких как интегралы, суммы и произведения рядов, производные и т. д. Однако, хотя при этом их ввод и становится более простым, легким его не назовешь, а монотонность операций нервирует многих пользователей.
В Maple 7 ввод исходных данных производится привычными для языков программирования средствами — с помощью функций и операторов, задаваемых в командной строке. Зато результаты вычислений получаются по умолчанию в виде обычных формул (хотя есть возможность их представления в другом виде, например принятом в редакторе LaTeX или языках программирования Fortran и С). Тем не менее вид документа с таким специфическим заданием формул может озадачить математика и любого пользователя, не слишком знакомого с основами программирования. В целом он отрицательно сказывается на восприятии документов.
Для устранения подобного недостатка (а скорее, противоречия) Maple 7 предлагает ряд средств. Во-первых, это текстовые комментарии, в которые можно вводить формулы. Во-вторых, это инертные функции, которые не вычисляются, но дают вывод на экран в естественной математической форме (рис. 1.14). И в-третьих, это возможность быстрого преобразования строковых выражений ввода в естественные математические формулы.
Об инертных функциях мы поговорим позже более подробно. Отметим лишь, что имена таких функций начинаются с большой буквы и функции выводят математическое выражение в естественной математической нотации. С помощью ряда функций, например evalf, можно вычислить математическое выражение, полученное инертной функцией. На рис. 1.14 внизу дан пример такого вычисления для предела функции sin(x)/x.
Рис. 1.14. Примеры применения инертных функций
Теперь остановимся на преобразовании исполняемых выражений ввода на Maple-языке в обычные математические формулы. Для этого достаточно, выделив входное выражение, нажать первую кнопку контекстной панели — соответствующее выражение тут же приобретет вид обычной математической формулы. На рис, 1.15 показаны примеры вычислений интеграла при его задании в строках ввода в виде текстового выражения и в обычной математической нотации.
Таким образом, всегда можно получить формульное представление входных выражений. Более того, другой кнопкой их можно превратить в инертную форму, тогда выражение перестает вычисляться и становится, по существу, обычным комментарием.
Следует, однако, учитывать, что представление входных выражений в виде формул обычно занимает заметно больше места на экране и в документе, чем описание выражения на Maple-языке, поэтому оно используется довольно редко. Кроме того, далеко не всякое входное выражение может быть представлено в виде математической формулы — многие функции ядра и библиотек Maple 7попросту не имеют общепринятых обозначений в виде специальных математических знаков.
Рис. 1.15. Примеры вычислений интеграла при его задании в текстовой и математической нотации
Простой пример символьных вычислений
Maple 7 открывает обширные возможности выполнения символьных (аналитических) вычислений. Начнем с простого примера — требуется найти сопротивление трех параллельно включенных резисторов R1, R2 и R3 произвольной величины. Из курса электротехники известно, что можно задать следующее равенство, определяющее суммарное сопротивление R0:
Теперь достаточно использовать функцию решения уравнений solve, чтобы найти значение R0 в общей аналитической форме:
Нетрудно проверить, что результат может быть получен и в численном виде для конкретных значений R1, R2 и R3: > Rl:=a.:R2:-2:R3:=3:RO:
На рис. 1.16 показано несколько примеров выполнения символьных вычислений математического характера: преобразование тригонометрического выражения с помощью функции упрощения simplify, вычисление суммы ряда функцией sum и вычисление неопределенного интеграла функцией int.
Рис. 1.16. Примеры символьных вычислений
Обратите внимание на результат выполнения последнего примера. Он выделен. Выделение можно осуществить протаскиванием указателя мыши с нажатой левой кнопкой.
Вычисления производных и интегралов в .символьном виде, пожалуй, являются наиболее характерными областями применения систем символьной математики. На рис. 1.17 показаны примеры таких вычислений с применением функции dif для вычисления производной и int для вычисления определенных интегралов.
Рис. 1.17. Примеры вычисления производной и интегралов
Обратите внимание на функцию Int — инертную форму функции int. Как уже отмечалось, инертная форма служит для вывода записи интеграла в естественной математической форме, но с отложенным «на потом» выводом результата вычислений. Как отмечалось, это один из путей наглядного представления входных выражений. Все инертные функции имеют имена, начинающиеся с большой буквы, тогда как обычные функции имеют имена, начинающиеся с маленькой буквы.
На другом рисунке (рис. 1.18) показано вычисление интеграла, который не имеет представления через функции системы Maple 7, но может быть вычислен ею в численном виде.
Рис. 1.18. Численное вычисление значения интеграла, не имеющего аналитического представления
Одной из проблем систем компьютерной алгебры является «разбухание» результатов — как оконечных, так и промежуточных. Связано это с тем, что аналитическое представление порою может оказаться весьма громоздким даже для простых задач — пожалуй, это главная причина прохладного отношения к аналитическим вычислениям со стороны инженеров, особенно практиков. К примеру, численное решение кубического уравнения не вызовет трудностей даже на калькуляторе [1], тогда как системы символьной математики выдают его в виде формул, едва помещающихся на экране. Это и иллюстрирует рис. 1.19, на котором показано решение квадратного уравнения (его знает каждый мало-мальски преуспевающий в учебе школьник) и решение кубического уравнения (оно вызывает бурный восторг или легкий шок — в зависимости от отношения учащегося к математике).
Щепетильность системы в ее стремлении выдать полный и математически предельно точный результат, безусловно, очень важна для математиков. Но для многих прикладных задач, с которыми имеют дело инженеры и техники, она оборачивается неудобствами. Инженеры часто прекрасно знают, какие из членов математических формул можно преспокойно отбросить, тогда как для математика-теоретика или аналитика такое действо — типичное кощунство. Порою системы компьютерной алгебры выдают настолько «заумный» и огромный результат, что его упрощение может занять куда больше времени, чем получение более простого результата с заранее выполненными упрощениями. Впрочем, каждому свое! И Maple имеет множество функций, обеспечивающих преобразование результатов в ту или иную форму.
Рис. 1.19. Решение квадратного и кубического уравнений в символьной форме
Приведем еще один характерный пример — решение системы линейных уравнений с помощью функции solve (рис. 1.20). Обратите внимание на форму задания уравнений и выдачи результатов и поразительную естественность решения задачи. Значение переменной z на рис. 1.20 выделено, где видно, что Maple отображает его поле под панелью инструментов.
Слова solve, diff и int с их аргументами являются именами встроенных в систему функций, возвращающих символьные значения результатов. Нормальному пользователю может стать дурно, если вспомнить, что таких функций с их вариантами система Maple 7 имеет около трех тысяч! Да к тому же многие функции (та же solve для решения уравнений) подчас могут применяться во многих случаях и имеют массу параметров и директив для уточнения направлений решения и расширения областей применения.
Рис. 1.20. Решение системы из пяти линейных уравнений
В утешение можно отметить три важных обстоятельства:
Необходимые функции и правила их преобразования система черпает в библиотеке размером около 40 Мбайт (она содержит файлы maple.hdb, maple.lib, maple.ind и maple.cmd). Это иногда занимает заметное время, особенно при первом использовании определенной группы операторов (например, тригонометрических). При повторном использовании этой группы система заметно убыстряется, так как использует уже загруженные средства.
Пока что мы при проведении вычислений пользовались лишь простейшими средствами управления системой — вводом выражений и текстовых надписей с клавиатуры. Теперь пора расширить представления о работе с Maple. Прежде чем начать работать с ее меню, надо отметить, что для многих (особенно начинающих) пользователей оказывается удобнее использовать кнопки, расположенные на панелях инструментов, которые находятся прямо под строкой меню.
На рис. 1.21 показано назначение кнопок панели инструментов (Tool Bar). Эти кнопки дублируют наиболее важные операции главного меню и имеют наглядные и типовые для Windows-приложений обозначения. Назначение кнопок и других деталей интерфейса также показаны на рис. 1.21.
Рис. 1.21. Панель инструментов
При необходимости панели инструментов можно убрать с помощью команд меню View (см. рис. 1.11). Если графика выводится в отдельное окно, там имеется своя панель инструментов, которая будет описана ниже.
Другое полезное средство для облегчения работы по форматированию текстов, заданию параметров входных математических выражений и графиков — контекстная панель инструментов. Как следует из названия, контекстная панель Context Bar является контекстно-зависимой — ее содержание зависит от текущего положения маркера ввода или выделения.
Контекстная панель содержит следующие элементы при вводе текста комментария (рис. 1.22):
Рис. 1.22. Контекстная панель инструментов для текста комментария
На рис. 1.15 была показана контекстная панель в случае, когда маркер ввода находится в строке ввода. Там же поясняется назначение кнопок панели для данного случая. Особо остановимся на кнопке со значком (V), которая обеспечивает проверку синтаксиса вводимого выражения до того, как оно завершено символами двоеточия или точки с запятой.
Поясним на примере. Допустим, мы ввели ошибочное выражение для интеграла, забыв указать показатель степени в подынтегральном выражении x^n:
> int(x^,x)
Если нажать кнопку автокоррекции, оно примет вид:
> int(x^ %? ,х)
Maple явно указывает на необходимость ввода показателя степени — в нашем случае переменной n.
А вот другой пример — мы забыли ввести закрывающую скобку в выражение:
> int(x*n ,x
Если теперь нажать кнопку автокоррекции, то вставка скобки произойдет автоматически:
> int(x^n ,x)
Таким образом, данная кнопка может быть полезна для оперативного контроля синтаксиса и исправления грубых ошибок при вводе выражений в формате Maple Input. Однако необходимо делать это до их исполнения.
Заметим, что пока формула является входным выражением в математической форме, она может редактироваться — но не сама по себе, а в виде текстового выражения, отображающегося в поле редактирования на контекстной панели. При этом изменение записи выражения в поле редактирования немедленно влечет соответствующее изменение вводимой формулы. Это тоже довольно удобное средство, имеющее свои преимущества перед прямым редактированием формулы — в MathCAD, например, прямое редактирование формул требует определенных навыков и усваивается довольно туго.
Рис. 1.23. Контекстная панель инструментов для выражений, представленных в математической нотации
Рисунок 1.23 показывает назначение кнопок контекстной панели при установке маркера ввода в строку, содержащую входное выражение в математической нотации. Нетрудно заметить, что в этом случае контекстная панель несколько изменяется — в частности, в ней появляется поле ввода, в котором выведено выделенное выражение на Maple-языке. Такой же вид контекстной панели будет, если выделено выражение или его часть в строке вывода.
Двумерные графики строятся с заданием ряда параметров, определяющих общий стиль графика. Эти параметры задают цвет и стиль линий графика, вывод координатных осей и т. д. Все параметры имеют значение по умолчанию — они и определяют вид графика, при формировании которого параметры не указаны.
Однако ряд параметров можно изменять, щелкая на соответствующих кнопках контекстной панели. На рис. 1.24 показано назначение кнопок контекстной панели инструментов для редактирования параметров двумерных графиков. Такая панель появляется, если двумерный график выделен или на нем находится маркер ввода.
Рис. 1.24. Контекстная панель инструментов для двумерного графика
Действие большинства кнопок этой формы контекстной панели достаточно очевидно, и вы легко сможете опробовать эти кнопки в работе. Так, график на рис. 1.18 построен точками при нажатии кнопки, задающей стиль Point style. Кроме того, в функции plot построения графика явно использована опция co1or=blue, которая задает синий цвет точек графика.
Полезно отметить, что в левой части контекстной панели есть поле с координатами текущей выделенной точки графика. Чтобы выделить точку, надо подвести к ней указатель мыши и щелкнуть левой ее кнопкой.
При построении контурных графиков и графиков плотности имеется возможность заливки их областей между линиями уровня с выводом линии сетки, на которой рассчитываются линии уровня, и без вывода линий сетки.
Свой вид контекстной панели имеют и трехмерные графики. Назначение ее элементов представлено на рис.-1.25.
Рис. 1.25. Контекстная панель инструментов для трехмерных графиков
С помощью контекстной панели трехмерных графиков можно задать 7 стилей построения трехмерных графиков и 4 стиля вывода координатных осей. Возможны следующие стили трехмерных графиков (группа из семи кнопок в середине панели): функциональная окраска с видимыми линиями каркаса, функциональная окраска без линий каркаса, функциональная окраска с контурными линиями, цветной каркас с видимыми линиями, цветные контурные линии, цветной каркас со всеми (в том числе невидимыми) линиями и поверхность, построенная точками.
Два расположенных слева счетчика позволяют задавать нужный угол обзора, причем Maple сразу же отражает заданный поворот построенной фигуры. Ее также можно вращать мышью, поместив указатель в область графика и держа нажатой левую кнопку. При этом счетчики будут отображать изменяющиеся при перемещении мыши углы обзора. Это очень удобное средство для наблюдения за деталями трехмерных поверхностей и фигур, которые строит функция plot3d.
При работе с Maple полезно следить за информацией в строке состояния системы, расположенной внизу экрана. В ней появляются надписи, поясняющие исполняемые операции. Кроме того, в полях на правой части выводится текущее время, объем используемой оперативной памяти и объем доступной памяти на жестком диске, на котором установлена система.
Хотя панели инструментов и строка состояния удобны для быстрого управления системой, они обладают одним существенным недостатком — занимают часть полезной площади экрана. Однако в меню View имеются команды, позволяющие убрать с экрана любые из этих элементов. Действие этих команд вы можете заметить, если внимательно присмотритесь к предыдущим рисункам.
Для открытия меню можно использовать одновременное нажатие клавиши Alt и клавиши, которая подчеркнута в названии меню. Вызов команды при одновременном нажатии нескольких клавиш получило название «горячих» клавиш управления (Hot Keys).
Таблица 1.1. Горячие клавиши для открытия меню
Edit |
Alt+E |
File |
Alt+F |
Format |
Alt+R |
Help |
Alt+H |
Insert |
-> Alt+I |
Options |
Alt+0 |
View |
Alt+V |
Spreadsheet |
Alt+S |
Window |
Alt+W |
«Горячие» клавиши присвоены и многим другим, наиболее распространенным операциям. Они облегчают и ускоряют (наряду с кнопками панелей инструментов) быстрое управление программой. Ниже в таблицах приведен список наиболее используемых «горячих» клавиш, разбитых на ряд категорий.
Таблица 1.2. Горячие клавиши для задания начертания символов и режимов ввода текста
Полужирное начертание |
Ctrl+B |
Курсивное начертание |
Ctrl+I |
Подчеркнутое начертание |
Ctrl+U |
Включение/выключение ввода текста |
F5 |
Установка режима ввода (Input Mode) |
Ctrt+M |
Задание режима ввода текста (Text Input Mode) |
Ctrl+T |
Таблица 1.3. Горячие клавиши для операций выделения
Выделение символа слева |
Shift*- |
Выделение символа справа |
Shift*» |
Выделение строки вверх |
Shift+- |
Выделение строки вниз |
Shift+? |
Выделение от маркера ввода до начала строки |
Shift+Home |
Выделение от маркера ввода до конца строки |
Shift+End |
Выделение от маркера ввода и до начала документа |
Shift+PgUp |
Выделение от маркера ввода и до конца документа |
Shift+PgDn |
Таблица 1.4. Горячие клавиши операций удаления, копирования и вставки
Выделить все |
Ctrl+A |
Копирование выделения в буфер |
Ctrl+C |
Перенос выделения из документа в буфер |
Ctrl+X |
Вставка содержимого буфера в документ |
Ctrl+V |
Удаление строки ввода (параграфа) |
Ctrl+Delete |
Закрытие выделенной секции |
Ctrl*. |
Поиск |
Ctrl+F |
Вставка параграфа после маркера |
Shift+Ctrl+J |
Вставка параграфа до маркера |
Shift+Ctrl+K |
Восстановление закрытых секций |
Ctrl+, |
Вставка исполняемой группы после маркера |
Ctrl+0 |
Вставка исполняемой группы до маркера |
Ctrl+K |
Вставка конца страницы |
Ctrl+Enter |
Вставка выражения в стандартной математической форме |
Ctrl+R |
Вставка выражения в форме Standart Math Input |
Ctrl+G |
Таблица 1.5. Горячие клавиши переходов по документу
Переход к началу строки |
Ноте |
Переход в конец документа |
Ctrl+End |
Переход к концу строки |
End |
Переход в начало документа |
Ctrl+Home |
Создание новой строки |
Shift+Enter |
Переход к следующей строке ввода |
Tab |
Переход к предыдущей строке ввода |
Shift+Tab |
Переход к справке по контексту |
CtrU-Fl или-Fl |
Переход на предшествующий уровень вложенности секций |
Ctrl+UpArrow |
Таблица 1.6. Горячие клавиши команд для работы с файлами
Создание нового документа |
Ctrl+N |
Открытие документа |
Ctrl+0 |
Сохранение документа |
Ctrl+S |
Печать документа |
Ctrl+P |
Закрытие активного окна (документа) |
Ctrl+F4 |
Завершение работы с Maple |
Alt+F4 |
Таблица 1.7. Горячие клавиши команд просмотра документа
Перерисовка экрана (Redraw Screen) |
Ctrl+L |
Просмотр групп ячеек (Show Group Ranges) |
F9 |
Показ секций (Show Section Ranges) |
Shift+F9 |
Разделение строки на две части "(Split Group) |
F3 |
Объединение смежных строк (Join Group) |
F4 |
Разделение секции на две части (Split Section) |
Shift F3 |
Объединение смежных секций (Join Section) |
Shift F4 |
Отмена предшествующей операции (Undo) |
Ctrl+Z |
Таблица 1.8. Горячие клавиши установки масштаба (Zoom Factor)
50% |
Ctrl+1 |
100% |
Ctrl+2 |
150% |
Ctrl+3 |
200% |
Ctrl+4 |
300% |
Ctrl+5 |
400% |
Ctrl+6 |
Разумеется, можно успешно работать с системой, вообще ничего не зная про «горячие» клавиши. Многие так и делают! Однако быстрая и профессиональная работа в Maple 7 невозможна без использования этих клавиш, поскольку они существенно экономят время пользователя.
При работе с русифицированной версией Windows латинские буквы в обозначениях «горячих» клавиш нередко заменяются русскими буквами, не несущими никакой смысловой связи с выполняемой операцией. В этом случае полезно знать, что соответствующая латинская буква (или иной знак) и указанная в меню русская находятся на одной клавише (например, комбинация клавиш для сохранения документа (Ctrl+S) может быть показана как Ctrl+ы).
В меню Help системы Maple 7 сосредоточены средства доступа к справке по всем функциям системы. Детально работу со справочной базой данных Maple 7 мы рассмотрим в следующей главе. Здесь лишь отметим, что справку по любой функции можно получить, просто установив на ее имени маркер ввода и нажав клавишу F1. На рис. 1.26 показано окно с началом справки по функции cos(x).
Рис. 1.26. Пример справки по функции косинуса
Как видно из рис. 1.26, окно справки содержит пятиступенчатый контекстный указатель, позволяющий последовательно отыскивать нужный раздел справки. Когда справка запрашивается по конкретной теме (функции), то сразу появляется посвященный ей раздел, точнее начало этого раздела.
Примеры из справочной системы можно модифицировать, для этого их нужно скопировать в буфер и перенести в окно документа Maple 7 (см. следующую главу). Также в Maple 7 есть специальный раздел справки, дающий доступ к примерам и без их копирования. Для осуществления такого доступа в окне справки достаточно выбрать тему ExampleWorksheets в первом же разделе контекстного указателя. Откроется окно (теперь уже документа) с индексным каталогом примеров (рис. 1.27).
Каталог примеров дает доступ к огромному числу примеров применения Maple 7. Просмотр одного из них (вычисление эллиптических интегралов) показан на рис. 1.27 справа. Рисунок 1.27 иллюстрирует также технику работы с двумя окнами документов.
Рис. 1.27. Работа с каталогом примеров
В этой книге использованы некоторые наиболее интересные примеры из справочной базы данных системы Maple 7. Однако большинство примеров книги не повторяет помещенные в справку Maple, носит оригинальный характер и отражает результаты исследования возможностей системы Maple 7 автора. В связи с этим читателю рекомендуется просмотреть не только примеры в данной книге, но и примеры, представленные в справочной системе по интересующим читателя функциям.
В этом уроке мы научились:
Справочной системе Maple 7 принадлежит исключительная роль — только в ней можно найти полную информацию обо всех почти трех тысячах функций Maple 7. Использование англоязычной справочной системы может быть полезно и для тех, кто и «двух слов по-английски связать не может», поскольку в ней приведен синтаксис функций и операторов, а также многочисленные примеры их применения — по самым скромным подсчетам их свыше десяти тысяч. К сожалению, справочная система Maple 7 очень громоздка. Но это нельзя считать недостатком справочной системы, поскольку просто велик объем входящего в нее материала. В справочной системе имеются все присущие современным базам данных возможности для быстрого поиска нужной информации и даже для ее структурирования и пополнения.
Основные команды по работе со справочной системой Maple 7 сосредоточены в меню Help, показанном на рис. 2.1.
Рис. 2.1. Меню Help справочной системы Maple 7
Оно содержит команды, объединенные в несколько групп. В первую группу входят следующие команды:
Второй раздел меню содержит команды:
В третьем разделе имеются две команды для работы с базой данных:
Остальные разделы представлены следующими командами:
Рассмотрим детально работу справочной системы Maple 7. Следует отметить, что ценность справочной системы для наших читателей намного снижается из-за того, что она написана на английском языке. Учитывая громоздкость справочной системы и необходимость в наличии компьютера для ее использования, для знакомства с системой Maple 7 более подходят обычные книги, тогда как справочную систему следует применять при необходимости ознакомиться с тонкими деталями применения тех или иных операторов, функций и иных средств Maple 7.
Команда Introduction в меню справки запускает справочную систему на странице введения (рис. 2.2).
В введении определено назначение Maple 7 как системы компьютерной алгебры и дается ссылка на сайт фирмы — разработчика системы (www.maplesoft.com). Щелкнув на гиперссылке, вы перейдете на начальную страницу web-сервера фирмы. На странице введения имеются также гиперссылки на обучающий курс (New User's Tour), на страницы с обзором новых возможностей Maple 7 и справки по различным элементам интерфейса.
Рис. 2.2. Окно справочной системы с введением
Обратите внимание на оригинальный подход к представлению пути нужной справки. Для его определения служат 5 окон-списков. На рис. 2.2 используется только одно окно, а остальные 4 пока пусты. Выбирая последовательно по элементу из каждого списка, вы сможете достигнуть требуемой справочной информации. Подробнее навигация по справочной системе будет описана позже.
Оперативная справка по контексту — сравнительно новая возможность справочных систем. Она особенно удобна при разборе примеров, содержащих незнакомые пользователю функции и иные объекты системы Maple. Полезна она и в том случае, когда пользователь знаком с применяемым объектом, но хотел бы уточнить его свойства и синтаксис.
Для получения оперативной справки по контексту достаточно установить курсор на соответствующий объект, например на имя какой-либо функции, и открыть меню Help. В нем можно обнаружить, что операция Help on Context модифицируется и приобретает вид Help on "...", где на месте многоточия стоит слово, на котором остановился курсор. На рис. 2.1 таким словом является имя функции, вычисляющей синус, — sin.
Допустим, что в тексте документа в строке ввода есть функция sin(x). Если теперь выполнить команду Help on "..." — тут же появится окно со справкой о функции синуса. Существуют и горячие клавиши для этой команды — Ctrl+Fl (или просто F1). Пример справки по функции sin представлен на рис. 2.3.
Рис. 2.3. Пример справки по функции sin
Как видно из рис. 2.3, справка по контексту позволяет судить о назначении функции, синтаксических правилах ее задания и примерах применения. Реализована она по единым правилам справочной системы и содержит открываемые разделы и гипертекстовые ссылки.
В этом примере уже хорошо видна техника использования окон в верхней части справки для уточнения необходимого раздела. Так, обнаруженная функция cos (кстати не sin, это любопытное свойство справки Maple — наличие «союзных» разделов) находится уже в четвертном окне. Последовательность доступа к ней следующая: Mathematics-Basic Mathematics-Exponential, Trig and Hyperbolic-cos. Очевидно, что функция cos найдена потому, что она выступает в паре с функцией sin, — на странице справки приведены примеры и к той, и к другой функции. Учитывая огромное число функций системы Maple 7 и соответственно разделов справки, подобный способ поиска информации представляется очень удобным. Он, кстати, стал использоваться и в Mathematica 3/4 — ближайшем конкуренте Maple.
Команда New User's Tour открывает окно курса по обучению основам пользования Maple, показанное на рис. 2.4.
Рис. 2.4. Окно курса обучения основам Maple
В конце страницы (рис. 2.4) имеется гиперссылка Click here to begin the New User's Tour. Она открывает окно обучающего курса по Maple с перечнем ее разделов, представленное на рис. 2.5. Наименования разделов являются гиперссылками. Как видно из рис. 2.5, обучающий курс имеет следующие разделы:
Активизация любой из этих гиперссылок приводит к выводу соответствующего раздела обучающего курса. На рис. 2.6 представлено начало раздела 3, посвященного численным вычислениям.
Рис. 2.5. Окно с перечнем разделов обучающего курса
Рис.2.6. Начало раздела обучающего курса по численным вычислениям
Основные достоинства обучающего курса в том, что он (в отличие от справочной базы данных) дает обычное описание работы с системой Maple 7 с «живыми» примерами, которые не надо копировать в документы. Фактически обучающая система является просто набором документов системы. Вначале примеры даны без ячеек вывода, которые появляются после исполнения команды Edit> Execute> Worksheet. Это иллюстрирует рис. 2.7.
Рис. 2.7. Начало раздела обучающей системы по численным вычислениям после исполнения команды Edit> Execute > Worksheet
Пользователь может модифицировать любой пример и немедленно получить новые результаты (попробуйте, например, заменить вычисление 200! на 100! или 500!). К сожалению, написан обучающий курс на английском языке и в отличие от обычной книги для работы с ним нужен компьютер.
Пользователи, знакомые с предшествующими версиями системы Maple, обычно хотят узнать, что нового введено в последней версии. Однако, как у нас говорят, «лучшее — враг хорошего» — при большом числе новых возможностей (и особенно при модификации старых возможностей) появляется несовместимость между документами для старых и новых версий системы. Несмотря на меры, предпринятые по предотвращению такой несовместимости, ее проявление вполне возможно, в частности документы, созданные в Maple 7, уже нельзя использовать в предшествующих версиях из-за различий в их внутренних форматах.
Выполнение команды What's New открывает окно с описанием новых возможностей Maple 7. Оно показано на рис. 2.8.
Рис. 2.8. Окно справки с описанием новых возможностей системы Maple 7
С помощью гиперссылок на этой странице можно получить достаточно подробное описание всех появившихся в Maple 7 возможностей. Мы уже отмечали их в уроке 1.
Справочная система Maple 7, по существу, является мощной базой данных с обширными возможностями поиска нужной информации и многочисленными примерами применения Maple 7. Работа с такой системой может вызвать затруднения у начинающих пользователей, поэтому в состав справочной системы включено описание правил ее использования. При исполнении команды Using Help появляется страница с перечнем разделов описания справочной системы (рис. 2.9).
Рис. 2.9. Окно с перечнем разделов описания справочной системы
Мы не будем подробно описывать содержание страницы и гиперссылок, поскольку весь материал данного урока и является, по существу, таким описанием.
Команда Topic Search (предметный поиск) — одна из самых мощных функций справки. Она выводит окно поиска (рис. 2.10), содержащее в верхней части поле для ввода образца. Образцом может быть слово (например, имя функции) или даже часть слова. В окне под этим полем появляется список всех объектов Maple 7, в индекс которых входит заданный образец (рис. 2.10).
Теперь остается из заданного списка слов выбрать нужное, что приведет к появлению окна справки с информацией по данному слову. Иногда индекс по данному слову будет иметь несколько ссылок, на появившейся странице вам придется уточнить, справку по какому объекту вы хотите получить. Окно предметного поиска в правой части имеет четыре кнопки со следующим назначением:
Кроме того, имеется возможность задания двух параметров:
Заметим, что если установлен флажок Auto-Search, то кнопка Search становится недоступна, поскольку отпадает необходимость в ней.
Предметный поиск с полным обзором текста справки (Full Text Search) — еще один эффективный метод получения справочной информации. Он напоминает ранее рассмотренный, но вхождение заданного образца ищется во всем тексте справочной системы, а не только по индексу, составленному создателями Maple. При этом выводится окно, подобное показанному на рис. 2.11. Обратите внимание на то, что в большом Поле этого окна указано существенно больше разделов справки, чем при поиске по индексу — очевидно, что большинство из них будет случайным упоминанием данного образца.
Рис. 2.10. Окно предметного поиска
Рис. 2.11. Окно предметного поиска с полным обзором текста справки
В этом окне используются те же кнопки управления, что и для окна поиска справки по образцу. Флажок Goodness of Match включает вывод статистики повторяемости образца в текстах разделов справочной системы.
Было замечено, что пользователь, занятый решением определенного класса задач, обычно неоднократно возвращается к ранее просмотренным разделам справочной системы. Чтобы не искать их всякий раз заново, справочная система хранит список разделов, просмотренных в данном сеансе работы. Он выводится операцией History (рис. 2.12).
Достаточно найти в этом окне нужный раздел справки и нажать кнопку ОК, чтобы вывести его на экран. Кнопка Apply позволяет просматривать каждый новый раздел в своем окне.
Рис. 2.12. Список ранее просмотренных разделов справки
В справочной базе данных предусмотрена возможность ее расширения путем записи текущего документа, составленного пользователем, в указанный раздел. При выполнении операции Save to Database выводится специальное окно, в котором надо указать соответствующие данные о модернизируемом разделе справки. Вид окна представлен на рис. 2.13.
Ограничимся этим указанием, учитывая, что для нашего пользователя модернизация англоязычной справочной базы данных явно отдает экзотикой.
Для удаления разделов базы данных служит команда Remove Topic. Она выводит окно, показанное на рис. 2.14.
Обратите внимание, что модернизации в обоих случаях подвергается один и тот же файл базы данных maple.hdb.
Рис. 2.13. Окно дополнения базы данных
Рис. 2.14. Окно удаления разделов справочной базы данных
На первом этапе знакомства с пользовательским интерфейсом системы Maple 7 удобно использовать всплывающие подсказки. Они вводятся при установке флажка Balloon Help. Для получения подсказки по какому-либо объекту достаточно задержать на пару секунд указатель мыши на этом объекте. Пример вывода всплывающей подсказки показан на рис. 2.1 — она указывает на назначение команды меню Help — Help on "sin".
Команда Register Maple 7 меню справочной системы открывает окно регистрации системы Maple 7. Это окно позволяет вызвать браузер Интернета, с помощью которого выполняется регистрация.
Последняя команда меню Help — About Maple 7 — выводит окно с информацией о версии Maple 7 (рис. 2.15). В этом окне содержатся данные, необходимые для регистрации системы Maple 7 (номера лицензии и самого продукта), а также данные о времени выпуска системы.
Рис. 2.15. Окно с данными о системе Maple 7
Обратите внимание, что данный продукт датирован концом мая 2001 г. Как уже отмечалось в уроке 1, официально он выпущен на рынок 21 июня 2001 г.
В этом уроке мы научились:
Система Maple работает с документами в стиле notebooks («блокноты» или «записные книжки»). Как было показано в уроке 1, документы содержат текстовые и формульные блоки, результаты вычислений, графики разного типа и другие компоненты. Документы могут готовиться с нуля или существовать в готовом виде — подготовленные кем-то ранее. Хранятся документы на внешних устройствах памяти в виде файлов. Файлом называют имеющую имя упорядоченную совокупность данных, размещенную на том или ином носителе — обычно на жестком, гибком или компакт-диске.
В Maple 7 используются файлы различных форматов, который указывается расширением файла (знак * означает произвольное имя файла):
Файлы документов содержат все необходимые данные для правильного отображения содержимого документа в окне редактирования с указаниями координат расположения блоков, фактического содержания и характера выполняемых операций, форматов предоставления информации и т. д. [Таким образом, файл содержит кроме текста, отображаемого на рабочем листе, специальные команды, адресованные Maple, аналогично файлам HTML, имеющим теги, предназначенные для интерпретации браузером.
Предусмотрена возможность записи документов и в особом формате LaTeX, предназначенном для создания книг и статей по математике. Текстовые файлы (с расширением .txt) можно просматривать и редактировать текстовыми редакторами, работающими с ASCII-кодировкой.
Важно отметить, что даже при записи документов со сложными рисунками используется не прямая запись их растровой или векторной копии, а сохранение данных для построения графиков. Поэтому размеры файлов Maple 7 невелики и их легко передавать по современным средствам телекоммуникаций, например по сети Интернет. Они требуют небольшого свободного пространства на дисках для записи. Тем не менее, чем сложнее график, содержащийся в документе, тем больше объем памяти, необходимой для хранения файла. Помимо обычных операций по работе с файлами (запись „а диск и загрузка с диска) предусмотрены возможности распечатки документов принтерами различного типа.
Меню File содержит основные операции для работы с файлами документов (рис, 3.1).
Рис. 3.1. Меню File и пустое окно нового документа
Меню содержит ряд операций, разбитых на группы. В первую группу входят следующие операции по работе с документами (в скобках приведены горячие клавиши):
Вторая группа команд относится к печати документов:
Вторая из этих команд позволяет распечатать весь текст документа с комментариями, математическими формулами, таблицами и графиками. Печать производится принтерами в графическом режиме, поэтому и не очень быстро. Зато печатаются все шрифты и математические спецзнаки. Можно напечатать и отдельные части документа.
После этой группы команд имеется список документов (файлов с расширением .ms), которые были загружены в систему в предшествующие сеансы работы. Выбрав в этом списке название одного из файлов, можно быстро загрузить его, не тратя времени на открытие файла через команду Open. Последняя группа представлена единственной командой:
ПРИМЕЧАНИЕ
Если вы работаете в русифицированной версии Windows, то горячие клавиши могут содержать вместо латинских букв русские эквиваленты. Например, команда New имеет горячие клавиши Ctrl+N, тогда как в меню они могут быть обозначены как Ctrl+T (см. рис. 3.1). На самом деле, как обозначать клавишу: русской буквой или латинской — дело вкуса.
Вернемся к широко используемым операциям первой группы и рассмотрим их более подробно. Заметим, что к некоторым из них можно быстро обратиться с помощью «горячих» клавиш (они указаны в скобках после названия команды). Команда New используется для создания нового документа. Она открывает новое пустое окно редактирования и переводит Maple в режим редактирования (рис. 3.1).
При создании нового документа в его начале появляется ячейка со знаком приглашения >, после которой виден мигающий маркер ввода в виде вертикальной черты |. Ячейка ввода обрамляется открывающей квадратной скобкой. Созданный документ приобретает имя Untitled (N) (в вольном переводе — «Безымянный под номером N», где N — целое число). Следуя приглашению программы, можно приступать к работе в Maple.
Операция New дублируется кнопкой со значком в виде чистого листа, размещенной на панели инструментов. Разумеется, нажать ее вы сможете, только если панель инструментов выведена на экран.
Команда Open служит для открытия созданного ранее документа. Вначале открывается диалоговое окно выбора файла (рис. 3.2). Для быстрого доступа к команде служит значок в виде открывающейся папки на панели инструментов.
Рис. 3.2. Окно открытия документа
В окне Открытие файла вам нужно найти нужный файл, а затем дважды щелкнуть на его имени или на кнопке ОК. Данное окно — пример единых диалоговых окон для всех приложений Windows.
Maple 7 — далеко не первая из версий системы компьютерной алгебры. Каждая очередная версия может иметь модифицированные элементы Maple-языка. Поэтому иногда возникает проблема частичной несовместимости документов, подготовленных в разных версиях системы Maple. Разработчики системы по мере возможностей учли это и предусмотрели автоматическое определение версии Maple, в которой был создан документ. Если выбранный документ был сохранен в старой версии программы, то перед его загрузкой появляется окно, представленное на рис. 3.3.
Рис. 3.3. Окно с предупреждением о загрузке документа другой версии Maple
Нажмите кнопку ОК, и документ будет открыт. Не следует думать, что загруженный документ старой версии Maple непременно будет полностью работоспособен. К сожалению, это не так — некоторые документы требуют коррекции, прежде чем Maple 7 сможет их исполнить.
ПРИМЕЧАНИЕ
Вас не должно удивлять появление в отдельных случаях элементов интерфейса с русскоязычными надписями — например, окно открытия файла (рис. 3.2). Они обусловлены тем, что Maple использует некоторые типовые элементы интерфейса операционной системы Windows. И если последняя русифицирована, то вполне возможно появление элементов интерфейса с русскоязычными надписями.
После загрузки документа его содержимое появляется в новом окне (см., например, рис. 1.16 или 1.17) и можно приступать к работе с ним. Во многих системах открытие нового окна командой New или Орел отменяет все предыдущие действия (значения переменных, функции и т. д.). Но в Maple 7 это не так — поскольку система предполагает совместную работу в нескольких окнах, каждое новое окно будет «знать» о происходившем в других окнах. Если же вы хотите начать с нуля в новом окне — исполните в нем команду restart. Maple 7 позволяет работать и с документами, представленными в HTML формате и имеющими URL-адрес. Для загрузки таких документов служит команда Open URL. Она открывает простое окно с полем для ввода URL-адреса. Работа с ним очевидна.
Команда Save записывает содержимое активного в данный момент окна в виде файла на диск с использованием его текущего имени. Исключением будут документы, созданные командой New и не переименованные, тогда действие команды будет аналогично выполнению команды Save as, обсуждаемой ниже. Следует с осторожностью пользоваться командой Save в том случае, когда вы модернизируете какой-либо документ, но желаете сохранить оригинал в неизмененном виде, ведь содержимое модернизированного файла будет записано «поверх» оригинала. Чтобы этого не произошло, для сохранения файла следует воспользоваться командой Save as, описанной в следующем разделе. При подготовке сложных документов рекомендуется периодически (в некоторых ситуациях довольно часто) давать команду Save, сохраняя сделанные изменения. Это позволяет избежать потери хотя бы части проделанной работы в случае сбоя компьютера. (Не важно, чем будет вызвано выключение или зависание компьютера — халтурной работой электрика или программиста или шалостью вашего ребенка — если вы лишний раз сохраните файл, вам придется меньше сил потратить на его восстановление.) Выполнение команды Save не приводит к выдаче сообщений и окон (кроме уже упомянутого исключения), и поэтому ее не обременительно дать лишний раз, особенно если вы запомните «горячие» клавиши для нее — Ctrl+S.
Команда Save As отличается от предыдущей тем, что перед записью файла на диск в появившемся диалоговом окне вы можете изменить имя файла (рис. 3.4).
Таким образом можно сохранить доработанный документ и в то же время оставить неизменным оригинал.
Рис. 3.4. Диалоговое окно для записи файла с указанием его имени
В списке Папка нужно найти папку, в которую вы хотите поместить файл, а в поле Имя файла вам нужно указать новое имя. Впрочем, не обязательно новое — если вы выберете другую папку, то можете сохранить и ее старым именем — оригинал не пострадает. , Maple позволяет сохранить файл в следующих форматах (список внизу окна):
Формат HTML — новый для Maple формат, позволяющий записывать файлы документов в виде web-страниц. .
Команда Save as особенно полезна при доработке и модификации файлов, например входящих в комплект поставки системы, когда надо сохранить оригинальные файлы в неприкосновенности. Для этого достаточно записать измененные файлы под новыми именами.
Maple 7 имеет возможность экспорта файлов в различные форматы. Команда Export As открывает подменю, содержащее форматы, запись в которых поддерживает Maple После выбора нужного формата в подменю появляется окно, аналогичное окну для сохранения файла.
Maple экспортирует файлы в следующие форматы:
Графики Maple может записывать в следующих форматах: DFX, EPS, GIF, JPEG, POV, WMF и BMP.
Команда Close закрывает окно вместе с текущим документом, и система переходит к работе со следующим окном (либо к пустому серому окну, если был закрыт последний документ).
Если закрываемый документ подвергался модификации, то система спросит, надо ли сохранять изменения (рис. 3.5).
Рис. 3.5. Диалоговое окно, появляющееся при закрытии модифицированного документа
Следует помнить, что каждое окно, будучи сложным графическим объектом, занимает определенный и вовсе не малый объем памяти. Поэтому команда Close является эффективным средством освобождения оперативной памяти, особенно когда закрывается большой документ. Однако надо помнить, что бывшие в нем определения (например, значения переменных, введенные функции пользователя и т. д.) сохраняются в памяти, даже когда документ закрыт, естественно, пока вы не дадите команду restart.
Быстро закрыть документ можно, нажав клавиши Ctrl+F4.
Для записи сделанных настроек Maple в меню File предусмотрены две команды: Save Settings и Auto Save Settings. Последняя команда — это флажок, при установке которого новая настройки Maple будут записываться автоматически при завершении работы.
Команда Exit служит для выхода из Maple. Тогда при использовании операции Exit можно наблюдать последовательное исчезновение окон документов. Если пользователь забыл записать какой-либо документ на диск, система сообщит об этом, выдав запрос. Нужно ответить Yes (Да), если документ нужно сохранить, и No (Нет), если сохранение не требуется. Однако стоит сохранить документы, подвергавшиеся редактированию и модификации, заранее — вдруг вы по ошибке нажмете не ту кнопку.
Не следует применять команду Exit, если вам необходимо временно переключиться в окно другой программы, так как повторная загрузка Maple занимает много времени.
Команда Print служит для печати документа. Она имеет кнопку с изображением принтера на панели инструментов для быстрого доступа.
После того как отдана команда Print, появляется диалоговое окно, показанное на рис. 3.6, — стандартное окно печати в Windows.
Рис. 3.6. Окно печати
Нажатие кнопки Свойства в окне печати открывает окно свойств выбранного принтера. Вид окна зависит от типа принтера, функции его элементов достаточно очевидны, поэтому мы воздержимся от обсуждения работы с ним.
Таким образом, в списке вверху окна печати прежде всего следует установить принтер. Можно просто оставить установленный по умолчанию. В диалоговом окне также можно указать диапазон страниц для печати и число копий, а также установить флажок для разбора страниц по копиям. В целом диалог с компьютером при осуществлении операции печати прост и нагляден.
Даже одна страница документа может не поместиться на экране монитора. Поэтому перед печатью полезно просмотреть расположение элементов документа на странице. Для этого служит команда Print Preview, которая выводит окно' с изображением текущей страницы (рис. 3.7).
Рис. 3.7. Предварительный просмотр страницы, предназначенной для печати
У окна просмотра имеется ряд элементов управления. Прежде всего это полосы прокрутки для перемещения изображения документа в окне просмотра. Кроме того, имеется ряд кнопок, назначение которых указано ниже:
Использование команды Print Preview может сэкономить не один лист читой бумаги и картридж краски.
Печать документов — одна из основных функций любой среды подготовки документов. В общем случае она предполагает установку параметров принтера. Для этого служит команда Printer Setup, приводящая к открытию диалогового окна, показанного на рис. 3.8.
Рис. 3.8. Диалоговое окно настройки параметров принтера
Следует отметить, что вид этого окна будет варьироваться в зависимости от принтера и может существенно отличаться от приведенного на рисунке. Однако большинство параметров, которые требуют пользовательского вмешательства, очевидны.
Как видно из рис. 3.9, меню Edit содержит различные операции редактирования. Они делятся на ряд групп. Первая группа содержит следующие операции:
Рис. 3.9. Меню Edit
Операции первой группы используют буфер обмена (Clipboard). Так называется специально организованная и динамически изменяющаяся область памяти в операционной системе Windows. В нее могут помещаться различные (обычно предварительно выделенные) объекты, документы и даже файлы. Буфер можно использовать для обмена объектами как в пределах текущего документа, так и между различными документами и даже приложениями.
ПРИМЕЧАНИЕ
Очень часто некоторые операции меню Edit будут недоступны — они отображены серым шрифтом это означает, что в данный момент не существует объекта, к которому может быть применена команда. Однако в демо-версии Maple команды копирования и вставки будут недоступны всегда — таково ограничение создателей.
Несколько следующих групп представлены одной операцией:
Последняя команда позволяет менять режим строк ввода — они могут содержать математические выражения или неисполняемые текстовые комментарии. Именно благодаря текстовым комментариям документы Maple 7 приобретают достаточно наглядный вид. Наглядность документов дополнительно повышается благодаря возможности представления результатов вычислений (а иногда и вводимых выражений) в естественной математической форме. Восьмая группа команд открывает подменю, содержащие команды с ячейками и секциями документа:
Команды подменю Split or Join позволяют легко модифицировать вид документов путем разделения и объединения строк и секций.
Команда Undo Delete служит для отмены последней операции редактирования. Она позволяет удалить до 5 последних операций. Если вы случайно удалили нужный текст — вам придет на помощь команда Undo. В меню, а также во всплывающей подсказке указывается название последней операции редактирования — той, которую вы собрались отменить.
Команда Redo позволяет вернуть отмененную операцию, если в этом возникает необходимость. Действие этой команды, естественно, тоже распространяется не более чем на пять операций. Команды Undo и Redo имеют кнопки (с изображением стрелок) на панели инструментов для быстрого доступа к себе.
Команда Cut копирует выделенный объект в буфер обмена и удаляет его из документа. Выделить объект или группу объектов можно, обведя его мышью при нажатой левой кнопке. Можно также использовать клавиши перемещения курсора при нажатой клавише Shift. Выделенный фрагмент отмечается черным фоном и инверсией цвета входящих в него символов (на рис. 3.9 выделена первая строка).
Графические объекты не инвертируют свои цвета при выделении, к тому же их можно вырезать и копировать, когда на них находится маркер ввода. Вырезанный командой Cut объект поступает в буфер обмена, а его изображение в окне редактирования исчезает. Эта команда выполняется также комбинациями клавиш Shift+Del и Ctrl+X (в зависимости от настроек операционной системы). На рис. 3.10 показан результат выполнения команды Cut — видно исчезновение выделенного на предыдущем рисунке фрагмента в документе.
Рис. 3.10. Документ с рис. 3.9 после выполнения команды Cut
Щелчок левой кнопкой мыши за пределами выделенных объектов снимает все выделения.
Команада Сору аналогична Cut, но с одним существенным отличием — выделенный объект (или блок объектов) не удаляется в окне редактирования. Эта команда обычно используется в том случае, когда нужно перенести заданный объект в другое место, сохранив при этом оригинал, — продублировать объект. Особенно полезна операция Сору при составлении документа из частей других документов, в том числе страниц справочной системы Maple (рис. 3.11). Переключаясь между окнами с помощью команд Сору и Paste, описанных ниже, можно с легкостью составить достаточно большой документ, не написав ни строки.
Рис. 3.11. Пример переноса выделенной в одном документе строки в окно другого документа
В данном случае титульная надпись, удаленная командой Cut, перенесена в другой, пустой, документ.
В Maple 7 имеется возможность переноса объектов из одного окна в другое методом перетаскивания (Drag and Drop). Для этого на группу выделенных объектов надо навести указатель мыши и при нажатой левой кнопке начать перенос объектов в новое место или новое окно. Отпустив левую кнопку мыши, можно наблюдать перенос объектов на новое место. Если все время держать нажатой клавишу Ctrl, то переносимый блок объектов будет сохранен и на старом месте.
Команда Copy As Maple Text используется в тех случаях, когда необходимо, чтобы скопированная в буфер информация была представлена в текстовом формате. При этом в буфер копируются выражения как из строк ввода, так и строк вывода — все в текстовом формате. Используя в этом случае команду Paste можно вывести из буфера все выражения как из входных, так и из выходных строк в текстовом формате (рис. 3.12).
Рис. 3.12. Пример использования операций Copy as Maple Text и Paste
Обратите внимание, что графическое представление интеграла в строке вывода превратилось в его отображение в текстовом формате. То же имеет место в отношении представления производных, сумм, произведений и т. д. Обратите также внимание на то, что текстовый комментарий в данном случае выводится стандартным шрифтом. Атрибуты (признаки) стиля, цвета и размера символов теряются.
Команда Paste копирует содержимое буфера обмена, помещенное туда командами Сору или Cut, в место, указанное маркером ввода. При этом сохраняются форматы всех объектов документа, если они были скопированы (рис. 3.13).
Как видно из рис. 3.13, возможно применение этой операции не только в пределах окна одного документа, но и при переносе данных из одного окна в другое.
Надо отметить, что при копировании в буфер обмена математической формулы из ячейки вывода и вставке ее в строку ввода формат формулы меняется — она автоматически превращается в текстовое выражение. Это иллюстрирует рис. 3.14.
Рис. 3.13. Пример использования операций Сору и Paste
Рис. 3.14. Пример копирования формулы из ячейки вывода одного документа в ячейку ввода другого документа
Различные варианты преобразования форматов при использовании операций копирования и вставки надо учитывать при подготовке сложных документов.
Операция Paste As Maple Text служит для вставки данных из буфера обмена с одновременным их преобразованием в текстовый формат.
Если данные в буфер обмена поступили в результате выполнения операции Сору as Maple Text, то при операции Paste Maple Text в документ будут скопированы только данные из строк ввода в формате Maple-текста. Это показано на рис. 3.15.
Рис. 3.15. Пример использования операций Copy as Maple Text и Paste Maple Text
Любопытно сравнить две пары операций, действие которых демонстрируют рис. 3.12 и 3.15.
Команда Delete Paragraph служит для уничтожения блока ввода, на котором расположен курсор. При этом в буфер обмена удаленный текст не заносится. В отличие от операции вырезания Cut ее применение не загружает буфер и предотвращает нехватку оперативной памяти. Если вы случайно удалите нужную строку — есть время спохватиться — дайте команду Undo.
Команда Select All выделяет все объекты документа. Это полезно, например, для вставки всего документа в другой документ.
Команда Find служит для поиска указанного фрагмента в тексте документа. Она открывает окно Find, в котором можно указать искомую фрагмент-подстроку (рис. 3.16). При нажатии кнопки Next будет производиться поиск следующего вхождения (ниже по тексту), а при использовании Previous — предыдущего. Если искомое слово не найдется, выводится окно с сообщением (слева на рис. 3.17).
Рис. 3.16. Поиск заданного фрагмента текста
При обнаружении указанного фрагмента он выделяется, и маркер ввода устанавливается в начало найденной подстроки. После этого можно приступить к ее редактированию.
С помощью команды Find возможна также замена подстроки. Для этого надо указать текст замены в нижнем поле окна. Чтобы заменить найденную подстроку, надо нажать кнопку Change, чтобы заменить все подстроки, — Change All.
Рис. 3.17. Пример замены одной подстроки другой
Maple 7 позволяет вводить в ячейки текст комментариев и исполняемые математические выражения (для того чтобы ввести в одну ячейку комментарий и функцию Maple, надо воспользоваться командами меню Insert). Операция Input mode служит для переключения между режимами ввода. Горячая клавиша команды — F5. Если режим ввода текста комментария включен, приглашение в виде знака > исчезает. Если этот режим отменен, то можно вводить исполняемые математические выражения, придерживаясь синтаксиса языка Maple.
Команда Split or Join служит для разделения или объединения объектов документа, она открывает подменю со следующими операциями:
Команда Execute служит для запуска вычислений во всех выделенных ячейках или во всех ячейках документа. Соответственно она имеет подменю с двумя командами:
Заметим, что альтернативой является нажатие клавиши Enter для каждой исполняемой строки документа, что при больших документах довольно нудное занятие.
Команда Remove Output служит для удаления из документа всех ячеек вывода. Это полезно для редактирования ячеек ввода, поскольку объем документа при этом заметно сокращается. Она открывает подменю с двумя командами:
Рассмотрим, к примеру, документ, который был представлен на рис. 3.16. После выполнения для него команды Remove Output From Worksheet документ принимает вид, показанный на рис. 3.18.
Заметим, что документ с рис. 3.18 можно вернуть к исходному виду, выполнив команду Execute Worksheet, описанную выше. Однако в данном конкретном случае исполнение команды value(") даст сообщение об ошибке, поскольку в версиях Maple 6 и 7 данная команда должна быть записана в виде valueU).
Рис. 3.18. Документ после удаления всех ячеек вывода
Документ системы Maple 7 состоит из различных объектов — текстовых областей, областей ввода, ячеек, абзацев, секций, подсекций и т. д. Некоторые из них формируются автоматически по мере ввода и исполнения документа. Но, кроме того, в меню Insert (рис. 3.19) сосредоточены основные команды по обеспечению вставки различных объектов в редактируемый документ. Это позволяет быстро модифицировать документ и добиться его большей выразительности.
Рис. 3.19. Меню Insert
Следует отметить, что меню Insert является контекстно-зависимым. К примеру, оно исчезает, если выделен график.
Меню вставки разделено на две группы. В первой группе содержатся следующие команды:
Во второй группе содержатся следующие команды:
Перейдем к более подробному рассмотрению этих команд.
Команда Text приводит к исчезновению знака приглашения , после чего можно сразу же начинать ввод текста комментария. Данная команда позволяет формировать ячейку, содержащую текст комментария и исполняемые функции.
Команда Standard Math выводит в строке ввода вопросительный знак. После этого в поле ввода строки форматирования можно начинать ввод неисполняемого математического выражения (рис. 3.20).
Рис. 3.20. Ввод математического выражения по команде Standard Math
По завершении ввода надо нажать клавишу Enter, и выражение появится в строке ввода (рис. 3.21). При этом выражение будет выделено.
Рис. 3.21. Завершение ввода по команде Standard Math
Команда Maple Input в меню Insert превращает текущую строку в строку ввода исполняемых математических выражений. В начале строки появляется приглашение ко вводу в виде значка , после чего можно начинать ввод выражения. Кнопка со знаком х в начале контекстной панели позволяет представить вводимое выражение в естественной математической форме, если таковая возможна. В таком случае ввод выражения осуществляется в поле на контекстной панели инструментов.
Команда Standard Math Input выводит новую строку ввода со знаком вопроса в ней. После этого ввод начинается в поле ввода строки форматирования. По завершении ввода нажимается клавиша Enter и введенное выражение появляется в строке ввода (обычно с выделенной последней частью).
Команда Execution Group обеспечивает вывод подменю с двумя командами:
Напоминаем, что признаком исполняемых ячеек является знак приглашения . Данные команды позволяют ввести в любом месте документа новые входные ячейки, что часто бывает нужно при модификации документов.
Электронные таблицы были впервые введены в реализацию Maple V R5. В системе Maple 7 для вставки электронных таблиц используется команда Insert Spreadsheet. Она выводит шаблон пустой таблицы, показанный на рис. 3.22. Как видно из рис. 3.22, электронная таблица представляет собой двумерный массив ячеек, имеющих адресацию по строкам и столбцам. Номера строк задаются цифрами, а номера столбцов — латинскими буквами. Верхняя левая ячейка имеет адрес А1, где А - номер столбца и 1 - номер строки. Если одиночные буквы в номерах столбцов заканчиваются, происходит переход на двухбуквенные адреса (АА, АВ, АС и т. д.). Такая адресация используется в функциях обработки табличных данных.
Рис. 3.22. Вставка шаблона электронной таблицы
По команде Insert Spreadsheet вставляется пустая электронная таблица, во всех ячейках которой нет никаких данных. Однако помимо заполнения таблицы с помощью соответствующих операций можно провести заполнение вручную. Для этого достаточно мышью выделить ячейку, щелкнув в ней левой кнопкой. Ячейка обводится черным контуром (ячейка А1 на рис. 3.22), и появляется контекстное меню с полем для ввода выражения. Во время ввода выражения ячейка покрывается серой сеточкой. Если после набора выражения нажать клавишу Enter, то числовое значение выражения будет помещено в ячейку А1 таблицы. К примеру, на рис. 3.23 показано введенное выражение 2+3. Однако в поле редактирования сохраняется исходное выражение (рис. 3.23).
Если маркер ввода находится в одной из ячеек электронной таблицы, становится доступным меню Spreadsheet (рис. 3.23).
Для работы с таблицами в Maple 7 появилось отдельное меню Spreadsheet (рис. 3.23). Оно содержит набор команд, обеспечивающих работу с табличными данными:
Рис. 3.23. Шаблон электронной таблицы и меню Spreadsheet
Если таблица активизирована (курсор находится внутри таблицы), то нажатие правой клавиши мыши вызовет появление контекстного меню. Его вид аналогичен виду описанного выше меню Spreadsheet.
Возможности Maple 7 в обработке табличных данных намного превосходят возможности обычных табличных процессоров. В частности, наряду с текстовыми и численными данными электронные таблицы Maple 7 могут работать с символьными данными — формулами.
Для ввода данных в ячейку таблицы достаточно щелкнуть на ней мышью. После этого можно вводить нужные данные в поле ввода контекстной панели (она видна на рис. 3.22 и 3.23 под панелью инструментов). Контекстная панель в режиме редактирования таблиц имеет четыре кнопки. Их назначение (слева направо) следующее:
Основным способом ввода данных является активизация ячейки таблицы мышью и ввод данных (объектов) в поле ввода контекстной панели. Нажатие третьей кнопки (Accept the input and evaluate it) или нажатие клавиши Enter приводит к вводу данных в ячейку и их исполнению.
Имеется ряд возможностей для автоматического заполнения ячеек таблицы. Например, можно заполнить ряд ячеек, примыкающих к заданной ячейке, предварительно наметив направление заполнения. Для этого курсор помещается в заданную ячейку, а затем мышь перемещается в нужном направлении при нажатой левой кнопке. На рис. 3.24 показан случай, когда в заданную ячейку А1 помещено число 2 и затем мышью выделены первые ячейки столбца А. Теперь, нажав первую кнопку (Fill a range of cells) на контекстной панели форматирования (или исполнив команду Spreadsheet Fill Down в меню), можно вывести окно автоматического заполнения ячеек таблицы — Fill. Это окно также показано на рис. 3.24. В этом окне можно задать направление заполнения (обычно по умолчанию задано уже направление заполнения при выделении ячеек) и указать шаг изменения аргумента и значение, которого он не должен превышать. Например, на рис. 3.24 заданы шаг 3 и конечное значение 21. Нажав кнопку ОК, можно увидеть автоматическое заполнение таблицы. При этом она принимает вид, показанный на рис. 3,25.
В ячейки таблиц можно вносить различные математические формулы в соответствии с синтаксисом языка Maple 7. При этом возможно сослаться на любую другую ячейку. Такая ссылка указывается значком тильда (-) перед адресом ячейки. Так, обозначение ~А1 означает, что будут подставлены данные из ячейки А1.
В качестве примера составим таблицу значений n, интеграла int(x^n.x) и производной diff (x^n, x) для n = 1.. 9. В готовом виде эта таблица представлена на рис. 3.26.
Подготовка такой таблицы проходит в три этапа. Вначале формируется первый столбец вводом в ячейку А1 имени переменной n, а в ячейку А2 — значения 1. После этого выделяются ячейки от А2 до А10 и с применением автоматического заполнения они заполняются числами от 1 до 9.
Рис. 3.24. Подготовка к автоматическому заполнению ячеек под заданной ячейкой
Рис. 3.25. Электронная таблица с рис. 3.24 после автоматического заполнения ячеек первого столбца
Рис. 3.26. Электронная таблица с символьными данными
Затем во втором столбце в ячейку В1 вводится инертная формула Int(x^-Al.x), a в ячейку В2 — исполняемая формула int(x*~A2.x). После этого выделяются ячейки от В2 до В10 и исполняется команда Spreadsheet Fill Down. В результате формируется столбец с символьными значениями интегралов. Аналогично (третий этап) задается формирование столбца с символьными значениями производной от x^n (рекомендуем сделать это самостоятельно для закрепления навыков работы с электронными таблицами в среде Maple 7).
ПРИМЕЧАНИЕ
Выше описаны лишь основы работы с электронными таблицами в среде Maple 7. Для более полного знакомства с техникой применения электронных таблиц нужно обратиться к справочной системе Maple 7.
Для вставки строки текстовой области служит операция Paragraph. Она создает строку без приглашения >, в которую можно вводить текст. Единственным отличием этой команды от команды Text является то, что она вставляет новую строку, не меняя статуса имеющихся строк. При вводе длинных текстов число строк ввода автоматически увеличивается.
Команда Section служит для установки кнопки, указывающей начало секции (см. рис. 2.6 с такой кнопкой) и служащей для открытия/закрытия секции. Секция может состоять из различных объектов: текстовых комментариев, строк ввода, строк вывода, графиков и других секций (подсекций).
Как и в операционной системе Windows, значок *+» указывает на закрытую секцию, значок «-» — на открытую. Секции предоставляют дополнительную свободу управления документом.
Подсекцией называют секцию, размещенную внутри другой секции. Создавая подсекции, можно строить документы со сложной древообразной структурой, напоминающей разделы книги с хорошей рубрикацией. Это может оказать большую помощь в создании электронных вариантов книг и обучающих программ в среде Maple 7.
Команда Subsection создает кнопку секции внутри уже созданной секции. Все, сказанное о секциях, распространяется и на подсекции!
Еще одна возможность сделать документы более удобными в работе заключается в создании гиперссылок. Гиперссылка — это текстовая надпись, подчеркнутая снизу, при щелчке на которой Maple перейдет к сопоставленному с ней объекту. Гиперссылку можно связать со следующими объектами:
Для создания гиперссылки надо установить на место будущей ссылки маркер ввода и выполнить операцию HyperLink. При этом появится окно связывания гиперссылки с объектом, показанное на рис. 3.27.
В окне надо задать заголовок гиперссылки (в виде короткой текстовой надписи) и выбрать одно из трех положений переключателя, перечисленных выше. Если вы намерены сослаться на документ, то следует использовать кнопку просмотра Browse для поиска нужного файла. Появляющееся окно показано на рис. 3.27 справа.
Как уже говорилось, гиперссылка выглядит как надпись, подчеркнутая снизу. Активизируя ее, можно вызвать объект, связанный с ней, — в нашем случае другой документ, файл которого находится на жестком диске. Использование гиперссылки на другой документ в Maple 7 реализовано не очень удачно. Дело в том, что в этом случае исходный документ по умолчанию закрывается. Если последние изменения в нем не были сохранены, то появляется окно с предупреждением об этом.1 Оно показано на рис. 3.28.
Можно избежать закрытия документа, щелкнув на кнопке New Window; Maple предоставит открывающемуся документу новое окно. Это иллюстрирует рис. 3.29. В нем также показано контекстное меню гиперссылки. Это меню содержит три команды:
Рис. 3.27. Пример создания гиперссылки
Рис. 3.28. Окно с предупреждением о закрытии документа при переходе по гиперссылке и необходимости сохранения изменений
Рис. 3.29. Результат активизации гиперссылки
Гиперссылки позволяют создавать сложные структуры документов, содержащие множество объектов, вызываемых в произвольном порядке. Например, для возврата в исходный документ можно организовать обратную гиперссылку в вызываемом документе. Лучшим примером такого применения гиперссылок является справочная система Maple 7. Гиперссылки также широко используются при создании web-страниц. Maple 7 позволяет сохранять документы в виде web-страниц (формат HTML), которые без каких-либо преобразований можно публиковать в сети Интернет.
Весьма привлекательной кажется возможность организации гиперссылок на разделы справочной системы. Она позволяет создавать учебные программы со ссылками на справки системы Maple 7.
Операции форматирования служат для придания отдельным объектам и документу в целом определенного стиля путем изменения как общего вида объектов, так и ряда их частных характеристик, например цвета и размера надписей, выбранного набора шрифтов и т. д. При этом возможна подстройка под вкус любого пользователя и подготовка документов высокого полиграфического качества. Стиль является центральным понятием для современных документов, будь то документы текстового процессора класса Word или системы символьной математики Maple 7.
Команды форматирования в меню Format разбиты на шесть подгрупп. В первой подгруппе содержатся две команды:
Во второй подгруппе имеются три наиболее распространенные команды изменения начертания надписей:
Заметим, что все они дублируются кнопками на панели инструментов и горячими клавишами. При редактировании документов использование кнопок и горячих клавиш более удобно.
В третью группу попали команды выравнивания текста:
В четвертой группе находятся следующие команды:
В последнюю группу попала еще одна команда, не имеющая непосредственного отношения к форматированию символов:
Рассмотрим применение команд форматирования.
Команда Styles является основной, поскольку позволяет задать стиль текста — определенный набор значений доступных параметров: размещение на странице, выравнивание, шрифт, начертание, цвет, размер и т. д. Единство стилей документов важно при включении их в отчеты, курсовые и дипломные проекты, диссертации и иные документы. Придерживаться определенных стилей — это правило хорошего тона при работе как с текстовыми процессорами, так и с математическими системами. Именно поэтому ориентация на определенный стиль подготовки документов стала неотъемлемой частью пользовательского интерфейса системы Maple 7.
Операция Styles выводит диалоговое окно Style Management, в котором можно как изменить уже существующий стиль, так и создать новый (рис. 3.30).
Рис. 3.30. Окно задания и модернизации стилей
В большинстве случаев пользователя Maple 7 вполне удовлетворят стили, заданные по умолчанию. Более того, надо помнить, что задание своего стиля неизбежно означает повышение риска несовместимости при обмене документами Maple 7. Поэтому без особой на то необходимости изменять стандартный стиль не рекомендуется.
Однако бывают принципиальные обстоятельства, когда изменение стиля необходимо. Например, при выводе титульных надписей для графиков Maple 7 используют стандартный англоязычный шрифт Courier New. При вводе русскоязычных надписей Maple 7 воспринимает их вывод как ошибку, поскольку набор символов при вводе не соответствует набору символов, заданному в стиле. Таким образом, для организации вывода русскоязычных надписей необходимо сменить набор символов (шрифт), то есть изменить стиль. Покажем, как это делается. Вначале в списке стилей надо выбрать наименование Title, после чего нажать кнопку Modify. Появится окно Paragraph Style с параметрами стиля Title (рис. 3.31).
В этом окне надо нажать кнопку Font. Появится новое окно (оно также показано на рис. 3.31) для выбора шрифта. В нашем случае достаточно заменить шрифт по умолчанию Courier New на шрифт Courier New Cyr. Он содержит символы кириллицы, то есть буквы русского языка. После этого задание титульных надписей для графиков на русском языке перестает быть проблемой.
Рис. 3.31. Окна установки параметров абзацного стиля для абзаца и для выбора шрифта
Разумеется, в понятие стиля входит не только шрифт, но и размер, начертание, цвет и т. д. Все это можно настраивать, используя описанные выше окна. При необходимости изменения стиля можно записать его в специальный файл, используя кнопку Save As Default. При этом измененный стиль становится принятым по умолчанию. Кнопка Revert As Default позволяет вернуться к типовым стилям, которые заданы разработчиками системы. Если стили подверглись небольшим изменениям, то можно сохранить их с помощью кнопки Merge Existing.
Для форматирования абзацев служит команда Paragraph. Она сразу выводит окно установки параметров абзаца. Это окно было показано на рис. 3.31. Правила работы с этим окном уже были описаны выше, так что нет смысла их повторять.
Команда Character открывает окно задания стиля символов: шрифта, размера, начертания и цвета.
Ранее описывалась операция вставки кнопки секции. При выполнения вставки сама секция еще пуста и ее надо заполнять. Команда Indent (или комбинация клавиш Ctrl+.) позволяет оформить в виде секции уже введенные ячейки. На рис. 3.32 показано такое оформление для ячейки документа с вычислением интеграла. Кнопка при этом имеет знак «минус», что указывает на ее открытое состояние.
Рис. 3.32. Применение операции Indent для одной из ячеек документа
Если щелкнуть на кнопке со знаком «минус», то секция свернется и вместо нее останется только кнопка со знаком «плюс» (рис. 3.33).
Хотя данная книга посвящена одной Maple 7, надо особо отметить, что эта программа способна взаимодействовать с рядом других программ, например с текстовым процессором Word, табличным процессорам Excel и даже с другими системами компьютерной математики, например, MATLAB. Это может быть копирование через буфер обмена или связь с применением механизма OLE. В роли объектов могут выступать ячейки из данного или других документов, текстовые фрагменты и файлы, рисунки в различных форматах и т. д. Работа с объектами существенно расширяет возможности пользователя по части создания полноценных и удобных в работе документов.
Для организации вставки объекта используется команда Insert > Object. Она выводит окно со списком тех приложений, с которыми возможна связь с применением механизма OLE. Это окно показано на рис. 3.34. Maple 7 использует стандартное окно вставки объектов из операционной системы Windows, поэтому если она русифицирована, то окно имеет русскоязычные надписи.
Рис. 3.34. Окно вставки объекта
Если оставить переключатель в первом положении, то объект может быть создан заново с помощью подходящего приложения, например редактора Paint. Этот процесс показан на рис. 3.35.
Рис. 3.35. Подготовка объекта в графическом редакторе PhotoShop
После того как объект готов, достаточно выйти из приложения, в котором он создавался, — в нашем случае из редактора Paint. Для этого в меню редактора имеется команда File > Exit. Окно Paint исчезнет, а сам объект появится в той ячейке Maple 7 (рис. 3.36), в которой был установлен маркер ввода в момент дачи команды вставки объекта.
Рис. 3.36. Пример документа со вставленным объектом-рисунком
Вместо рисунка (или другого объекта) можно поместить в документе Maple 7 значок — гипермедиа-ссылку. Для этого в окне на рис. 3.34 надо установить флажок В виде значка. Щелчок на вставленном в документ значке вызовет появление объекта. Этот способ удобен, когда объекты, например рисунки, имеют большой размер и их постоянное присутствие на экране нецелесообразно.
Необязательно каждый раз создавать объект с нуля — можно загрузить его из файла, в этом случае следует установить положение переключателя Создать из файла. Для поиска нужного файла пригодится кнопка Обзор. После выбора файла надо решить, какой вид будет иметь значок связи с файлом — вид стандартного значка или уменьшенной копии изображения.
Если объект выделен (как обычно, щелчком мыши), то команда Edit > Object становится активной и может даже модифицироваться в зависимости от вида объекта, с которым установлена связь. Например, если объектом является .рсх-файл, то эта строка меню открывает подменю с тремя командами:
Редактирование объекта производится в среде того приложения, с которым объект связан. Естественно, что изменение файла повлечет за собой отражение в документе его измененного варианта. Следует отметить, что в некоторых копиях программы Maple 7 операция Object не работает. Однако сохраняется возможность редактирования объекта в создавшей его программе после двойного щелчка на нем.
В этом уроке мы научились:
Для управления видом интерфейса и документа служит меню View. Оно содержит ряд флажков и несколько команд управления общим видом программы (рис. 4.1). Установленные флажки, управляющие показом элементов интерфейса, распространяют свое действие на все открытые документы. При выходе из системы (командой Exit) все установки сохраняются, так что при новом запуске системы внешний вид интерфейса будет определяться именно ими.
Рис. 4.1. Меню View
Команды меню View разбиты на несколько групп. Первая группа содержит флажки, относящиеся к управлению показом главной и контекстной панелей инструментов, а также строки состояния системы:
Вторая группа задает показ палитр и представлена одной командой, открывающей подменю управления показом палитр Palettes, содержащей флажки:
И команды:
Третья группа в меню View задает масштаб отображения документа на экране и установку закладок (bookmarks):
Четвертая группа обеспечивает переходы по гиперссылкам:
Данные команды аналогичны командам браузера и управляются историей переходов по гиперссылкам. Поэтому, если вы не использовали ни одной гиперссылки, данные команды будут недоступны. В основном данные команды и соответствующие кнопки панели инструментов необходимы при работе со справкой Maple.
Пятая группа представлена командой Hide content, открывающей подменю скрытия элементов документа:
Шестая группа параметров управляет показом некоторых объектов документа:
В седьмой группе содержатся следующие команды:
Действие всех перечисленных команд более подробно описано ниже. Рекомендуется поэкспериментировать с командами — когда вы уясните их действие, вы сможете настроить интерфейс Maple на свой вкус.
Панель инструментов (Toolbar) служит для быстрого управления системой без обращения к командам меню. Она позволяет вызывать наиболее часто используемые команды нажатием кнопки. Назначение всех кнопок этой панели было описано выше и представлено на рис. 1.21.
Несмотря на удобства, предоставляемые панелью инструментов, в ряде случаев она не нужна. Например, для ввода исходных данных и их редактирования достаточно иметь на экране только контекстную панель. Панель инструментов полезна при общей отладке документов, открытии нового документа, загрузке имеющегося документа, записи документа на диск, печати документа и т. д. В ряде случаев она просто занимает часть места, нужного для лучшего обзора документа.
Флажок Toolbar управляет показом панели инструментов.
Панель Context Bar служит для размещения кнопок быстрого доступа к операциям с текущим объектом.
Флажок Context Bar задает отображение контекстной панели на экране. Поскольку панель форматирования весьма удобна для оперативной работы, единственным мотивом временного ее удаления является необходимость высвободить больше , места на экране монитора для работы с документом.
Строка состояния внизу экрана, как отмечалось, выводит контекстно-зависимую информацию о состоянии программы в данный момент времени. В ряде случаев ее можно считать элементом контекстно-зависимой справки. Флажок Status Bar служит для управления показом строки состояния.
Палитры математических символов, впервые введенные в версии Maple V R5, являются очень удобным средством для облегчения набора математических выражений начинающим пользователям. Они выводятся на экран командой Palettes и показаны на рис. 1.11. Всего имеются четыре палитры:
Ввод осуществляется на место маркера ввода. Щелчок на кнопке палитры — символ или его аналог окажется в точке ввода. Параметры, которые необходимо указать, при математической нотации выражений имеют вид вопросительного знака, а при Maple-нотации — %?.
Итак, в строке ввода введенный оператор или символ не обязательно повторит оператор или символ палитры. Это хорошо видно из рис. 4.2, на котором показан ввод с помощью палитры выражений шаблона определенного интеграла и его последовательное заполнение. Для наглядности заполнение каждого параметра дано в новой строке ввода.
Рис. 4.2. Пример ввода шаблона определенного интеграла из палитры выражений
Команда Zoom Factor задает масштаб отображения текущего документа. Он задается в процентах относительно масштаба просмотра, заданного по умолчанию, — он принят за 100 %. Команда выводит подменю с перечнем возможных масштабов просмотра. На рис. 4.3 показано, как будет выглядеть документ при установке масштаба просмотра в 150 %. На этом рисунке показано подменю выбора масштаба в открытом виде.
Нетрудно заметить, что все символы документа увеличились при этом в размерах в полтора раза. Эта возможность, безусловно, полезна для пользователей с ослабленным зрением или для учителей, желающих показать примеры решения задач в среде Maple крупным планом для группы учащихся.
Рис. 4.3. Вид документа при масштабе просмотра в 150 %
При работе с большими документами, как и при чтении книг, полезно устанавливать специальные маркеры — закладки. Для установки такой закладки достаточно поместить в нужное место документа маркер ввода и выполнить команду View > Bookmarks > Edit Bookmarks. Она выводит окно добавления и модификации закладки (рис. 4.4). Кнопка ОК вводит новую закладку, а кнопка Cancel позволяет отказаться от выполнения данной операции.
Если теперь вновь посмотреть подменю Bookmarks, в нем появится строка с созданной закладкой (рис. 4.5).
В нашем случае в списке представлены две ранее созданные закладки с именами «Это определенный интеграл» и «А это значение определенного интеграла».
При переходе по закладке строка, в которой установлена закладка, размещается в верхней части окна редактирования и маркер ввода устанавливается в место, которое определено закладкой. Таким образом, закладки — эффективное средство для быстрого перехода в отмеченные места документа. Однако надо помнить, что в отличие от закладок в книгах закладки в документах Maple 7 не видны — они имеются лишь в списке закладок, открываемом командой Bookmarks (рис. 4.5). Удалить созданную закладку не так-то просто: вам нужно перейти по закладке, дать команду View > Bookmarks > Edit Bookmarks и удалить текст в поле имени. Теперь нажатие кнопки ОК приведет к окну с предупреждением об удалении закладки. Нажмите ОК в обоих окнах — и закладка исчезнет.
Рис. 4.4. Пример создания и редактирования закладки
Рис. 4.5. Просмотр закладок
Документы Maple 7 состоят из ряда основных элементов. Это ячейки (строки) ввода и вывода, графики и электронные таблицы. При подготовке различных электронных книг, учебников и статей возникает необходимость скрыть тот или иной компонент документа. Например, педагог может захотеть скрыть от учащихся строки ввода, чтобы они могли мысленно представить функции, отображаемые показанными в документе графиками. Или, наоборот, скрыть графики, чтобы учащиеся назвали их особенности исходя из записи функций. Все эти возможности и обеспечивает команда View > Hide Content.
Для примера на рис. 4.6 показан документ, у которого скрыты все строки ввода и оставлены только строки вывода.
Рис. 4.6. Документ со скрытыми ячейками ввода
Разумеется, можно вернуть показ строк ввода, просто повторно дав эту команду Hide Input в подменю команды View > Hide Content > Hide Input (рис. 4.6). Co скрытием других компонентов документов читатель может разобраться самостоятельно.
В любом документе незримо присутствуют различные непечатаемые символы, например управляющие символы перевода строки или пробелы. Это хорошо известно читателям, работающим с текстовым процессором Word. Иногда полезно вывести эти символы — например, если вам неясно, сколько пробелов стоит между какими-то словами.
Для вывода непечатаемых символов служит команда-флажок Show Invisible Characters (рис. 4.7). Ее можно также дать, нажав кнопку на панели инструментов с изображением управляющего символа перевода строки — «fl». Этот символ, кстати, и является одним из наиболее часто встречающихся управляющих непечатаемых символов.
Рис. 4.7. Вид документа с выводом непечатаемых управляющих символов
Помимо символа перевода строки вы увидите множество символов пробела в виде точки на середине строки. По числу точек между словами можно судить о том, сколько пробелов установлено между ними. Проявятся также табуляции и другие управляющие операции, встречающиеся в документах Maple 7.
Понятие о секциях и подсекциях
Как уже отмечалось, документ Maple 7 состоит из отдельных ячеек (в оригинале — групп, groups). Они выделяются слева длинными тонкими квадратными скобками. Есть еще один способ выделения ячеек — объединение их в секции. Секция начинается с кнопки со знаком «плюс» или «минус» (рис. 4.8), управляющей ее состоянием: открытым или закрытым.
Рис. 4.8. Пример документа с открытой секцией и закрытой подсекцией
Для создания секции или подсекции необходимо дать команду Insert > Section (или Insert > Subsection), что указано на рис. 4.8. Секция выделяется вертикальной одиночной линией, а подсекция — двойной линией.
Секции и подсекции выгодно отличаются от ячеек тем, что они могут быть при необходимости закрыты и представлены только кнопкой со знаком «плюс». Таким образом, в секции удобно помещать различные вспомогательные вычисления, которые не стоит обозревать постоянно. Хотите посмотреть на них — нажмите кнопку, и содержимое секции появится под ней с выделением вертикальной чертой (рис. 4.9).
Секции весьма удобно применять и для подготовки документов в форме электронных книг. В этом случае секции снабжаются текстовыми заголовками и, по существу, являются главами книги, а подсекции — параграфами. Этот способ представления документов нашел широкое применение в сети Интернет, где он (наряду с гипертекстовыми и гипермедиа-ссылками) используется при создании web-страниц. Версия Maple 7 позволяет готовить и сохранять на диске документы в формате HTML, что позволяет напрямую готовить web-страницы.
Рис. 4.9. Пример документа с рис. 4.8 с открытой подсекцией
Итак, обычно секции и подсекции выделяются вертикальными линиями, заканчивающимися короткими горизонтальными штрихами. Это позволяет судить о размерах области экрана, представляющей секцию, особенно если секция большая и целиком не помещается на экране.
Тем не менее в окончательно отлаженном документе необходимость в применении линии показа области секции или подсекции отпадает. С помощью флажка Show Section Ranges можно управлять показом линий выделения областей секций и подсекций. Если этот флажок установлен, то линии показа областей секций и подсекций видны, как на рис. 4.9. Если его снять, то эти линии исчезнут (рис. 4.10).
Обратите внимание, что линии выделения групп (ячеек) остаются.
Рис. 4.10. Вид документа с рис. 4.9 при снятии показа областей секции и подсекции
Команда Show Group Ranges служит для управления показом областей ячеек (групп), то есть длинных квадратных скобок, обрамляющих ячейки слева. Если флажок установлен, то линии показа областей ячеек видны. Если его снять, то эти линии исчезают, как показано на рис. 4.11, где убраны линии выделения как секции и подсекции, так и ячеек.
Убирать линии показа областей ячеек целесообразно, если документ уже отлажен. В таком документе необходимость показа областей выделения ячеек, секций и подсекций отсутствует, хотя иногда их разумно оставлять, так как они способствуют систематизации содержимого документов.
Все секции и подсекции документа можно закрыть командой Collapse All Sections. К примеру, если применить ее к документу, показанному на рис. 4.9, то документ примет вид, показанный на рис. 4.12.
Рис. 4.11. Документ с рис. 4.10 после удаления линий показа областей ячеек
Рис. 4.12. Документ с рис. 4.9 при закрытии всех секций
Документ с закрытыми секциями (и подсекциями) занимает на экране (и при распечатке принтером) минимальное место. При этом, естественно, содержимого секций и подсекций не видно.
Для раскрытия всех секций служит команда Expand All Sections. Она открывает и все подсекции. К примеру, если применить эту операцию к документу, показанному на рис. 4.12, то он вернется к исходному виду (рис. 4.9).
Таким образом, Maple 7 имеет достаточно простые, но в то же время полные средства по управлению видом пользовательского интерфейса (окна) системы и видом имеющегося в нем документа. Это позволяет пользователю настраивать интерфейс и вид документа в соответствии со своими привычками, обеспечивая комфортную работу с программой.
Помимо ряда уже рассмотренных команд в меню Options сосредоточены средства для установки некоторых глобальных параметров ввода и вывода документов. Их число в Maple 7 существенно увеличено.
Первая группа команд содержит две команды:
Во второй группе всего одна команда Browser — задание броузера для перехода по URL.
Третья группа также представлена одной командой:
Четвертая группа содержит 6 команд:
Пятая и шестая группы содержат по одной команде:
С помощью этих параметров можно настроить систему на наиболее приемлемые формы вывода результатов вычислений без задания специальных команд в документе. Однако последние могут отменять параметры, заданные с помощью меню.
Команда Replace Output задает вывод результатов вычислений, заданных в ячейке, в одно и тоже место. Это означает, что если входные данные меняются, то при установленном флажке каждый последующий результат будет замещать предыдущий. Если же флажок снят, то каждый новый результат будет помещаться в новое место, то есть в документе будут выведены подряд (сверху вниз) все результаты вычислений.
Поясним на примере. Допустим, в какой-то строке ввода мы задаем вычисляемое выражение
2+3:
> 2+3; 5
Результат (в данном случае в Maple-нотации) появляется снизу. Теперь в той же строке ввода вычислим 3+4, а затем 4+5. Получим:
> 4+5; 9
Мы заметим, что результат появится на месте прежнего, и в конечном счете мы будем иметь в качестве результата число 9. Теперь снимем флажок Replace Output и проделаем все те же вычисления в новой строке ввода. Получим следующее:
> 4+5; 5
7
9
Здесь видны уже три ячейки вывода. Не следует следует устанавливать флажок Replace Output в том случае, когда желательно знать суть промежуточных преобразований и самих исходных выражений, поскольку они (а возможно, и предшествующие результаты преобразований) при ее использовании исчезают.
Этот флажок, будучи установленным, обеспечивает при нажатии клавиши Enter ввод новой пустой ячейки. Если флажок снят, то такая вставка не осуществляется.
Если работа с системой происходит в форме простейшего диалога, по типу «задать вопрос — получить ответ», то рекомендуется установить режим вставки 'новой ячейки. При этом по окончании вычислений в последней ячейке тут же появляется новая пустая ячейка для последующих вычислений.
Для открытия документов web-страниц (по URL-адресу) Maple 7 использует какой-либо из установленных на компьютере браузеров Интернета. Для этого необходимо указать путь к браузеру с помощью команды Browser. Она открывает окно, показанное на рис. 4.13.
Рис. 4.13. Окно задания браузера Интернета
В этом окне можно установить флажок Use System Default (использовать браузер, заданный в операционной системе по умолчанию). В противном случае путь к браузеру надо указать явно, введя его в поле или отыскав его с помощью кнопки Browse.
Команда Input Display выводит подменю, позволяющее выбрать режим представления выражений в строке ввода:
В качестве примера ниже даны две формы задания ввода двойного интеграла с помощью палитры выражений:
Верхняя строка соответствует Maple-нотации, а нижняя — стандартной математической нотации.
Команда Output Display раскрывает подменю, имеющее четыре команды, влияющие на вид результатов вычислений — вывода:
Рисунок 4.15 наглядно иллюстрирует эти формы вывода. Последняя форма наиболее наглядна и задается по умолчанию.
Рис. 4.15. Демонстрация вывода в различных формах
Первая форма наиболее компактна, но менее всего наглядна. Вторая форма имитирует построение формул с помощью отдельных знаков, расположенных на разных уровнях (строках). Эти две формы позволяют использовать Maple даже в том случае, когда имеются устройства вывода (дисплеи и принтеры), работающие только в текстовых режимах. Третья форма дает вывод в виде обычных математических формул, но без возможности их редактирования.
Четвертая форма позволяет представить результат вывода, там, где это возможно, в виде обычных математических формул с применением типовых математических знаков — интегралов, производных, сумм, произведений, квадратных корней и т. д. В большинстве случаев именно эта форма вывода является наиболее наглядной. Она подобна третьей форме, но допускает редактирование выражений. Как отмечалось, нажатием кнопки с символом «х» в панели инструментов документа можно попытаться и вводимое выражение представить в виде обычной математической формулы. Однако это не всегда удается, поскольку далеко не все однострочные функции системы Maple 7 можно представить таким образом.
На переменные в Maple 7 могут быть наложены различные условия. Для этого используется специальная функция assume. Например, если переменная х может принимать только положительные значения, то для этого достаточно исполнить команду assume(x>0). Будем называть такие переменные предполагаемыми, поскольку предполагается, что они имеют какие-то дополнительные ограничения, помимо накладываемых на них типом.
В подменю Assume Variables меню Options имеются три команды, управляющие контролем признаков предполагаемых переменных:
Предполагаемые переменные при выводе обычно обозначаются значком тильды (-) после их имени. Этот знак отображается при установки флажка Trailing Tildes (по умолчанию она включена). Однако с помощью флажка No Annotation можно отключить как это обозначение, так и короткий текстовый комментарий, который сопровождает предполагаемые переменные. Наконец, флажок Phrase включает вывод текстовых комментариев. Рисунок 4.16 наглядно иллюстрирует применение этих параметров.
Благодаря применению предполагаемых переменных облегчается реализация ряда алгоритмов, критичных к выбору переменных. Например, если использовать вычисление квадратного корня без привлечения понятия о комплексных числах, то на численные значения переменных надо наложить условие их положительности. Контроль за статусом таких переменных и дают описанные параметры.
Рис. 4.16. Применение параметров контроля предполагаемых переменных
Графические результаты могут быть представлены прямо в документе в ячейках вывода или в отдельных окнах. Это обеспечивается двумя командами подменю Plot Display:
На рис. 4.17 показан пример вывода двух графиков — один выводится с применением Inline в ячейку документа (сразу после ввода), а другой с применением Window в отдельное окно. Какой из этих двух вариантов предпочтительнее, зависит от привычек пользователя.
Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.
Рис. 4.17. Пример построения двух графиков с выводом одного из них в отдельное окно
Следует отметить, что из всех окон (документов или графиков) в данный момент активным может быть только одно окно. Если это окно графическое, то для него выводится своя контекстная панель инструментов, позволяющая менять вид графика и некоторые параметры, используемые при его построении. Кстати говоря, запись заданного документа на диск возможна только при активном окне этого документа.
Двумерные графики обычно строятся с применением функции plot. На рис. 4.18 (и на рис. 1.24 с графиком в документе) представлено назначение кнопок контекстной панели инструментов двумерной графики. Кнопки обозначены номерами под ними, а в окне документа дано их краткое назначение.
Панель инструментов графиков появляется только при активном окне графики или при выделении графика в ячейке документа.
Рис.4.18. Окно двумерного графика и его панель инструментов
Трехмерные графики имеют свою контекстную панель инструментов (рис. 4.19; см. также рис. 1.25 с графиком в документе), с кнопками задания наиболее распространенных параметров для построения трехмерных графиков. Следует отметить, что панели инструментов графических окон дают доступ лишь к части параметров графиков. Более подробно состав и назначение параметров будут рассмотрены в дальнейшем при описании средств создания графиков. -Читателю настоятельно рекомендуется опробовать действие кнопок управления различными форматами графиков, что позволит быстрее освоить огромные возможности Maple 7 в создании цветных и монохромных графиков.
При серьезной работе в среде Maple 7 пользователь нередко вынужден работать одновременно с несколькими документами. Удобства такой работы зависят от того, как окна расположены в пределах экрана. Maple 7 дает возможность расположить их любым стандартным способом.
Основные команды по установке расположения окон сосредоточены в меню Window (рис. 4.20).
Рис. 4.20. Меню Window
Это меню содержит следующие команды:
При выполнении команды Tile устанавливается расположение окон мозаикой показанное на рис. 4.22. При этом окна не перекрываются, имеют примерно одинаковый размер. К сожалению, при большом числе окон область просмотра оказывается настолько мала, что работать с документами при таком расположении окон становится неудобно.
Расположение окон мозаикой достаточно удобно при работе с двумя (или на большом экране тремя) окнами. Оно может быть полезно, например, при переносе содержимого отдельных ячеек с одного документа в другой путем перетаскивания. Можно также копировать объекты в одном окне, а затем, переключившись в другое окно, вставлять содержимое буфера обмена в нужную ячейку, используя команду Paste.
Рис. 4.22. Расположение окон мозаикой
При использовании команды Horizontal окна оказываются расположенными на экране в виде горизонтальных полос (рис. 4.23). Этот вариант расположения окон, как и каскадное расположение, дает обзор заголовков документов, если область просмотра каждого документа расположена сверху окна. Последнее условие может нарушаться при перемещении окон документов.
Команда Vertical задает расположение окон в виде вертикальных полос (рис. 4.24). Такое расположение окон удобно, если содержимое ячеек документов представлено короткими выражениями.
Следует отметить, что описанным командам подчиняются только развернутые в данный момент окна — расположение вновь открытого или развернутого окна не зависит от данных до этого команд.
Рис. 4.23. Горизонтальное расположение окон
Рис. 4.24. Вертикальное расположение окон
Свернутые окна представлены значками. Они могут перемещаться мышью по всему пространству экрана, поэтому иногда значки оказываются хаотично разбросанными (рис. 4.25).
Рис. 4.25. Хаотическое расположение значков свернутых окон
Для наведения порядка с расположением значков можно, разумеется, переместить каждый из них в удобное место. Но это довольно утомительное занятие. Лучше воспользоваться специальной командой Arrange Icons, которая автоматически наводит порядок в расположении значков свернутых окон, аккуратно располагая их снизу экрана. Действие этой команды показано на рис. 4.26. Как и окно, каждый значок имеет строку заголовка с четырьмя маленькими кнопками. Первая из них открывает меню управления, а три другие используются соответственно для восстановления размера, развертывания на весь экран и закрытия окна.
Команда Close All служит для закрытия всех окон одновременно. Эта команда будет выполнена сразу только в том случае, когда все документы не модифицировались или были записаны на диск после внесения исправлений. Если какой-либо документ был изменен, но еще не сохранен, то в центре экрана появится предупреждающее сообщение об этом (рис. 4,27).
Рис. 4.26. Вид экрана после выполнения команды Arrange Icons
Рис. 4.27. Окно, предупреждающие о том, что закрываемый документ был изменен
Разумеется, такое окно будет появляться столько раз, сколько имеется модифицированных документов.
В Maple 7 использована многооконная справочная система с гипертекстовыми ссылками. Поэтому при работе с ней экран системы довольно быстро оказывается забитым окнами справочной системы. Разумеется, их можно последовательно закрывать одно за другим, но это очень неудобно и долго. Команда Close All Help обеспечивает закрытие разом всех окон справочной системы, что позволяет продолжить работу с текущим документом. На окна загруженных документов операция Close All Help влияния не оказывает.
Заканчивая рассмотрение меню Window, надо отметить, что оно завершается списком всех открытых в Maple 7 документов и соответственно окон (рис. 4.26). Щелкнув на той или иной строке этого списка, можно открыть соответствующее окно и сделать его активным.
В этом уроке мы научились:
Язык Maple (или Maple-язык) является одновременно входным языком общения с Maple 7 и языком ее программирования. Входящие в него средства (прежде всего операторы и функции) подобраны настолько полно и удачно, что при решении подавляющего большинства типовых математических задач от пользователя не требуется знаний даже основ программирования. Для решения нужной задачи обычно достаточно составить алгоритм и подобрать набор нужных для его реализации функций и иных средств Maple-языка.
В то же время Maple-язык — один из самых мощных языков программирования математических задач, содержащий почти 3000 операторов, команд и функций, входящих в ядро, основную библиотеку и пакеты функций Maple 7. При этом относящаяся к традиционному программированию часть Maple-языка реализована с помощью довольно скромного набора специальных знаков и зарезервированных слов.
Большинство функций Maple 7 (в частности, все, входящие в пакеты) написаны на этом языке. Поэтому знание этого языка является определяющим в серьезном изучении Maple. Ниже Maple-язык описывается как типичный язык программирования.
Алфавит Maple-языка содержит 26 малых латинских букв (от а до z), 26 больших латинских букв (от А до Z), 10 арабских цифр (от 0 до 9) и 32 специальных символа (арифметические операторы +, -, *, /, знак возведения в степень ж и др.). Все они будут рассмотрены в данной главе. Имеется пять пар альтернативных символов (означающих одно и тоже):
"и** [ и (| ] и |) { и (* } и *)
К специальным одиночным и составным знакам относятся элементы синтаксиса языка:
Комментарии в программе, не выводимые в ячейки вывода, задаются после символа #. В них допустимо использовать все символы кодовых таблиц, что важно при вводе русскоязычных комментариев, использующих символы кириллицы. Применение последних для идентификаторов (имен) объектов недопустимо.
Зарезервированные слова используются для создания условных выражений, циклов, процедур и управляющих команд. Список 42 зарезервированных слов Maple 7 дан ниже.
and |
break |
by |
catch |
description |
do |
done |
el if |
else |
end |
error |
export |
fi |
finally |
for |
from |
global |
if |
in |
intersect |
local |
minus |
mod |
module |
next |
not |
od |
option |
options |
or |
proc |
quit |
read |
return |
save |
stop |
then |
to |
try |
union |
use |
while |
|
|
|
Совокупность правил, по которым записываются определения всех объектов Maple-языка, называется его синтаксисом. Некоторые особенности синтаксиса полезно знать уже в начале освоения Maple. Например, то что знак - (минус) имеет двойное значение. Применительно к одному числу, переменной или выражению он меняет их знак. Однако два знака минус подряд (например, в записи --3) задавать нельзя. Другое назначение знака минус — создание операции вычитания, например 5-2 или а-b. Соответственно двойное назначение имеет и знак •+, причем число без знака считается положительным, так что +5=5.
При вводе действительных чисел с порядком для указания порядка используется символ * (например, 2*1(Г100 или 2*1(Г-100). Для возведения числа в степень наряду с оператором *• можно использовать и составной оператор ** (две звездочки подряд). Для изменения общепринятого приоритета вычислений используются круглые скобки, в них же задаются параметры функций и процедур. Более подробно синтаксис Maple-языка рассматривается ниже.
Некоторые операторы представлены двумя символами — например, оператор присваивания переменным их значения := содержит двоеточие и знак равенства. В таких операторах между символами недопустим знак пробела. Однако его можно использовать между отдельными частями выражений — так, (а+b)/с эквивалентно (а + b) / с.
По набору операторов и функций Maple-язык намного превосходит любой универсальный язык программирования. Это позволяет наряду с обычными программными конструкциями задавать множество специальных конструкций, подчас резко упрощающих запись математических выражений. К примеру, возможна работа со списками имен функций. Язык Maple имеет множество операций над символьными выражениями и гибкий аппарат создания и преобразования типов данных и результатов вычислений.
Для большинства пользователей возможности языка Maple кажутся явно избыточными, и большинство наиболее распространенных операций в нем реализуется несколькими способами. Однако каждый пользователь волен выбирать из множества возможностей именно те, которые ему необходимы в конкретной предметной области. Поскольку таких областей превеликое множество, то обширные возможности Maple лишними не являются.
Фактически Maple 7 — это система для манипулирования математическими выражениями.
Выражение в системе Maple — это объект, вполне соответствующий сути обычного математического выражения. Оно может содержать операторы, операнды и функции с параметрами. В этом уроке выражения записываются на Maple-языке без использования специальных средств для их представления в естественном математическом виде. Благодаря этому запись выражений и приводимых примеров одинаково пригодна для любой реализации системы Maple — даже под MS-DOS. Такая запись получается наиболее короткой, ее можно выводить и распечатывать без применения графических средств. Кроме того, она соответствует виду, принятому в справочной системе Maple.
Однако пользовательский интерфейс системы Maple 7 для Windows позволяет представлять как вводимые, так и выводимые выражения в самых различных формах, в том числе в естественном математическом виде — примеры этого многократно приводились и будут приводиться в дальнейшем. Maple 7 имеет многочисленные функции преобразования форматов, позволяющие менять форму представления данных.
Выражения в Maple могут оцениваться и изменяться в соответствии с заданными математическими законами и правилами преобразований. Например, функция упрощения выражений simplify способна упрощать многие математические выражения, записанные в качестве ее параметра (в круглых скобках):
Символьные преобразования и вычисления математических выражений более подробно будут рассмотрены в следующем уроке.
Для выполнения любых математических операций необходимо обеспечить ввод в систему исходных данных — в общем случае математических выражений. Для ввода их и текстовых комментариев служат два соответствующих типа строк ввода. Переключение типа текущей строки ввода осуществляется клавишей F5. Строка ввода математических выражений имеет отличительный символ >, а строка ввода текстов такого признака не имеет.
В строке ввода может располагаться несколько выражений. Фиксаторами (указанием, что выражение окончено) их могут быть символы ; (точка с запятой) и : (двоеточие). Символ «:» фиксирует выражение и задает вывод результатов его вычисления. А символ «:» фиксирует выражение и блокирует вывод результатов его вычисления. Фиксаторы выполняют также функцию разделителей выражений, если в одной строке их несколько.
Ввод выражения оканчивается нажатием клавиши Enter. При этом маркер ввода (жирная мигающая вертикальная черта) может быть в любой позиции строки. Если надо перенести ввод на новую строку, следует нажимать клавиши Shift и Enter совместно. С помощью одного, двух или трех знаков % (в реализациях до Maple V R5 это был знак прямых кавычек ") можно вызывать первое, второе или третье выражение с конца сессии:
Особая роль при вводе выражений принадлежит знакам прямого апострофа (одиночного ' или двойного ''). Заключенное в такие знаки выражение освобождается от одной пары (закрывающего и открывающего знаков '):
Некоторые другие возможности обрамления выражений апострофами мы рассмотрим позже. Наиболее важная из них — временная отмена выполненного ранее присваивания переменным конкретных значений.
Для завершения работы с текущим документом достаточно исполнить команду quit, done или stop, набранную в строке ввода (со знаком ; в конце).
Встречая выражение, Maple 7 оценивает его, то есть устанавливает возможность его вычисления. Если выражение — скалярная переменная, то ее значение будет выведено в ячейке вывода. Для переменных более сложных типов выводится не их значение, а просто повторяется имя переменной. Просто повторяются также имена неопределенных переменных.
Для оценивания выражений различного типа существует группа функций, основные из которых перечислены ниже:
Для функции evalf параметр n является необязательным, при его отсутствии полагается n=10, то есть вещественные числа выводятся с мантиссой, имеющей десять цифр после десятичной запятой.
В выражении ехрr могут использоваться константы, например Pi, exp(l), и функции, такие как ехр, 1 n, arctan, cosh, GAMMA и erf. В матричном выражении mexpr для функции evalr могут использоваться операнды в виде матриц и матричные операторы &*, +, - и ^. В комплексных выражениях mexpr наряду с комплексными операндами вида (а + I*b) могут использоваться многие обычные математические функции:
sin |
cos |
tan |
CSC |
sec |
cot |
sinh |
cosh |
tanh |
csch |
sech |
coth |
arcsin |
arccos |
arctan |
arccsc |
arcsec |
arccot |
arcsinh |
arccosh |
arctanh |
arccsch |
arcsech |
arccoth |
exp |
In |
•sqrt |
* |
abs |
conjugate |
polar |
argument |
signura |
csgn |
Re |
Im |
Ei |
LambertW |
dilog |
surd |
|
|
Примеры применения функций оценивания даны ниже:
В дальнейшем мы многократно будем применять функции оценивания для демонстрации тех или иных вычислений.
Maple 7 может работать не только с одиночными выражениями, но и с последовательностями выражений. Последовательность выражений — это ряд выражений, разделенных запятыми и завершенных фиксатором:
Для автоматического формирования последовательности выражений применим специальный оператор $, после которого можно указать число выражений или задать диапазон формирования выражений:
Для создания последовательностей выражений можно использовать также функцию seq:
При выполнении порой даже простых операций результаты получаются чрезвычайно громоздкими. Для повышения наглядности выражений Maple 7 выводит их с выделением общих частей выражений и с присваиванием им соответствующих меток. Метки представлены символами #N, где N — номер метки. Помимо меток при выводе результатов вычислений могут появляться и другие специальные объекты вывода, например корни RootOf, члены вида О(х"), учитывающие погрешность при разложении функций в ряд, и обозначения различных специальных функций, таких как интегральный синус, гамма-функция и др. Примеры такого вывода приведены ниже:
Часто встречаются также знаки ~ для отметки предполагаемых переменных, постоянные интегрирования и другие специальные обозначения. По мере упоминания в тексте таких объектов вывода они будут описаны.
Maple 7 работает с числами следующего типа: целыми (О, 1, 123, -456 и т. д.), рациональными в виде отношения целых чисел (7/9, -123/127 и т. д.), вещественными с мантиссой и порядком (1.23Е5, 123.4567Е-10). Признаком вещественного числа является десятичная точка (запятая). Примеры простых операций с числами приведены ниже:
Как видно из этих примеров, ввод и вывод чисел имеет следующие особенности:
Десятичная точка в числах имеет особый статус — указание ее в любом месте числа, даже в конце, делает число вещественным и ведет к переводу вычислений в режим работы с вещественными числами. При этом количеством выводимых после десятичной точки цифр можно управлять, задавая значение системной переменной окружения Digits:
Для работы с числами Maple 7 имеет множество функций. Они будут рассмотрены в дальнейшем. На комплексной плоскости числа задаются координатами точек (х, у) (рис. 5.1).
Рис. 5.1. Представление обычных и комплексных чисел на плоскости
Для представления чисел на рис. 5.1 используется функция pointplot(list), где list — список координат точек. Эта функция становится доступной при подключении пакета plots командой with(plots). Кроме того, использована функция вывода ряда графических объектов на один график — display (см. далее описание представления комплексных чисел).
С помощью функции convert Maple 7 может преобразовывать числа с различным основанием (от 2 до 36, в том числе бинарные и шестнадцатеричные) в десятичные числа:
При символьных вычислениях Maple 7 реализует точную арифметику. Это значит, что результат может быть получен с любым числом цифр. Однако надо помнить, что идеально точные численные вычисления выполняются только в случае целочисленных операций, например таких, как приведены ниже:
Maple 7, естественно, может работать с комплексными числами. Мнимая единица в комплексном числе (корень квадратный из -1) обозначается как I. Функции Re(x) и Im(x) возвращают действительную и мнимую части комплексных чисел. Примеры задания комплексного числа и вывода его действительной и мнимой частей представлены ниже:
Комплексные числа обычно представляют на так называемой комплексной плоскости, у точек которой координата х задает действительную часть комплексного числа, а у (мнимая ось) показывает мнимую часть такого числа. На рис. 5.1 показано задание в виде радиус-векторов комплексного числа z = 4+3I, -z и комплексно-сопряженного числа 4-3I.
Окружность радиуса abs(z)=sqrt(a2 + b2) представляет абсолютное значение комплексного числа z=a+b*I. Она является геометрическим множеством комплексных чисел, образованных концом вращающегося радиус-вектора числа z вокруг его начала в точке (0, 0) комплексной плоскости. Позже мы рассмотрим ряд функций для работы с комплексными числами.
Числа могут служить объектами ввода, вывода и константами, входящими в математические выражения. Функция type(x, numeric) позволяет выяснить, является ли х числом. Если является, то она возвращает логическое значение true (истина), а если нет, то false (ложь). Например:
Функции type(x, integer), type(x, rational) и type(x, fraction) можно использовать для проверки того, имеет ли х значение соответственно целого числа, рационального числа или простой дроби:
В Maple возможна работа с числами, имеющими различное основание (base), в частности с двоичными числами (основание 2 — binary), восьмеричными (основание 8 — octal) и шестнадцатеричными (основание 16 — hex). Функция convert позволяет легко преобразовывать форматы чисел:
Помимо приведенных вариантов функция convert имеет еще ряд других форм. С ними можно познакомиться с помощью справки по этой мощной функции. В дальнейшем будет приведен ряд других применений этой функции.
Любые выражения могут включаться также в наборы. Такие наборы в виде множеств создаются с помощью фигурных скобок { }:
Отличительная черта множеств — автоматическое устранение из них повторяющихся по значению элементов. Кроме того, Maple 7 расставляет элементы множеств в определенном порядке — числа в порядке увеличения значения, а символы и строки в алфавитном порядке. Для множеств нет строгого математического определения, и мы будем считать их наборами, удовлетворяющими перечисленным выше признакам.
Для создания упорядоченных наборов — списков — служат квадратные скобки [ ]:
> [10,2+3.4+4,8,5,1]: [10,5,8,8,5,1]
Как нетрудно заметить, элементы списков преобразуются и выводятся строго в том порядке, в каком они были заданы. Списки широко применяются для задания векторов и матриц.
В ряде случаев, например при подготовке данных для двумерных графиков, возникает необходимость в подготовке парных списков — скажем, координат точек (х, у) графика. Для этого можно использовать функцию zip(f, u, v) или zip(f, u, v, d). Здесь f — бинарная функция, u, v — списки или векторы, d — необязательное значение. Примеры применения функции zip даны ниже:
Рисунок 5.2 показывает применение этих средств для построения точек, представляющих множество действительных чисел на плоскости. Для этого использована функция pointplot из пакета plots.
Как отмечалось, важным типом данных являются списки (lists). Они создаются с помощью квадратных скобок, например:
Для создания векторов (одномерных массивов) и матриц (двумерных массивов) служит функция array. Обычно она используется в следующих формах:
Рис. 5.2. Представление множества чисел на плоскости
Двумерные списки часто путают с матрицами. Следует помнить, что векторы и матрицы создаются с помощью функции array и являются отдельным типом данных. Элементами векторов и массивов могут быть константы, переменные, выражения, списки и иные объекты. Эти элементы являются индексированными переменными и их положение указывается индексами. Имеется множество функций для работы со списками, массивами и матрицами. Они будут рассмотрены в дальнейшем. В принципе, размерность массивов, создаваемых списками, не ограничена и массивы могут быть многомерными.
Еще одним важным типом множественных данных являются таблицы. Они задают данные с произвольной индексацией. Для создания таблиц служит функция table, которая при вызове в простейшем виде table[] создает шаблон пустой таблицы:
Пустая таблица резервирует память под данные. Когда параметром функции table является список выражений, он выводится в естественном порядке расположения элементов таблицы, но с произвольным порядком индексации:
В конце приведенных примеров показано, как можно выделить отдельные компоненты таблицы и вывести значения и индексы таблицы с помощью функций entries и indices. Следующие примеры показывают, что таблицу можно использовать для выполнения математических преобразований:
Следует внимательно присмотреться к этим примерам — они демонстрируют замену функции косинуса на отрицательный синус и синуса на косинус.
Строки как тип данных — это просто цепочки символов. Они обычно используются для создания текстовых комментариев. Строки должны каким-либо образом выделяться, чтобы Maple не отождествляла их с именами констант и переменных. Для этого строки-комментарии имеют внутренний разделительный признак, который устанавливается при их вводе (нажатием клавиши F5, которое приводит к исчезновению знака >).
В других случаях последовательность символов рассматривается как строка, если она заключена в обратные апострофы, то есть в знаки '. Два апострофа подряд формируют апостроф как знак символьной строки, например `abc``def ` дает строку abc`def. Любое математическое выражение может входить в строку, разумеется, оно при этом не выполняется:
> '2+2 не всегда "четыре"';
2+2 не всегда 'четыре'
Часто возникает необходимость в задании программных комментариев. Любой текст после знака # рассматривается как невыводимый (неисполняемый) программный комментарий — даже если это математическое выражение. При этом он не вычисляется. Например:
> 2+3;#Это прииер. А это выражение не вычисляется: 4+5
.5
Комментарии полезны в программах на Maple-языке и обычно используются для объяснения особенностей реализованных алгоритмов.
Константы - это простейшие именованные объекты, несущие заранее предопределенные значения. Их имена (идентификаторы) также заранее определены и не могут меняться. Подробную информацию о константах можно найти, исполнив команду ?constant.
Обычные числовые константы не имеют имени и представлены просто числами, типы которых были указаны выше. Можно считать, что именем такой константы является само ее значение. Например, в выражении 2*sin(1.25) числа 2 и 1.25 являются числовыми константами. При этом указание десятичной точки делает константу действительным числом — например, 2 — это целочисленная константа, а 2., 2.0 или 1.25 — это уже действительные константы.
Строковыми константами являются произвольные цепочки символов, заключенные в обратные апострофы, например 'Hello', 'Привет', 'My number' и т. д. Числа, заключенные в апострофы, например '123456', также становятся строковыми константами, которые нельзя использовать в арифметических выражениях. Строковые константы представляют значения строковых переменных. В них можно использовать символы кириллицы при условии, что соответствующий шрифт имеется.
Есть также ряд констант, которые правильнее считать заведомо определенными глобальными переменными:
Любопытно, что в этот список не входит основание натурального логарифма — число е. В качестве этой константы рекомендуется использовать ехр(1). Она отображается как жирная прямая буква Е. A exp(l.0) выводит 2.71828... (что и следовало ожидать).
Имена встроенных констант (как и имена функций) защищены специальным атрибутом protected. Поэтому (без его снятия) константам нельзя присваивать какие-либо значения:
Стоит упомянуть о такой экзотической возможности, как задание в Maple 7 собственных констант путем описания алгоритма генерации входящих в константу цифр (это позволяет получать в представлении константы любое число цифр). Большинство пользователей довольствуется применением вместо таких констант обычных переменных подходящего типа. Зато истинные математики соревнуются друг с другом в создании все новых и новых констант и алгоритмов их вычислений. Примеры этого творчества можно найти на сайте фирмы Wateloo Maple.
Как следует из самого названия, переменные — это объекты, значения которых могут меняться по ходу выполнения документа. Пока мы рассматриваем лишь глобальные переменные, доступные для модификации значений в любом месте документа. Тип переменной в системе Maple 7 определяется присвоенным ей значением — это могут быть целочисленные (integer), рациональные (rational), вещественные (real), комплексные (complex) или строчные (string) переменные и т. д. Переменные могут также быть символьного типа (их значением является математическое выражение) или типа списка (см. далее). Для явного указания типа переменных используется конструкция:
name::type
где name — имя (идентификатор) переменной, type — тип переменной, например целочисленный (integer), вещественный с плавающей точкой (float), с неотрицательным значением (nonneg), комплексный (complex) и т. д.
Переменные задаются своим именем — идентификатором, который должен начинаться с буквы и быть уникальным. Это значит, что ключевые слова языка Maple нельзя использовать в качестве имен переменных. Хотя имена ряда команд и функций можно использовать в качестве идентификаторов переменных, делать это крайне нежелательно. Ограничений на длину идентификатора практически нет — точнее, она не должна превышать 524 275 символов! Так что сложностей с подбором идентификаторов для переменных у вас не будет.
Имена переменных могут содержать одну букву (например, х, Y или Z) либо ряд букв (Xmin или Хmах). В любом случае имя переменной надо начинать с буквы. Некоторые символы, например знак _, могут использоваться в именах (например, Var_l, Var_2). Нельзя, однако, вводить в имена переменных знаки, обозначающие операторы, — например, а/b или а-b будет истолковано как деление а на b или вычитание из переменной а переменной b.
Имена могут задаваться в обратных апострофах. При этом они просто тождественны именам без апострофов:
Строчные и прописные буквы в идентификаторах различаются, так что Varl и varl — это разные переменные.
Для проверки предполагаемого имени на уникальность достаточно выполнить команду ?name, где name — выбранное имя. Если при этом откроется окно справки с этим именем, значит, оно уже использовано в Maple. Лучше воздержаться от его применения, так как связанная с этим именем команда или функция перестает работать, как только это имя закрепляется за какой-либо переменной.
Поскольку Maple 7 прежде всего система символьной математики, то по умолчанию любые переменные рассматриваются как объекты символьного типа. Благодаря этому такие переменные могут фигурировать в математических выражениях (таких, как sia(x)/x) без их предварительного объявления. В отличие от обычных языков программирования такое использование переменных не влечет за собой появления сообщений об ошибках и является более естественным. Для присваивания переменным конкретных значений используется комбинированный символ присваивания «:=», например:
Правая часть выражения присваивания определяет тип переменной. Например, она может быть целочисленной, действительной, строковой, индексированной (элемент массива) и т. д.
Переменная, имеющая какое-либо значение, занимает в памяти намного больше места, чем неопределенная переменная. У последней место в памяти занимают только символы идентификатора. Поэтому нередко целесообразно отменить присваивание у тех переменных, которые в дальнейшем можно не использовать. Это может понадобиться и в том случае, когда какую-либо переменную с численным или иным значением нужно использовать просто как неопределенную переменную. Рассмотрим следующий пример:
Здесь не удалось вычислить интеграл с подынтегральной функцией х"2 из-за того, что переменная х уже определена ранее как целочисленная переменная со значением 10, тогда как для вычисления интеграла она должна быть необъявленной или строковой (убедитесь в этом сами).
Для отмены присваивания надо использовать следующее выражение:
Итак, заключение имени переменной в прямые апострофы ликвидирует присваивание. Так что запись х:='х' означает, что переменной х возвращается статус неопределенной переменной. Теперь можно вычислить интеграл:
Можно сделать переменную х неопределенной и с помощью выражения вида x:=evaln(x). Это поясняет следующий пример:
Для отмены присваивания значений разом всем переменным (и введенным функциям пользователя) можно использовать команду restart. Следующий пример поясняет ее применение:
Следует отметить, что команда restart отменяет все предшествующие определения, что иногда чревато осложнениями. Применяйте ее только тогда, когда вы уверены, что предшествующая заданной часть документа (или даже ряда документов) действительно не важна.
Важно отметить, что Maple сохраняет в памяти все определения и присваивания, которые были сделаны во всех загруженных в систему документах. Поэтому результаты вычислений в текущем документе могут зависеть от определений в других документах. Команда restart позволяет исключить эту зависимость.
В большинстве расчетов пользователей Maple вполне удовлетворяет статус переменных, соответствующий присвоенным им значениям. Однако серьезные расчеты предполагают, что переменные могут иметь определенные ограничения — например, они не должны принимать отрицательных значений при обычном вычислении квадратного корня или логарифма числа.
Для придания переменным статуса предполагаемых используется функция assume: assume(x.prop): где х — переменная, имя или выражение, prop — свойство. Следующие примеры показывают применение функции assume:
Обратите внимание, что в этом примере переменная х помечена как положительная и при выводе сопровождается знаком тильды -, как бы предупреждающим нас о ее особом статусе. Это не означает, что она не может принять отрицательное значение. Однако с помощью функции is можно убедиться в ее особом статусе и при необходимости программным путем исключить вычисления для х <0. Кроме того, о свойствах переменной можно узнать с помощью функции about (name).
Иногда к уже имеющимся признакам надо добавить новые. Для этого используется функция additionally:
В этом примере переменной а вначале задан признак положительности, а затем а<=0. Оба признака удовлетворяются только при a= 0, что и подтверждает вывод информации о статусе этой переменной функцией about (а).
Предполагаемую переменную можно также изменить путем присваивания ей нового значения, противоречащего ее статусу:
Для отмены переменным статуса предполагаемых используются те же приемы, что и при отмене присвоенного значения. Например, запись х:=' х' отменяет статус предполагаемой для переменной х.
В этом уроке мы научились:
Операторы во входном языке и языке программирования Maple служат для конструирования выражений. Формально операторы представлены своими идентификаторами в виде специальных математических знаков, слов и иных имен. Операторы, как это вытекает из их названия, обеспечивают определенные операции над данными, представленными операндами.
Имеется пять основных типов операторов:
Для просмотра операторов и их свойств можно использовать следующие команды:
> ?operators[binary];
> ?operators[unary];
> ToperatorsCnullary];
> ?operators[precedence];
> ?operators[functional]:
А для изучения примеров применения операторов нужно задать и исполнить команду:
> ?operators[examples];
Команда:
> Tdefine:
позволяет ознакомиться с функций define. С ее помощью можно определять новые операторы.
Бинарные (инфиксные) операторы используются с двумя операндами, обычно размещаемыми по обе стороны от оператора. В ядро Maple 7 включено около трех десятков бинарных операторов. Основные из них перечислены в табл. 6.1.
Tаблица 6.1. Бинарные операторы
Обозначение |
Оператор |
+ |
Сложение |
- |
Вычитание |
* |
Умножение |
/ |
Деление |
** или ^ |
Возведение в степень |
mod |
Остаток от деления |
$ |
Оператор последовательности |
. |
Разделительная точка |
@ |
Оператор композиции |
@@ |
Повторение композиции |
, |
Разделитель выражений |
:= |
Присваивание |
. .. |
Задание интервала |
/ |
Разделитель выражений |
&* |
Некоммутативное умножение |
&<string> |
Нейтральный оператор |
|| |
Конкатенация (объединение) |
Примеры использования бинарных операторов:
Оператор композиции @@ может использоваться для создания сложных функций, содержащих цепные дроби:
А вот еще один пример применения этого оператора для составления цепного радикала и вычисления ряда таких цепочек в цикле:
Для данных типа «множество» определены следующие бинарные операторы:
В любом случае, в результирующем множестве устраняются повторяющиеся элементы. Действие этих операторов поясняют следующие примеры:
Напоминаем, что эти операторы заданы ключевыми словами. Обратите внимание на то, что в Maple 7 результат применения оператора union представлен членами, расположенными в довольно произвольном порядке.
Унарные операторы используются с одним операндом. Они могут быть префиксными, если оператор стоит перед операндом, и постфиксными, если он стоит после операнда. К унарным относятся семь операторов, приведенных в табл. 6.2.
Таблица 6.2. Унарные операторы
Обозначение |
Оператор |
+ |
Унарный плюс (префикс) |
- |
Унарный минус (префикс) |
; |
Факториал (постфикс) |
. |
Десятичная точка (префикс или постфикс) |
$ |
Последовательность (префикс) |
not |
Логическое отрицание (префикс) |
&string |
Метка (префикс) |
Примеры применения унарных операторов:
Мы уже неоднократно отмечали, что оператор % обеспечивает подстановку в строку ввода (или в выражение) последнего результата операции, Х% — предпоследнего и %%% — третьего с конца. Есть еще одна иногда полезная возможность проследить за ходом частных вычислений внутри документа — применение команды-функции history. В Maple V R5 это была библиотечная функция, которая требовала вызова из библиотеки. В Maple 7 такого вызова уже не требуется. Функция history (ехрr) или history() создает список переменных вида от, где индекс f = 1, 2, 3.... Этим переменным можно присваивать значения в диалоговом режиме и отслеживать результаты вычислений. Команда off;, вводимая после использования данной функции, завершает работу с ней. Ниже представлен диалог с применением функции history:
К сожалению, полученный результат и значения глобальных переменных 01 после завершения работы с данной функцией становятся недоступными, так что практической пользы от ее применения не так уж много. Разумеется, внутри блока history вы можете присвоить результат другой переменной и он сохранится (попробуйте это сделать сами). При каждом очередном применении функции history нумерация переменных 0i начинается с начала, так что какой-либо преемственности при использовании этой функции нет.
Функция history может применяться в качестве средства начальной отладки вычислений. Внутри фрагмента программы, заданного функцией history, можно задавать построения графиков. Например, при исполнении фрагмента программы:
будет построен график синусоиды. В целом работа с функцией history отличается не слишком высокой стабильностью, так что возможности этой функции пока остаются не слишком востребованными.
Логические (или булевы) операторы указывают на логическую связь величин (или выражений). Прежде всего они представлены рядом бинарных операторов, приведенных в табл. 6.3.
Таблица 6.З. Бинарные логические операторы
Обозначение |
Оператор |
< |
Меньше |
<» |
Меньше или равно |
> |
Больше |
>= |
Большее или равно |
- |
Равно |
О |
Не равно |
and |
Логическое «и» |
or |
Логическое «или» |
Конструкции с этими операторами, такие как х=у, возвращают логическое значение — константу true, если условие выполняется, и false, если оно не выполняется. Кроме того, к логическим операторам относится унарный оператор not — он представляет логическое «нет». Для возврата логических значений выражений с этими операторами используется функция evalb(условие), например:
Логические операторы часто используются в управляющих структурах программ, составленных на языке программирования Maple. Такое их применение мы рассмотрим позже.
Операторы в Maple описывают операции по преобразованию данных, в частности выражений. Последние, в свою очередь, можно отнести к данным абстрактного типа. Могут быть описаны следующие типы операторов:
Оператор относится к неопределенным, если он не был заранее определен. Такой оператор не выполняет никаких действий и просто повторяется в строке вывода:
> restar:f(1,2,а):
f(l,2,a)
Композиционные операторы (на базе знака @) мы уже применяли. Другие типы операторов рассмотрены ниже.
Функциональные операторы Maple-языка являются альтернативами функций и записываются в двух формах.
Нотация |
Запись оператора |
«arrow» (стрелочная) |
vars -> result |
«angle bracket» (в угловых скобках) |
<result | vars> |
Данные операторы могут использоваться для реализации подстановок. Например, запись х -> х^2 означает подстановку х*2 на место переменной х. Возможны и такие подстановки в множественной форме:
Функциональный оператор в Maple 7 часто используется для задания функций пользователя, которое будет рассмотрено несколько позднее.
Для создания нейтральных (задаваемых пользователем и в момент задания неисполняемых) операторов, определяемых пользователем, служит знак амперсанда — &. Синтаксис нейтрального оператора следующий:
&name
Имя оператора строится по правилам задания допустимых идентификаторов. Также в качестве имени может быть использована последовательность (один и более) специальных символов. В последовательности специальных символов не должно быть букв, цифр, подчеркивания, а также следующих символов:
& | () {} [] :: '' # <перевод строки> <пробел>
Максимальная длина имени — 495 символов. Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного нейтрального оператора приведены ниже:
Большие возможности для создания операторов с заданными свойствами предоставляет специальный оператор define. Он записывается в следующей форме:
define(oper, property1, property2. ._)
Здесь ореr — имя определяемого оператора, property!, property2 и т. д. — наименования свойств. В принципе, оператор define позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов и функций, встроенных в систему.
Могут быть указаны следующие свойства операторов:
Следующий пример задает линейный оператор L:
Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f(x)=value. Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет n-е число Фибоначчи (n > 2):
Обратите внимание на то, что соотношения fib(0)=l и fib(l)=l задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения, — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующих чисел Фибоначчи.
Последний пример иллюстрирует применение системной функции time для определения времени, затраченного на вычисление значения функции fib(20). Это время задается в секундах. Нетрудно заметить, что даже для ПК с процессором Pentium II 350 МГц это время оказалось довольно значительным (более 3 с), поскольку каждое новое число Фибоначчи вычисляется заново.
Maple 7 имеет полный набор элементарных математических функций. Все они, кроме арктангенса двух аргументов, имеют один аргумент х, например sin(x). Он может быть целым, рациональным, дробно-рациональным, вещественным или комплексным числом. В ответ на обращение к ним элементарные функции возвращают соответствующее значение. Поэтому они могут быть включены в математические выражения. Все описанные здесь функции называются встроенными, поскольку они реализованы в ядре системы.
Как правило, если аргументом функции является фундаментальная константа, целое или рациональное число, то функция выводится с таким аргументом без получения результата в форме действительного числа с плавающей точкой. Например:
Нетрудно заметить, что есть и исключения из этого правила — например, на экране монитора ехр(1) будет выведено как константа е, а значение функции arcsin( 2) все же вычислено и результат получен как 1/6 от константы Pi. Вообще говоря, если результат выражается через фундаментальную математическую константу, то он будет вычислен и представлен ею. В противном случае функция с целочисленным и рациональным аргументом или с константой просто повторяется в строке вывода в установленном для этой строки формате.
Для получения подробной информации о некоторой произвольной функции <f> достаточно задать команду:
?<f>
Ввиду общеизвестности элементарных функций мы не будем обсуждать ни их свойства, ни допустимые для них пределы изменения аргумента.
Ниже представлены наиболее распространенные целочисленные функции Maple 7, используемые в теории чисел:
Примеры применения:
В последних двух примерах применения оператора факториала полезно обратить внимание, что запись n!! означает лишь (n!)!, а не n!! = 2*4*6*..., то есть произведение четных целых чисел. Действие других функций очевидно.
В ядре Maple определены следующие тригонометрические функции:
Все эти функции являются периодическими (с периодом 2л, кроме тангенса и котангенса, у которых период равен л) и определены для действительного и комплексного аргументов. Примеры вычислений:
Многие свойства тригонометрических функций можно оценить, рассматривая их графики. Для построения таких графиков можно использовать функцию pi ot. На рис. 6.1 сверху показаны графики ряда тригонометрических функций.
Рис. 6.1. Графики ряда тригонометрических и обратных тригонометрических функций
Из графиков тригонометрических функций (рис. 6.1, сверху) хорошо видна их периодичность. Функция тангенса имеет разрывы, и ее значение в этих точках в пределе равно бесконечности. Поэтому для наглядного ее представления вместе с функциями синуса и косинуса (их экстремальные значения по модулю равны 1) приходится вводить ограничения на масштаб графика по оси у.
ПРИМЕЧАНИЕ
Обратите внимание на параметр color=black в функции построения графиков plot. Он задает построение всех графиков черным цветом, что сделано для более четкой печати их в книге. Если убрать этот параметр, то графики разных функций будут строиться с использованием разных цветов, что облегчит их различение. Другие способы выделения отдельных кривых будут описаны в дальнейшем при описании графических возможностей системы Maple 7.
К обратным тригонометрическим относятся следующие функции:
Примеры вычислений:
К этому классу функций принадлежит еще одна полезная функция: arctan(y.x) = argument(x+I*y)
Она возвращает угол радиус-вектора в интервале от -Pi до Pi при координатах конца радиус-вектора х и у (см. пример ниже):
Графики ряда обратных тригонометрических функций показаны на рис. 6.1.
Гиперболические функции представлены следующим набором:
Примеры применения гиперболических функций представлены ниже:
На рис. 6.2 сверху представлены графики гиперболического синуса, косинуса и тангенса. По ним можно судить о поведении этих функций.
Рис. 6.2. Графики основных гиперболических и обратных гиперболических функций
ПРИМЕЧАНИЕ
В отличие от тригонометрических гиперболические функции не являются периодическими. Функция гиперболического тангенса имеет симметричную кривую с характерными ограничениями. Поэтому она широко используется для моделирования передаточных характеристик нелинейных систем с ограничением выходного параметра при больших значениях входного параметра.
Как и тригонометрические функции, гиперболические имеют свои обратные функции:
Примеры применения:
Графики обратных гиперболических синуса, косинуса и тангенса представлены на рис. 6.2 снизу.
К степенным и логарифмическим относятся следующие функции системы Maple 7:
Примеры применения:
Графики ряда алгебраических функций показаны на рис. 6.3.
Рис. 6.З. Графики ряда алгебраических функций
На рис. 6.3 показаны также графики синусоиды с экспоненциально падающей и нарастающей амплитудой. Читателю рекомендуется попробовать свои силы в построении графиков комбинаций различных функций.
В алгоритме вычисления ряда функций заложено сравнение результата с некоторым опорным значением. К таким функциям относятся:
Для комплексного аргумента х эти функции определяются следующим образом:
Для введения определения значения floor(x) от комплексного аргумента прежде всего запишем а = Re(x) - fооr(Re(x)) и b = Im(x) - floor(Im(x)). Тогда flооr(x) = floor(Re(x)) + I*floor(Im(x)) + X, где
Наконец, функция ceil для комплексного аргумента определяется следующим образом:
cell(x) = -fооr(-х)
Примеры применения:
Для комплексных чисел и данных, помимо упомянутых в предшествующем разделе, определен следующий ряд базовых функций:
Примеры применения:
Специальные математические функции обычно являются решениями линейных дифференциальных уравнений различного типа и выражаются в виде интегралов, не представимых через элементарные функции. Maple 7 имеет практически полный набор таких функций. Их представления можно найти в справочной литературе, а также в справочной базе данных Maple. В связи с этим ограничимся приведением названий наиболее важных специальных функций:
Ввиду большого числа специальных функций и наличия множества примеров их вычисления в справочной системе Maple 7 ограничимся несколькими примерами вычисления наиболее распространенных специальных функций. По их подобию читатель может опробовать в работе и другие специальные функции.
На рис. 6.4 даны примеры применения ряда специальных функций. Обратите особое внимание на первый пример. Он показывает, как средствами системы Maple 7 задается определение функций Бесселя. Показано, что функции Бесселя являются решениями заданного на рис. 6.4 дифференциального уравнения второго порядка. Maple 7 способна вычислять производные и интегралы от специальных функций.
Рис. 6.4. Примеры применения специальных функций
Еще несколько примеров работы со специальными функциями представлены на рис.6.5. Как видно из приведенных примеров, на экране монитора можно получить математически ориентированное представление специальных функций, обычно более предпочтительное, чем представление на Maple-языке или в текстовом формате. Записи функций при этом выглядят как в обычной математической литературе.
Рис. 6.5. Примеры работы со специальными математическими функциями
На рис. 6.5 показаны примеры разложения специальных функций в ряды и применения функции convert для их преобразования.
Много информации о поведении специальных функций дает построение их графиков. На рис. 6.6 показано построение семейства графиков функций Бесселя BesselJ разного порядка и гамма-функции. Эти функции относятся к числу наиболее известных. Если читателя интересуют те или иные специальные функции, следует прежде всего построить и изучить их графики.
Подробное описание специальных функций можно найти в справочниках [43-45] и в справочной базе данных Maple 7.
Рис. 6.6. Графики функций Бесселя и гамма-функции
Элементы векторов и матриц являются индексированными переменными, то есть место каждого элемента вектора определяется его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают как i (номер строки матрицы или порядковый номер элемента вектора) iij (номер столбца матрицы). Допустимы операции вызова нужного элемента и присваивания ему нового значения:
V[1] — вызов i-го элемента вектора V;
M[i, j] — вызов элемента матрицы М, расположенного на г-н строке в j-ы столбце;
V[i]:=x — присваивание нового значения х i-му элементу вектора V;
M[i,j]:=x — присваивание нового значения х элементу матрицы М.
Прежде всего надо обратить внимание на то, что векторы и матрицы хотя и похожи на списки, но не полностью отождествляются с ними. В этом можно убедиться с помощью следующих примеров, в которых функция type используется для контроля типов множественных объектов (векторов и матриц):
Однако, используя функцию преобразования данных convert, можно преобразовывать одномерные списки в векторы, а двумерные — в матрицы. Функция type используется в следующих формах:
Здесь параметры vector и matrix используются для указания того, какой тип объекта проверяется.
ПРИМЕЧАНИЕ
Обратите внимание на то, что матрицы отображаются иначе, чем двумерные списки, без двойных квадратных скобок. Отображение вектора подобно отображению одномерного списка, поэтому здесь особенно важен контроль типов данных.
Важное достоинство систем компьютерной алгебры, к которым относится и Maple 7, заключается в возможности выполнения аналитических (символьных) операций над векторами и матрицами.
Приведем примеры операций над векторами:
В этих примерах используется функция evalm(M), осуществляющая вычисление матрицы или вектора М.
ПРИМЕЧАНИЕ
Рекомендуется перед проведением символьных операций с векторами и матрицами очистить память от предшествующих определений с помощью команды restart. Если какие-то элементы векторов или матриц были ранее определены, это может привести к очень сильным искажениям вида конечных результатов. Очистка памяти устраняет возможность ошибок такого рода.
Над матрицами с численными элементами можно выполнять разнообразные операции. Ниже приведены основные из них:
ПРИМЕЧАНИЕ
Рекомендуется внимательно изучить эти примеры и попробовать свои силы в реализации простых матричных операций. Мы вернемся к гораздо более серьезному описанию матричных операций и функций в дальнейшем.
Ниже представлены примеры символьных операций, осуществляемых над квадратными матрицами одного размера:
Приведем еще ряд примеров выполнения символьных операций с одной матрицей:
Среди других функций для работы с матрицами полезно обратить внимание на функцию mар, которая применяет заданную операцию (например, функции дифференцирования diff и интегрирования int) к каждому элементу матрицы. Примеры такого рода даны ниже:
В результате возвращаются матрицы, каждый элемент которых представлен производной или интегралом. Аналогично можно выполнять над матрицами и другие достаточно сложные преобразования.
В дальнейшем мы продолжим изучение матричных функций и операций, включенных в пакеты Maple 7.
Контроль типа строковых данных
Напоминаем, что строковые данные представляются совокупностью любых символов в обратных апострофах, например *Привет* или `2+2`. Для контроля объектов на принадлежность к строковым данным служит функция type с параметром string:
Из приведенных примеров видно, что контроль строкового типа осуществляется не очень строго, — в частности, единичные символы рассматриваются как строковые и без заключения их в апострофы. В строках могут быть символы кириллицы, но гарантии в правильности обработки таких символов нет — надо мириться с тем, что Maple — англоязычная программа и ее возможности в поддержке других языков ограниченны.
Для интерактивного ввода строк можно использовать функцию readline(filename), задав в качестве имени файла terminal или опустив имя файла. В этом случае ввод строки осуществляется с клавиатуры компьютера:
> s:=read1ine();
> Привет мой друг!
s:="Привет мой друг!"
ПРИМЕЧАНИЕ
Полезно обратить внимание на то, что запрос в ходе интерактивного ввода может быть сделан на русском языке (если установленный для запросов шрифт имеет символы кириллицы). Нужно также, чтобы и шрифт строки вывода содержал кириллицу, иначе в строке вывода будет типичная «абракадабра» — смесь непонятных символов.
Имеется ряд функций для работы со строками. Из них наиболее важны следующие:
Примеры применения этих функций (в виде продолжения ранее приведенных примеров) представлены ниже:
Эти функции дают достаточно средств для обработки данных строкового типа, которые можно применять не только для создания текстовых комментариев, но и для управления вычислительным процессом в программах.
Часто возникает необходимость в интерактивном вводе математических выражений. Для ввода с запросом выражения используется функция readstat(promt), где promt — строка с текстовым комментарием. Пример ее применения дан ниже:
Альтернативой может стать ввод строкового выражения с последующим преобразованием его в математическое выражение с помощью функции parse:
Обратите внимание на то, что функция evaln не смогла вычислить строковое выражение `2+3` поскольку оно не является числовым типом данных. Однако функция parse преобразовала это выражение в числовое, что и привело к его вычислению.
В этом уроке мы научились:
Упрощенные функции пользователя
Хотя ядро Maple 7, библиотека и пакеты содержат свыше 3000 функций, всегда может оказаться, что именно нужной пользователю (и порою довольно простой) функции все же нет. Тогда возникает необходимость в создании собственной функции, именуемой функцией пользователя. Начнем описание с обычных функций пользователя, задающих некоторую зависимость от одной или ряда переменных в явном виде.
Основным средством расширения Maple-языка являются модули — процедуры. Однако на первый взгляд они довольно сложны. Есть и более простые способы задания функций пользователя. Один из таких способов заключается просто в присваивании введенной функции (в виде выражения) некоторой переменной: Name:-выражение
Этот прием фактически означает просто операцию присваивания. Следующие примеры иллюстрируют технику работы с такими функциями:
Заданный таким образом объект все же не является полноценной функцией пользователя, и прежде всего потому, что в нем используются только глобальные переменные (х и у) и нет объявленного списка параметров, от которых зависит значение функции. При этом значения переменных функции приходится заведомо задавать отдельно, используя операции присваивания. Подобные конструкции нельзя ввести в библиотеки Maple 7.
Более гибкий способ задания полноценных функций пользователя базируется на применении функционального оператора. При этом используется следующая конструкция:
name:=(x,y,...)->expr
После этого вызов функции осуществляется в виде name(x.y,...), где (х.у,...) — список формальных параметров функции пользователя с именем name. Переменные, указанные в списке формальных параметров, являются локальными. При подстановке на их место фактических параметров они сохраняют их значения только в теле функции (ехрr). За пределами этой функции переменные с этими . именами оказываются либо неопределенными, либо сохраняют ранее присвоенные им значения. Следующие примеры иллюстрируют сказанное:
Нетрудно заметить, что при вычислении функции m(х.у) переменные х и у имели значения 3 и 4, однако за пределами функции они сохраняют нулевые значения, заданные им перед введением определения функции пользователя. Еще один способ задания функции пользователя базируется на применении функции unapply: name:=unapply(expr.varl.var2,...) Ниже даны примеры такого задания функции пользователя:
Последний пример показывает возможность проведения символьных операций с функцией пользователя.
В ряде случаев весьма желательна визуализация результатов выполнения функций пользователя. Порой она может давать неожиданный результат. На рис. 7.1 представлены примеры задания двух функций пользователя от двух переменных и построение их графиков с помощью функции plot3d.
а
Рис. 7.1. Примеры задания функций пользователя двух переменных с построением их графиков
ВНИМАНИЕ
При задании функций пользователя рекомендуется просмотреть их графики в нужном — диапазоне изменения аргументов. К сожалению, наглядными являются только графики функций одной и двух переменных.
Другой важный класс функций, которые нередко приходится задавать, — импликативные функции, в которых связь между переменными задана неявно, в виде какого-либо выражения. Самый характерный пример такой функции — это выражение для задания окружности радиуса r: х^2 + у^2 = r^2.
Итак, импликативные функции записываются как уравнения. Соответственно их можно решать с помощью функции solve. Следующие примеры иллюстрируют задание уравнения окружности в общем и в частном (численном) виде:
Для графической визуализации импликативных функций служит функция implicitplot пакета plots. На рис. 7.2 представлено задание двух импликативных функций и построение их графиков.
Рис. 7.2. Задание двух импликативных функций и построение их графиков
В данном случае задано построение двух эллипсов. Верхний — это окружность, сплюснутая по вертикали, а второй — наклонный эллипс.
Для подготовки разветвляющихся программ в Maple-язык программирования включен оператор if, позволяющий создавать следующую конструкцию:
if <Условие сравнения? then <Элементы>
|elif «Условие сравнения> then <Элементы>|
|e1se <Элементы>|
fi:
В вертикальных чертах | | указаны необязательные элементы данной конструкции. Следующих два вида условных выражений чаще всего используются на практике:
В задании условий используются любые логические конструкции со знаками сравнения (<, <=, >, >=, =, <>) и логические операторы and, or и not, конструкции с которыми возвращают логические значения true и false. Рассмотрим следующий простой пример:
> х:-5:
> if x<0 then print('Negative') fi;
Negative
> x:-l: > if x<0 then print('Negative') fi;
В этом примере анализируется значение х. Если оно отрицательно, то с помощью функции вывода print на экран выводится сообщение «Negative». А вот если х неотрицательно, то не выводится никакого сообщения. В другом примере если х неотрицательно, то выводится сообщение «Positive»:
> х.— 5:
> if x<0 then print('Negative') else print('Positive') fi;
Negative > x:-l:
> if x<0 then printСNegative") else printC'Positive') fi;
Positive
Приведем еще один пример, показывающий особую форму задания конструкции if-then-else-fi:
> х:=-5:
> 'if (x<0, printCNegative').print('Positive'));
Negative
> х:=1:
> *1f (х<0. print("Negative'),printrPositive'));
Positive
В этой конструкции вида 'if '(Условие. Выражение1, Выражение2)
если Условие выполнятся, то будет исполнено Выражение!, в противном случае будет исполнено Выражение2. Ввиду компактности записи такая форма условного выражения нередко бывает предпочтительна, хотя она и менее наглядна. На рис. 7.3 представлено применение данной конструкции для моделирования трех типов сигналов.
а
б
Рис. 7.3. Применение конструкции с функцией if для моделирования сигналов
К сожалению, функции на базе конструкции if не всегда корректно обрабатываются функциями символьной математики. Поэтому надо тщательно контролировать полученные в этом случае результаты.
Зачастую необходимо циклическое повторение выполнения выражения заданное число раз или до тех пор, пока выполняется определенное условие. Maple 7 имеет обобщенную конструкцию цикла, которая задается следующим образом:
| for <name>| |from <exprl>| |to <expr3>| |by <expr2>| (while <expr4>| do Statement sequence> od;
Здесь name — имя управляющей переменной цикла, exprl, ехрr2 и ехрrЗ — выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, ехрr4 — выражение, задающее условие, пока цикл (набор объектов между словами do и od) будет выполняться.
В ходе выполнения цикла управляющая переменная меняется от значения exprl до значения ехрr2 с шагом, заданным ехрrЗ. Если блок by <ехрr2> отсутствует, то управляющая переменная будет меняться с шагом +1 при ехргКехрг2. Это наглядно поясняет следующий пример:
> for i front 1 to 5 do printd) od;
1
2
3
4
5
В нем выводятся значения переменной i в ходе выполнения цикла. Нетрудно заметить, что она и впрямь меняется от значения 1 до значения 5 с шагом +1. Следующий пример показывает, что границы изменения управляющей переменной можно задать арифметическими выражениями:
> for i from 7/(2+5) to 2+3 do printd) od:
1
2
3
4
5
А еще один пример показывает задание цикла, у которого переменная цикла меняется от значения 1 до 10 с шагом 2:
> for i from 1 to 10 by 2 do printd) od: 1 3 5 7 9
8 этом случае выводятся нечетные числа от 1 до 9. Шаг может быть и отрицательным:
> for i from 9 to 1 by -2 do print(i) od:
9
7
5
3
1
Следует отметить, что если exprl>expr2 задать заведомо невыполнимое условие, например, ехрr1>ехрг2 и положительное значение шага, то цикл выполняться не будет. Цикл можно прервать с помощью дополнительного блока while <ехрr4>. Цикл с таким блоком выполняется до конца или до тех пор, пока условие ехрг4 истинно.
> for i from 1 to 10 by 2 while i<6 do print(i) od:
1
3
5
Таким образом, конструкция цикла в Maple-языке программирования вобрала в себя основные конструкции циклов for и while. Есть еще одна, более специфическая конструкция цикла:
|for <name>| |in <exprl>| |whi1e <expr2>| do statement sequence> od:
Здесь exprl задает список значений, которые будет принимать управляющая переменная name. Цикл будет выполняться, пока не будет исчерпан список и пока выполняется условие, заданное выражением ехрг2. Следующий пример иллюстрирует сказанное:
> for i in [1.2,5,-1.7.12] do print(i) od;
1
2 5 -1 7
12 > for i in [1,2.5.-1,7.12] while i>0 do print(i) od:
1
2 5
В цикле этого вида управляющая переменная может меняться произвольно. Циклы могут быть вложенными. Это иллюстрирует следующий пример, создающий единичную матрицу на базе заданного массива М:
Этот пример имеет не более чем познавательное значение, поскольку для создания такой матрицы Maple 7 имеет функцию identity, с помощью которой функция array позволяет сразу создать единичную матрицу:
В заключение отметим, что возможна упрощенная частная конструкция цикла типа while:
while expr do statseq od:
Здесь выражения statseq выполняются, пока выполняется логическое условие ехрr. Пример такого цикла:
> n:=1:
n:=1 .
> while n<16 do n:»2*n od;
n:=2
n := 4
n := 8
n :=16
В этом примере идет удвоение числа n с начальным значением n = 1 до тех пор, пока значение n меньше 16.
Иногда бывает нужным пропустить определенное значение переменной цикла. Для этого используется оператор next (следующий). Приведенный ниже пример иллюстрирует применение оператора next в составе выражения if-fi для исключения вывода значения i = -2:
> for 1 in [1,2.3.-2.4] do if i--2 then next else print(i) fi od:
1
2 .3
4
Другой оператор — break — прерывает выполнение фрагмента программы (или цикла). Его действие поясняет слегка модифицированный предшествующий пример:
> for i in [1.2.3.-2,4] do if i=2 then break else print(i) fi od:
1
2
3
В данном случае при значении i = -2 произошло полное прекращение выполнения цикла. Поэтому следующее значение 4 переменной z присвоено не было и это значение на печать не попало.
Любой из операторов quit, done или stop обеспечивает также прерывание выполнения текущей программы (в частности, цикла), но при этом окно текущего документа закрывается.
Процедурой называют модуль программы, имеющий самостоятельное значение и выполняющий одну или несколько операций, обычно достаточно сложных и отличных от операций, выполняемых встроенными операторами и функциями.
Процедуры являются важнейшим элементом структурного программирования и служат средством расширения возможностей системы Maple 7 пользователем. Каждая процедура имеет свое уникальное имя и список параметров (он может быть пустым). Процедуры вызываются так же, как встроенные функции, — указанием их имени со списком фактических параметров. При этом просто процедуры обычно не возвращают каких-либо значений после своего исполнения, хотя могут присваивать значения входящим в них переменным. Процедуры-функции в ответ на обращение к ним возвращают некоторое значение. Они как бы являются новыми функциями, задаваемыми пользователем. Описанные ранее функции пользователя фактически являются процедурами-функциями с несколько упрощенной структурой. Простейшая форма задания процедуры следующая:
name :=ргос(Параметры)
Тело процедуры
end;
Параметры процедуры задаются перечислением имен переменных, например ргос(х) или proc(x.y.z). С помощью знака :: после имени переменной можно определить ее тип, например в объявлении prog(n::Integer) объявляется, что переменная п является целочисленной. При вызове процедуры выражением вида:
name(Фактические_параметры)
фактические параметры подставляются на место формальных. Несоответствие фактических параметров типу заданных переменных ведет к сообщению об ошибке и к отказу от выполнения процедуры.
В качестве примера ниже приведена процедура вычисления модуля комплексного числа г — в данном случае это единственный параметр процедуры:
ПРИМЕЧАНИЕ
После ввода заголовка процедуры под строкой ввода появляется сообщение: «Warning, premature end of input». Оно указывает на то, что ввод листинга процедуры не закончен и должен быть продолжен до тех пор, пока не будет введено завершающее слово end листинга процедуры. Если после этого слова поставить символ точки с запятой, то листинг процедуры будет выведен на экран дисплея.
Теперь для вычисления модуля достаточно задать обращение к процедуре modc(z), указав вместо z конкретное комплексное число:
> modc(3.+I*4.); 5.000000000
Нетрудно заметить, что при знаке : после завершающего слова end текст процедуры повторяется в строке вывода (в общем случае в несколько ином виде). Если это повторение не нужно, после слова end надо поставить знак двоеточия. Обратите также внимание на то, что для обозначения действительной и мнимой частей процедуры в ее тексте появились готические буквы.
Как отмечалось, процедуры, которые возвращают значение результата в ответ на обращение к ним, во многом тождественны функциям. Будем называть их процедурами-функциями. Обычно процедура возвращает значение последнего выражения в ее теле или выражения, намеченного к возврату специальным оператором RETURN:
Параметром оператора RETURN может быть любое выражение. В Maple не принято выделять процедуры-функции в какой-то отдельный класс. Действует правило — если не использован оператор RETURN, процедура возвращает значение последнего выражения в ее теле. Для устранения выдачи значений выражений внутри процедуры-функции после них просто надо установить знак двоеточия.
Переменные, которые указываются в списке параметров (например, г, в нашем случае), внутри процедуры являются локальными. Это означает, что изменение их значений происходит лишь в теле процедуры, то есть локально. За пределами тела процедуры эти переменные имеют то значение, которое у них было до использования процедуры. Это хорошо поясняет следующий пример:
> restart:z:=l;
z :=
> modc:=proc(z)
> evalf(sqrt(Re(z)"2+Im(z)"2));
> end;
mode := proc(z) evalf(sqrt(<R(z)A2 + 3(z)A2)) endproc > modc(3.+I*4.):
5.000000000
> z;
1
Нетрудно заметить, что внутри процедуры 2 = 3 + I*4, тогда как вне ее значение z= 1, Таким образом, имена переменных в списке параметров процедуры могут совпадать с именами глобальных переменных, используемых за пределами процедуры.
Переменные, которым впервые присваивается значение в процедуре, также относятся к локальным. Кроме того, переменные, применяемые для организации циклов, являются локальными. Все остальные переменные — глобальные.
Если в теле процедуры имеются операции присваивания для ранее определенных (глобальных) переменных, то изменение их значений в ходе выполнения процедуры создает так называемый побочный эффект. Он способен существенно изменить алгоритм решения сложных задач и, как правило, недопустим. Поэтому Maple-язык программирования имеет встроенные средства для исключения побочных эффектов. Встречая такие операции присваивания, Maple-язык корректирует текст процедуры и вставляет в нее объявление переменных локальными с помощью ключевого слова local и выдает предупреждающую надпись о подобном применении:
> restart:m:=0;
m := 0
> modc:=proc(z)
> m:=evalf(sqrt(Re(zr2+Im(zr2)):RETURN(m)
> end:
Warning, 'm' is implicitly declared local to procedure 'mode'
mode := proc (z) local т; т := evalf(sqrt(9*(z)A2 + 3(z)A2)); RETURN(m) end proc
> modc(3.+I*4.): 5.000000000
> m;
0
Обратите внимание на то, что в тело процедуры было автоматически вставлено определение local m, задающее локальный статус переменной т. Оператором print можно вывести текст процедуры:
> print(modc);
proc(z) local m; m := evalf(sqrt(R(z)^2 + J(z)^2)); RETURN(m) endproc
Говорят, что запретный плод сладок! Что бы ни говорили о нежелательности - работы с глобальными переменными, бывает, что их применение желательно или даже необходимо. Чтобы сделать переменные внутри процедуры глобальными, достаточно объявить их с помощью ключевого слова global, после которого перечисляются идентификаторы переменных.
Следующий пример поясняет применение оператора global в процедуре:
> а:=1;b:=1:
а := 1
b := 1
> fg:=proc(x,y)
> global a,b;
> a:-x^2:b:=y^2:
> RETURN(sqrt(a+b));
> end;
fg := proc (x, y) global a, b; a := x^2; b := y^2; RETURN( sqrt( a + b)) end proc
> fg(3.4):
5 > [a.b]:
[9,16]
В примере переменным а и b вначале присвоены значения 1. Поскольку они в процедуре объявлены глобальными, то внутри процедуры они принимают новые значения х2 и у2. В результате при выходе из процедуры они имеют уже новые значения. Это и есть побочный эффект при исполнении данной процедуры. Если пользователь не знает (или не помнит), что та или иная процедура имеет побочный эффект, то он рискует получить самые неожиданные (и неверные) результаты своих вычислений.
ПРИМЕЧАНИЕ
Следует отметить, что нельзя делать глобальными переменные, указанные в списке параметров процедуры, поскольку они уже фактически объявлены локальными. Такая попытка приведет к появлению сообщения об ошибке следующего вида «Error, argument and global'x' have the same name». При этом соответствующие переменные останутся локальными.
При профессиональной подготовке процедур пользователь должен предусмотреть их поведение при возможных ошибках. Например, если он готовит процедуру или функцию, вычисляющую квадратный корень из действительных чисел, то надо учесть, что такой корень нельзя извлекать из отрицательных чисел (будем, исключительно в учебных целях, считать, что комплексные числа в данном примере недопустимы).
Для контроля за типом данных обычно используются различные функции оценки и тестирования. При выявлении ими ошибки, как правило, предусматривается вывод соответствующего сообщения. Для этого используется функция ERROR:
ERROR(expr_1. expr_2. ...)
где ехрr_1, ... - ряд выражений (возможно, пустой). Наиболее часто ERROR выводит просто строковое сообщение об ошибке, например ERROR (`strings'). Полное сообщение об ошибке имеет вид:
Error, (in name) string. ...
Приведем пример процедуры, в которой предусмотрен вывод сообщения об ошибке при задании переменной х < 0:
> f := ргос (х) if x<0 then error "invalid variable x: XI". x else x*(l/2) end if end proc; f:= proc (x) if x < 0 then error "invalid variable x: %1" x else sqrt(x) end if end proc
> f(3.): 1.732050808
> f(-3.);
Error, (in f) invalid variable x: -3.
> lasterror;
"invalid variable x: %1" -3.
> lastexception;
f, "invalid variable x: %1", -3.
Эта процедура вычисляет квадратный корень из числа х. При х < 0 выводится заданное сообщение об ошибке. Еще раз обращаем внимание читателя на учебный характер данного примера, .поскольку вычисление квадратного корня (в том числе из комплексных и отрицательных действительных чисел) реализовано встроенной функцией sqrt.
В объявление процедуры можно включить ключевые слова, вводимые словом
options opseq
Иногда их называют расширяющими ключами. Предусмотрены следующие ключи:
Ключ remember
Ключ remember обеспечивает занесение результатов обращений к процедуре в таблицу памяти, которая используется при исполнении процедуры. Функция ор позволяет вывести таблицу:
> f:=proc(x) options remember; х^3 end:
> f(2):
8
> f(3):
27
> op(4,eval(f)): table([2 = 8, 3 = 27]) ,
Ключ remember особенно полезен при реализации итерационных процедур. К примеру, в приведенной ниже процедуре (без использования ключа remember) время вычисления n-го числа Фибоначчи растет пропорционально квадрату n:
> f:=proc(n) if n<2 then n else f(n-l)+f(n-2) fi end;
f:=proc(w)if n <2 then и else f(n - l) + ft>-2)endif endproc
> time(f(30)): 27.400
> f(30): 832040
Вычисление f(30) по этой процедуре на ПК с процессором Pentium II 350 МГц занимает около 30 с — см. контроль этого времени с помощью функции time (результат в секундах).
Стоит добавить в процедуру ключ remember, и время вычислений резко уменьшится:
> restart;
> fe:-proc(n) options remember: if n<2 then n else fe(n-l)+fe(n-2) fi end:
> fe(30);
832040
> time(fe(30));
0.
При этом вычисление fe(30) происходит практически мгновенно, так как все промежуточные результаты в первом случае вычисляются заново, а во втором они берутся из таблицы. Однако это справедливо лишь тогда, когда к процедуре было хотя бы однократное обращение. Обратите внимание на то, что данные процедуры являются рекурсивными — в их теле имеется обращение к самим себе.
Ключ builtin
Ключ builtin придает процедуре статус встроенной. Он должен использоваться всегда первым. С помощью функции eval(name) можно проверить, является ли функция с именем name встроенной:
> eval(type);
proc() option builtin; 268 end proc
> eval(print);
proc() option builtin; 229 end proc
Числа в теле процедур указывают системные номера функций. Следует отметить, что в новой версии Maple 7 они существенно отличаются от принятых в предшествующих версиях.
Ключ system
Этот ключ придает процедуре статус системной. У таких процедур таблица памяти может быть удалена. У обычных процедур таблица памяти не удаляется и входит в так называемый «мусорный ящик» (garbage collector).
Ключи operator и arrow
Эта пара ключей задает процедуре статус оператора в «стрелочной» нотации (->). Это достаточно пояснить следующими примерами:
Ключ trace
Ключ trace задает вывод отладочной информации:
> о:=ргос(х,у) option trace, arrow; x-sqrt(y) end:
о := proc (x, y) option trace, arrow, x - sqrt(y) end proc
> o(4,2.);
{--> enter o, args = 4,2.
2.585786438
<-- exit о (now at top level) = 2.585786438}
2.585786438
Ключ copyright
Этот ключ защищает тело процедуры от просмотра. Это поясняют следующие два примера:
> o:=proc(x,y) x-sqrt(y) end:
о := proc (x, у) х- sqii(y) end proc
> oo:=proc(x.y) option Copyright; x-sqrt(y) end;
oo := proc(x,y) ... endproc
> oo(4.2);
2.585786438
Нетрудно заметить, что во втором примере тело процедуры уже не просматривается. Для отмены защиты от просмотра можно использовать оператор interfасе(verboseproc=2).
Выше мы рассмотрели основные частные формы задания процедур. Все они могут быть объединены в общую форму задания процедуры:
name:-proc(<argseq>) # объявление процедуры
local<nseq>; # объявление локальных переменных
g1oba1<nseq>; # объявление глобальных переменных
options<nseq>; # объявление расширяющих ключей
description<stringseq>; # объявление комментарий
<stateq> # выражения - тело процедуры
end; (или end:) # объявление конца процедуры
Эта форма охватывает все описанные выше частные формы и позволяет готовить самые сложные и надежно работающие процедуры.
Большая часть функций и операторов системы Maple 7 реализована в виде процедур, написанных на Maple-языке программирования. Благодаря возможности их просмотра пользователь получает неисчерпаемый источник примеров программирования на этом языке. Кроме того, пользователь может создавать свои собственные процедуры.
Для контроля и отладки процедур прежде всего надо уметь вывести их текст. Для этого служит функция:
print(name);
где name — имя процедуры.
Однако перед тем, как использовать эту функцию, надо исполнить команду:
> interfасе(verboseproc=2,prettyprint-l.version);
Maple Worksheet Interface, Maple 7, IBM INTEL NT, May 28 2001 Build ID 96223
Ее смысл будет пояснен ниже. Пока же отметим, что эта команда обеспечивает полный вывод текста процедур библиотеки. Встроенные в ядро процедуры, написанные не на Maple-языке, в полном тексте не представляются. Поясним это следующими примерами:
> print(evalf);
proc() option builtin, remember; 167 end proc
> print(erf);
proc(x::algebraic)
local Re_x, Im_x, sr, si, xr, xi;
option ' Copyright (c) 1994 by the University of Waterloo. All rights reserved`.;
if nargs <> 1 then error "expecting 1 argument, got %1", nargs
elif type(x, 'complex(float)') then evalf('erf (x)) elif x = 0 then 0 elif type(x, 'infinity') then
if type(x, {'cxjnfinity', 'undefined'}) thenundefined + undefined*!
elif type(Re(x), 'infinity') then CopySign(l, Re(x))
elif type(x, 'imaginary') then x
else infinity + infinity*I
end if
elif type(x, 'undefined') then x*undefined elif type(x, 'complex(numeric)')
then
if csgn(x) = -1 then -erf(-x) else 'erf'(x)
end if elif type(x, '*')
and type(op(l, x), 'complex(numeric)')
and csgn(op(l, x)) = -1 then -erf(-x) elif type(x, ' +')
and traperror(sign(x)) = -1 then -erfC-x)
else erf(x) := 'erf'(x) end if end proc
Здесь вначале выполнен вывод сокращенного листинга встроенной в ядро процедуры evalf, а затем выведен полный листинг процедуры вычисления функции ошибок erf. Эта функция имеет довольно короткую процедуру — многие важные функции и операторы задаются гораздо более сложными и большими процедурами.
Но вернемся к функции interface. Эта функция служит для управления выводом и задается в виде: interface( arg1. arg2, ... ) где аргументы задаются в виде равенств вида name=va1ue и слов-указателей:
ansi |
autoassign |
echo |
error-break |
errorcursor |
imaginaryunit |
indentamount |
labelling |
label width |
latexwidth |
"longdelim |
patchl evel |
plotdevice |
plqtoptions |
plotoutput |
postplot |
preplot |
prettyprint |
prompt |
quiet |
rtablesize |
screenheight |
screenwidth |
showassuraed |
verboseproc |
version |
warnl evel |
|
|
|
К сожалению, объем и характер данной книги не позволяют остановиться на всех вариантах использования этой очень мощной функции, тем более что в ней может использоваться множество аргументов. Мы рассмотрим только некоторые, наиболее важные возможности.
Указание verboseproc=n задает степень детальности вывода листинга процедур. При n=0 текст не выводится, при n=1 выводится текст только заданных пользователем процедур, а при n=2 — всех процедур на Maple-языке. Пример этого был дан выше. Указание prettyprint=0 или 1 управляет выводом стандартных сообщений. Указание plotdevice=string управляет выводом графики, например plotdevice=gif указывает на то, что запись графиков в виде файлов будет происходить в формате .gif.
Одним из основных средств отладки процедур является функция трассировки trace(name). Детальность ее работы задается системной переменной printlevel (уровень вывода). При printlevel :=n (значение n = 1 по умолчанию) выводится результат только непосредственно исполняемой функции или оператора. Для вывода информации о выполнении k-ro уровня вложенности надо использовать значение этой переменной от 5*k до 5*(k+i). Так, при п от 1 до 5 выводятся результаты трассировки первого уровня, при и от 6 до 10 — второго и т. д. Максимальное значение п = 100 обеспечивает трассировку по всем уровням вложенности процедуры name. Следующий пример показывает осуществление трассировки для функции int(x^n,x):
Действие функции трассировки отменяется командой untrace:
При отладке алгоритмов выполнения вычислений надо тщательно следить за сообщениями об ошибках. Для этого в Maple предусмотрены функция traceerr и системная переменная lasterr, в которой сохраняется последнее сообщение об ошибке. При каждом обращении к tracerr переменная lasterr очищается:
> 2/0;
Error, numeric exeption:division by zero
> 2/4;
1/2
> 2/.3;
6.666666667
> lasterror:
"division by zero"
> traperror(3/4);
3/4
> lasterror;
lasterror
> traperror(5/0);
Error, numeric exeption:division by zero
> lasterror:
"numeric exeption:division by zero"
Этот пример показывает, как может быть проведено отслеживание ошибок в ходе вычислений. Вообще говоря, пользователь системы Maple 7 редко привлекает описанные средства, поскольку проще отладить вычислительный алгоритм прежде, чем на его основе будет составлена процедура. При правильном построении процедур ошибочные ситуации заведомо предусматриваются и должным образом обрабатываются.
В большинстве случаев составители программ (процедур) редко прибегают к пошаговой их отладке. Средства общей диагностики Maple 7 развиты настолько хорошо, что позволяют выявлять грубые ошибки в процедурах при их выполнении. Иногда, правда, для этого приходится неоднократно «прогонять» процедуру, пока она не начнет работать как задумано. Тем не менее для отладки процедур служит специальный интерактивный отладчик (debugger). Опишем, как его запустить и как с ним работать.
Допустим, мы составили некоторую процедуру demo, вычисляющую сумму квадратов чисел (1^2+2^2+...+n^2):
> demo:=proc(n::integer) local y,i:
> y:=0:
> for i to n do y:=y+i^2 od
> end;
demo := proc (n::integer) local y, i; у := 0;
for i to n do у := у + i^2 end do end proc
> demo(3):
14
Чтобы включить отладчик в работу, надо исполнить команду stopat:
> stopat(demo);
[demo]
> demo(3);
demo:
1* y:=0;
DBG>
Признаком, указывающим на работу отладчика, является изменение приглашения к вводу со знака > на DBG> (как нетрудно догадаться, DB6 означает debugger). Теперь, подавая команды next (следующий), step (шаг) и stop (остановка), можно проследить выполнение процедуры:
DBG> next
0
demo:
2 for i to n do
end do
DB6> step
0
demo:
3 y:=y+i^2
DBG> Step
1
demo:
3 y:=y+i^2
DB6> step
5
demo:
3 y:=y+iA2
DBG> step
14
В последнем случае процедура по шагам дошла до конца вычислений; на этом работа отладчика завершается сама собой.
Можно также вывести листинг процедуры с помощью команды showstat:
> showstat(demo):
demo :=proc(n::integer)
local у, i;
1* y:=0;
2 for i to n do
3 y:=y+i^2
end do end proc
Обратите внимание, что в этом листинге строки вычисляемых элементов пронумерованы. Это сделано для облегчения разбора работы процедуры.
В общем случае отладчик выключается при выполнении команд stopat, stopwhen или stoperr. Если используется команда stopat, то вывод на экран соответствует исполнению последней выполненной команды. Для отмены этой команды используется команда unstopat.
Команда stopwhen позволяет установить точку наблюдения за указанной в команде переменной. Отменить ее можно командой unstopwhen. Команда stoperror позволяет задать остановку при появлении определенной ошибки. Для отмены этой команды используется команда unstoperror.
Команда cont используется для продолжения работы до следующей точки прерывания, установленной указанными выше командами, или до конца процедуры. Для прерывания отладки можно использовать команду quit. После команды stop можно вычислить любое Maple-выражение.
В действительности команд отладчика намного больше и их функции более развиты, чем это описано выше. Пользователи, заинтересованные в серьезной работе с отладчиком (скорее всего, их немного), могут просмотреть его подробное описание. Для этого в разделе справочной системы Context найдите раздел Programming, а в нем — раздел Debugging.
Считывание и запись программных модулей
В уроке 2 рассматривалась работа с файлами документов. Вводимые в текущий документ программные модули хранятся вместе с ним, так что при отказе от загрузки какого-либо документа все его программные блоки не могут использоваться в других документах. Кроме того, порой неудобно загружать объемный документ ради использования одного или нескольких модулей, например процедур. Поэтому в Maple 7 введены средства, позволяющие записывать нужные модули (в том числе результаты вычислений) на диск и считывать их в случае необходимости.
Для записи на диск используется оператор save:
Считывание имеющегося на диске файла filename осуществляется оператором read:
read <filename>
При считывании все имеющиеся в файле определения становятся доступными для рабочих документов Maple. При записи файлов отдельных определений используется специальный внутренний Maple-формат файлов. Для загрузки файлов типа *.m из стандартной библиотеки используется функция readlib. А для записи файлов в качестве библиотечных достаточно в имени filename оператора save указать расширение .т. Разумеется, можно считывать такие файлы и оператором read, указав в имени файла расширение .m:
> save my_proc,4myJib.nT: # запись файла пу_ргос и
> # библиотечного файла my_lib.m:
> load 'myjlib.m': # считывание библиотечного файла
> # myjib.m.
Если приведенные выше примеры составления процедур кажутся вам простыми, значит, вы неплохо знаете программирование и, скорее всего, уже имеете несколько полезных процедур, которые вы хотели бы сохранить — если не для потомков, то хотя бы для своей повседневной, работы. Сделать это в Maple 7 довольно просто.
Прежде всего надо определить имя своей библиотеки, например mylib, и создать для нее на диске каталог (папку) с заданным именем. Процедуры в Maple 7 ассоциируются с таблицами. Поэтому вначале надо задать таблицу-пустышку под будущие процедуры:
> restart;
> mylib:=tab1e():
mylib := table([])
Теперь надо ввести свои библиотечные процедуры. Они задаются с двойным именем — вначале указывается имя библиотеки, а затем в квадратных скобках имя процедуры. Для примера зададим три простые процедуры с именами fl, f2 и f3:
> mylib[fl]:=proc(x: Anything) sin(x)+cos(x) end:
> mylib[f2]:=proc(x:anything) sin(x)^2+cos(x)^2 end:
> mylib[f3]:=proc(x::anything) if x=0 then 1 else sin(x)/x fi end:
Рекомендуется тщательно проверить работу процедур, прежде чем записывать их на диск. Ограничимся, скажем, такими контрольными примерами:
Можно построить графики введенных процедур-функций. Они представлены на рис. 7,4.
Рис. 7.4. Построение графиков процедур-функций f1, f2 и f3
С помощью функции with можно убедиться, что библиотека mylib действительно содержит только что введенные в нее процедуры. Их список должен появиться при обращении with (mylib):
> with(mylib);
[f1,f2,f3]
Теперь надо записать эту библиотеку под своим именем на диск с помощью команды save:
> save(mylib,`c:/ mylib.m);
Обратите особое внимание на правильное задание полного имени файла. Обычно применяемый для указания пути знак \ в строках Maple-языка используется как знак продолжения строки. Поэтому надо использовать либо двойной знак \\, либо знак /. В нашем примере файл записан в корень диска С. Лучше поместить библиотечный файл в другую папку (например, в библиотеку, уже имеющуюся в составе системы), указан полный путь до нее.
После всего этого надо убедиться в том, что библиотечный файл записан. После этого можно сразу и считать его. Для этого вначале следует командой restart устранить ранее введенные определения процедур:
> restart;
С помощью команды with можно убедиться в том, что этих определений уже нет:
> with(mylib):
Error, (in pacman:-pexports) mylib is not a package
После этого командой read надо загрузить библиотечный файл:
> read('c:/mylib.m');
Имя файла надо указывать по правилам, указанным для команды save. Если все выполнено пунктуально, то команда with должна показать наличие в вашей библиотеке списка процедур fl, f2 и f3:
> with(mylib):
[f1. f2. f3]
И наконец, можно вновь опробовать работу процедур, которые теперь введены из загруженной библиотеки:
> fl(x):
sin(x) + cos(x) > simplify(f2(y});
1 > f3(0):
1 > f3(1.);
.8414709848
Описанный выше способ создания своей библиотеки вполне устроит большинство пользователей. Однако есть более сложный и более «продвинутый» способ ввода своей библиотеки в состав уже имеющейся. Для реализации этого Maple 7 имеет следующие операции записи в библиотеку процедур si, s2, ... и считывания их из файлов filel, file2, ...:
savelib(s1. s2, .... sn, filename)
readlib(f. file1. file2. ...)
С помощью специального оператора makehelp можно задать стандартное справочное описание новых процедур:
makehelp(n.f.b).
где n — название темы, f — имя текстового файла, содержащего текст справки (файл готовится как документ Maple) и b — имя библиотеки. Системная переменная libname хранит имя директории библиотечных файлов. Для регистрации созданной справки надо исполнить команду вида:
libname:-libname. '/mylib":
С деталями применения этих операторов можно ознакомиться в справочной системе.
К созданию своих библиотечных процедур надо относиться достаточно осторожно. Их применение лишает ваши Maple-программы совместимости со стандартной версией Maple 7. Если вы используете одну-две процедуры, проще поместить их в те документы, в которых они действительно нужны. Иначе вы будете вынуждены к каждой своей программе прикладывать еще и библиотеку процедур. Она нередко оказывается большей по размеру, чем файл самого документа. Не всегда практично прицеплять маленький файл документа к большой библиотеке, большинство процедур которой, скорее всего, для данного документа попросту не нужны. Особенно рискованно изменять стандартную библиотеку Maple 7.
Впрочем, идти на это или нет — дело каждого пользователя. Разумеется, если вы готовы создать серьезную библиотеку своих процедур, то ее надо записать и тщательно хранить. С Maple 7 поставляется множество библиотек полезных процедур, составленных пользователями со всего мира, так что и вы можете пополнить ее своими творениями (см. урок 14).
Обширные возможности Maple 7 делают привлекательным применение этой программы для автоматической обработки данных, поступающих от каких-либо экспериментальных установок. Для этого установки снабжаются интерфейсными платами (например, аналого-цифровыми преобразователями) и необходимым программным обеспечением. Возможна и передача данных, полученных с помощью Maple 7, в экспериментальные установки.
Обмен информацией между Maple 7 и внешней средой (к ней, кстати, относятся и другие программы) чаще всего осуществляется через файлы текстового формата, поскольку именно с такими файлами могут работать практически все программы. Для записи данных в файл служит оператор writedata:
writedata[APPEND](fileID. data)
writedata[APPEND](fileID, data, format)
writedata[APPEND](filelD, data, format, default)
Здесь filelD — имя или дескриптор файла данных, data — список, вектор или матрица данных, format — спецификация формата данных (integer, float или string), default — процедура, задающая запись нечисловых данных, например:
writedata(F.A.float.proc(f.x) fprintf(f/CMPLX(%g,%g)',Re(x).Im(x)) end):
Необязательный указатель APPEND используется, если данные должны дописываться в уже созданный файл. Считывание из файла filename обеспечивает функция readdata:
readdata(filelID. n)
readdata(fileID, format, n)
readdata(fileID. format)
Здесь n — целое положительное число, задающее число считываемых столбцов. Ниже представлены примеры этих операций:
Maple 7 имеет также типичные файловые операции:
Их реализация, однако, зависит от платформы, на которой установлена система, и от ее настройки.
Maple 7 имеет ряд средств для общения с другими программами. Часть из них, в основном относящаяся к обмену через файлы, уже была описана. Однако Maple 7 способна генерировать коды для прямого их включения в такие программы, причем не только математические.
Для подготовки математических статей и книг широкое распространение получили редакторы ТеХ и LaTeX. Для подготовки выражений или файлов в их формате служит функция:
latex(expr.filename)
Параметр filename не обязателен, если достаточно получить нужное выражение в ячейке вывода Maple 7:
> latex(a*x^2+b*x+c):
а{х}^{2}+bх+с
> latex(diff(xAn.x$2));
{\frac {{х}^{n}{n}^{2}}{{х}^{2}}{\frас {{х}^{n}n}{{х}^{2}}}
Язык Фортран вот уже многие десятилетия используется для программирования вычислительных задач. Накоплены обширные библиотеки решения таких задач на Фортране. Почитателей этого языка Maple 7 порадует тем, что она позволяет готовить коды для программ на Фортране. Для этого вначале надо загрузить библиотечную функцию:
> with(codegen.fortran);
[fortran ]
После этого может использоваться функция fortran:
fortran(expr.filename=str.optimized)
Два последних параметра не обязательны при выводе выражения ехрr в форме, присущей языку Фортран:
> fortran(a*x*2+b*x+c);
t0 = a*x**2+b*x+c
> fortran(diff(x"n,x$2));
t0 = x**n*n**2/x**2-x**n*n/x**2
Параметр optimize позволяет генерировать оптимизированные коды:
> fortran(a*x*2+b*x+c.optimized);
t1 = x**2 t4 = a*tl+b*x+c
При этом вычислительный процесс строится так, чтобы минимизировать число арифметических операций.
Язык С (Си) также широко используется для решения вычислительных задач. Достаточно отметить, что сама система Maple 7 создана на языке С.
Для генерации кодов на языке С вначале надо подключить соответствующую функцию:
> with(codegen.C); [С]
Затем можно использовать функцию С:
С(ехрг.folename=str.optimi zed)
Эта функция используется по аналогии с функцией fortran, что и показывают приведенные ниже примеры:
> C(d1ff(x4>,x$2));
t0 = pow(x,1.0*b)*b*b/(x*x)-pow(x,1.0*b)*b/(x*x);
> C(diff(xAb,x$2),optimized);
tl = pow(x,1.0*b);
t2 = b*b;
t4 = x*x;
t5 = l/t4; '
t9 = tl*t2*t5-tl*b*t5;
Обширные возможности преобразования выражений в различные формы предоставляет функция convert. А функция interface позволяет управлять выводом. К сожалению, объем книги не позволяет рассмотреть все многочисленные варианты применения этих функций.
В большинстве случаев Maple-язык использует достаточно длинные идентификаторы для своих определений, например функций. Однако с помощью функции al i as можно изменить любое определение на другое, если оно кажется пользователю более удобным. Функция alias записывается в виде:
alias(e1. е2. .... еN)
где e1, e2, ..., eN — ноль или более равенств.
Эта функция возвращает список переназначений и осуществляет сами переназначения. Например, для замены имени функции BesselJ на более короткое имя BJ достаточно параметром функции alias записать BJ=BesselJ:
> alias(BJ-BesseU):
BJ,Fx
> [BJ(0.1.),Besse1J(0,1.)]:
[.7651976866, .7651976866]
Можно также переназначить функцию пользователя:
Для отмены переназначения, например BJ, используется та же функция alias с повтором переназначения:
> a1ias(B>BJ): Fx
> BJ(0,1.); BJ(0,1.)
Обратите внимание на то, что BJ исчезло из списка переназначений и функция BJ(0,1.) уже не вычисляется, поскольку ее больше нет.
Модули придают языку программирования Maple 7 некоторые свойства языков объектно-ориентированного программирования. Они служат для реализации абстрактного типа данных на основе инкапсуляции — объединения данных и процедур их обработки. Модули задаются ключевым словом module с пустыми скобками () и завершаются словами end module или просто end:
name := module()
export eseq; local Iseq; global gseq:
option optseq: description desc:
Тело модуля
end module (или просто end)
Хотя структура модуля во многом напоминает структуру процедуры, включая объявление локальных и глобальных переменных, параметров и описаний, между ними есть существенная разница:
Следующий пример демонстрирует создание модуля pt, в котором заданы две операции (сложения plus и умножения times) и показан доступ к ним:
> pt:= module()
export plus, times;
plus := (a.b) -> a + b;
times := (a.b) -> a * b: end module:
pt := module () export plus, times; end module
> pt:-p1us(3,5);
8
> pt:=times(3,7);
21
Детальную информацию о модулях и о конструкторах объектов можно найти в справках по ним. Некоторые пакеты Maple 7 (в основном сравнительно новые) реализованы уже не в виде процедур, а в виде модулей (например, в виде модуля сделан пакет LinearAlgebra). В простейшем виде модули могут использоваться всеми пользователями системы Maple 7, но их серьезное применение (например, с целью создания полноценных пакетов Maple 7) требует серьезного знакомства с техникой объектно-ориентированного программирования. Такое знакомство выходит за рамки данной книги.
Макрос — это макрокоманда, короткая запись длинных определений. По сравнению с переназначениями макросы более гибки и могут использоваться для сокращения операций загрузки новых определений из библиотеки и пакетов. Макросы создаются с помощью функции macro:
macrc(e1, e2, .... en)
где el, е2, ....,, en — ноль или более равенств.
В следующем примере функция numbperm с помощью макроса заменена на пр:
> numbperm([l,2,3,4]);
24
> macro(np=numbperm(V));
nр
> V:=[1.2.3.4]:
F:=[l,2,3,4]
> np(V);
24
Макросы могут быть использованы для конструирования выражений из их макроопределений.
Maple 7 имеет команду system(string), с помощью которой можно исполнить любую команду MS-DOS, записанную в виде строки string. Например, для форматирования гибкого диска из среды Maple 7 можно использовать стандартную команду MS-DOS:
> system(`format a:`);
На экране появится окно MS-DOS с начальным диалогом форматирования диска А. Это окно показано на рис. 7.5.
При работе в операционной системе Windows эта возможность практически бесполезна, поскольку форматирование диска с большими удобствами можно выполнить средствами Windows.
Внешние вызовы командой system куда более полезны для MS-DOS-реализаций Maple, которые кое-где используются и по сей день. Но поскольку данная книга посвящена самым современным Windows-реализациям системы Maple 7, более подробное рассмотрение операций внешних вызовов не имеет особого смысла.
Рис. 7.5. Результат выполнения команды форматирования гибкого диска
Maple 7 имеет средства для вызова внешних откомпилированных процедур, написанных на языке С. Такая необходимость для подавляющего числа пользователей Maple 7 вызывает большие сомнения в силу следующих причин:
Учитывая сказанное, мы отметим лишь, что для использования внешних процедур (например, остро нужных пользователю или более быстрых, чем аналогичные процедуры Maple) используется специальная команды define_external, которая генерирует две интерфейсные программы — на языке С и на языке Maple соответственно. Программа на языке С компилируется вместе с внешней процедурой, которая будет использоваться. Результирующий код создает динамически подключаемую бублиотеку DLL. В свою очередь, программа на языке Maple служит как интерфейсная для организации взаимодействия с вызываемой внешней процедурой. Более подробное описание возможностей работы с внешними процедурами можно найти в справке по ним.
В этом уроке мы научились:
Основные формулы для вычисления сумм последовательностей
Применение систем символьной математики особенно эффективно при решении задач математического анализа. Maple 7 обладает богатейшей базой данных по формулам математического анализа и может полноценно заменять тома книг со справочными данными. При этом важно, что Maple не только «знает» многие формулы, но и может успешно использовать их при решении достаточно сложных задач в аналитическом (символьном) виде.
Начнем рассмотрение таких операций с вычисления сумм последовательностей. Вычисление суммы членов некоторой последовательности f(k) при изменении целочисленного индекса k от значения m до значения n с шагом +1, то есть выражения:
является достаточно распространенной операцией математического анализа. Для вычисляемой и инертной форм сумм последовательностей служат следующие функции:
sum(f.k): sum(f,k=m..n); sum(f,k=alpha):
Sum(f.k); Sum(f,k=m..n); Sum(f,k=a1pha);
Здесь f — функция, задающая члены суммируемого ряда, k — индекс суммирования, тип — целочисленные пределы изменения k, alpha — RootOf-выражение. Значение n может быть равно бесконечности. В этом случае для n используется обозначение ? или infinity.
Допустимо (а зачастую рекомендуется с целью исключения преждевременной оценки суммы) заключение f и k в прямые кавычки, например sum('f', 'k'=m. .n). Это сделано во всех примерах справочной системы Maple 7, относящихся к функции sum. Мы, однако, отказываемся от этого в тех случаях, когда результат идентичен при заключении f и k в кавычки и без такового. Во избежание путаницы, связанной с этой тонкостью синтаксиса функции sum, рекомендуется все примеры проверять после команды restart, убирающей предыдущие определения f и k.
Простейшими являются суммы последовательностей с фиксированным числом членов. Ниже даны примеры применения этих функций:
Обратите внимание, что во втором примере система отказалась от вычисления, а в третьем даже выдала сообщение об ошибке, связанной с тем, что переменной k перед вычислением сумм было присвоено численное значение 2. После заключения выражения и переменной индекса k в прямые кавычки ошибка исчезла, поскольку такая операция означает, что переменной придается неопределенное значение.
Особый класс образуют последовательности, у которых предел задается в общем виде значением переменной. Ниже представлен ряд последовательностей, у которых предел задается как 0.. n или 1.. n:
Такого рода последовательности, как видно из приведенных примеров, нередко имеют аналитические выражения для своего значения. Его вычисление намного проще, чем формирование заданной последовательности с прямым суммированием ее членов. Некоторые из таких сумм выражаются через специальные математические функции.
Даже школьники хорошо знают, что от перестановки слагаемых сумма не изменяется. Однако Maple 7 (кстати, как и большинство других систем компьютерной математики) при вычислении сумм, увы, этому правилу не следует. Приведенные ниже примеры наглядно показывают этот просчет системы:
ВНИМАНИЕ
При вычислении сумм последовательностей надо строго соблюдать прямой (нарастающий) порядок задания значений индексной переменной суммы. Нарушение этого порядка чревато грубыми ошибками.
Могут встречаться множественные суммы по типу «сумма в сумме». Ограничимся приведением примера двойной суммы, имеющей аналитическое значение:
При конкретном значении N такую сумму нетрудно вычислить подстановкой:
> subs( N = 100, %);
8670850
Как видно из приведенных примеров, средства вычисления сумм последовательностей Maple 7 позволяют получать как численные, так и аналитические значения сумм, в том числе представляемые специальными математическими функциями.
Основные формулы для произведения членов последовательностей
Аналогичным образом для произведений членов f(i) некоторой последовательности, например вида:
используются следующие функции:
product(f,k); product(f,k=m..n): product (f,k=alpha):
Product(f,k); Product(f,k=m..n): Product(f,k=alpha).
Обозначения параметров этих функций и их назначение соответствуют приведенным для функций вычисления сумм. Это относится, в частности, и к применению одиночных кавычек для f и k.
Примеры применения функций вычисления произведений даны ниже:
Как и в случае вычисления сумм, вычисление произведений возможно как в численной, так и в аналитической форме — разумеется, если таковая существует. Это показывает следующий пример:
Нетрудно понять, что при i, стремящемся к бесконечности, перемножаемые члены последовательности стремятся к нулю, а потому к нулю стремится и их произведение. Вопросы доказательства подобных утверждений находятся за рамками данного учебного курса, ибо он посвящен не математике как таковой, а конкретной программе для математики — Maple 7.
Хотя произведение не зависит от порядка расположения сомножителей, их перестановка в Maple 7 недопустима. Это иллюстрируют следующие примеры:
ВНИМАНИЕ
При вычислении произведений надо строго соблюдать прямой (нарастающий) поря-— док задания значений индексной переменной произведения. Нарушение этого порядка чревато грубыми ошибками.
Функции дифференцирования выражений diff и Diff
Вычисление производных функций fn(x) = dfn(x)/dxn n-го порядка — одна из самых распространенных задач математического анализа. Для ее реализации Maple 7 имеет следующие основные функции:
diff(a., xl, х2, .... xn) diff(a, [xl, х2, .... хn])
Diff(a, xl, x2, .... xn) Diff(a, [xl, x2, .... хn])
Здесь а — дифференцируемое алгебраическое выражение, властности функция f(xl. x2, .... хn) ряда переменных, по которым производится дифференцирование. Функция Diff является инертной формой вычисляемой функции diff и может использоваться для естественного воспроизведения производных в документах. Первая из этих функций (в вычисляемой и в инертной форме) вычисляет частные производные для выражения а по переменным xl, х2, ..., .хn. В простейшем случае diff(f(x),x) вычисляет первую производную функции f(x) по переменной х. При n, большем 1, вычисления производных выполняются рекурсивно, например diff (f (х), х, у) эквивалентно diff(diff (f(x), х), у). Оператор $ можно использовать для вычисления производных высокого порядка. Для этого после имени соответствующей переменной ставится этот оператор и указывается порядок производной. Например, выражение diff (f(x) ,x$4) вычисляет производную 4-го порядка и эквивалентно записи diff (f (х) ,х,х,х.х). A diff (g(x,y) ,x$2,y$3) эквивалентно diff(g(x,y),x,x.y,y,y) ;
Примеры вычисления производных:
Как видно из приведенных примеров, функции вычисления производных могут использоваться с параметрами, заданными списками. Приведенные ниже примеры показывают эти возможности и иллюстрируют дифференцирование функции пользователя для двух переменных:
Получаемые в результате дифференцирования выражения могут входить в другие выражения. Можно задавать их как функции пользователя и строить графики производных.
Для создания функций с производными может также использоваться дифференциальный оператор D. Порою он позволяет создавать более компактные выражения, чем функции diff и Diff. Дифференциальный оператор можно записывать в следующих формах: D(f) или D[i](f), где параметр f — выражение или имя функции, i — положительное целое число, выражение или последовательность. Оператор D(f) просто вычисляет имя производной от f, поскольку в этой форме он эквивалентен unnaplyCdiff (f (х) ,х) ,х). В форме D(f) (х) этот оператор подобен diff (f (x) ,x).
Приведем примеры дифференцирования функций, заданных только именами, и функций с одним параметром:
Следующий пример показывает дифференцирование функции пользователя fun с применением дифференциального оператора D и функции diff:
Дифференциальный оператор можно применять и для дифференцирования функций нескольких переменных по заданной переменной:
Пример применения дифференциального оператора для функции f, заданной программным объектом-процедурой, представлен ниже:
Этот пример показывает реализацию схемы Горнера для полинома b степени n от переменной х. При этом применение оператора дифференцирования возвращает процедуру. Ряд интересных возможностей по вычислению производных предоставляет пакет расширения student.
Вычисление неопределенных интегралов
Вычисление неопределенного интеграла обычно заключается в нахождении первообразной функции. Это одна из широко распространенных операций математического анализа.
Для вычисления неопределенных и определенных интегралов Maple V предоставляет следующие функции:
int(f.x); int(f.x=a..b); int(f.x=a..b,continuous):
Int(f.x); Int(f,x=a..b): Int(f,x=a..b,continuous):
Здесь f — подынтегральная функция, х — переменная, по которой выполняются вычисления, а и b — нижний и верхний пределы интегрирования, continuous — необязательное дополнительное условие.
Maple 7 старается найти аналитическое значение интеграла с заданной подынтегральной функцией, Если это не удается (например, для «не берущихся» интегралов), то возвращается исходная запись интеграла. Для вычисления определенного интеграла надо использовать функцию evalf(int(f ,х=а. .b)). Ниже приведены примеры вычисления интегралов:
Обратите внимание, что в аналитическом представлении неопределенных интегралов отсутствует произвольная постоянная С. Не следует забывать о ее существовании. Для вычисления кратных интегралов (двойных, тройных и т. д.) следует применять функцию int (или Int) внутри такой же функции, делая это столько раз, сколько нужно. В отличие от функции дифференцирования для функции интегрирования нельзя задавать подынтегральные функции в виде списка или множества. Возможно вычисление сумм интегралов и интегралов сумм, а также интегралов от полиномов:
ПРИМЕЧАНИЕ
Maple 7 успешно берет большинство справочных интегралов. Но не всегда форма представления интеграла совпадает с приведенной в справочнике. Иногда требуется доводка ее до нужной формы, а иногда Maple 7 упорно дает иное выражение (в большинстве случаев правильное). Тем не менее следует помнить, что всегда может найтись интеграл, который окажется «не по зубам» и Maple 7.
В некоторых случаях Maple 7 не может вычислить интеграл. Тогда она просто повторяет его. С помощью функций taylor и convert можно попытаться получить аналитическое решение в виде полинома умеренной степени, что демонстрирует следующий характерный пример:
Естественно, что в этом случае решение является приближенным, но оно все же есть и с ним можно работать, например построить график функции, представляющей данный интеграл.
Система Maple непрерывно совершенствуется. Например, в Maple V R4 интеграл с подынтегральной функцией ехр(x^4) не брался, а система Maple 7 с легкостью берет его:
Хотя полученный результат, выраженный через гамма- функцию, нельзя назвать очень простым, но он существует и с ним также можно работать. Например, можно попытаться несколько упростить его, используя функцию simplify:
Разумеется, существует также множество иных возможностей и приемов для выполнения операции интегрирования. В дальнейшем мы неоднократно будем рассматривать и другие, более специфические функции для осуществления интегрирования и вычисления интегральных преобразований. В частности, ряд средств вычисления интегралов реализован в пакете student.
Другой важной операцией является нахождение в аналитической или численной форме определенного интеграла:
Определенный интеграл удобно трактовать как площадь, ограниченную кривой f(x), осью абсцисс и вертикалями с координатами, равными а и b. При этом площадь ниже оси абсцисс считается отрицательной. Таким образом, значение определенного интеграла — это число или вычисляемое выражение.
Для вычисления определенных интегралов используются те же функции int и Int, в которых надо указать пределы интегрирования, например х=а.. b, если интегрируется функция переменной х. Это поясняется приведенными ниже примерами:
Как видно из этих примеров, среди значений пределов может быть бесконечность, обозначаемая как infinity.
Выше мы уже сталкивались с примерами вычисления «каверзных» интегралов. Немного продолжим эту важную тему и заодно рассмотрим приемы визуализации вычислений, облегчающие понимание их сущности.
В Соросовском образовательном журнале (№ 6, 2000, с. 110) приводятся не совсем удачные примеры вычислений определенного интеграла с применением системы Mathematica, при которых якобы встречаются настолько большие трудности, что они не под силу любому калькулятору или компьютеру. При некоторых попытках вычисления этого интеграла он давал нулевое значение. Но Maple 7 (кстати, как и Mathematica 4) с легкостью берет этот интеграл и позволяет сразу и без какой-либо настройки вычислить для него как точное, так и приближенное значение:
Хотя первое из решений является самым кратким и, скорее всего, единственным точным решением, оно может и должно насторожить опытного пользователя. Дело в том, что в полученном выражении фигурируют большие числа, и потому для правильного приближенного решения (в виде вещественного числа в научной нотации) нужно заведомо использовать аппарат точной арифметики и ни в коем случае не полагаться на погрешность, заданную по умолчанию, — вот в чем основная ошибка в упомянутой статье.
Именно поэтому левая и правая части приближенного решения (выполненного с точностью до 30 цифр) заметно различаются. Знак равенства между ними вызывает чувство протеста у истинных математиков. На самом деле, не надо забывать, что знак равенства здесь был введен просто как текстовый комментарий, — вы можете попробовать сами заменить его на более приемлемый здесь знак приближенного равенства. Любопытно, что предшествующая версия Maple 6 при задании погрешности по умолчанию вычисляла значение этого интеграла также как 0, тогда как Maple 7 «поумнела» уже настолько, что дает значение 0.01835046770 даже в этом случае.
При таких условиях многие читатели могут сомневаться в корректности конечного результата. Между тем Maple 7 позволяет наглядно проиллюстрировать характер промежуточных вычислений подобных интегралов. Например, для этого можно вычислить неопределенный интеграл подобного вида:
Нетрудно заметить, что решение распадается на множество слагаемых, соответствующих общеизвестному интегрированию по частям. В каждом слагаемом имеются большие числа, и потому принципиально необходимо применение арифметики высокой точности (или разрядности). Maple 7 такими средствами, причем превосходными, обладает.
Продолжим изучение данного «каверзного» интеграла. Опробуем силы Maple 7 на интеграле более общего вида, где конкретный показатель степени заменен на обобщенный —п. Здесь нас ожидает приятный сюрприз — Maple 7 с легкостью выдает аналитическое решение для данного определенного интеграла:
Однако радоваться несколько преждевременно. Многие ли математики знают, что это за специальная функция — WhittakerM? Студенты, любящие подшучивать над своим профессором, могут попробовать спросить у него об этом. Скорее всего, профессор стушуется, а потом будет долго копаться в литературе, прежде чем найдет ее определение и сможет разъяснить, что это такое. Но хуже другое — Maple 7 при конкретном n = 20 дает грубо неверное решение — 0 (почему — уже объяснялось). Забавно, что при этом сама по себе функция WhittakerM вычисляется для n = 20 без проблем:
> WhittakerM(10,10.5.1);
6353509348
А теперь присмотритесь к новому результату вычисления злополучного интеграла. Оказывается, он уже не содержит больших чисел, свойственных прямому решению! Зная значение WhittakerM с погрешностью по умолчанию, можно уверенно вычислить приближенное численное значение интеграла с тойже погрешностью, уже не прибегая к арифметике высокой точности:
> (exp(-.5)*WihittakerM(10,10.5.1))/21;
01835046770
Итак, мы вычислили нужный интеграл несколькими разными способами. В этом и проявляется могущество современной математики, достойно представленной такими системами, как Maple 7. Заинтересованный читатель может попытаться найти еще ряд методов решения данного интеграла и преуспеть в этом! Мы же как торжество Maple 7 приведем график зависимости значений данного интеграла от показателя степени n при его изменении от 0 до 50 (рис. 8.1). Надо ли говорить о том, что полученный результат имеет куда более важное значение, чем вычисление нашего злополучного интеграла при конкретном n = 20? А плавный ход графика показывает, что в вычислении данного интеграла нет никаких признаков неустойчивости решения при изменении n, если соблюдать правило выбора погрешности вычислений.
Наличие у функции особых (сингулярных) точек нередко затрудняет выполнение с ней ряда операций, таких как численное интегрирование. В этом случае могут помочь соответствующие параметры. Например, вычисление следующего интеграла дает явно неудобное выражение в виде набора значений, разных для разных интервалов измененияа:
б
Рис. 8.1. Значение интеграла от х^n*ехр(-х) как функция n
Увы, попытка вычислить по этому выражению значение интеграла не всегда дает корректный результат. Например, при х от -2 до 0 получаются бесконечные значения. Да и график зависимости значения интеграла от параметра a имеет подозрительный вид (рис. 8.2). Это как раз тот случай, когда с ходу доверяться результатам Maple 7 рискованно.
В данном случае приходится констатировать давно известный факт — системы компьютерной математики (и Maple 7 в их числе) не всесильны и всегда можно найти интегралы даже с обманчиво простым внешним видом, которые поставят систему в тупик или дадут неверные результаты в той или иной области изменения аргументов. Особенно, опасны интегралы от кусочных функций с разрывами и интегралы, представляемые такими функциями. Именно к ним и относится обсуждаемый сейчас интеграл. Не меньше проблем вызывают интегралы от функций, области определения которых заданы некорректно или просто не изучены.
Между тем ситуация вовсе не является безнадежной. Надо просто знать, что предпринять, чтобы подсказать системе правильный путь решения. Например, в нашем случае, применив параметр continuous (в апострофах), можно получить куда более простое выражение:
б
Рис. 8.2. Построение графика зависимости значений интеграла с подынтегральной функцией 1/(х+а)^2 от параметра а
Рисунок 8.3 показывает это решение с двумя важными дополнениями — оно представляется функцией пользователя, а ее график строится при изменении а от -10 до 10.
Приведем еще один пример «каверзного» интеграла довольно простого вида:
> int(l/x^3,x=-1..2);
undefined
Этот интеграл вообще не берется функцией int без указания параметров (в строке вывода сообщается об этом). Но введение параметра CauchyPrinci pal Value позволяет получить значение интеграла:
Возьмем еще один наглядный пример — вычисление интеграла от синусоидальной функции при произвольно больших пределах, но кратных 2я! Очевидно, что при этом (учитывая равность площадей положительной и отрицательной полуволн синусоиды) значение интеграла будет равно 0. Например:
> int(sin(x),x-1000*pi..l000*pi);
0
Рис. 8.3. Зависимость значения интеграла с подынтегральной функцией 1/(х+а)^2 и пределами от 0 до 2 от параметра а
Однако распространение этого правила на бесконечные пределы интегрирования является грубейшей ошибкой. Интеграл такого рода уже не берется (или говорят, что он не сходится), и Maple 7 дает соответствующий результат:
> int(sin(x),x=-infinity..infinity);
undefined
Во многих областях техники часто употребляются выражения «затухающая синусоида» или «нарастающая синусоида». Иногда говорят и о «синусоиде с уменьшающейся или возрастающей амплитудой». Бесполезно утверждать, что эти названия принципиально ошибочны — в рамках допущений, принятых в технических расчетах, такие утверждения весьма наглядны и эта, в частных случаях вполне оправданная, наглядность с позиций математики идет в ущерб точности фундаментальных определений.
Возьмем, к примеру, широко распространенную функцию: y(t) = exp(-t)sin(2*Pi*t). Построим ее график и вычислим определенный интеграл от этой функции с пределами от 0 до oo (рис. 8.4).
С первого взгляда на график видно, что Каждая положительная полуволна функции (затухающей «синусоиды») явно больше последующей отрицательной полуволны. К тому же осцилляции функции быстро затухают и через десяток-другой периодов значение функции становится исчезающе малым. Вот почему Maple 7 уверенно вычисляет интеграл с такой подынтегральной функцией. Ее свойство — неопределенность при t->oo исчезает.
Рис. 8.4. График «затухающей синусоиды» и интеграл от нее с пределами от 0 до бесконечности
Однако называть такую функцию «затухающей синусоидой», безусловно, неточно. Умножение sin(2pt) на множитель, зависящий от времени t, лишает функцию главного свойства синусоиды — ее строгой симметрии. Так что exp(-t)sin(2pt) — это совсем новая функция со своими отличительными свойствами. Главные из них — несимметрия при малых t и исчезающе малые значения при больших t. Ни тем, ни другим свойством обычная синусоида не обладает. А теперь возьмем антипод этой функции — «синусоиду с экспоненциально нарастающей до стационарного значения 1 амплитудой». Такая функция записывается следующим образом:
Y(t) = (1 - exp(-t)) sin(2*Pi*t).
Ее график и попытки вычисления интеграла с такой подынтегральной функцией приведены на рис. 8.5.
Обратите внимание на то, что здесь прямое вычисление интеграла к успеху не привело, хотя из графика функции видно, что каждая положительная полуволна в близкой к t = 0 области явно больше по амплитуде, чем последующая отрицательная полуволна. Однако в отличие от предыдущей функции при больших значениях аргумента данная функция вырождается в обычную синусоиду с неизменной (и равной 1) амплитудой. Вот почему трудяга Maple 7 честно отказывается вычислять интеграл от такой коварной функции.
Рис. 8.5. График «экспоненциально нарастающей синусоиды» и интеграл от нее с пределами от 0 до бесконечности
На этом примере очень четко отслеживается разница в мышлении инженера и математика. Инженер скажет, что интеграл с такой функций должен быть, поскольку вначале положительные площади явно меньше отрицательных, а в дальней области они выравниваются, и потому площадь каждого «периода» функции становится примерно нулевой. По-своему инженер прав — если его не интересует точное определение подынтегральной области в заоблачных высотах бесконечности, то мы должны получить то же значение интеграла, что в предшествующем примере, но со знаком «минус». И в самом деле (см. рис. 8.5), интегрируя в пределах от 0 до100п, мы получаем именно это значение (опять-таки в пределах погрешности по умолчанию).
И все же прав здесь математик — переход от интегрирования с конечным (да еще и кратным 2тс) пределом к интегрированию с бесконечным пределом — далеко не простая операция. Она требует учета поведения функции при значении аргумента, стремящегося к бесконечности, а тут говорить о нулевой алгебраической площади синусоиды некорректно, ибо никакой кратности величине 2л у бесконечности нет! Остается лишь радоваться тому, что система Maple 7 может примирить математиков и инженеров, дав им в руки средства, позволяющие решать подобные задачи с приближениями, приемлемыми для тех или иных категорий пользователей.
Мы подробно рассмотрели этот класс задач потому, что многие важные интегральные преобразования (например, преобразование Фурье) оперируют с подобными подынтегральными функциями и надо тщательно разбираться в областях их применения.
ПРИМЕЧАНИЕ
Приведенные выше примеры показывают, что интегрирование является гораздо более тонким делом, чем это кажется на первый взгляд. Тут уместно напомнить, что и студент вуза, и профессор математики университета должны очень внимательно исследовать возможности вычисления интегралов того или иного типа разными математическими системами. Иными словами, применять системы компьютерной математики должны только пользователи, обладающие не столько учеными званиями и степенями, сколько культурой выполнения математических вычислений.
К интересному классу интегралов относятся определенные интегралы с переменными пределами интегрирования. Если обычный определенный интеграл представлен числом (или площадью в геометрической интерпретации), то интегралы с переменными пределами являются функциями этих пределов.
На рис. 8.6 показано два примера задания простых определенных интегралов с переменным верхним пределом (сверху) и обоими пределами интегрирования (снизу).
Рис.8.6. Примеры интегралов с переменными пределами интегрирования
На этом рисунке построены также графики подынтегральной функции (это наклонная прямая) и функции, которую задает интеграл.
Функции int и Int могут использоваться для вычисления кратных интегралов, например двойных и тройных. Для этого функции записываются многократно:
Обратите внимание на нечеткую работу функции evalf в последнем примере. Эта функция уверенно выдает значение evalf (Pi) в форме вещественного числа с плавающей точкой, но отказывается вычислить значение интеграла, в которое входит число Pi. Этот пример говорит о том, что отдельные недостатки у Maple 7 все же есть, как и поводы для ее дальнейшего совершенствования.
Описанная возможность вычисления кратных интегралов функциями Int и int не является вполне законной. В пакете расширения student имеются дополнительные функции интегрирования, которые дополняют уже описанные возможности. В частности, в этом пакете есть функции для вычисления двойных и тройных интегралов.
Для вычисления пределов функции f в точке х =а используются следующие функции:
limit(f,x=a); limit(f,x=a.dir);
Limit(f.x=a); Limit(f.x-a.dir);
Здесь f - алгебраическое выражение, х - имя переменной, dir - параметр, указывающий на направление поиска предела (left — слева, right — справа, real — в области вещественных значений, complex — в области комплексных значений). Значением а может быть бесконечность (как положительная, так и отрицательная). Примеры применения этих функций для вычисления пределов в точке приведены ниже:
Обратите внимание на то, что в первом примере фактически дано обозначение предела в самом общем виде. Рисунок 8.7 показывает вычисление пределов функции tan(x) в точке х=n/2, а также слева и справа от нее. Для указания направления используются опции right (справа) и left (слева). Видно, что в самой точке предел не определен (значение undefined), а пределы справа и слева уходят в бесконечность.
Рис. 8.7. Пример вычисления пределов функции tan(x) и построение ее графика
Показанный на рис. 8.7 график функции tan(x) наглядно подтверждает существование пределов справа и слева от точки х = П/2 и отсутствие их в самой этой точке, где функция испытывает разрыв от значения +oo до -oo.
Огромное разнообразие функций давно заставляло математиков задумываться над возможностями их приближенного, но единообразного представления. К таким представлениям относятся различные ряды, сходящиеся к значениям функций в окрестности заданной точки. Для разложения функции или выражения ехрr в обычный степенной ряд служат функции series(ехрr, eqn) и series(expr, eqn, n). Здесь ехрr — разлагаемое выражение, eqn — условие (например, в виде х=а) или имя переменной (например, х) и n — необязательное и неотрицательное целое число, задающее число членов ряда (при его отсутствии оно по умолчанию берется равным 6, но может переустанавливаться системной переменной Order). Если в качестве eqn задано имя переменной, то это соответствует разложению по этой переменной в области точки с ее нулевым значением. Задав eqn в виде х=х0, можно получить разложение по переменной х в окрестности точки х = х0.
Разложение получается в форме степенного многочлена, коэффициенты которого задаются рациональными числами. Остаточная погрешность задается членом вида 0(х)^n. При точном разложении этот член отсутствует. В общем случае для его удаления можно использовать функцию convert. Ниже представлены примеры разложения различных выражений в ряд:
Здесь видно, что член, обозначающий погрешность, отсутствует в тех разложениях, которые точны, например, в разложениях степенных многочленов. Для визуализации приближения рядами заданных аналитических зависимостей очень полезно построить на одном графике кривые аналитической зависимости и разложения в ряд. Мы это покажем чуть позже на примере ряда Тейлора.
Для разложения в ряд Тейлора используется функция taylor(expr, eq/nm, n). Здесь ехрr — разлагаемое в ряд выражение, eq/nm — равенство (в виде х=а) или имя переменной (например, х), n — необязательный параметр, указывающий на порядок разложения и представленный целым положительным числом (при отсутствии указания порядка он по умолчанию принимается равным 6). При задании eq/nm в виде х=а разложение производится относительно точки х =а. При указании eq/nm в виде просто имени переменной разложение ищется в окрестности нулевой точки, то есть фактически вычисляется ряд Маклорена.
Ниже представлены примеры применения функции taylor:
Не все выражения (функции) имеют разложение в ряд Тейлора. Ниже дан пример такого рода:
> taylor(l/x+x^2,x,5):
Error, does not have a taylor expansion, try seriesQ
> series(l/x+x^2,x,10);
je-4*2
> taylor(l/x+x*2,x=l,5);
2 +x - 1 + 2(x - 1f - (x - 1 )3 +(x - 1 )4 +O((x- 1 )5)
Здесь Maple 7 отказалась от вычисления ряда Тейлора в окрестности точки х = 0 (по умолчанию) и предложил воспользоваться функцией series. Однако эта функция просто повторяет исходное разложение. В то же время в окрестности точки х = 1 ряд Тейлора вычисляется.
Для разложения в ряд Тейлора функций нескольких переменных используется библиотечная функция mtaylor:
mtaylor(f. v)
mtaylorCf. v. n)
mtaylor(f. v, n, w)
Здесь f — алгебраическое выражение, v — список имен или равенств, n — необязательное число, задающее порядок разложения, w — необязательный список целых чисел, задающих «вес» каждой из переменных списка v. Эта функция должна вызываться из библиотеки Maple 7 с помощью команды readlib:
Для получения только коэффициента при k=м члене ряда Тейлора можно использовать функцию coeftayl (expr,var,k). Если ехрr — функция нескольких переменных, то k должен задаваться списком порядков коэффициентов.
Полезно сочетать разложение выражений (функций) в ряд Тейлора с графической визуализацией такого разложения. Рассмотрим документ, в котором наглядно показаны возможности представления функции рядами Тейлора и Маклорена. На рис. 8.8 показана первая часть документа. Она дает пример разложения в ряд Тейлора функции sin(x) с построением ее графика и графика по разложению в ряд. Поскольку выбрано разложение относительно точки х = 0, то полученный ряд является рядом Маклорена. Это хороший пример визуализации результатов математических вычислений — здесь наглядно видно, что при малых значениях х график ряда практически повторяет разлагаемую функцию, но затем начинает сильно от нее отходить.
Обратите внимание, несмотря на то что мы задали шестой порядок ряда, последний член имеет только пятый порядок. Это связано со спецификой данного разложения — в нем просто отсутствуют члены четного порядка. Можно буквально в считанные секунды попробовать изменить число членов ряда или диапазон изменения переменной х, что и показано на рис. 8.9 (вторая часть документа). При этом легко убедиться в том, что при больших х поведение ряда не имеет ничего общего с поведением разлагаемой в ряд функции, в частности нет и намека на периодичность разложения, которая присуща тригонометрической функции sin(x).
В заключительной (третьей) части этого документа (рис. 8.10) представлено уже истинное разложение синуса в ряд Тейлора в окрестности смещенной от нуля точки х = 1. При смещении точки, относительно которой ведется разложение, выражение для ряда Тейлора существенно изменяется. В нем, во-первых, появляются члены четных степеней, а во-вторых, фигурирует аргумент вида (х- 1)n. Нетрудно заметить, что даже при представлении такой «простой» функции, как sin(x), приемлемая погрешность представления одного периода достигается при числе членов ряда Тейлора порядка 10 и более. Однако существенное повышение порядка ряда нецелесообразно из-за резкого возрастания вычислительных погрешностей. Кроме того, серьезным недостатком аппроксимации рядом Тейлора является непредсказуемое поведение полинома вдали от точки, относительно которой задается представление. Это хорошо видно на всех трех приведенных примерах.
Рис. 8.8. Разложение функции sin(x) в ряд Маклорена 6-го порядка и построение ее графика
Рис. 8.9. Разложение функции sin(x) в ряд Маклорена 12-го порядка и построение ее графика
a
Рис. 8.10. Разложение функции sin(x) в ряд Тейлора 12-го порядка относительно точки х = 1 и построение ее графика
Помимо указанных выше разложений в ряд Maple 7 имеет множество функций для иных разложений. Например, в пакете numapprox имеется функция laurent(expr,var,n), позволяющая получить разложение в ряд Лорана, функция chebyshev(expr, eq/nm, eps) дает разложение в форме полиномов Чебышева и т. д.
Решение линейных и нелинейных уравнений и неравенств — еще одна важная область математического анализа. Maple 7 имеет мощные средства для такого решения. Так, для решения линейных и нелинейных уравнений в аналитическом виде используется достаточно универсальная и гибкая функция solve(eqn, var) или so1ve({eqnl,eqn2,.. .}.{varl,var2,...}), где eqn — уравнение, содержащее функцию ряда переменных, var — переменная, по которой ищется решение, Если при записи eqn не используются знак равенства или знаки отношения, считается, что solve ищет корни уравнения eqn=0.
Характер решений можно изменить с помощью глобальных переменных:
В решениях могут встречаться следующие обозначения:
В форме solve[subtopic] возможны параметры subtopic функции solve следующих типов:
floats functions identity ineq linear
radical scalar series system
При решении систем уравнений они и список переменных задаются как множества, то есть в фигурных скобках. При этом и результат решения получается в виде множества. Чтобы преобразовать его к обычному решению, нужно использовать функцию assign, которая обеспечивает присваивание переменным значений, взятых из множества.
Функция solve старается дать решение в аналитическом виде. Это не означает, что ее нельзя использовать для получения корней уравнений в численном виде. Просто для этого придется использовать функции evalf или convert. Если результат решения представлен через функцию RootOf, то зачастую можно получить все корни с помощью функции all values.
Решение одиночных нелинейных уравнений вида f(x) = 0 легко обеспечивается функций solve(f,(x),x). Это демонстрируют следующие примеры:
Часто бывает удобно представлять уравнение и его решение в виде отдельных объектов, отождествленных с определенной переменной:
В частности, это позволяет легко проверить решение (даже если оно не одно, как в приведенном примере) подстановкой (subs):
Сводящиеся к одному уравнению равенства вида f1(x)=fl(x) также решаются функцией solve(fl(x)=f2(x),x):
Обратите внимание в этих примерах на эффективность применения функции evalf, позволяющей получить решения, выраженные через функцию RootOf, в явном виде.
Функция solve может использоваться для решения тригонометрических уравнений:
Однако из приведенных примеров видно, что при этом найдено только одно (главное) решение. Периодичность тригонометрических функций и связанная с этим множественность решений оказались проигнорированы. Однако можно попытаться найти все периодические решения, выполнив следующую команду:
> _EnvAllSolutions:=true;
EnvAllSolutions := true
Указанная в ней системная переменная отвечает за поиск всех периодических решений, когда ее значение равно true, и дает поиск только главных решений при значении false, принятом по умолчанию. Так что теперь можно получить следующее:
На рис. 8.11 показан более сложный случай решения нелинейного уравнения вида f1(x)=f2(x). где f1(х) = sin(x) и f2(x) = cos(x) - 1. Решение дано в графическом виде и в аналитическом для двух случаев — нахождения главных значений корней и нахождения всех корней.
В решениях встречаются переменные _В1- и _Z1~, означающие ряд натуральных чисел. Благодаря этому через них можно представить периодически повторяющиеся решения.
Примеры решения уравнений с обратными тригонометрическими функциями показаны ниже:
Рис. 8.11. Пример решения уравнения, имеющего периодические решения
Для решения систем линейных уравнений созданы мощные матричные методы, которые будут описаны отдельно. Однако функция solve также может с успехом решать системы линейных уравнений. Такое решение в силу простоты записи функции может быть предпочтительным. Для решения система уравнений и перечень неизвестных задаются в виде множеств (см. приведенные ниже примеры).
Рисунок 8.12 дает два примера решения систем из двух линейных уравнений. В первом примере функция solve возвращает решение в виде значений неизвестных х и у, а во втором отказывается это делать.
В чем дело? Оказывается, в том, что во втором случае система просто не имеет решения. Импликативная графика пакета расширения plots дает прекрасную возможность проиллюстрировать решение. Так, нетрудно заметить, что в первом случае геометрическая трактовка решения сводится к нахождению точки пересечения двух прямых, отображающих два уравнения. При этом имеется единственное решение, дающее значения х и у.
Рис. 8.12. Примеры решения системы из двух линейных уравнений с графической иллюстрацией
Во втором случае решения и впрямь нет, ибо уравнения задают параллельно расположенные прямые, которые никогда не пересекаются. Рекомендуем читателю самостоятельно проверить и третий случай — бесконечного множества решений. Он имеет место, если оба уравнения описывают одну и ту же зависимость и их графики сливаются в одну прямую.
Решение систем из трех линейных уравнений также имеет наглядную геометрическую интерпретацию — в виде точки, в которой пересекаются три плоскости, каждая из которых описывается функцией двух переменных. Для наглядности желательно представить и линии пересечения плоскостей. Это позволяет сделать функция импликативной трехмерной графики tmplicitplotSd, что и показано на рис. 8.13. Для объединения графиков площадей использована функция display.
Некоторые проблемы с решением систем из трех линейных уравнений иллюстрируют примеры, приведенные на рис. 8.14, В первом примере решения вообще нет. График показывает, в чем дело, — линии пересечения плоскостей идут параллельно и нигде не пересекаются. Во втором примере все три плоскости пересекаются по одной линии.
Рис. 8.13. Пример решения системы из трех линейных уравнений с графической иллюстрацией решения
Рис. 8.14. Графическая иллюстрация особых случаев решения системы из трех линейных уравнений
Следующий пример показывает решение системы из четырех линейных уравнений:
Эта система имеет решение, но его простая графическая иллюстрация уже невозможна.
Случай решения неполной системы уравнений (уравнений — 3, а неизвестных — 4) иллюстрирует следующий пример:
Как видно из приведенных примеров, функция solve неплохо справляется с решением систем линейных уравнений.
Функция solve может использоваться для решения систем нелинейных и трансцендентных уравнений. Для этого система уравнений и перечень неизвестных задаются в виде множеств. Ниже приведены примеры решения уравнений:
В этих примерах хорошо видна техника работы с функциями solve и assign. В конце примеров показано восстановление неопределенного статуса переменных х и у с помощью функции unassign и снятие определения переменных с помощью заключения их в прямые апострофы.
В решениях уравнений нередко появляется функция RootOf, означающая, что корни нельзя выразить в радикалах. Эта функция применяется и самостоятельно в виде RootOf(ехрr) или RootOf(ехрr, х), где ехрr — алгебраическое выражение или равенство, х — имя переменной, относительно которой ищется решение. Если х не указана, ищется универсальное решение по переменной _Z. Когда ехрr задано не в виде равенства, решается уравнение ехрr=0. Для получения решений вида RootOf в явном виде может использоваться функция all values. Примеры применения функции RootOf:
Итак, функция RootOf является эффективным способом представления решения в компактном виде. Как уже отмечалось, наряду с самостоятельным применением она часто встречается в составе результатов решения нелинейных уравнений.
Неравенства в математике встречаются почти столь же часто, как и равенства. Они вводятся знаками отношений, например: > (больше), < (меньше) и т. д. Решение неравенств существенно расширяет возможности функции solve. При этом неравенства задаются так же, как и равенства. Приведенные на рис. 8.15 примеры поясняют технику решения неравенств.
Из приведенных примеров очевидна форма решений — представлены критические значения аргумента, вплоть до не включаемых значений области действия неравенства (они указываются словом Open). Всегда разумным является построение графика выражения, которое задает неравенство, — это позволяет наглядно убедиться в правильности решения. Приведем еще несколько примеров решения неравенств в аналитической форме:
б
Рис. 8.15. Примеры, иллюстрирующие решение неравенств
В последних примерах показано решение систем неравенств." При этом выдаются области определения нескольких переменных.
Для получения численного решения нелинейного уравнения или системы нелинейных уравнений в форме вещественных чисел удобно использовать функцию:
fsolve( eqns. vars. options )
Эта функция может быть использована со следующими параметрами:
Функция fsolve дает решения сразу в форме вещественных или комплексных чисел, что и показывают следующие примеры:
Заметим, что локализация поиска корней в заданном интервале позволяет отыскивать такие решения, которые не удается получить с помощью функций solve и fsolve в обычном применении. В последнем из приведенных примеров дается решение системы нелинейных уравнений, представленных уравнениями f и д.
Чтобы еще раз показать различие между функциями solve и fsolve, рассмотрим пример решения с их помощью одного и того же уравнения erf(x) = 1/2:
> so1ve(erf(x)=l/2,x);
RootOf(2erf(_Z)-l)
> fsolve(erf(x)=l/2);
.4769362762
Функция solve в этом случае находит нетривиальное решение в комплексной форме через функцию RootOf, тогда как функция fsolve находит обычное приближенное решение.
Функция solve имеет ряд родственных функций. Одну из таких функций — fsolve — мы рассмотрели выше. В справочной системе Maple 7 можно найти ряд и других функций, например rsolve для решения рекуррентных уравнений, isolve для решения целочисленных уравнений, msolve для решения по модулю m и т. д. Здесь мы рассмотрим решение уравнений важного класса — рекуррентных. Напомним, что это такие уравнения, у которых заданный шаг решения находится по одному или нескольким предшествующим шагам.
Для решения рекуррентных уравнений используется функция rsolve:
rsolve(eqns, fens) ,
rsolve(eqris. fens, 'genfunc'(z))
rsolve(eqns, fens, 'makeproc')
Здесь eqns — одиночное уравнение или система уравнений, fens — функция, имя функции или множество имен функций, z — имя, генерирующее функциональную переменную.
Ниже представлены примеры применения функции rsolve:
А теперь приведем результат вычисления функцией rsolve n-го числа Фибоначчи. Оно задается следующим выражением:
> eql :- (f(n+2) = f(rn-l) + f(n) . f(0) - 1 . f(l) - 1}:
eql~{f(n+2) = f(n + \) + f(n),f(0)=\,f(l)=l}
В нем задана рекуррентная формула для числа Фибоначчи — каждое новое число равно сумме двух предыдущих чисел, причем нулевое и первое числа равны 1. С помощью функции rsolve можно получить поистине ошеломляющий результат:
Числа Фибоначчи — целые числа. Поэтому представленный результат выглядит как весьма сомнительный. Но на самом деле он точный и с его помощью можно получить числа Фибоначчи. Ниже показан процесс получения чисел Фибоначчи для n = 5, 7, 10 и 20:
> [normal(subs(n=5,al).expanded).normal(subs(n-7.al).expanded).
normal(subs(n=10,al),expanded),normal(subs(n=20.al),expanded)];
[8,21,89,10946]
Иногда бывает нужен результат в форме только целых чисел. Для этого используется функция isolve(eqns, vans), дающая решение в виде целых чисел. Приведем примеры ее применения:
> iso1ve({2*x-5=3*y}):
{x = 4 + 3_Zl,y=\ + 2_Z1]
> iso1ve(y^4-z^2*y^2-3*x*z*y*2-x^3*z);
Во втором из приведенных примеров в выводе появилась вспомогательная переменная %1, которая упрощает запись результата при текстовом формате его вывода (Character Notation). Напоминаем, что в стандартной математической нотации вспомогательная переменная вида %N не формируется. В этом случае упомянутый пример будет выглядеть следующим образом:
Результат вычислений одинаков при любом формате вывода, но иногда вывод в текстовом формате с выделением вспомогательных переменных имеет преимущество, поскольку выглядит более компактным.
Функция msolve(eqns,vars.m) или msolve(eqns,m) обеспечивает решение вида Z mod m (то есть при подстановке решения левая часть4 при делении нат дает остаток, равный правой части уравнения). При отсутствии решения возвращается объект NULL (пустой список).
Ниже даны примеры использования функции msolve:
> mso1ve({3*x-4*y=l,7*x+y=2}.12);
{у = 5,х=3}
> msolve(2^i=3.19);
{(=13 + 18_Z7~}
> mso1ve(8*j-2,x,17);
{/ = 3 + 8*}
На этом мы завершаем рассмотрение функций для решения уравнений, неравенств и систем с ними.
В этом уроке мы научились:
Выражения (ехрr) или уравнения (eqn) обычно используются как сами по себе, так и в виде равенств или неравенств. В последнем случае объекты с выражениями имеют левую и правую части. Для простейших манипуляций с выражениями полезны следующие функции:
Ввиду очевидности действия этих функций ограничимся наглядными примерами их применения:
ПРИМЕЧАНИЕ
Обратите внимание на то, что в предшествующих версиях Maple загрузка библиотеч ной функции cost выполнялась иначе — командой readlib(cost). Это обстоятельство может служить причиной неверной работы документов, созданных в старых версиях Maple, в среде описываемой версии Maple 7.
В общем случае выражения могут быть многоуровневыми и содержать объекты, расположенные на разных уровнях вложенности. Приведем две функции для оценки уровней выражений и списков:
Ниже представлены примеры применения этих функций:
Рекомендуется просмотреть и более сложные примеры на применение этих функций в справке.
Многие математические выражения имеют различные тождественные формы. Порою преобразование выражения из одной формы в другую позволяет получить результат, более удобный для последующих вычислений. Кроме того, различные функции Maple 7 работают с разными формами выражений и разными типами данных. Поэтому большое значение имеет целенаправленное преобразование выражений и данных.
Основной функцией для такого преобразования является функция convert:
convert(expr. form, аrgЗ. ...)
Здесь ехрr — любое выражение, form — наименование формы, аrg3, ... — необязательные дополнительные аргументы.
convert — простая и вместе с тем очень мощная функция. Ее мощь заключается в возможности задания множества параметров. Их полный перечень (76 штук!) можно найти в справке по функции convert. Многие из этих параметров очевидны с первого взгляда, поскольку повторяют наименования типов чисел, данных или функций. Например, опции binary, decimal, hex и octal преобразуют заданные числа в их двоичное, десятичное, шестнадцатеричное и восьмеричное представление. Параметр vector задает преобразование списка в вектор (напоминаем, что список и вектор — разные типы данных), а параметр matrix — в матрицу. Приведем примеры применения функции convert:
Из этих примеров (их список читатель может пополнить самостоятельно) следует, что функция преобразования convert является одной из самых мощных функций Maple. С ее помощью можно получить множество различных форм одного и того же выражения.
Еще одним мощным средством преобразования выражений является функция combine. Она обеспечивает объединение показателей степенных функций и преобразование тригонометрических и некоторых иных функций. Эта функция -может записываться в трех формах:
combine(f)
combinef(, n)
combine(f. n. optl. opt2. ...)
Здесь f — любое выражение, множество или список выражений; n — имя, список или множество имен; optl, opt2, ... — имена параметров. Во втором аргументе можно использовать следующие функции:
@@ |
abs |
arctan |
conjugate |
exp |
In |
piecewise |
polylog |
power |
product |
Ps |
radical |
range |
signum |
trig |
Примеры применения функции combine представлены ниже:
Эти примеры далеко не исчерпывают возможностей функции combine в преобразовании выражений. Рекомендуется обзорно просмотреть примеры применения функции combine с разными параметрами, приведенные в справочной системе Maple 7.
Выражения и их части в Maple 7 рассматриваются как объекты. В ходе манипуляций с ними важное значение имеет контроль за типом объектов. Одной из основных функций, обеспечивающих такой контроль, является функция whattype(object), возвращающая тип объекта, например string, integer, float, fraction, function и т. д. Могут также возвращаться данные об операторах. Примеры применения этой функции даны ниже:
> whattype(2+3);
integer
> whattype(Pi):
symbol
> whattype(123./5)
float
> whattype(l/3i:
fraction
> whattype(sin(x));
function
> whattype([1.2.3,a,b,c])
;list
> whattype(a+b+c);
+
> whattype(a*b/c):
*
> whattype(a'b):
^
> whattype(H-2+3=4);
=
С помощью функции type(object.t) можно выяснить, относится ли указанный объект к соответствующему типу t, например:
> type(2+3,integer):
true
> type(s1n(x).function);
true
> typeChello,string);
false
> type("hello",string);
true
> typed/3.fraction):
true
При успешном соответствии типа объекта указанному (второй параметр) функция type возвращает логическое значение true, в противном случае — false.
Для более детального анализа объектов может использоваться функция hastype(expr. t), где ехрr — любое выражение и t — наименование типа подобъекта.
Эта функция возвращает логическое значение true, если подобъект указанного типа содержится в выражении ехрr. Примеры применения этой функции даны ниже:
> hastype(2+3,integer);
true
> hastype(2+3/4.integer):
false
> hastype(2*sin(x).function);
true
> hastype(a+b-c/d,'+'):
true
Еще одна функция — has(f.x) — возвращает логическое значение true, если подобъект х содержится в объекте f, и false в ином случае:
> has(2*sin(x),2);
true
> has(2*sin(x).V);
false
> has(2*sin(x),3-l);
true
Следует отметить, что соответствие подобъекта выражения указанному подобъекту понимается в математическом смысле. Так, в последнем примере подобъект «3 - 1», если понимать его буквально, в выражении 2*sin(r) не содержится, но Maple-язык учитывает соответствие 3 - 1 = 2, и потому функция has в последнем примере возвращает true.
Функциональные преобразования подвыражений
Нередко бывает необходимо заменить некоторое подвыражение в заданном выражении на функцию от этого подвыражения. Для этого можно воснользоваться функцией applyop:
Ниже даны примеры применения этой функции:
Еще две функции, реализующие операции подстановки, указаны ниже:
map(fcn, expr. arg2. .... argn)
map2(fcn, argl, expr. arg3, .... argn)
Здесь fen — процедура или имя, expr — любое выражение, argi — необязательные дополнительные аргументы для fen.
Первая из этих функций позволяет приложить fen к операндам выражения ехрr. Приведенные далее примеры иллюстрируют использование функции mар.
Из этих примеров нетрудно заметить, что если второй параметр функции mар — список, то функция (первый параметр) прикладывается к каждому элементу списка, так что возвращается также список. Из последнего примера видно, что если за вторым параметром идет перечисление аргументов, то они включаются в список параметров функции.
Функция mар2 отличается иным расположением параметров. Ее действие наглядно поясняют следующие примеры:
Заметим, что операции, подобные описанным выше, Maple 7 реализует и с рядом других функций. Ограничимся примерами на подс