ebook img

Расширение функциональной среды системы Mathematica. PDF

553 Pages·2012·4.467 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Расширение функциональной среды системы Mathematica.

Международная Академия Ноосферы Балтийское отделение В.З. Аладьев, Д.С. Гринь Расширение функциональной среды системы Mathematica Херсон – 2012 В.З. Аладьев, Д.С. Гринь ББК 22.18 Р 249 ISBN 978–966–2393–72–9 Р 249 Аладьев В.З., Гринь Д.С. Расширение функциональной среды системы Mathematica: Монография / В.З. Аладьев, Д.С. Гринь.– Х.: Олди–Плюс, 2012. – 552 с. Системы компьютерной математики находят все более широкое применение в целом ряде областей как естественных, так и экономико-социальных. Эти системы являются достаточно важным инструментарием для ученых, преподавателей, исследователей и инженеров, хорошо сочетая символьные методы с продвинутыми вычислительными методами. Одним из лидеров среди средств этого класса несомненно является пакет Mathematica. Естественно, дать полный анализ этому средству в отведенных книгой рамках просто нереально. И здесь акцентируется внимание лишь на одном аспекте – модульном программировании, поддерживаемом средой пакета. Данный аспект имеет особую значимость не только для решения прикладных задач, но и, прежде всего, он довольно важен в создании собственных средств, расширяющих часто используемые стандартные средства пакета и/или устраняющих его недостатки, или дополняющих пакет новыми средствами. Программные средства, представленные в книге, содержат целый ряд достаточно полезных и эффективных приемов процедурно-функционального программирования в системе Mathematica, расширяя программную среду системы и позволяя, порой, существенно эффективнее и проще программировать задачи самого различного назначения, прежде всего, носящие системный характер. Книга снабжена нашим пакетом AVZ_Package с Freeware лицензией в файлах форматов {nb, n, cdf, mx}, содержащим более 500 процедур, функций и глобальных переменных. Настоящая книга рассчитана на широкий круг пользователей систем компьютерной математики, преподавателей и студентов университетов по курсам вычислительной техники и информатики, математики и других естественно–научных дисциплин. ББК 22.18 ISBN 978–966–2393–72–9 © Аладьев В.З., Гринь Д.С., 2012 2 Расширение функциональной среды системы Mathematica Содержание Предисловие 5 Глава 1. Краткий экскурс в историю систем компьютерной алгебры 13 Глава 2. Общие сведения по встроенному языку программирования пакета Mathematica (Math–языку) 22 Глава 3. Исходные сведения по программной среде пакета Mathematica 34 3.1. Вводные данные по режиму текущего документа пакета Mathematica 34 3.2. Определение переменных в программной среде пакета Mathematica 38 3.3. Последовательности выражений и списочные структуры в Mathematica 42 3.4. Строчные структуры и символы в программной среде Mathematica 56 3.5. Выражения в программной среде пакета Mathematica 63 3.6. Понятие шаблонов и манипуляции с ними в среде пакета Mathematica 74 3.7. Определение тестирующих условий для шаблонов в среде Mathematica 82 3.8. Определение функций в программной среде пакета Mathematica 85 3.9. Механизм правил преобразования выражений в среде пакета Mathematica 99 3.10. Специальные формы присвоения значений в среде пакета Mathematica 102 3.11. Определение процедур в программной среде пакета Mathematica 106 3.12. Определение чистых функций в программной среде пакета Mathematica 113 3.13. Понятие контекста и его использование в программной среде Mathematica 116 3.14. Определение пакетов и их использование в программной среде Mathematica 119 3.15. Средства работы с файлами данных в программной среде Mathematica 132 Глава 4. Базовые управляющие структуры программной среды Mathematica 137 4.1. Управляющие структуры ветвления программной среды Mathematica 140 4.2. Циклические управляющие структуры программной среды Mathematica 148 4.3. Специальные типы циклических управляющих структур Mathematica 151 Глава 5. Базовые механизмы типирования объектов в среде Mathematica 154 5.1. Механизмы типирования объектов в программной среде пакета Mathematica 156 5.2. Дополнительные средства тестирования типов объектов в среде Mathematica 163 Глава 6. Обработка особых и ошибочных ситуаций в среде Mathematica 178 Глава 7. Организация механизмов процедур и функций в Mathematica 185 7.1. Средства тестирования процедурных объектов в среде Mathematica 199 7.2. Локальные переменные процедур в среде пакета Mathematica 210 7.3. Глобальные переменные процедур и механизмы возврата результатов процедурами в программной среде пакета Mathematica 228 3 В.З. Аладьев, Д.С. Гринь 7.4. Некоторые полезные средства для работы с Mathematica–процедурами 233 7.5. Функциональные конструкции в среде пакета Mathematica 297 Глава 8. Дополнительные средства работы с базовыми структурами данных и с выражениями в программной среде пакета Mathematica 321 8.1. Дополнительные средства работы со строчными структурами в Math–языке 321 8.2. Дополнительные средства работы со списочнымии структурами в Math–языке 348 8.3. Дополнительные средства работы со структурами типа последовательность 361 8.4. Дополнительные средства работы с алгебраическими выражениями 364 8.5. Некоторые полезные процедурные средства в среде Mathematica 381 Глава 9. Организация работы с пакетами в среде Mathematica 399 Глава 10. Средства ввода/вывода программной среды Mathematica 440 10.1. Средства пакета Mathematica для работы с внутренними файлами 440 10.2. Средства Mathematica для работы с внешними файлами данных 447 10.3. Некоторые полезные средства доступа в среде пакета Mathematica 473 Глава 11. Организация программного обеспечения пользователя 492 11.1. Организация программного обеспечения пользователя в среде пакета 494 11.2. Программирование больших систем в среде пакета Mathematica 510 11.3. Mathematica или Maple – субъективная точка зрения 517 Литература 535 Monographs, textbooks and books on Computer Algebra Systems Maple and Mathematica, prepared and published by members of the Baltic Branch of Internaional Academy of Noosphere during 1995 – 2012 540 Перечень пользовательских процедур и функций для пакета Mathematica, рассматриваемых и упоминаемых в настоящей книге; некоторые полезные рекомендации по использованию средств, представленных в данной книге 542 Summary 550 Mathematica 2, Mathematica 7, Mathematica 8 – торговые марки Wolfram Research Inc. Maple V, Maple 6, Maple 7, Maple 8, Maple 10, Maple 11 – торговые марки MapleSoft Inc. 4 Расширение функциональной среды системы Mathematica Предисловие Системы компьютерной алгебры (СКА) находят все более широкое применение в целом ряде областей как естественных, так и экономико–социальных наук таких как: химия, математика, физика, информатика, техника, технологии, образование и т.д. Системы такие как Mathematica, Maple, REDUCE, MuPAD, Derive, Magma, Axiom, GAP, Maxima, MathPiper и др. все более востребованы для преподавания [20,53,60,82] математически ориентированных дисциплин, в научных исследованиях и технологиях. Эти системы являются основными инструментами для ученых, исследователей, преподавателей и инженеров. Исследования на основе СКА–технологии, как правило, хорошо сочетают алгебраические методы с продвинутыми вычислительными методами. В этом смысле СКА – междисциплинарная область между математикой и информатикой, в которой исследования сосредоточиваются как на разработке алгоритмов для алгебраических (символьных) и численных вычислений и обработки данных, так и на создании языков программирования и программной среды для реализации подобного типа алгоритмов и базирующихся на них задач различного назначения. Решение прикладных пользовательских задач в той или другой области приложений поддерживают пакеты прикладных программ (ППП или просто пакеты) специального, узко–специального либо общего назначения. Классификация и характеристика данного класса программных средств (ПС) может быть найдена в наших предыдущих книгах [1–3,36]. Естественно, квалифицированный пользователь, владеющий в достаточной мере одним из эффективных языков программирования (например, Basic, C, Fortran, PL/1, Pascal, Lisp, Prolog и др.), в целом ряде случаев для решения своих задач может самостоятельно написать и отладить отдельную программу или комплекс программ, позволяющих реализовать на ПК алгоритм его задачи. Причем, в ряде случаев такой подход может быть более эффективным, чем использование для этих целей готовых ПС, т.к. разработчик ПС одновременно хорошо владеет спецификой решаемой задачи и условиями ее эксплуатации. Однако, такой подход требует, как правило, серьезных трудозатрат и при нынешнем обилии различного типа и назначения средств для ПК (особенно широко распространенных IBM–совместимых) в значительной мере становится нецелесообразным. Вместе с тем, развитые ППП снабжаются собственным встроенным языком программирования того или иного уровня сложности, позволяющим в среде пакета программировать целые задачи или их отдельные фрагменты, которые может быть нецелесообразно, неэффективно, а в ряде случаев и невозможно, реализовывать стандартными средствами пакета. Настоящая книга посвящена классу ПС (названному системами компьютерной алгебры), которые, в первую очередь, предназначены для решения задач математического характера, и, прежде всего, лидерам в данном классе пакетам Mathematica фирмы Wolfram Research Inc. и Maple фирмы MathSoft Inc. Книга является вполне естественным продолжением нашей серии книг по вычислительной технике и программному обеспечению: ЕС ЭВМ (IBM 360/370), СМ ЭВМ (PDP–11), ПК ИСКРА 226 (WANG 2200–MVP), ИСКРА 1030 (IBM PC/XT), а также средствам для IBM– совместимых ПК [36]. При этом, большое внимание нами уделялось как опыту работы с описываемым средством, так и особенностям его применения, а также вытекающим 5 В.З. Аладьев, Д.С. Гринь из этого рекомендациям пользователю. По мере возможности, предлагались наиболее эффективные технологии применения данных средств для решения тех либо других прикладных задач пользователя. Довольно детальная характеристика данной серии книг может быть найдена, например, в [36] и в настоящей книге не рассматривается. В настоящее время ПС, ориентированные на решение математических задач (где под математической понимается любая задача, чей алгоритм может быть описан в терминах того или иного раздела математики), весьма обширны и в определенной степени могут быть условно дифференцированы на 5 уровней: (1) встроенные средства различной степени развития той либо иной системы программирования; (2) специальные языки программирования; (3) узко-специальные, (4) специальные, (5) общие ППП. При этом, пятый уровень ранее представляли три основных математических пакета MathCAD, Reduce и MatLab. В указанной литературе приведены довольно подробное описание этих популярных пакетов; особенности их эксплуатации и использования в решении различного типа математических задач. При этом, на основе всесторонних апробации и адаптации для отечественные ПК пакетов MathCAD и REDUCE в наших книгах [1– 7] были представлены достаточно детальный анализ особых и ошибочных ситуаций, рекомендации по использованию и предложения по дальнейшему развитию данных пакетов. Немало из указанных аспектов, доведенных до сведения разработчиков этих пакетов, было затем учтено при создании последующих версий пакетов. Естественно, данная рубрикация программных средств во многом носит субъективный характер, носящий следы опыта нашей работы с ПС, в той или иной мере ориентированными на программирование математических задач как в числовом, так и в символьном видах. Наконец, современное развитие компьютерных технологий, ориентированных, прежде всего, на создание интегрированных пакетов multimedia-технологии вскоре привело к появлению нового уровня математических пакетов, из которых наиболее известными являются пакеты Maple и Mathematica соответственно фирм MapleSoft Inc. и Wolfram Research Inc. Эти пакеты, превосходя по целому ряду важных показателей упомянутые средства 5-го уровня, вместе с тем, наследуя целый ряд их стандартов, как пионеров– эталонов ПС такого типа, что достаточно легко прослеживается при более детальных их рассмотрении, использовании и апробации. В среде отечественных пользователей СКА наибольшую популярность завоевал пакет Maple; в качестве некоторого косвенного подтверждения степени популярности обоих пакетов в СНГ может служить посещаемость форумов по таким пакетам на наиболее известном русскоязычном образовательном математическом сайте www.exponenta.ru. Сегодня на данном сайте форум Maple имеет 2465 тем и 11322 сообщений, тогда как форум Mathematica лишь 870 тем и 2900 сообщений. Естественно, к такой статистике следует относиться достаточно осторожно, ибо она не совсем верно отражает степень популярности обоих пакетов и вот почему. Прежде всего, данная статистика связана с образовательным процессом в университетах,которые используют именно Maple по двум основным причинам, а именно: (1) Maple более лоялен к его нелицензионному использованию и (2) как для преподавательского состава университетов, так и (прежде всего) студентов он оказался более простым в освоении, прежде всего тем, что его язык синтаксически более близок к известным императивным языкам программирования, 6 Расширение функциональной среды системы Mathematica в частности, к Pascal. А как известно, в общем случае императивные языки несколько проще в освоении, чем функциональные, хотя и здесь не так все однозначно. Может быть, именно по этой причине, несмотря на двадцатилетний возраст Mathematica, ее достаточно мощные вычислительные возможности наряду с возможностью установки на такие операционные системы, как Windows, Linux, Mac OS X популярность данной СКА на постсоветском пространстве относительно невелика. В беседах, проведенных нами на целом ряде мастер–классах по СКА, многие слушатели считают Mathematica слишком сложной, а в функциональном отношении избыточной. И если с первым, в определенной мере можно согласиться, то вторым пакет Maple также злоупотребляет, пусть и не в такой степени. Об этом несколько детальнее речь будет идти ниже. Нами пару раз просматривался целый ряд тем и сообщений на указанном сайте в форумах по обеим пакетам и картина сложилась следующая. На обоих форумах, в массе своей, обитают студенты, пытающиеся решить свои задачки чужими силами, либо постеры, ищущие некоего самоутверждения способом решения задач студенческого характера (хотя, пожалуй, имеются редкие исключения), и если Maple им как-то удалось освоить на довольно низком уровне, более сложный для восприятия второй пакет для освоения требует существенно больших усилий. В то время как довольно квалифицированные пользователи СКА Mathematica и Maple, как правило, не посещают форумов данного уровня. Итак, приведенная статистика с определенной долей достоверности вполне может быть отнесена к студенческой среде, причем, далеко не самой лучшей (в целом ряде случаев проблему таких посетителей форумов составляет не столько тот либо иной пакет, сколько даже суть задачи, предложенной им для решения в среде пакета), хотя она и представляет существенный пласт пользователей СКА, правда, во многом только на время учебы по курсам, завязанным на указанные СКА. Замечено, во многих случаях вопрошающие на довольно низком уровне владеют постановочной стороной вопроса, а отвечающие не очень сведущи в программной среде данных пакетов. На ряде других форумов по CAS ситуация хоть и несколько лучше, однако и статистика на их основе представляется нам весьма ненадежной для анализов подобного рода. Наш опыт эксплуатации данных СКА оказал существенное влияние на апробацию и применение систем Mathematica и Maple, сравнительный аспект программирования в среде которых в различных контекстах был рассмотрен в наших книгах [97-99]. Здесь вполне уместно заострить внимание на достаточно существенном терминологическом аспекте, а именно. Рассматриваемое в данной книге программное средство является ярким представителем класса т.н. систем компьютерной алгебры (СКА, или CAS в англо– язычном сокращении), ориентированных, в первую очередь, на алгебраическое решение математически ориентированных задач на компьютере. Между тем, все последующее развитие систем данного класса и, прежде всего, его лидеров (Mathematica, Maple) не только позволяет выполнять весьма сложные численные вычисления с произвольной точностью, графически представлять результаты вычислений и т.д., но и с постоянно расширяющимся кругом разделов математики, охватываемых решающими средствами систем, что вполне резонно позволяет говорить уже о более развитом классе систем – систем компьютерной математики (СКМ, или CMS в англо–язычном сокращении). Далее с учетом сказанного понятия СКА и СКМ будем полагать тождественными там, где это не вызывает каких–либо недоразумений или двусмысленностей. Тут же отметим, что, 7 В.З. Аладьев, Д.С. Гринь например, специализированные СКА, вообще говоря, СКМ не являются. Пакет Mathematica наряду с уже упомянутым пакетом Maple является одной из СКМ, наиболее известных и пользующихся популярностью систем. Mathematica содержит большое число функций для обеспечения как символьных преобразований, так и для численных вычислений. Наряду с этим, пакет поддерживает работу с графикой 2 и 3 измерений, импорт и экспорт изображений и звука и целый ряд других. Mathematica обеспечивает возможность решения следующих основных классов задач, а именно: – интегрирование и дифференцирование функций, решение систем полиномиальных и тригонометрических уравнений и неравенств, рекуррентных уравнений, решение дифференциальных уравнений и уравнений в частных производных, ряды Тейлора, упрощение выражений, вычисление пределов, нахождение конечных и бесконечных сумм и произведений, а также целый ряд других задач в символьном виде; – решение систем уравнений, вычисление пределов, полиномиальная интерполяция функций, нахождение сумм и произведений, вычисление значений элементарных и специальных функций с произвольной степенью точности, преобразование Лапласа, интегрирование и дифференцирование, решение дифференциальных уравнений и уравнений в частных производных, а также целый ряд других в численном виде; – решение задач из линейной алгебры, теории чисел и других разделов математики; – задачи графического представления информации (построение графиков функций по их формулам, параметрических кривых и поверхностей, построение геометрических фигур, импорт и экспорт графики во многих растровых и векторных форматах), включая также анимацию графических объектов различных типов и размерности 2D и 3D; – начиная с последних версий, пакет поддерживает распределенные вычисления, для чего используется пакет Parallel Computing Toolkit (пакет поддерживает довольно широкий спектр многопроцессорных систем, кластеров на базе CCS и grid–сетей); планировщик для оптимизации решения конкретных задач, автоматическое восстановление после сбоев и перезапуск остановленных процессов, средства распараллеливания встроенного языка пакета, тестирование и эмуляция параллельных приложений и др. При этом, отдельно разработчики поставляют интегрированную систему Mathematica Personal Grid Edition, сочетающую в себе систему Mathematica и пакет Parallel Computing Toolkit; – пакет поддерживает встроенный процедурно–функциональный язык, обеспечивая пользователя довольно эффективным средством программирования своих задач. При этом, Mathematica обладает даже большей функциональной избыточностью, чем Maple. Средства поддержки работы со звуком и простейшими клеточными автоматами в Mathematica, Socket в Maple и ряд других вполне можно отнести к «архитектурным» излишествам пакетов. Между тем, пакет Mathematica обеспечивает высокую скорость численных вычислений. А вот к недостаткам Mathematica довольно часто относится несколько необычный язык программирования, что на наш взгляд не совсем верно. И именно в этом отношении настоящая книга попытается прояснить ситуацию. Также отметим, что оба пакета не являются универсальными с общепринятой точки зрения системами программирования, давая возможность пользователю создавать средства, выполнимые только в среде самих пакетов (т.е. в полной мере невозможно создание exe– и 8 Расширение функциональной среды системы Mathematica com–файлов), что существенно сужает область выполнимости данных средств, требуя наличия самих пакетов, для целого ряда пользователей достаточно дорогих. Пакет Mathematica на сегодня является многофункциональными средством, которое включает большое число возможностей для решения довольно широкого круга задач. Естественно, привести полный анализ данным средствам в отведенных книгой рамках просто невозможно. И здесь акцентируется внимание лишь на одном аспекте пакета – возможностях его программной среды при решении специальных задач системного и массового характера. Данный аспект имеет особую значимость не только для решения прикладных задач, но, прежде всего, он довольно важен при создании программных средств, расширяющих часто используемые средства пакета и/или устраняющих их недостатки, либо дополняющих пакет новыми средствами. Именно в этом контексте и представляют интерес возможности пакета по созданию такого типа процедур или функций. Итак, программирование в среде пакета – многоаспектная тема и в ней мы акцентируем внимание только на вопросах разработки процедур/функций, которые представляют основные программные объекты как для наиболее частоиспользуемых средств пользователя, так и для средств, расширяющих и улучшающих стандартные средства пакета, в программной среде самого пакета, т.е. реализованные средствами встроенного языка пакета (Math-языка). Именно в этом контексте и можно в довольно полной мере оценить программную среду пакета Mathematica, не взирая на некоторые субъективные моменты, прежде всего, пользовательские предпочтения и привычки. Естественно, эти моменты играют достаточно существенную роль для пользователя, имеющего определенный опыт работы с языками процедурного типа, тогда как для начинающего это не стоит столь остро по причине отсутствия такого опыта. Книга состоит из 11 глав и затрагивает довольно обширный материал по программной среде пакета Mathematica в контексте его возможностей в процедурно–функциональном программировании. Между тем, ограниченные объем и сроки подготовки настоящей книги не позволили нам изложить рассматриваемые вопросы с одинаковой степенью полноты. Поэтому, порой, имеет место освещение лишь сути дела без обстоятельного обсуждения отдельных ньюансов и рассмотрения смежных (часто интересных и весьма важных самих по себе) вопросов. Основные положения данной книги сопровождаются соответствующими иллюстративными примерами, проработку которых мы считаем необходимой для лучшего усвоения предлагаемого материала. Более того, примеры, приведенные в книге, могут быть использованы в качестве довольно полезных средств при разработке собственных приложений в среде пакета Mathematica. Для удобства их использования именно в данном качестве читателю предоставляется возможность свободной загрузки содержащего их пакета AVZ_Package для Mathematica 5 – 8 [90]. В целом, содержимое глав книги может быть охарактеризовано следующим образом. Система компьютерной алгебры (Computer Algebra System – CAS) представляет собой тип программного средства, предназначенного для манипулирования математическими формулами. Основной задачей CAS является автоматизация достаточно громоздких и сложных символьных преобразований. При этом, основное различие между CAS и традиционными компьютерными системами состоит в том, что первая имеет дело, в основном, с уравнениями в символьной, а не в числовой форме. И если как цели, так 9 В.З. Аладьев, Д.С. Гринь и возможности этих систем изменяются в весьма широком диапазоне, все же основная их цель остается неизменной, а именно: обработка символьных выражений. И первая глава книги представляет краткий экскурс в историю систем компьютерной алгебры, в дальнейшем развитии сформировавших и более развитые системы компьютерной математики (СКМ). Тогда как вторая глава на содержательном уровне представляет общие сведения по встроенному языку программирования СКМ Mathematica. Тогда как третья глава представляет базовые сведения по программной среде пакета Mathematica, составляющие собственно ядро встроенного Mathematica–языка (Math– языка), включая такие вопросы, как: определение переменных и последовательностей выражений, списочные и строчные структуры, понятие шаблонов и манипуляции с ними, включая определение тестирующих условий для них, определение функций и процедур, механизм правил преобразования выражений, специальные присваивания значений, определение чистых функций, как базовой составляющей функционального программирования, понятие контекста и механизм его применения для организации пакетов, средства работы с файлами и ряд других. При этом, рассматриваются лишь вопросы, имеющие непосредственное отношение к тематике представляемых в книге программных средств; в последующих главах книги данные вопросы будут в той или иной мере как детализироваться, так и дополняться, исходя собственно из назначения рассматриваемых программных средств. Между тем, по ходу изложения уже в данной главе будет представлен целый ряд наших средств, сопутствующих рассматриваемой тематике. Данные средства (как и рассматриваемые на протяжении всей настоящей книги) в полной мере отвечают основной цели предлагаемой книги, которую вполне можно охарактеризовать следующими двумя основными направлениями, а именно: (1) представление целого ряда достаточно полезных средств, как расширяющих, так и дополняющих стандартные средства пакета; (2) иллюстрация на их примере приемов и методов, достаточно полезных в процедурно-функциональном программировании, наряду с целым рядом важных особенностей данной парадигмы программирования в условиях программной среды пакета Mathematica. Тут же вполне уместно отметить следующее достаточно существенное обстоятельство. В процессе подготовки настоящей книги создавались вышеупомянутые средства без последующей их модификации (в основной массе) с учетом вновь создаваемых средств; т.е. появление новых средств далеко не всегда вело к модификации ранее созданных, и в этом плане у читателя остается достаточно широкое поле практического освоения среды программирования пакета Mathematica наряду с представленными приемами. Более того, изложение носит довольно выраженный фрагментарный характер, что не предполагает использование его в качестве начального освоения программной среды пакета Mathematica. Основное его назначение сводится к представлению целого ряда наших программных средств, расширяющих программную среду пакета Mathematica и устраняющих ограничение ряда ее стандартных средств. Именно поэтому данные средства сопровождаются ассоциированной с ними справочной информацией пакета с предоставлением необходимой и поясняющей дополнительной информации. В то же время ряд представленных в настоящей книге методов и приемов, использованных в программировании рассматриваемых процедур и функций, вполне могут оказаться 10

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.