Самоучитель по Mathematica

Урок 1. Первое знакомство

Урок 1. Первое знакомство

1. Первое знакомство

 

Первое знакомство

  • Зарождение и развитие систем компьютерной алгебры
  • Математические системы Mathematica
  • Структура систем Mathematica и их идеология
  • Отражение Mathematica в сети Интернет
  • Особенности систем компьютерной математики
  • Математические системы в образовании и в науке
  • Диалоге системой и ее входной язык
  • Инсталляция и запуск
  • Прямая работа с CD-ROM
  • Отличительные особенности Mathematica 4

В наши дни многие уже путают компьютерную математику как науку о математических вычислениях и преобразованиях с помощью компьютеров с СКМ Маthematica, созданной фирмой Wolfram Research, Inc. Хотя это и знаменательно само по себе, во избежание такой путаницы мы начнем наш курс с рассказа о том, как зародилась компьютерная математика и как были созданы программные системы компьютерной математики различных классов. Здесь мы также опишем отражение системы Mathematica в мировой сети Интернет.

Для многих неискушенных в математике пользователей не совсем понятно, что делают СКМ, особенно те из них, которые выполняют символьные операции. Поэтому в этом уроке мы впервые познакомимся с особенностями различных систем и оценим их возможности, так сказать, в первом приближении. Некоторые из приведенных примеров лучше повторить в дальнейшем — после изучения основ работы с системой Mathematica. Впрочем, нетерпеливые учащиеся могут попробовать сделать это немедленно! Однако, чтобы запустить систему Mathematica 3 или 4 и начать работу с ней, надо вначале установить систему на жесткий диск вашего ПК. Об этом пойдет речь в конце данного урока.

 

2. Зарождение и развитие систем компьютерной алгебры

 

Зарождение и развитие систем компьютерной алгебры

У истоков рождения систем компьютерной алгебры

Эру создания компьютерной символьной математики принято отсчитывать с начала 60-х годов. Именно тогда в вычислительной технике возникла новая ветвь компьютерной математики, не совсем точно, но зато броско названная компьютерной алгеброй. Речь шла о возможности создания компьютерных систем, способных осуществлять типовые алгебраические преобразования: подстановки в выражениях, упрощение выражений, операции со степенными многочленами (полиномами), решение линейных и нелинейных уравнений и их систем, вычисление их корней и т. д. При этом предполагалась возможность получения аналитических (символьных) результатов везде, где это только возможно.

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

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

Поняв эту истину, многие западные фирмы приступили к созданию компьютерных систем символьной математики, ориентированных на широкие круги пользователей, не являющихся профессионалами в компьютерной алгебре. Учитывая невероятно большую сложность автоматизации решения задач в аналитическом виде (число математических преобразований и соотношений весьма велико, и некоторые из них неоднозначны в истолковании), первые подобные системы удалось создать лишь для больших ЭВМ. Но затем появились и системы, доступные для мини-ЭВМ. Заметное развитие получили языки программирования для символьных вычислений Reduce, система muMath для малых ЭВМ, а в дальнейшем — интегрированные системы символьной математики для персональных компьютеров: Derive, MathCAD, Mathematica, Maple V и др.

В бывшем СССР большой вклад в развитие систем символьной математики внесла школа покойного академика Глушкова. В конце 70-х годов были созданы малые инженерные ЭВМ класса «Мир», способные выполнять аналитические вычисления даже на аппаратном уровне. Был разработан и успешно применялся язык символьных вычислений «Аналитик». Эти работы отчасти предвосхитили развитие систем символьной математики. К огромному сожалению, они появились слишком рано для своего времени и не соответствовали «генеральной линии» развития советской вычислительной техники в те годы. Уклон в сторону развития больших ЭВМ серии ЕС, навязанный в СССР компьютерными чиновниками, отодвинул компьютеры «Мир» на задний план, а затем этот класс компьютеров просто прекратил свое существование и развитие.

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

Стоимость серийных СКМ все еще чрезмерно велика для большинства наших пользователей. Поэтому не случайно, что (за редчайшим исключением) наши пользователи используют такие системы, распространяемые на CD-ROM сомнительного происхождения. Однако программные продукты на таких CD-ROM поступают без документации, а порой даже в неполном и неполноценном виде, что затрудняет их серьезное применение.

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

 

Системы символьной математики для персональных компьютеров

На Западе решающий скачок в компьютеризации общества произошел с началом массового производства и внедрения ПК. Долгое время их ограниченные возможности не позволяли реализовать на них серьезные системы символьной математики. Но к началу 90-х годов ситуация стала заметно меняться к лучшему. С одной стороны, аппаратные возможности ПК стали резко возрастать по мере быстрой смены поколений микропроцессоров. Тут надо помянуть добрым словом фирму Intel, отстаивающую честь «закона Мура» (одного из своих основателей) и каждый год удваивающую как степень интеграции своих процессоров, так и их производительность. В итоге по скорости счета и объему оперативного запоминающего устройства (ОЗУ) ПК стали обходить «большие» ЭВМ класса ЕС, а сейчас оставили их далеко позади. Это создало реальные предпосылки к развертыванию работ по разработке систем компьютерной алгебры. Впрочем, надо помнить, что разрыв в производительности между новейшими ПК и многопроцессорными суперЭВМ и в наши дни остается поразительно большим!

Многие СКМ пришли в мир ПК из мира больших ЭВМ, таких как суперкомпьютеры Cray (производятся и поныне фирмой Silicon Graphics). В итоге они стали доступными не только представителям научной элиты, вполне познавшим возможности таких систем, но и рядовым пользователям, которые испытывали граничащее с шоком восхищение от созерцания обширных возможностей этих новых систем. Перейти от него к реальному применению СКМ — этому и призвана помочь данная книга.

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

С переводом таких систем на ПК с графическими операционными системами класса Windows с таким подходом пришлось решительно кончать. Более того, превосходная цветная графика высокого разрешения современных ПК, о которой пользователи ЭВМ класса ЕС не могли и мечтать, резко повысила не только роль графического представления данных вычислений, но и привела к слиянию пользовательского интерфейса математических систем с интерфейсом современных графических операционных систем, таких как Windows 3.1/3.11/95/98/NT/2000. Образцом для подражания повсеместно стал интерфейс пользователя массовых офисных программ — Microsoft Office 95/97/2000.

Наибольшую известность получили три класса систем символьной математики: созданная на базе языка искусственного интеллекта Mu Lisp малая система Derive, одна из самых мощных и поныне привлекательных систем Maple V (ядро написано на языке С) и системы Mathematica 1 и 2. Позже на базе ядра системы Maple V символьные вычисления были реализованы в популярных числовых системах Mathcad - версии Mathcad 3.0/4.0/5.0/Plus 5.0/6/0/Plus 6.0/7.0/Plus 7.0/8.0/ 8.0 PRO/2000 PRO/2000 Premium имеют изумительный пользовательский интерфейс и возможности, улучшающиеся от версии к версии. Блок символьной математики на базе ядра Maple V был добавлен и в одну из самых крупных матричных систем — MATLAB.

Система Derive [15,16] и поныне привлекательна своими невзыскательными требованиями к аппаратным ресурсам ПК — это единственная система, которая работает даже на ПК класса IBM PC XT без жесткого диска. Более того, при решении задач умеренной сложности она показала более высокое быстродействие и большую надежность решения, чем первые версии систем Maple V и Mathematica. Впрочем, системе Derive трудно конкурировать с этими системами всерьез — ни по обилию функций и правил аналитических преобразований, ни по возможностям машинной графики и удобству пользовательского интерфейса. Пока Derive обречена на достаточно важную роль учебных систем компьютерной алгебры начального уровня.

Хотя новейшая версия Derive 5 под Windows уже имеет современный интерфейс, он все же во многом уступает изысканному интерфейсу своих маститых конкурентов. А по возможности графической визуализации результатов вычислений Derive все еще далеко отстает от них. То же можно сказать и о новой системе символьной математики MuPAD 1.4.

Система Maple V— патриарх в семействе систем символьной математики. И поныне это весьма привлекательная система для математика-аналитика и научного работника. Даже в среде MS-DOS Maple V имеет неплохой интерфейс и превосходно организованную обширную базу данных помощи. Полнота ядра системы, хранящего более 2700 математических функций (у последней реализации Maple 6 их уже свыше 3000!) и правил их преобразования, вполне заслуживает восторга и большого уважения. Весьма привлекательное свойство этой системы — подробная встроенная помощь и множество примеров ко всем встроенным в нее функциям и прикладным пакетам. Эти примеры легко скопировать в окно редактирования системы и тут же решить.

Достойна восхищения и математическая графика системы Maple, в частности возможность изображения пересекающихся трехмерных фигур с функциональной окраской. Новейшие системы Maple V для Windows (реализации R5 и 6) по возможностям графики стоят на одном уровне с системами Mathematica 3/4. Считается, что они несколько превосходят системы Mathematica в части символьных преобразований, но такое превосходство на сегодня уже является весьма спорным.

К сожалению, фирма Waterloo Maple, Inc. (Канада) - разработчик системы Maple V — больше блистала математической проработкой своего проекта, чем уровнем его коммерческой реализации. В силу этого система Maple V была доступна в основном узкому кругу профессионалов. Сейчас эта фирма работает совместно с более преуспевающей в коммерции и проработке пользовательского интерфейса математических систем фирмой MathSoft, Inc. — создательницей весьма популярных и массовых систем для численных расчетов Mathcad, ставших международным стандартом для технических вычислений. Пока, однако, математические возможности этих систем в области компьютерной алгебры намного уступают системам Maple V, Mathematica 2 и даже малютке Derive (не говоря уже о реализациях Mathematica 3 и 4).

Появление новых версий Mathematica 3 и 4 вновь резко поднимает планку оценки качества систем компьютерной алгебры. Наступает новый этап интеграции математических систем как друг с другом, так и с современными текстовыми и табличными процессорами, такими как Word 95/97 и Excel 95/97 из офисных пакетов Microsoft Office 95/97 (на подходе и Office 2000).

Всяческих похвал заслуживают последние реализации матричных систем MAT-LAB 5.2/5.3, но это очень громоздкая система, последняя реализация которой — MATLAB 5.3.1 - занимает на жестком диске 1500 Мбайт памяти (даже Mathematica 4 требует на порядок меньше места). Система MATLAB создана фирмой Math Works (США).

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

 

3. Математические системы Mathematica

 

Математические системы Mathematica

Системы класса Mathematica 2.x

В 80-е годы возможностями символьной математики увлекся защитивший докторскую диссертацию Стивен Вольфрам (Stephen Wolfram) из США (рис. 1.1). Его интересы были столь серьезны, что он основал фирму Wolfram Research, Inc., приступившую к созданию проекта престижной математической системы Mathe-

matica. Версия Mathematica 1.0 этой системы, появившаяся в 1988 г., уже устарела, и самой известной разработкой фирмы стала версия 2.0 системы Mathematica 2, появившаяся в 1991 г. и благополучно дожившая до наших дней. У нас она впервые стала известна благодаря обзорам.

Рис. 1.1. Страница Интернет-сайта фирмы StatSoft.

Цели нового проекта были достаточно амбициозными — разработка мощного и универсального ядра системы (Kernel), способного работать на различных компьютерных платформах, создание многофункционального языка программирования, ориентированного на математические приложения, подготовка современного пользовательского интерфейса и обширного набора прикладных пакетов и расширений системы (Packages), мощного языка программирования математических преобразований и вычислений. Система приобрела свойства адаптации и обучения новым математическим законам и закономерностям.

В разработках систем Mathematica, наряду с головной фирмой Wolfram Research, Inc., принимали участие ряд других фирм и сотни специалистов высокой квалификации (в том числе математики и программисты). Среди них есть и представители пользующейся уважением и «спросом» за рубежом математической школы России. Системы Mathematica являются одними из самых крупных программных систем, они реализуют самые эффективные алгоритмы вычислений и имеют множество новинок. К их числу относится механизм контекстов, исключающий появление в программах побочных эффектов.

Система Mathematica 2 всегда рассматривалась как мировой лидер среди компьютерных систем символьной математики для ПК, обеспечивающих не только возможности выполнения сложных численных расчетов с выводом их результатов в самом изысканном графическом виде, но и проведение особо трудоемких аналитических вычислений и преобразований. Версии системы под Windows имеют современный пользовательский интерфейс и позволяют готовить документы в форме Notebooks («записных книжек»). Они объединяют исходные данные, описание алгоритмов решения задач, программ и результатов решения в самой разнообразной форме (математические формулы, числа, векторы, матрицы, графики).

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

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

Рождение столь мощной и сложной системы, как Mathematica 2, шло не без трудностей. Первые версии Mathematica 2 для MS-DOS имели примитивный пользовательский интерфейс, заметно уступающий интерфейсу конкурирующей системы Maple V 1.0 для MS-DOS. Однако фирма Wolfram быстро сумела оценить возможности графической оболочки Windows и одной из первых создала версию своей системы для Windows. В книге приведены многие десятки недостатков версии Mathematica 2, практически устраненных в последующих версиях.

Mathematica 2 — одна из самых крупных и изощренных математических программных систем своего времени (начала 90-х годов). На протяжении ряда лет эта система модернизировалась и улучшалась. Ее расширенная версия (Mathematica 2.2.2) для IBM-совместимых ПК класса 386/486/Pentium требует ОЗУ объемом не менее 8 Мбайт. Сейчас это вряд ли ограничивает применение системы — компьютеры класса Pentium II/III и даже Pentium MMX с таким объемом памяти и частотами работы процессоров от 166 до 450 МГц можно приобрести в России по цене порой менее $300. Множество подходящих для этой системы ПК есть в системе образования и в индивидуальном владении пользователей.

Если по части графических возможностей лидерство системы Mathematica 2 не вызывало особых споров, то в части выполнения аналитических преобразований и надежности работы система неоднократно подвергалась заслуженной критике. В частности, приводились данные не только об отказе системы выполнять некоторые типы символьных вычислений, но и даже о получении при этом явно неверных результатов. Однако такие нарекания относятся лишь к версиям системы 2.1 и ниже. При этом в справедливо указывалось, что недоработки системы обусловлены ее новизной, сложностью и обширными возможностями.

Раньше грубые просчеты пользователя могли привести к зависанию системы. Однако уже в версии 2.2.2 это было практически исключено. Кроме того, оно устраняется обычным для Windows способом — одновременным нажатием клавиш Ctrl+Alt+Del При этом работа с системой Mathematica может прерваться, но общего краха системы Windows обычно не происходит. Нажатие клавиши Enter возвращает нас в менеджер программ Windows.

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

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

 

Система Mathematica 3

У разных фирм различны подходы к обозначению новых версий своих программных продуктов. MathSoft, Inc., к примеру, за какие-то пять лет породила добрый десяток новых версий популярной системы Mathcad — 3.0, 4.0, 5.0, Plus 5.0, 6.0, Plus 6.0, 7.0, Plus 7.0, 8.0, 8.0 PRO и даже Mathcad 2000 PRO/Premium. И почти каждый раз отмечала их новой цифрой, хотя революционными отличия этих версий друг от друга назвать трудно.

Фирма Wolfram Research, Inc. (разработчик систем Mathematica) явно относится к числу тех фирм, у которых малейший намек на изменение версии означает существенную ее переработку. В итоге версии Mathematica 3 и 4 на фоне более старых Mathematica 2.0, 2.1 и 2.2 выглядят кардинально новыми системами с новым превосходным пользовательским интерфейсом и обширными математическими возможностями.

В июле 1996 г. на бета-тестирование поступила система Mathematica 3. Вскоре (середина 1997 г.) она стала серийным продуктом, начались ее поставки на рынок. Был кардинально переработан пользовательский интерфейс системы, он вобрал в себя массу новинок — от раздельного вывода на экран деталей и панелей интерфейса до мощной и прекрасно реализованной справочной системы. Устранен недостаток предшествующих версий — небольшое число примеров в справочной системе. Все примеры стали «живыми» — их в любой момент можно переиначить на свой лад и перенести в свои документы.

Продолжая линию развития универсального ядра системы, фирма Wolfram обеспечила применение этой системы на целом ряде операционных систем — Windows 95, Windows NT, Macintosh, Power Macintosh, SunOS, Solaris, HP-UX, SGI, Linux и др. Это делает систему доступной самым различным категориям пользователей и позволяет распределять решение математических задач любой сложности по оптимальным для этого компьютерным платформам.

Для системы Mathematica 3 на массовой платформе Windows установлены следующие требования к аппаратной части:

  • процессор Intel 80386 и выше;
  • операционная система Windows 95 или Windows NT 3.51 и старше;
  • дисковое пространство — минимальное 24 Мбайт, стандартное 83 Мбайт и максимальное около 120 Мбайт;
  • запуск с жесткого диска или с CD-ROM;
  • емкость ОЗУ — минимальная 8 Мбайт, желательная 16 Мбайт.

Система поставляется на CD-ROM в комплекте с электронным учебником и документацией. Возможен запуск системы прямо с компакт-диска, что экономит пространство на жестком диске, но замедляет файловые операции. Любопытно отметить, что большую часть памяти на дисках (жестком и CD-ROM) занимает справочная база данных системы.

Из других возможностей системы Mathematica 3 можно отметить:

  • повышение эффективности численных методов, в частности, функций одномерной и многомерной интерполяции, решения дифференциальных уравнений, решения систем линейных уравнений и др.;
  • введение адаптивного контроля за вычислениями численными методами;
  • расширенный диапазон аналитических преобразований, в том числе для уравнений с частными производными;
  • введение новой функции полного упрощения Full Simplify, способной упрощать выражения со специальными математическими функциями;
  • расширение числа форматов файлов, в которых можно сохранять документы (в их числе популярные форматы файлов EPS, TIFF, GIF, HPML и др.);
  • повышенное (полиграфическое) качество документов; О улучшенное использование памяти ОЗУ.

Благодаря этим и другим описанным выше возможностям сферы применения системы Mathematica 3 заметно расширились. Было создано свыше двух десятков профессиональных пакетов расширения системы.

 

Система Mathematica 4

Ожидалось, что, как и предшествующие реализации 1 и 2, система Mathematica 3 даст начало многолетнему марафону постепенного усовершенствования этой системы. Но вопреки этому фирма Wolfram совершила довольно неожиданный для нее шаг — не успели пользователи разобраться с многими новациями Mathematica 3, как в июне 1999 г. на рынок была выпущена новейшая реализация системы — Mathematica 4. При этом имеющиеся данные свидетельствуют о коренном пересмотре базовых концепций, заложенных в систему. Видимо, роль в этом сыграло приближение 2000 года.

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

Теперь уже окончательно ясно — разработчики системы продолжают интенсивно работать над ней и превратили Mathematica 4 в мощную универсальную СКМ. И первые данные о новой версии системы, которые читатель найдет в этой книге, ясно говорят о том, что разработчики систем этого класса отнюдь не намерены уступать первенство в создании наиболее сложных и продвинутых систем компьютерной алгебры. Возможности новой системы весьма впечатляют!

Важно отметить, что весьма обширные новые возможности Mathematica 4 относятся почти исключительно к количественным показателям системы и никоим образом не влияют на статический вид интерфейса систем (в сравнении с Mathematica 3) и на вид готовящихся документов-блокнотов (notebooks). Поэтому в дальнейшем мы под системой Mathematica будем иметь в виду одновременно обе версии — ставшую у нас хорошо известной Mathematica 3 и новейшую Mathematica 4. Указание на конкретную версию будет делаться только в том случае, если описываются ее специфические возможности. Многочисленные внутренние отличия системы Mathematica 4 от Mathematica 3 будут рассмотрены по ходу дела.

Работа с системами Mathematica 3 и Mathematica 4 происходит практически одинаково. Небольшое ускорение при ряде манипуляций с интерфейсом Mathematica 4 внешне не сказывается на такой работе. Поэтому, за редкими (и оговоренными) исключениями, все, что описано применительно к системе Mathematica 4, применимо и к Mathematica 3. Однако отличия ранних версий Mathematica 2.x от описанных в книге версий нового поколения достаточно серьезны, поэтому их пользователям описание пользовательского интерфейса Mathematica 3/4 не подходит, хотя набор операторов и функций ранних версий является сокращенным набором этих средств, описанных в данной книге.

 

gl1-1.jpg

Изображение: 

4. Структура систем Mathematica и их идеология

 

Структура систем Mathematica и их идеология

Структура систем Mathematica

Следует отметить, что скромные (в смысле аппаратных требований) версии системы Mathematica 2.2.2 по сей день производятся фирмой Wolfram и используются в основном в системе образования. Они продаются по ценам в несколько раз меньшим, чем последующие реализации 3 и 4. Сейчас версии системы для IBM-совместимых ПК Mathematica 2, 3 и 4 распространяются в России на оптических дисках. Это намного повышает их доступность, хотя нередки случаи поставки не вполне работоспособных систем на дисках сомнительного происхождения.

Общая структура систем Mathematica (всех версий) представлена на рис. 1.2.

Рис. 1.2. Структура системы Mathematica

Центральное место в системах класса Mathematica занимает машинно-независимое ядро математических операций — Kernel. Для ориентации системы на конкретную машинную платформу служит программный интерфейсный процессор Front End. Именно он определяет, какой вид имеет пользовательский интерфейс системы. В этой главе далее будет описан интерфейсный процессор для ПК с массовыми операционными системами Windows 95/98/NT. Разумеется, интерфейсные процессоры систем Mathematica для других платформ могут иметь свои нюансы, но особых различий с описанным интерфейсным процессором у них нет.

Любопытны данные об объеме ядра разных реализаций системы Mathematica, приведенные в книге Стивена Вольфрама:


Система

Mathematica 1

Mathematica 2

Mathematica 3

Mathematica 4

Число строк на языке С

150 000

350 000

600 000

800 000

Увеличение объема ядра в системе Mathematica 4 позволило перенести в ядро ряд функций из пакетов расширения. Ядро системы тщательно оптимизировано, что повысило скорость выполнения большинства команд.

Ядро сделано достаточно компактным с тем, чтобы любая функция из него вызывалась достаточно быстро. Для расширения набора функций служит библиотека (Library) и набор пакетов расширения (Add-on Packages). Пакеты расширений готовятся на собственном языке программирования систем Mathematica и являются главным средством расширения возможностей системы и их адаптации к решению конкретных классов задач пользователя. Кроме того, системы имеют встроенную электронную справочную систему — Help. Она содержит шесть электронных книг с «живыми» примерами, включая упомянутые во введении книги.

Ядро систем Mathematica 3/4 сделано независимым от компьютерной платформы, на которой может устанавливаться и работать система. Это гарантирует идентичность операторов и функций, используемых в системах Mathematica, устанавливаемых на разных ЭВМ — от ПК до суперкомпьютеров. Поэтому большая часть материалов данной книги, посвященных математическим возможностям и даже интерфейсу систем Mathematica 3/4, относится к компьютерам самого разного класса — от платформы Windows до Macintosh и UNIX.

 

Идеология систем Mathematica

Идеология систем Mathematica базируется на двух, казалось бы, взаимно исключающих друг друга положениях:

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

Противоречивость этих положений кажущаяся. На самом деле Mathematica — типичная система программирования с проблемно-ориентированным языком программирования сверхвысокого уровня . Его можно отнести к классу интерпретаторов. Как известно, языки такого типа последовательно анализируют (интерпретируют) каждое выражение и тут же исполняют его. Таким образом, работа с системой происходит явно в диалоговом режиме пользователь задает системе задание, а она тут же выполняет его. Разумеется, Mathematica содержит достаточный набор управляющих структур для создания условных выражений, ветвления в программах, циклов и т. д.

На первый взгляд может показаться, что система ведет диалог на куда более примитивном уровне, чем хорошо известный язык программирования Бейсик (тоже относящийся к интерпретирующему типу). И в самом деле, работа с системой Mathematica напоминает работу с Бейсиком в режиме непосредственного исполнения команд — в ответ на каждый вопрос тут же следует результат вычислений. Более того, сохранился такой архаизм (впрочем, при необходимости отключаемый), как нумерация строк (ячеек).

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

Можно сказать, что для решения математических задач система содержит готовые рецепты почти на любой «вкус и цвет». Однако с помощью пакетов расширения (Add-ons) имеется возможность постоянно готовить новые «блюда», подстраивая «кухню» (то есть возможности) системы под запросы любого ее пользователя.

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

 

gl1-2.jpg

Изображение: 

5. Знакомство с символьными вычислениями

 

Знакомство с символьными вычислениями

Особенности систем компьютерной математики

Недостатки численных расчетов

Большинство первых CKM (Eureka, Mercury, Excel, Lotus-123, Mathcad для MS-DOS, PC MATLAB и др.) предназначались для численных расчетов. Они как бы превращали компьютер в большой программируемый калькулятор, способный быстро и автоматически (по введенной программе) выполнять арифметические и логические операции над числами или массивами чисел. Их результат всегда конкретен — это или число, или набор чисел, представляющих таблицы, матрицы или точки графиков. Разумеется, компьютер позволяет выполнять такие вычисления с немыслимой ранее скоростью, педантичностью и даже точностью, выводя результаты в виде хорошо оформленных таблиц или графиков.

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

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

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

Понятие о символьных (аналитических) вычислениях

Символьные операции — это как раз то, что кардинально отличает систему Mathematica (и подобные ей символьные математические системы) от систем для выполнения численных расчетов. При символьных операциях, называемых также аналитическими, задания на вычисление составляются в виде символьных (формульных) выражений, и результаты вычислений также получаются в символьном виде. Численные результаты при этом являются частными случаями символьных.

Выражения, представленные в символьном виде, отличаются высокой степенью общности. К примеру, тождество sin(x) 2 + соs(x) 2 = 1 справедливо при любых значениях аргумента х. Если результат символьной операции равен, к примеру, sin(1), то он и будет выведен как sin(1) — конкретное вещественное число, приближенно представляющее или аппроксимирующее sin(1), вычисляться не будет, ибо носит частный характер.

Результат вычисления sin(х) 2 + cos(x) 2 можно проверить с помощью систем для численных расчетов, задав ряд конкретных значений х и вычислив сумму квадратов синуса и косинуса. Однако всякий раз мы будем получать частный результат, не имея никакой гарантии того, что он действительно справедлив при любом значении х. К тому же этот результат нередко может оказаться равным 0,9999999 или 1,0000001, так что лишь наша фантазия округляет его до точной единицы. Между тем это как раз то, что абсолютно недопустимо в действиях профессионала — математика-аналитика. Его приведет в ужас малейшее отличие указанного выражения от единицы! Ведь почтенные классики математики давно уже доказали, что этот результат равен в точности единице!

Так чему равна сумма квадратов синуса и косинуса?

Попытка вычислить в общем виде выражение sin(x) 2 + соs(x) 2 с помощью численных математических систем или программ на обычных языках программирования к успеху не приведет. Вместо ожидаемого результата появится сообщение об ошибке вида: «Переменная х не определена!». Компьютер будет ждать ввода конкретного значения для х.Так будет независимо от того, запрограммировали вы вычисления на простеньком Бейсике или на языке профессионалов-программистов C++. И лишь системы символьной математики при вычислениях дадут долгожданное и абсолютно точное значение 1 (рис. 1. 3) .

Рис. 1.3. Система Mathematical вычисляет значение sin(x) 2 +cos(x) 2

Пока не стоит обращать внимание на то, как получен рис. 1.15 — это окно реально работающей системы Mathematica. Уже при рассмотрении простейшего примера, представленного на этом рисунке, можно сделать несколько характерных выводов. Прежде всего видно, что при выводе неопределенной переменной х мы получаем просто имя этой переменной. Функции sin(х) и cos(х) в системе Mathematica обозначаются как Sin [х] и Cos [х]. Само по себе выражение sin(х) 2 + cos(х) 2 просто повторяется, а для его вычисления используется функция Simplify (упростить), аргументом которой является знак %, означающий подстановку предшествующего выражения. Два знака % можно использовать для подстановки предшествующего предшествующему выражению и т. д. Для вычисления строки ввода надо нажимать клавиши Shift+Enter, нажатие же одной клавиши Enter просто переводит строку в области ввода, именуемой также ячейкой ввода.

Любопытно, что в начале запуска, сопровождаемого музыкальным звуком, Mathematica выводит чистое окно редактирования документа, в котором нет даже маркера ввода — характерной вертикальной черточки. Этот маркер появится, как только вы введете какой-то первый символ. После получения первого результата появляется и длинная горизонтальная черта, отделяющая выведенные ячейки от свободного поля окна редактирования под ними. Эта черта является признаком возможности ввода очередной ячейки. Ее можно перевести в уже созданную область документа, если вы захотите создать новую ячейку среди уже существующих ячеек ввода.

Обратите внимание на то, что система выделяет ячейки ввода определителем In [N], а ячейки вывода — определителем Out [N], где N — автоматически проставляемый номер строки. Кроме того, в левой части отображаются квадратные скобки с особыми признаками, которые будут описаны в позже. Далее мы, как правило, будем опускать определители ячеек и квадратные скобки и представлять документы в упрощенной и более компактной форме. Например, представленный на рис. 1.15 документ может быть записан в следующем виде:


х

x

Sin[х]^2+Соs[х]^2

Cos[x] 2 +Sin[x] 2

Simplify[%]

1

Здесь входные выражения задаются жирным прямым шрифтом, а выходные — прямым шрифтом обычной насыщенности, то есть именно так, как они выглядят при настройке системы по умолчанию. При этом выходные выражения имеют обычный (в терминах системы Mathematica — стандартный) вид, присущий математическим формулам. Все такие выражения в книге представлены путем копирования ячеек ввода и вывода в текст с помощью буфера обмена (Clipboard). Технология такого копирования и ее особенности будут описаны далее.

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

 

Математические системы в образовании и в науке

Можно сказать, что даже самые мощные системы для численных расчетов являются полными «профанами» в символьной математике. Они начисто лишены даже задатков элементарного разума, что видно уже из приведенного примера — даже школьник знает, что сумма квадратов синуса и косинуса равна в точности единице при любом аргументе х. А что говорить о столь распространенных аналитических вычислениях, как упрощение сложных математических формул, осуществление подстановок, вычисление пределов, производных и первообразных функций, разложении их в ряды Тейлора и Фурье, вычислении корней многочленов с буквенными коэффициентами и т. д.?

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

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

Как же найти выход из этого тупика? Одна из возможностей — применение достаточно универсальных СКМ, автоматизирующих большую часть математических вычислений. Такие системы позволяют пользователю — как студенту, так и научному работнику — быстро вспомнить полученные в вузе знания и легко использовать их на практике без этапа нудных и трудоемких рутинных вычислений и преобразований. А заодно и освоить новые для себя методы и разделы современной математики.

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

Увы, в нашей системе образования недостаточное знакомство с современными СКМ характерно не только для студентов, но и для доцентов и профессоров вузов. Среди них хорошее владение СКМ скорее исключение, чем правило. Это серьезно препятствует решению ряда первостепенных проблем образования — повышению его фундаментальности и вхождению нашей образовательной системы в общемировую, где компьютерные системы символьной математики в последние годы нашли самое широкое применение.

Очевидно, что чем раньше пользователь ПК начнет знакомиться с СКМ, тем больше математических знаний он получит. Хотя, безусловно, желательно, чтобы такое использование шло под контролем опытного преподавателя.

К сожалению, у нас есть серьезная причина, препятствующая широкому применению СКМ в образовании, — слабость материально-технической базы школ, вузов, да и многих университетов. Классами с современными ПК многие наши образовательные учреждения не обладают. Тем не менее, это чисто техническая проблема, которая постепенно решается.

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

Разумны ли системы символьной математики?

Математика непрерывно развивается, и ни один самый способный ученик не в состоянии (и слава Богу!) вместить в извилины своего мозга все математические законы и правила, созданные за многовековую историю человечества. Сотни лет назад такие задачи, как решение квадратного уравнения в общем виде, были в числе труднейших математических задач, а сейчас их «щелкают» школьники. Даже многотомные справочники по математике не гарантируют полного описания всех ее возможностей. Так что нет ничего страшного в том, что в наш просвещенный век вычисление производных или первообразных функций в аналитическом виде берет на себя компьютер. И их применение внешне становится таким же простым, как таблица умножения.

Сейчас слова «компьютерный разум» обычно берут в кавычки, всячески подчеркивая, что компьютер сам по себе не способен дать принципиально новые результаты (то есть те, которые не были заранее заложены в него человеком, его создавшим). Для многих, что в целом справедливо, вопрос о том, разумна ли система символьной математики, подобен вопросу о том, разумен ли хороший и полный справочник по математике.

И все же применительно к современным системам символьной математики (и универсальным СКМ) такая аргументация, пожалуй, не вполне приемлема. Да, базовые формулы и правила символьных преобразований в математические системы компьютерной алгебры заложены их создателями. Поэтому принципиально новых научных данных система сама по себе вроде бы и не дает. Но разве не такова в целом и ситуация с обычным использованием математического аппарата любым математиком-аналитиком?

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

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

Немаловажный довод в пользу некоторой разумности современных систем символьной математики заключается в особом назначении примеров их применения, которых в справочной базе данных могут насчитываться тысячи. Здесь уместно упомянуть высказывание И . М. Гельфанда: «Теории приходят и уходят, а примеры остаются».

Во всех современных СКМ примеры применения «живые» — вы можете подыскать наиболее близкий к решаемой вами задаче пример и тут же перестроить его под свои нужды. Обычные книги и справочники такой возможности принципиально не дают. Обучение на примерах — один из самых эффективных методических приемов. Он широко используется в данной книге и составляет основу справочной базы данных систем Mathematica.

В свое время нас учили, что количество переходит в качество. Примеров этого в природе превеликое множество. Системы компьютерной математики по обилию встроенных в них функций, правил преобразования и конкретных примеров применения уже вышли за пределы, которые способен оценить индивидуальный пользователь, даже если он достаточно опытный математик. К примеру, ядро Mathematica 4 хранит данные о примерно 5 тысячах интегралов! Это говорит о том, что СКМ находятся уже на пороге того, что их количественные характеристики перерастут в качественные. Среди них может оказаться и разум СКМ — на сей раз без каких-либо оговорок.

Что дает компьютерная математика университетам и школам

В конечном счете, СКМ — не более чем удобный и мощный инструмент для учащегося, педагога, инженера или научного работника. Как его применять (в методическом, научном и практическом отношении), зависит уже от пользователя. Однако важно и ценно то, что системы символьной математики снимают у учащихся психологический барьер в реальном применении математики, особенно высшей.

Тем не менее, многие преподаватели математики опасаются приобщения своих учеников к работе с СКМ. Бывает, что некоторые преподаватели школ и вузов при подготовке массовых заданий по алгебре, тригонометрии и геометрии сами применяют СКМ — например, для подготовки заданий по курсам математики или физики. Но это становится еще одним наивным поводом ограждать учащихся от систем символьной математики и даже запрещать их в учебном процессе. Оно и понятно — ведь школьник или студент, имеющий компьютер с системой компьютерной алгебры, прощелкает все подобные примеры за считанные минуты. Между тем учащихся, столь виртуозно владеющих системами компьютерной математики, надо лишь всячески поощрять! Увы, пока их очень мало...

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

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

По большому счету, такие обучающие системы ничего нового в процесс математических вычислений не вносят. Современные универсальные СКМ намного мощнее подобных программ, имеют более совершенный и более удобный интерфейс пользователя, а главное — только они реально применяются на месте работы будущих специалистов. Поэтому изучение современных СКМ столь же необходимо, как изучение офисных программ, например, того же текстового редактора Word 95/97. Наиболее удобной формой для этого являются спецкурсы, хотя и в ряде обязательных курсов такое изучение предусмотрено новыми учебными программами Министерства образования РФ.

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

  • вмещают в себя объемы информации, эквивалентные порой десяткам книг;
  • аккумулируют знания, полученные за многие тысячелетия развития математики;
  • имеют безупречное оформление документов (цветные тексты и иллюстрации, всевозможные выделения, качественные иллюстрации и т. д.);
  • имеют разную организацию оглавления (индексную, поиск по контексту и т. д.); О отличаются очень быстрым поиском нужной информации по ряду критериев;
  • имеют «живые» примеры, которые можно изменять в ходе просмотра справочных данных;
  • справочные материалы могут сопровождаться звуковыми и видеокомментариями;
  • позволяют готовить высококачественные и наглядные уроки не только по любым разделам математики, но и по многим дисциплинам, базирующимся на применении математического аппарата;
  • позволяют быстро размножить интересующие пользователя материалы; 
  •  обладают возможностью обновления и пополнения из сети Интернет.

Современные СКМ следует рассматривать не только как электронные справочники нового поколения, но и как системы для самообучения и дистанционного обучения математике. Однако для этого они должны быть снабжены грамотно составленными (прежде всего в методическом отношении) электронными уроками или книгами. Здесь необъятный простор для творчески мыслящих педагогов! В то же время, при отсутствии таких уроков применение математических систем может иметь негативные последствия для образования — опасна подмена обучения основам математики обучением основам работы с математическими системами.

Многие виды вычислений, даже элементарных, довольно трудоемки. Например, построение трехмерной поверхности требует зачастую сотен однообразных вычислений, выполнять которые крайне муторно даже при применении калькуляторов. Современные СКМ (в том числе Mathematica) делают это за считанные секунды, а то и за доли секунды. К тому же они сразу же строят графики поверхностей с разнообразной функциональной окраской и позволяют интерактивно вращать их (Mathematica 4), добиваясь лучшей выразительности и лучшего обзора фигур.

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

Немаловажным фактором является то, что новейшие СКМ относятся к самым серьезным программным продуктам, имеющим современный пользовательский интерфейс и мощные средства визуализации всех этапов работы — причем, в области математики более выразительные, чем те, которые дают текстовые процессоры класса Word 95/97. Так что, работая с ними, пользователь поневоле осваивает работу с компьютером и познаёт тонкости интерфейса современных программ.

Кроме того, современные СКМ позволяют готовить и распечатывать документы, затрачивая на это куда меньше времени, чем популярные у математиков системы ТеХ или LaTeX. Впрочем, Mathematica прекрасно сожительствует с ними и позволяет представлять данные в необходимом для этих систем формате. Mathematica 4 поддерживает новейший формат подготовки математических документов для Интернета — MathML.

Работать с современными СКМ просто, приятно и поучительно. Благодаря этому освоение систем Mathematica воспринимается учащимися с большим интересом, что служит побудительным мотивом к их внедрению в систему образования, причем не только высшего, но и среднего, и даже начального (последнему, как отмечалось, фирма Wolfram в последние годы уделяет большое внимание).

 

Диалог с системой и ее входной язык

Интересно отметить, что, родившись как программа для профессионалов, Mathematica в последние годы упорно позиционируется фирмой Wolfram как система, перспективная не только для высшего, но и для школьного образования. Диалог с системой идет по методу «задал вопрос — получил ответ». Не считая отдельных мелочей, такой диалог вполне понятен не только опытному математику, но и успевающему студенту и даже школьнику.

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

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

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

Операции с целыми числами

Продолжим знакомство с возможностями системы Mathematica 4 примерами работы с целыми числами. Несколько таких примеров приведено на рис. 1.4.

Рис. 1.4. Примеры целочисленных операций

Первая из приведенных операций дает разложение целого числа на простые множители с помощью функции Factorlnteger. Они представлены списками (в фигурных скобках) из двух чисел. Первое число — это множитель, а второе — число его повторений. В считанные секунды Mathematica 4 находит десятибиллионное простое число с помощью функции Prime. Другой характерный пример целочисленных операций — вычисление факториалов (вы можете запросто получить факториал 10 000, но ради сокращения места при описании примера в нем вычислено значение 200! Последний пример показывает отсутствие ошибок при работе с большими целыми числами — и это несмотря на то, что при его выполнении и впрямь дважды вычисляется факториал числа 10 000.

Операции с целыми числами выполняются абсолютно точно. При этом число цифр не ограничено (в разумных пределах).

Арифметика произвольной точности

Арифметика произвольной точности — еще одна из областей применения систем символьной математики (рис. 1. 5).

Рис. 1.5. Примеры вычислений с большой точностью

Здесь использована одна из самых распространенных функций системы Mathematica — N[expr, n], дающая результат вычисления выражения ехр r с точностью до n знаков после десятичной точки. Константы я и е вычислены с 500 верными знаками, а новая функция Матье (MathieuC) — с точностью до 200 знаков. Однако в системе Mathematica n может достигать миллиона и более. Ограничения по разрядности чисел и их верхнему и нижнему пределам практически отсутствуют.

Примеры из математического анализа

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

Рис. 1. 6 . Примеры вычислений из области математического анализа

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

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


Sum[1/k^9,{k,1,n}]

HarmonicNumber [n, 9]

Integrate [Log [x] *Exp [ -х^4 ], {x, 0, Infinity}]

-1/32*Gamma[ 1/4 ] ( 2 EulerGamma + л + Log[64] )

DSolve[y " [t] + y' [t] + y[t]/t = 0, y[t] , t]

{{y[t]->e^-tC[1]+e^-tC[2]Gamma[-1,-t]}}

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

Чем дальше в лес, тем больше дров!

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

Многие из нас прекрасно помнят формулы для корней квадратного уравнения, которые нам давали еще в школе. Их в точности воспроизвела Mathematica в одном из примеров, приведенных в этом уроке чуть ранее. Это решение еще раз воспроизведено на рис. 1.7 (сверху).

Рис. 1.7. Система Mathematica решает квадратное и кубическое уравнения

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

Можно пойти чуть дальше и убедиться в том, что Mathematica решает подобное уравнение даже четвертого порядка. Полученное при этом крайне громоздкое решение (в силу этого оно не приводится) заставит в задумчивости почесать затылок многих любителей математики. Но можно ли продолжать эти вычисления? Увы, классическая математика говорит, что нет! Подобные уравнения порядка выше четвертого современная математика в аналитическом виде не решает. Тем не менее, попытаемся вычислить корни алгебраического уравнения пятой степени в общем виде (рис. 1. 8 ).

Рис. 1.8 . Система Mathematica пытается решить алгебраическое уравнение пятой степени

А вот и сюрприз: Mathematica не только не отказалась решать эту задачу (при отказе она просто повторяет вводимое выражение), но даже подсказала путь ее решения с помощью пятикратного применения функции вычисления корней Root степенных многочленов.

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

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

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

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

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

Рис. 1.9 . Система Mathematical решает алгебраическое уравнение 10-й степени

Доверяй, но проверяй!

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

Пусть мы решили некоторое уравнение


eqns = х^3 - 3*х + 2 == 0

2-3х+х 3 == 0

и получили его корни


r = Solve[eqns, x]

{{х-> -2), {х^ 1}, {х-> 1}}

Для проверки решения можно использовать операцию подстановки в eqns списка корней г. Эта операция реализуется оператором / ., что иллюстрирует следующий пример:


eqns/.r

{True, True, True}

Результат этой операции — список из трех логических констант True (Истинно). Он означает, что решение верно. Кстати, с помощью этой подстановки можно получить истинный список корней:


х/.r

{-2, 1, 1}

Mathematica имеет и множество иных способов проверки полученных результатов. Но, к сожалению, очень редко встречаются ситуации, когда выданное Mathematica ошибочное или несуществующее решение при подобной проверке дает положительный результат. Как говорится, за что боролись, на то и напоролись! В таких особо каверзных случаях надо ориентироваться на свою интуицию, решение схожей тестовой задачи или решение с помощью других математических систем с иным ядром — например, Derive или Maple V.

Не стоит брезговать проверкой решений даже с помощью менее мощных систем — помните поговорки «Устами младенца глаголет истина!», «Пуля дура — штык молодец», «Мал золотник, да дорог!» и т. д.? Обращайтесь к описанным выше правилам проверки по мере освоения работы с системой Mathematica. При этом вам быстро станут понятными некоторые ее тонкости, которые пока остались «за бортом».

 

gl1-3.jpg

Изображение: 

gl1-4.jpg

Изображение: 

gl1-5.jpg

Изображение: 

gl1-6.jpg

Изображение: 

gl1-7.jpg

Изображение: 

gl1-8.jpg

Изображение: 

gl1-9.jpg

Изображение: 

6. Установка систем и их особенности

 

Установка систем и их особенности

Инсталляция систем Mathematica 3

Объем инсталляционных файлов Mathematica 3 и 4 превышает 100 Мбайт. Поэтому поставляются системы на CD-ROM, а компьютер, на который они устанавливаются, должен иметь устройство чтения CD-ROM. Возможна и установка систем из локальной сети, но для большинства пользователей систем эта возможность существенного интереса не представляет и потому здесь не описывается. Кроме того, мы ограничимся описанием инсталляции систем, рассчитанных на работу в среде операционных систем Windows 95/98/NT.

Для установки системы Mathematica 3, по существу, нужен современный мультимедийный компьютер, оснащенный современной видеокартой, звуковой картой (совместимой с Sound Blaster фирмы Creative Labs), микрофоном и акустическими системами. ПК должен иметь процессор Pentium и емкость ОЗУ не менее 16 Мбайт (желательно даже 24 Мбайт и более). Минимальный объем файловой системы Mathematica 3/4 составляет 40 Мбайт, максимальный — 156 Мбайт (версии для Windows 95/98/NT с полной справочной системой).

Для инсталляции системы нужно прежде всего проверить соответствие аппаратных возможностей ПК требуемым. Только после этого можно начать инсталляцию запуском файла setup.exe (установка) с инсталляционного CD-ROM (часто это делается автоматически, если ПК настроен на самозапуск CD-ROM). Процесс инсталляции показан на рис. 1.10 на примере системы Mathematica 3.

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

Рис. 1.10. Инсталлятор системы Mathematica 4

После инсталляции и первого запуска системы (из меню Пуск или активизацией ярлыка на рабочем столе) появляется окно регистрации, представленное на рис. 1.11. В нем надо заполнить все пункты. Номер лицензии указывается на конверте оптического диска, а вот для задания регистрационного номера может потребоваться запрос на фирму Wolfram Research — через Интернет или по обычной почте.

Рис. 1.11. Окно регистрации системы Mathematica4

Следует предупредить читателей, что нередко копии системы Mathematica 3 (да и Mathematica 4) на «пиратских» CD-ROM просто не работоспособны — для них не указан пароль либо система просто не реагирует на пароль, генерируемый соответствующей программной утилитой. Лишь легальное приобретение системы гарантирует ее полную работоспособность и поддержку фирмы Wolfram в решении возникающих недоразумений. Пароль у каждой копии системы свой.

 

Работа с CD-ROM системы Mathematica 4

Mathematica 4 также поставляется на CD-ROM. Поскольку данная книга посвящена детальному знакомству с системой Mathematica 4, мы рассмотрим работу с CD-ROM этой системы более подробно.

Самозапуск CD-ROM системы Mathematica 4 и выбор режима работы

CD-ROM системы Mathematica 4 рассчитан на автоматический запуск, для чего в его исходной директории имеется файл autorun.inf, считывание которого обеспечивает самозапуск CD-ROM. При этом появляется окно, показанное на рис. 1.12.

Рис. 1.12. Окно CD-ROM системы Mathematica 4

Из рисунка видно, что окно содержит меню выбора режима работы с CD-ROM:

  • Install Mathematica to a hard disk — установка (инсталляция) системы на жесткий диск;
  • Run Mathematica off the CD-ROM - запуск Mathematica 4 с CD-ROM;
  • Run the Mathematica kernel off the CD-ROM — запуск ядра Mathematica 4 с CD-ROM;
  • Browse the contents off the CD-ROM - просмотр CD-ROM;
  • Register on the web — регистрация через Интернет.

Помимо обычной инсталляции системы на жесткий диск меню предусматривает работу с системой Mathematica 4 или с ядром системы непосредственно с CD-ROM. Это полезно, если работа с системой носит эпизодический характер или если на жестком диске ПК недостаточно места для установки системы Mathematica 4. Разумеется, комфортность и скорость работы с системой при ее установке на жесткий диск выше, чем при работе прямо с CD-ROM, особенно если используется устройство чтения с невысокой скоростью считывания. Впрочем, для современных CD-ROM с кратностью скоростей 32 и выше работа оказывается вполне сносной. В корневом каталоге CD-ROM содержатся три подкаталога:

  • PC — подкаталоги и файлы для стандартной инсталляции и работы в среде операционной системы Windows 95/98/NT;
  • PC_8_3 — подкаталоги и файлы для инсталляции системы в случае, если устройство чтения CD-ROM не поддерживает длинные имена файлов;
  • UNIX — подкаталоги и файлы для инсталляции в среде операционной системы UNIX.

Подкаталог PC содержит обычные (не архивированные) файлы системы Mathematica 4. Они используются как для копирования на жесткий диск при обычной инсталляции системы, так и для прямой работы с CD-ROM. Если устройство чтения CD-ROM не поддерживает считывание длинных имен файлов, то для инсталляции системы на жесткий диск используются файлы из каталога PC_8_3, которые имеют до 8 символов в имени и до 3 символов в расширении. Подкаталог UNIX содержит файлы, необходимые для инсталляции системы на компьютерах платформы UNIX.

Установка Mathematica 4 на жесткий диск

Для серьезной работы с системой Mathematica 4 ее следует установить на жесткий диск компьютера. Перед этим надо проверить соответствие аппаратных требований реальным возможностям вашего ПК. Минимальные требования для установки системы Mathematica 4 следующие:

  • IBM/Intel-совместимый компьютер с процессором класса не ниже 80386;
  • операционная система Windows 95, 98 или NT;
  • объем ОЗУ не менее 16 Мбайт, желательно 24 Мбайт при работе с Windows 95/ 98 и 32 Мбайт при работе с Windows NT;
  • устройство чтения CD-ROM — для считывания инсталляционного диска;
  • видеосистема класса SVGA;
  • звуковая карта класса Sound Blaster для работы со звуком;
  • все файлы системы Mathematica 4 занимают 156 Мбайт. Из них лишь 40 Мбайт приходится на минимальный вариант установки — файлы ядра (Kernel), интерфейсного процессора (Front end), библиотеки (Mathlink Libraries) и шрифты математических символов (Fonts). Дополнительно могут устанавливаться стандартные пакеты расширения (Standard Add-on Packages) и необходимые для связи с ними файлы инструментария (MathLmk Developer's Kit ) — 12 Мбайт. Куда больше занимает онлайновая документация справочной системы — The Mathematica Book, Reference Guide, Standard Add Package и Additional Documentation. Для ее установки нужно еще 104 Мбайт.

Для установки Mathematica 4 на жесткий диск надо активизировать кнопку с надписью Install Mathematica to a hard disk. Начнется подготовка инсталлятора системы. В ходе установки в особом каталоге создаются временные файлы, которые впоследствии автоматически уничтожаются. Однако для их установки на жестком диске необходимо иметь свободное пространство — около 200 Мбайт при полной установке системы.

После подготовки инсталлятора появляется обычное окно с вступительным сообщением. Нажав кнопку Next, можно перейти к следующему этапу инсталляции. При этом появляется окно регистрации системы (рис. 1.13). Обычно первые три поля из пяти бывают заполнены автоматически: это идентификационный номер MathID, имя компьютера и имя организации. Разумеется, вы можете их изменить. Номер лицензии обычно указывается на коробке, в которой поставляется система, и на конверте с текстами лицензионных материалов. А вот пароль дается фирмой Wolfram отдельно — по телефону, факсу, электронной почте или через Интернет (нелегальные способы получения пароля с помощью генератора номеров лицензии и пароля здесь не обсуждаются).

Рис. 1.13. Окно регистрации системы

Если все данные в окне регистрации введены, то нажатие кнопки Next обеспечивает продолжение установки системы на жесткий диск. Как обычно, в окне выбора режима инсталляции будет предложено три варианта — полный, минимальный и выборочный. Рекомендуется использовать выборочный, поскольку при этом можно прочесть наименования всех компонентов системы (рис. 1.14). Обратите внимание, что при полной установке системы она занимает на жестком диске около 170 Мбайт. Вы можете значительно уменьшить этот объем, отказавшись от установки пакетов расширений, документации и т. д. Минимальный объем памяти на диске при этом составит около 50 Мбайт. Но возможности системы будут заметно урезаны.

Рис. 1.14. Окно выбора устанавливаемых компонентов системы

Установив (или подтвердив) набор компонентов нажатием кнопки Next, можно перейти к следующему шагу установки — выбору имени системы в главном меню операционной системы Windows 95/98/NT. Окно, дающее возможность такого выбора, представлено на рис. 1.15.

Рис. 1.15. Окно выбора имени позиции системы в главном меню

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

Рис 1.16. Окно подтверждения завершения подготовки к инсталляции

Нажав кнопку Next, мы переходим к инсталляции системы Mathematica 4 на жесткий диск. Картина работы инсталлятора представлена на рис. 1.17. Окна с краткими описаниями новшеств в верхнем левом углу окна инсталлятора время от времени меняются. Полезно просмотреть их содержание, благо на этом этапе инсталляции пользователю делать больше нечего. Индикатор прогресса (внизу справа) показывает ход инсталляции и имена текущих файлов, копируемых на жесткий диск. Общую информацию дают гистограммы, расположенные в левом нижнем углу окна инсталлятора.

Инсталляция заканчивается выводом окна завершения инсталляции (рис. 1.18). Фирма Wolfram рекомендует в случае появления проблем с инсталляцией прежде всего попытаться устранить факторы, препятствующие инсталляции. Для этого надо внимательно разобраться с сообщениями о причинах сбоя. Далее следует провести инсталляцию с помощью файлов поддиректории PC_8_3 CD-ROM. Если и это не помогает, то остается предпоследнее — обратиться в службу технической поддержки фирмы Wolfram. Или последнее — сменить компьютер!

Нажатие кнопки ОК в заключительном окне завершает процесс установки системы Mathematica и стирает временные файлы инсталлятора.

Рис. 1.17. Ход инсталляции системы Mathematica 4

Рис. 1.18. Окно с подтверждением успешно проведенной установки

 

Зanycк Mathematica 4


После установки системы Mathematica 4 на жесткий диск в папке Программы главного меню операционной системы Windows появляется позиция с ярлыками системы Mathematica 4 (рис. 1.19).

Рис. 1.19. Система Mathematica 4 в главном меню Windows 98

Как видно из рис. 1.19 (нижняя позиция главного меню), система Mathematica 4 представлена тремя ярлыками:

  • Mathematica 4 — запуск системы Mathematica 4;
  • Mathematica 4 Kernel — запуск ядра системы Mathematica 4;
  • Uninstall Mathematica 4 — удаление системы Mathematica 4.

Запуск Mathematica 4 выполняется, как обычно, активизацией позиции Mathematica 4 в главном меню программ. При этом появляются строка меню, чистое окно документа Untitled-1 и базовая панель ввода. Теперь можно начинать работу, как было описано ранее (рис. 1.20).

Пользовательский интерфейс создается одной из двух основных частей системы — интерфейсным процессором (Front-end); вторая основная часть — ядро системы (Kernel). После загрузки интерфейсного процессора появляется скромная панель главного меню системы и пустое окно редактирования документов. В нем можно начинать вычисления, что и показано на рис. 1.20.

Рис. 1.20. Начало работы с системой Mathematica 4

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

Палитру можно использовать для ввода спецзнаков и операторов, например возведения в степень, вычисления производной или интеграла и т. д. Примеры применения палитры тоже показаны на рис. 1.20. Обратите внимание, к примеру, на естественный вид интеграла в строке ввода 6. Шаблон интеграла вводится с помощью палитры Basiclnput и затем заполняется. Мы не будем описывать этот процесс подробно, поскольку он вполне естественен и легко осваивается даже начинающими пользователями.

В общем случае для получения естественной формы шаблона математического выражения в строках ввода надо изменить их обычный формат InputForm (форма ввода) на формат StandardForm (стандартная форма). Для этого выберите вариант InputForm в подменю Convert То (Преобразовать в...) меню Cell.

Можно отметить некоторые отличительные, но вовсе не принципиальные признаки работы именно с системой Mathematica 4. Над строкой меню дано полное название системы — «Mathematica 4». При вводе выражений используется цветная раскраска элементов — например, незакрытые скобки имеют красный цвет и меняют его на черный после ввода завершающих скобок. Это облегчает ввод сложных выражений и их редактирование в строках ввода. Более скромным (в стиле Microsoft Office 97) стало оформление кнопок. Но главное — даже на первый взгляд заметно ускорение работы с элементами пользовательского интерфейса.

Если вы намерены часто пользоваться системой Mathematica 3/4, позаботьтесь о том, чтобы создать ярлык системы на рабочем столе Windows 95/98/NT. В этом случае запуск системы предельно упрощается — надо установить курсор мыши на ярлык и дважды быстро щелкнуть левой кнопкой мыши (пользователи Windows 98 могут настроить систему на запуск программ однократным коротким нажатием левой кнопки мыши).

 

Прямая работа с CD-ROM

Если пользователь работает с системой Mathematica 4 эпизодически, он может воспользоваться прямой работой с CD-ROM. Для этого после самозапуска CD-ROM нужно активизировать кнопку Run Mathematica off the CD-ROM. Появится окно регистрации, уже описанное ранее. После ввода данных о регистрации работа с системой ничем не отличается от обычной (при запуске с жесткого диска). Заметно лишь замедление работы при манипуляциях с пользовательским интерфейсом и файлами.

Работа с ядром системы Mathematica 4

В Mathematica 4 предусмотрена прямая работа с ядром системы в режиме командной строки. Такая работа возможна как после активизации ярлыка Mathematica 4 Kernel в папке системы, так и после выбора команды Run the Mathematica kernel off the CD-ROM при самозапуске CD-ROM. При этом работа с ядром возможна даже в MS-DOS.

При пуске ядра указанными способами появляется окно, показанное на рис. 1.21, в полностью развернутом виде. Лишь сообщения сверху окна указывают на то, что работает новейшая версия системы — Mathematica 4. В остальном работа с ядром напоминает работу в текстовом режиме системы Mathematica 1.0. Даже графики в данном случае строятся текстовыми символами, что наверняка умилит почитателей ретро в области вычислений.

При всей примитивности прямой работы с ядром она имеет ряд достоинств:

  • работа происходит быстро;
  • удобно знакомиться с назначением функций системы;
  • простой формат ввода и вывода облегчает копирование;
  • возможна работа в MS-DOS;
  • требуются минимальные ресурсы ПК.

Таким образом, прямая работа с ядром может быть полезна при освоении системы Mathematica.

Рис. 1.21. Пример прямой работы с ядром системы Mathematica 4

 

gl1-11.jpg

Изображение: 

gl1-12.jpg

Изображение: 

gl1-13.jpg

Изображение: 

gl1-14.jpg

Изображение: 

gl1-15.jpg

Изображение: 

gl1-16.jpg

Изображение: 

gl1-17.jpg

Изображение: 

gl1-18.jpg

Изображение: 

gl1-19.jpg

Изображение: 

gl1-20.jpg

Изображение: 

gl1-21.jpg

Изображение: 

7. Отличительные особенности Mathematica 4

 

Отличительные особенности Mathematica 4

Ускорение численных расчетов и повышение их точности

Большинство пользователей с трудом уловят разницу между версиями Mathematiea 3 и Mathematica 4. Именно поэтому основной материал данной книги полностью относится к этим двум последним версиям. Тем не менее, различия между версиями есть, и достаточно серьезные.

Пожалуй, главной отличительной особенностью системы Mathematica 4 стало кардинальное ускорение численных расчетов. Традиционно системы символьной математики проигрывали численным системам, таким как MATLAB. До сих пор скорость вычислений в системе MATLAB в 5-10 раз превышала скорость вычислений, производимых системами символьной математики. Поэтому в системе Mathematica 4 были предприняты необычные для систем символьной математики и даже беспрецедентные меры по ускорению численных расчетов. Они перечислены ниже:

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

Рисунок 1.22. иллюстрирует некоторые простые вычисления в численном виде с фиксацией времени вычислений для систем Mathematica 3 и 4 (данные получены от разработчика).

Рис. 1.22. Сравнительные данные по скорости простых вычислений

Из примеров на рис. 1.34 видно, что скорость простых вычислений возросла в 5-10 раз.. В отдельных случаях скорость более сложных вычислений возрастала намного больше. Ниже приведены данные о выполнении некоторых операций над матрицей m большого размера (500x500).

Операция

Mathematica 4

Mathematica 3

Отношение времен

Sin [m]

(m+ 1) 100

Min [m]

0,13с

0,311 с

0,02с

2,433 с

4,426 с

4,487 с

18,7:1

14,23:1

224:1

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

Улучшение работы с массивами

Кардинально уменьшено и время обращения к памяти при записи и считывании массивов, а заодно существенно повышена плотность упаковки массивов для данных различного типа (за счет применения особой технологии упаковки массивов). Приведенные ниже сведения характеризуют это для версий Mathematica 4 и 3 для ряда типов данных — целых (Integers), вещественных (Reals) и комплексных (Complex Numbers).

Mathematica 4

Mathematica 3

Тип данных

Время, с

Объем памяти

Время, с

Объем памяти

Integers 0,24 400 056 0,43 2 000 024
Reals 0,231 800 056 0,611 2 000 024

Complex    Numbers

0,35

1 600 056

1,341

6 000 024

Уплотнение массивов означает, что Mathematica 4 при заданном объеме свободной памяти может решать более объемные и серьезные задачи, чем это смогла бы сделать предшествующая версия системы.

Указанные достоинства системы Mathematica 4 достигнуты за счет выбора и тщательной оптимизации алгоритмов численных вычислений:

  • введена прямая поддержка следов матриц;
  • изменены алгоритмы нахождения минимума (функция FindMinimum);
  • реализован ускоренный вывод больших чисел — вплоть до миллионов цифр;
  • введена новая технология упаковки больших массивов чисел;
  • существенно уменьшена необходимость в повторных циклах;
  • обеспечена абсолютная точность при целочисленных вычислениях;
  • гарантирована заданная погрешность при вычислениях с вещественными числами;
  • улучшено размещение переменных в памяти.

По умолчанию погрешность вычислений при целочисленных операциях в системе Mathematica 4 определена в 1 000 000 верных цифр. К примеру, чтобы выдать число n с миллионом верных знаков, системе Mathematica 4 понадобится чуть больше двух минут (разумеется, на современном компьютере)! В некоторых видах сложных целочисленных вычислений, используемых в технике кодирования информации, Mathematica 4 обеспечивает беспрецедентно малое время вычислений.

Улучшенные математические возможности

Математические возможности системы Mathematica 4 существенно пополнены и улучшены. В частности, обеспечены следующие возможности:

  • прямая поддержка линейной алгебры разреженных матриц;
  • экспериментальная поддержка кванторного исключения с использованием цилиндрического алгебраического разложения;
  • экспериментальная поддержка символьной оптимизации;
  • быстрая свертка и корреляция для массивов любого размера и размерности;
  • новые улучшенные алгоритмы для преобразований Фурье (рис. 1.23);
  • ускоренное вычисление полиномиальных уравнений;
  • новые алгоритмы для функции минимизации FindMinimum;
  • расширение возможностей матричных преобразований;
  • алгебраическая вычислительная поддержка для функций символьных преобразований Simplify, FunctionExpand и связанных с ними других функций;
  • расширение возможностей функций преобразования FullSimplify и FunctionExpand;
  • упрощение полиномиальных и других неравенств;
  • полная улучшенная поддержка символьных преобразований Лапласа и Фурье;
  • расширенные возможности решения трансцендентных уравнений;
  • ускоренное неоднократное дифференцирование;
  • поддержка ряда новых специальных функций (Дирака, Струве, обобщенных логарифмов, двумерных гипергеометрических функций Аппеля, полилогарифмов Ньелсена, гармонических функций, различных констант и т. д.);
  • новые оптимизированные методы для оценивания е, n и других констант с очень высокой точностью;
  • полная поддержка для непрерывных дробей и периодических цифровых последовательностей ;
  • прямая поддержка поразрядных операций.

Рис. 1.23. Пример выполнения преобразования Фурье в среде Mathematica 4

Из рис. 1.23. видно, что на преобразование Фурье массива 500x500 элементов Mathematica 4 затратила около 2 с. Для сравнения отметим, что Mathematica 3 выполнила ту же работу за 11 с, то есть ускорение преобразования Фурье оказывается более чем пятикратным.

Рисунок 1.24. иллюстрирует возможности выполнения интегральных преобразований Лапласа и Фурье в символьном виде.

Рис. 1.24. Примеры интегральных аналитических преобразований

Некоторые другие примеры использования, характерные для системы Mathematica 4, можно найти на Интернет-странице фирмы Wolfram.

 

Улучшенная поддержка средств графики и звука

Графика всегда была козырной картой систем Mathematica. В новой версии системы также реализованы многочисленные новые возможности. Отметим наиболее существенные из них:

  • ускоренный вывод графических данных на дисплеи больших размеров;
  • экспорт и импорт графики и звука во многих форматах (рис. 1.25);
  • поддержка дискретного масштабирования уровней цвета;
  • поддержка трехмерной динамической графики в реальном времени (только в среде Windows);
  • ускоренная генерация и вывод на экран больших графиков;
  • полностью согласованная поддержка безусловных опций.

Рис. 1.25. Форматы ввода и вывода изображений, поддерживаемые системой Mathematica 4

Всего Mathematica 4 поддерживает свыше 20 различных форматов файлов. Возможность импорта графического файла с высоким разрешением в формате TIFF и последующего преобразования файла в формат JPG иллюстрирует рис. 1.26.

Рис. 1.26. Пример импорта файла в одном формате и экспорта того же файла в другом формате

Средства графики Mathematica 4 позволяют использовать систему в качестве графического процессора, осуществляющего эффективные цифровые преобразования изображений, такие как стилизация (рис. 1.27), повышение и понижение контрастности и яркости, обработка цветов, фильтрация и т. д.

Рис. 1.27. Пример обработки изображения, показанного на рис. 1.26

Все это, разумеется, повышает шансы системы Mathematica 4 сохранить за собой роль мирового лидера среди систем компьютерной математики для ПК.

Вращение трехмерных графиков мышью

Следом за системами Maple V R5 и Mathcad 8 PRO Mathematica 4 приобрела возможность быстрого вращения произвольных трехмерных графиков. Пример реализации этой возможности представлен на рис. 1.28.

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

<<RealTime3D`

Другая команда,

<<Default3D`

возвращает систему к стандартным возможностям трехмерной графики.

Из приведенных данных ясно, что возможности системы Mathematica 4 и скорость ее работы существенно повышены. Однако при этом сохранена практически полная совместимость по интерфейсу пользователя и базовому набору операторов и функций с предшествующей версией Mathematica 3. Так что из этой книги читатель получит достаточно полные сведения не только о новейшей версии Mathematica 4, но и о ее предшественнице — системе Mathematica 3. Значительная часть сведений и примеров полезны и пользователям версий Mathematica 2.x.

Рис. 1.28. Стоп- кадр документа, показывающего возможность вращения трехмерной фигуры в реальном времени

При выборе той или иной версии решающую роль играют финансовые соображения и аппаратные требования к компьютеру. Как уже отмечалось, новая версия Mathematica 4 для установки на компьютере с операционной системой Windows 95/98 требует объема ОЗУ 16/24 Мбайт и 40/156 Мбайт места на жестком диске (в числителе дробей минимальное значение, в знаменателе — рекомендуемое). В то же время, система Mathematica 2.2.2 требует емкости ОЗУ 8 Мбайт (версия 2.1 — даже 4 Мбайт), занимает на жестком диске 14 Мбайт и инсталлируется с 6 обычных гибких дисков.

Программирование и ядро системы

Средства программирования и ядра системы Mathematica дают ряд новых возможностей:

  • функции NestWhile и NestWhileList, позволяющие обобщения функции FixedPoint;
  • функции PadLeft и PadRight;
  • поддержку перекрытия и расширения подсписков, генерируемых функцией Partition;
  • функции ListConvolve и ListCorrelate;
  • обобщение функций Take, Drop и связанных с ними функций до любой размерности и любых шагов по индексу;
  • поддержку функции All для определения частей на определенных уровнях в выражениях;
  • расширения в функции Mod для поддержки кириллических списков;
  • контекст Developer, предоставляющий доступ к внутренним функциям системы;
  • контекст Experimental, предоставляющий доступ к функциям, находящимся в стадии разработки.

Операции ввода и вывода

Операции ввода и вывода в Mathematica 4 дают следующие новые возможности:

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

Системный интерфейс

На уровне системного интерфейса в Mathematica 4 обеспечены:

  • поточный вывод табличных данных;
  • развитая поддержка преобразования ячеек в HTML;
  • дополнительная поддержка вывода в формате ТеХ;
  • ускорено взаимодействие с внешними программами через MathLink;
  • поддержка дополнительных наборов символов, включая китайские и корейские;
  • экспериментальная поддержка вывода на экран в режиме реального времени;
  • экспериментальная поддержка удаленных файловых систем через MathLink;
  • экспериментальная поддержка всплывающих кнопочных палитр.

 

gl1-22.jpg

Изображение: 

gl1-23.jpg

Изображение: 

gl1-24.jpg

Изображение: 

gl1-25.jpg

Изображение: 

gl1-26.jpg

Изображение: 

gl1-27.jpg

Изображение: 

gl1-28.jpg

Изображение: 

8. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Классифицировать системы компьютерной математики.
  • Оценивать аппаратные ресурсы, нужные для работы с системами Mathematiса 3 и 4.
  • Использовать Интернет-сайт фирмы Wolfram Research — разработчика систем Mathematica.
  • Использовать некоторые средства диалога с системой.
  • Выполнять проверку некоторых решений.
  • Выполнять инсталляцию систем Mathematica 3 и 4.
  • Запускать системы Mathematica 3 и 4.
  • Выполнять прямые операции с ядром систем.
  • Распознавать многочисленные отличительные особенности Mathematica 4.

 

Урок 2. Интерфейс системы

Урок 2. Интерфейс системы

1. Интерфейс системы

 

Интерфейс системы

  • Строка меню и окно редактирования документов
  • Палитры математических операторов и функций
  • Понятие о документах в форме notebooks
  • Особенности интерфейса Mathematica 4
  • Основные виды файлов и пакеты расширения
  • Работа с файлами
  • Печать документов
  • Основные понятия о документах и их стилях
  • Понятие о ячейках документов
  • Манипуляции с ячейками
  • Вставка различных элементов
  • Управление процессом вычислений
  • Команды поиска и замены
  • Управление расположением окон
  • Справочная база данных

Прежние версий системы Mathematica имели довольно скромный стандартный интерфейс, характерный для приложений MS-DOS. Однако в версиях Mathematica 3/4 интерфейс был существенно переработан. В этом уроке подробно рассматривается интерфейс систем Mathematica 3/4. Освоение интерфейса не менее важно, чем освоение чисто математических возможностей системы, поскольку именно использование всех возможностей интерфейса позволяет готовить вполне современные документы, отличающиеся высоким качеством визуализации.

 

2. Строка меню и окно редактирования документов

 

Строка меню и окно редактирования документов

До сих пор разработчики пользовательского интерфейса математических систем по существу копировали стандартный интерфейс программ из комплекса Microsoft Office 95/97, в частности, самого популярного текстового процессора Word 95/97. Разработчики интерфейса пользователя систем Mathematica 3/4 отошли от этой традиции.

Нетрудно заметить, что пользовательский интерфейс систем Mathematica 3/4 реализует отдельный вывод своих элементов — окон (включая основное окно редактирования), панелей, палитр знаков и т. д. Это позволяет располагать их в любых местах экрана, что особенно удобно при работе с дисплеями, имеющими большой размер изображения — от 17 дюймов по диагонали и выше. При работе с дисплеями, имеющими небольшой экран (14 или 15 дюймов) и стандартном разрешении 640x480 пикселей раздельный вывод элементов интерфейса скорее неудобен, поскольку приходится тщательно располагать их в нужных местах и индивидуально подстраивать размеры отдельных окон и палитр. Однако после настройки элементы интерфейса выводятся в том виде, как это было задано.

Главное окно системы имеет крайне невзрачный вид, поскольку не содержит ничего, кроме строки заголовка и строки меню.

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

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

Главное меню системы (см. рис. 1.20, сверху) содержит следующие позиции:

  • File — работа с файлами: создание нового файла, выбор файла из каталога, закрытие файла, запись текущего файла, запись файла с изменением имени, печать документа и завершение работы;
  • Edit — основные операции редактирования (отмена операции, копирование выделенных участков документа в буфер с их удалением и без удаления, перенос выделенных участков, их стирание);
  • Cell — работа с ячейками (объединение и разъединение ячеек, установка статуса ячейки, открытие и закрытие);
  • Format — управление форматом документов;
  • Input — задание элементов ввода (графиков, матриц, гиперссылок и т. д.);
  • Kernel — управление ядром системы;
  • Find — поиск заданных данных;
  • Window — операции с окнами и их расположением;
  • Help — управление справочной системой.

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

 

3. Палитры математических операторов и функций

 

Палитры математических операторов и функций

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

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

Однако, сделав шаг назад, упомянутая фирма одновременно сделала два шага вперед — она ввела выбираемые пользователем и перемещаемые по экрану в любое место инструментальные палитры со множеством пиктограмм ввода математических символов, функций и команд управления системой. Они выводятся с помощью меню File | Palettes (Файл | Палитры). Если вывести все инструментальные палитры, то они едва умещаются в главном окне системы (рис. 2.1).

Рис. 2.1. Инструментальные палитры системы Mathematica 4

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

Рисунок 2.1, однако, наглядно показывает, что целесообразно пользоваться не более чем 2-3 панелями одновременно. Для удаления ненужных панелей в правом верхнем углу каждой из них расположены маленькие кнопки со знаком х. Все панели максимально компактны и могут перетаскиваться мышью в наиболее удобное место экрана.

Если убрать все панели, то интерфейс системы на первый взгляд оказывается даже слишком простым — остается единственная панель с главным меню и висящее отдельно окно документа. Вокруг него можно разглядеть объекты рабочего стола операционной системы Windows 95/98 (при подготовке этой книги использовалась Windows 98). Если работа идет с несколькими документами, то можно увидеть несколько окон документов.

Если завершить работу с системой Mathematica при выведенных панелях математических знаков, то в следующем сеансе работы эти панели появятся на тех местах, где они были расположены перед выходом. Таким образом, интерфейс систем Mathematica 3/4 обладает своеобразной памятью.

 

gl2-1.jpg

Изображение: 

4. Понятие о документах в форме notebooks

 

Понятие о документах в форме notebooks

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

Нетрудно заметить, что вычисления в оболочке системы проходят так же, как при вычислениях на обычном калькуляторе. Однако прежде чем получить результат первого вычисления, даже столь простого, как вычисление 2 + 3, вам придется запастись терпением и дождаться, когда система загрузит свое ядро.

Даже у ПК с процессором Pentium II время первоначальной загрузки доходит до нескольких секунд. Впрочем, последующие вычисления (если они не слишком сложны) происходят уже почти мгновенно — особенно при применении Mathematica 4.

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

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

Чтобы документ имел форму «блокнота», надо предпринять определенные операции по форматированию документа и приданию ему нужного вида. Прежде всего, каждый шаг вычислений следует снабжать поясняющими надписями. Их можно прямо вводить в строки ввода, но затем отформатировать с использованием текстового формата подходящего стиля. Для этого выделяется строка ввода с текстовой надписью (щелчком на скобке соответствующей ячейки). Пространство внутри скобки при этом затеняется (делается черным). Затем выполняется команда меню Format | Style | Text (Alt+7). Она задает текстовый формат надписи, который является неисполняемым.

С помощью других команд меню Format, которые мы рассмотрим в дальнейшем, можно задать надпись разным шрифтом, разным цветом с выделением фона и т. д. Как уже отмечалось, для ввода математического выражения по шаблону и для представления его в естественной математической форме используется стандартный формат ячеек ввода (StandardForm). Рисунок 2.2 показывает созданный таким образом простой «блокнот», в котором наряду с поясняющими текстовыми надписями заданы вычисление определенного интеграла, вычисление суммы квадратов чисел от 1 до и и построение графика с помощью графической функции Plot.

Рис. 2.2. Простейший документ в форме «блокнота»

В «блокнотах» желательно, чтобы форма представления математических выражений хотя бы напоминала общепринятую. В этом отношении документы системы Mathematica 3/4 все еще уступают документам систем Mathcad для Windows — последние содержат записи математических выражений (включающих знаки интегралов, сумм, произведений, греческие буквы и прочие спецзнаки) в их обычном начертании. Более того, формулы, текстовые комментарии и графики могут располагаться как угодно — например, вдоль строки могут располагаться формулы, графики и таблицы вывода. Зато Mathematica 3/4 позволяет задавать формы представления документов, принятые в таких мощных языках программирования, как Fortran, С и даже ТеХ (язык для программирования типографского набора сложных научных текстов).

Каждая надпись, математическое выражение или график занимают отдельную ячейку (cell). Ячейка может занимать одну или несколько строк и всегда выделена своей квадратной скобкой. Важным свойством ячеек систем Mathematica является возможность их эволюции (изменения) по всему документу. Этим осуществляется динамический обмен данными в ходе символьных преобразований — свойство, которое оказалось так и не реализованным в других символьных математических системах (за исключением, пожалуй, Maple V).

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

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

 

gl2-2.jpg

Изображение: 

5. Особенности интерфейса Mathematica 4

 

Особенности интерфейса Mathematica 4

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

  • улучшена плавная прокрутка больших документов;
  • введен экспорт табличных данных;
  • улучшены возможности создания документов в стиле Notebook;
  • добавлена панель ввода шаблонов ЗD-фигур;
  • расширена поддержка преобразований файлов в формат HTML;
  • введена дополнительная команда для вывода в формате ТеХ;
  • обеспечена поддержка дополнительных наборов символов, включая символы китайского и корейского языков;
  • переработаны редакторы программ с цветной раскраской листингов;
  • улучшены средства отладки программ;
  • улучшена связь программных модулей.

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

Рис. 2.3. Вид документа системы Mathematica 4 со встроенным рисунком

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

В новых версиях Mathematica появилась возможность подготовки документов в виде, непосредственно пригодном для их отправки по сети Интернет. Для этого потребовалось создание специальных средств для неискаженной передачи математических выражений (формул). В результате фирмой Wolfram был создан специальный стандарт MathML, позволяющий устанавливать документы системы Mathematica 4 на W3C Web-узлах. В настоящее время этот стандарт поддержан многими ведущими компьютерными компаниями. По существу, он является расширением языка гипертекстовых ссылок HTML.

 

gl2-3.jpg

Изображение: 

6. Работа с файлами

 

Работа с файлами

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

Основные виды файлов и пакеты расширения

Файлы документов прежних версий системы Mathematica имели расширение .та (от слов Mathematical Applications — применения системы Mathematica), их можно загружать в окно редактирования для исполнения, дополнения или редактирования. При записи таких файлов система одновременно создает бинарные файлы с расширением .mb, хранящие битовый графический образ документа. Благодаря этому считывание файлов ранее подготовленных в системе документов происходит быстро, без включения в работу символьного процессора, так что текст с графиками сразу появляется на экране дисплея.

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

В версиях Mathematica 3/4 основным типом документов стали блокноты (notebooks). Им соответствуют файлы текстового формата с расширением .nb. Эти файлы могут редактироваться любым текстовым редактором, поддерживающим формат ASCII. Файлы содержат подробное описание документа с указаниями типов шрифтов, деталей оформления и местоположения различных объектов. Они завершаются довольно пространным описанием того, что собой представляет notebook. К сожалению, это ведет к значительному росту объема таких файлов — он значительно больше, чем у документов систем Mathcad. Зато файлы блокнотов весьма наглядны, и при необходимости в них может разобраться обычный пользователь.

Кроме того, система имеет ряд стандартных пакетов расширения (в оригинале — Add-Ons), расположенных в каталоге ADDONS:

  • Algebra — работа с полиномами, алгебраическими неравенствами, Гамильтоно-вой алгеброй и т. д.
  • Calculus — символьные вычисления производных, интегралов и пределов функций, прямое и обратное преобразования Фурье и Лапласа, решение систем нелинейных уравнений, реализация инвариантных методов, решение дифференциальных уравнений в частных производных, нахождение полных интегралов и дифференциальных инвариантов нелинейных уравнений, аппроксимация Паде, вычисление эллиптических интегралов и работах векторами.
  • DiscreteMath — вычисления из области дискретной математики, комбинаторики, вычислительной геометрии и теории графов, решение рекуррентных и разностных уравнений, операции с целыми числами и т. д.
  • Geometry — функции для выполнения геометрических расчетов, создания правильных прямоугольников и многогранников, вращения геометрических фигур в плоскости и в пространстве.
  • Graphics — построение графиков специального вида, геометрических фигур и поверхностей, графиков параметрически и неявно заданных функций, представления функций комплексного переменного, отображение ортогональных проекций трехмерных фигур, имитация теней, средства оформления графиков.
  • LinearAlgebra — решение задач линейной алгебры, дополнительные векторные и матричные операции, задание ортогональных векторных базисов и т. д.
  • Miscellaneuos — задание единиц измерения физических величин, данные о химических элементах, физические константы, географические данные и все прочее, не вошедшее в другие категории.
  • NumberTheory — функции теории чисел.
  • NumericalMath — реализация важнейших численных методов, аппроксимация данных и аналитических функций полиномами, сплайнами и тригонометрическими рядами, численное интегрирование и дифференцирование, решение дифференциальных уравнений, вычисление корней нелинейных уравнений, нахождение вычетов и разложений в комплексной плоскости и т. д. .
  • Statistics — статистические функции для непрерывных и дискретных распределений, реализация линейной и нелинейной регрессии, вычисление параметров ряда распределений (особенно нормального), функции сглаживания и подгонки данных и т. д.
  • Utilities — дополнительные утилиты для работы с бинарными файлами и памятью компьютера, поддержки языков, работы с системами класса AutoCAD и т.д.

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

В версии Mathematica 4 число файлов в пакетах расширения несколько сокращено по сравнению с версией Mathematica 3. Часть таких файлов вообще являются «пустышками» — они оставлены ради сохранения полной совместимости с предшествующими версиями системы. Перенос части имеющихся в пакетах расширений функций и команд в тщательно оптимизированное ядро системы позволил существенно повысить скорость выполнения соответствующих операций.

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

Меню File

Для работы с файлами служит меню File (рис. 2.4).

Рис. 2.4. Меню File

В этом меню содержатся следующие команды:

  • New (Ctrl+N) — вывод окна нового документа;
  • Open (Ctrl+0) — загрузка существующего документа;
  • Close (Ctrl+F4) — закрытие текущего окна;
  • Save (Ctrl+S) — запись документа с текущим именем;
  • Save As (Shift+Ctrl+S) — запись документа с изменением имени;
  • Save As Special — запись в специальных форматах;
  • Open Special — открытие файлов в специальных форматах;
  • Import — вставка содержимого файла в ячейку текущего документа;
  • Send To — зарезервированная команда;
  • Send Selection — зарезервированная команда;
  • Palettes — вывод палитр математических спецзнаков, операторов и функций (см. выше раздел «Палитры математических операторов и функций»);
  • Notebook — вывод списка документов, которые загружались ранее;
  • Generate Palette from Selection — преобразует выделенные ячейки документа в палитру;
  • Generate Notebook from Palette — преобразует палитру в документ;
  • Printing Settings — установка параметров печати;
  • Print (Ctrl+P) — печать текущего документа;
  • Print Selection — печать выделенных ячеек;
  • Exit (Alt+F4) — завершение работы с системой.

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

Открытие окна нового документа — команда New

Команда New используется, когда нужно начать работу с новым документом. Эта команда полностью очищает экран, выводя запрос о том, нужно ли записать текущий документ, если он есть и модифицировался со времени последнего сохранения. Окно будущего документа получает имя Untitled-N (в версиях Mathematica 2.x имя было Newnb-N), где N — текущий номер документа. После исполнения этой команды можно начинать ввод документа с помощью клавиатуры и выполнять его редактирование. Важно отметить, что даже эта. команда не отменяет определений, сделанных в предшествующих исполненных документах и в ранее загруженных файлах пакетов расширений. Лишь полная перезагрузка системы отменяет эти определения.

Загрузка ранее созданных документов — команда Open

Загрузка файлов ранее созданных документов — одна из самых распространенных операций. Она реализуется командой Open, которая служит для загрузки ранее созданного документа с его поиском в файловой системе компьютера. Эта команда выводит диалоговое окно, типичное для Windows-приложений и предназначенное для удобного поиска файлов (рис. 2.5).

Рис. 2.5. Диалоговое окно выбора файлов

Кроме команды Open, которая загружает документ, открывая его в новом окне, в меню File. имеется еще команда Import, вставляющая содержимое указанного файла в текущий документ. Обе команды позволяют загружать файлы как основного формата notebook с расширением .nb, так и файлы ряда других форматов.

Запись документа с текущим именем — команда Save

Если документ создан с помощью команды New или открыт с помощью команды Open, то он обычно подвергается модификации и редактированию. После отладки документа его измененный вариант бывает нужно записать на магнитный диск — гибкий или жесткий. Для этого служат команды Save и Save As. Команда Save выполняет запись текущего документа без изменения его имени. Поэтому она выполняется быстро и без каких-то дополнительных действий. Запись идет в формате notebook.

Запись документа с заданным именем — команда Save As

Команда Save As позволяет изменить имя файла и поместить его в любую директорию любого диска. Эта команда вызывает появление диалогового окна, показанного на рис. 2.6.

Рис. 2.6. Окно сохранения файла документа

Помимо установок диска и нужной директории следует задать имя записываемого файла или подтвердить предлагаемое имя. Вводить расширение не обязательно — система сама позаботится об этом. Запись идет в формате notebook.

Операции с файлами в специальных форматах

Mathematica может записывать и считывать файлы, представленные в ряде специальных форматов. С помощью команды Save As Special можно записывать файлы в следующих форматах:

  • Version 2 Notebook — формат блокнотов старой версии системы (.mа);
  • Text — текстовый формат (.txt);
  • Cell Expression — формат ячеек;
  • Notebook Expression — формат выражений в блокнотах;
  • Package Format —формат пакетов расширения (.m);,
  • ТеХ — формат редакторов семейства ТеХ (.tex);
  • HTML — формат гипертекстовой разметки (.htm).

Из специальных форматов файлов следует особо выделить два — ТеХ и HTML. Формат ТеХ используется весьма популярными у математиков редакторами математических текстов, насыщенных математическими знаками и формулами. Фактически, ТеХ представляет собой особый язык программирования, предназначенный для разметки математических выражений. Возможность работы систем Mathematica с данным форматом позволяет публиковать подготовленные в системах Mathematica документы в изданиях, ориентированных на математиков.

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

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

Преобразование документов в палитры и наоборот

Любую часть документа после выделения можно преобразовать в палитру. Для этого используется команда Generate Palette from Selection.

Палитра — это уменьшенное окно, похожее на окно документа, но имеющее в строке заголовка только имя и кнопку закрытия (у обычного окна кнопок в строке заголовка три). Палитру, как и документ, можно записывать на магнитные диски. Для преобразования палитры в документ используется команда Generate Notebook from Palette.

Установка параметров печати — подменю Printing Settings

Подготовленный документ обычно нуждается в печати. Многие предпочитают обдумывать и корректировать документы, используя их распечатки, не очень удачно именуемые «твердыми копиями». Нередко бывает нужна распечатка даже промежуточных версий документов.

Команда Printing Settings выводит подменю с тремя операциями. Первая — Page Setup — служит для установки параметров страниц при печати. Она выводит окно, показанное на рис. 2.7. Это окно операционной системы Windows 95/98 содержит типовые установки параметров страниц — их размер, ориентацию, способ подачи бумаги и размеры полей.

Рис. 2.7. Окно установки параметров страницы при печати документа

Вторая операция — Printing Options — служит для установки типовых опций пе чати. Их устанавливают в окне, показанном на рис. 2.8.

Рис. 2.8. Окно установки опций печати

Третья операция — Headers and Footers — служит для установки верхних и нижних колонтитулов (надписей сверху и снизу на каждой печатаемой странице). Эта операция выводит окно, показанное на рис. 2.9. В нем можно задать основные параметры колонтитулов и ввести соответствующие надписи.

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

Рис. 2.9. Окно задания колонтитулов

Mathematica для Windows не имеет своей собственной системы печати и использует стандартную систему печати операционных систем Windows 3.1/3.11/95/ 98/NT. При этом окна настройки печати задаются драйверами, установленными для применяемых принтеров. К примеру, Windows 98 поддерживает сотни типов принтеров десятков фирм. Для определенности ниже рассматриваются установки печати для широко распространенного цветного струйного принтера Epson Stylus Color 600, который при цене менее $300 обеспечивает высочайшее качество печати с разрешением до 1420 точек на дюйм при 16,7 миллионах цветовых оттенков. Этот принтер имеет два картриджа — для обычной черно-белой печати и для цветной печати (с тремя чернильницами, заполненными чернилами разных цветов).

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

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

В целом, можно сказать, что печать идет по известному принципу WYSIWYG — что видишь, то и будет напечатано. К сожалению, определенные отличия в том, что видно на экране дисплея и что напечатано принтером, все же могут быть. К примеру, знаки деления, видимые в виде горизонтальной черты на экране дисплея, в текстовом формате выглядят непрерывными, а принтерами часто печатаются пунктиром — это может привести к недоразумениям со знаками «минус». Случается и расхождение размеров шрифтов, способное нарушить правильность расположения частей формул по горизонтали. В таких случаях рекомендуется поэкспериментировать со стилями ячеек. Как правило, стили, основанные на графическом представлении данных, печатаются без искажений. Вообще же Mathematica имеет обширные возможности по стилевому оформлению документов и настройке качества печати под любой принтер.

Печать документов — команда Print

После настройки параметров можно осуществить собственно печать с помощью команды Print для всего документа или Print Selection для печати только выделенных ячеек. Команда Print открывает окно печати, показанное на рис. 2.10.

Рис. 2.10. Окно печати

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

Для начала печати надо нажать кнопку ОК, кнопка Отмена позволяет отменить печать, а кнопка Справка — вывести справку о печати. При печати документа появляется (иногда кратковременно) окно принтера, демонстрирующее процесс печати. Это окно показано на рис. 2.11.

Рис. 2.11. Процесс печати

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

Нажатие кнопки Свойства в окне (рис. 2.10) выводит окно настройки принтера. Вид этого окна зависит от применяемого для печати принтера и установленного для него драйвера. В связи с этим работа с данным окном подробно не рассматривается.

Команда Print Selection служит для печати набора выделенных ячеек. Обычно она также выводит окно печати, показанное на рис. 2.10. В этом окне, как отмечалось, можно выбрать нужный принтер из нескольких, если их драйверы были инсталлированы.

Завершение работы с системой — команда Exit

Команда Exit используется для окончания работы с системой Mathematica. Если все документы, с которыми пользователь работал (их может быть много), были записаны на диск, то при исполнении этой команды можно наблюдать последовательное закрытие окон с текстами документов. Если какой-то из документов не был записан после модификации, то команда Exit выведет запрос о необходимости записи.

В подменю Notebooks меню File содержится перечень файлов, с которыми в последнее время работал пользователь. Выбор любого из этих файлов ведет к его загрузке в новое окно редактирования. Это делает работу с системой более удобной, так как избавляет пользователя от поиска наиболее нужных файлов по дискам и директориям.

 

gl2-10.jpg

Изображение: 

gl2-11.jpg

Изображение: 

gl2-4.jpg

Изображение: 

gl2-5.jpg

Изображение: 

gl2-6.jpg

Изображение: 

gl2-7.jpg

Изображение: 

gl2-8.jpg

Изображение: 

gl2-9.jpg

Изображение: 

7. Редактирование документа

 

Редактирование документа

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

Основные понятия о документах и их стилях

Вообще говоря, системы Mathematica 3/4 работают с «блокнотами» (Notebooks), которые могут содержать множество ячеек различного типа. Однако слово «блокнот» при частом его употреблении действует на нервы российскому читателю — в частности, так у нас уже привыкли называть миниатюрные компьютеры. Название «записная книжка» тоже не очень удачно, хотя бы из-за того, что содержит два слова. Поэтому мы будем пользоваться более распространенным понятием документа.

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

Редактированием документа является всякое изменение текста комментариев, исходных данных и математических формул с целью придания документу более подходящего вида (стиля) или получения новых результатов. К редактированию относится и изменение формата графиков. Простейшие приемы редактирования настолько естественны, что не нуждаются в особых пояснениях — разумеется, если у пользователя есть хотя бы начальный опыт работы с Windows и встроенными в эту оболочку текстовыми редакторами Write и WordPad (либо с популярным редактором Word 95/97 ).

Для редактирования содержимого ячеек документов в них вводится текстовый курсор. Для этого курсор мыши устанавливается в нужное место ячейки и нажимается левая кнопка мыши — в этом месте и появляется текстовый курсор. Для редактирования используется обычный строчный редактор, который хорошо знаком даже начинающим пользователям, — именно с его помощью вводятся команды MS-DOS. В силу этого не будем описывать возможности этого редактора подробно. Напомним лишь, что они предусматривают перемещение маркера ввода, забой (удаление) символа слева (клавиша Backspace) или справа (клавиша Del) от курсора, установку режима вставки (клавиша Ins) и т. д.

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

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

Выделения в документах и использование мыши

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

Важным моментом в работе с документами является выделение их элементов — ячеек ввода и вывода, их содержимого и т. д. Для выделения ячейки достаточно щелкнуть на ее правой скобке — скобка заполнится черным цветом, это и есть выделение ячейки. На рис. 2.12 показана выделенная ячейка вывода с числом. Если при этом нажать правую кнопку мыши, появится контекстно-зависимое меню, которое также показано на рис. 2.12, с раскрытым подменю Copy As, позволяющим скопировать содержимое выделенной ячейки в буфер обмена Windows (Clipboard; далее он будет именоваться просто буфером).

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

Рис. 2.12. Выделенная ячейка вывода и ее контекстно-зависимое меню

Рис. 2.13. Выделенный график и его контекстно-зависимое меню

Контекстно-зависимые меню, вызываемые с помощью правой кнопки мыши, очень удобны при профессиональной работе с системой Mathematica. Они дают полный перечень команд, которые можно использовать для выделенного объекта, не обращаясь к главному меню, — там они также есть, но разбросаны по разным местам.

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

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

Наряду с выделением ячеек как отдельных объектов Mathematica 3/4 сохраняет привычный пользователям многих программ (например Word 95/ 97) способ выделения части содержимого ячейки путем перетаскивания курсора мыши. В этом случае, как обычно, выделение индицируется темным фоном выделенного участка. В отношении таких выделений также возможна работа с буфером обмена. Оба вида выделений (ячейки и ее части) одновременно невозможны — оно и понятно, буфер-то один!

 

Подготовка текстовых комментариев

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

Тестовые комментарии вводятся прямо в текущую строку ввода с использованием стандартных приемов строчного редактирования. Однако не следует завершать ввод нажатием комбинации клавиш Shift+Enter, так как это приведет к выводу комментария в строку вывода с возможными сообщениями об ошибках (рис. 2.14). Они обусловлены тем, что в текстовых комментариях обычно не придерживаются синтаксиса входного языка системы Mathematica, что и чревато появлением ошибок.

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

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

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

Рис. 2.14. Примеры ввода текстовых комментариев

Далее можно выбрать тип оформления ячейки. Для установки стиля ячеек используется ряд команд, которые собраны в меню Format | Style. Эти команды более подробно будут рассмотрены далее. Пока же отметим, что обычные текстовые комментарии рекомендуется отформатировать стилем Text или SmallText (в этом случае ячейки ввода имеют статус текстовых ячеек, не дающих вывод).

К важной операции редактирования ячеек с текстами комментариев относится выравнивание текстов в пределах строки ввода. Для оперативного осуществления этой операции целесообразно вывести панель инструментов (ToolBar) и мерную линейку (Ruler). Соответствующие команды (Show ToolBar и Show Ruler) находятся в меню Format. На рис. 2.15 представлено окно документа с панелью инструментов, линейкой и примерами форматирования строки ввода с текстовыми комментариями. Для быстрого форматирования используются четыре кнопки с изображением соответствующего отформатированного текста.

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

Рис. 2.15. Различные типы выравнивания текстовых надписей

 

Меню Edit

Основные операции редактирования сосредоточены в меню Edit. Рисунок 2.16 показывает вид экрана системы с открытыми меню Edit и двумя его подменю.

Как видно из рис. 2.16, в меню Edit сосредоточены следующие команды:

  • Undo (Ctrl+Z) — отмена операции;
  • Cut (Ctrl+X) — перенос содержимого ячейки в буфер;
  • Copy (Ctrl+C) — копирование содержимого ячейки в буфер;
  • Paste (Ctrl+V) — вставка информации из буфера без его очистки;
  • Clear (Del) — уничтожение выделенной ячейки;
  • Copy As — копирование содержимого ячейки в буфер в заданном формате;
  • Paste As — вставка информации из буфера в заданном формате;
  • Save Selection As — запись выделенных ячеек в специальных форматах;
  • Select All (Ctrl+A) — выделение всех ячеек;
  • Insert Object — вставка объектов;
  • Motion — различные перемещения в текстовом блоке;
  • Expression Input — ввод выражений в разных форматах;
  • Make 2D (Shift+Ctrl+Y) — преобразование текстовой строки ввода в двумерный формат;
  • Check Balance (Shift+Ctrl+B) — поиск пары скобок, окружающих место расположения текстового курсора;
  • Check Spelling (Alt+;) — проверка орфографии;
  • Preferences — вызов окна настроек системы.

Рис. 2.16. Меню Edit

Часть из этих команд дублирует описанные выше операции — в частности, операции по работе с буфером. Другие требуют некоторого пояснения. Так, команда Save Selection As служит для записи выделенных ячеек в файлы специальных форматов. Подменю с перечнем этих форматов показано на рис. 2.17.

Рис. 2.17. Подменю команды Save Selection As

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

Команда Insert Object открывает окно вставки объектов, показанное на рис. 2.18. Это стандартное окно, имеющееся во всех приложениях операционной системы Windows 95/98/NT. В окне есть перечень приложений, которые могут экспортировать в Mathematica порожденные ими объекты. Это могут быть тексты, рисунки, документы различных программных систем и т. д. Такие объекты внедряются в ячейки Mathematica и могут редактироваться теми программами, которые их породили. Позже мы рассмотрим технологию вставки объектов более подробно.

Рис. 2.18. Окно вставки объектов

Для редактирования больших текстовых блоков служат команды подменю Motion. Это стандартные команды перемещения курсора по отдельным символам, словам и т. д. Следует отметить, что правильное их исполнение гарантируется только для англоязычных текстов. Эта группа команд применяется редко — чаще всего перемещение текстового курсора производится с помощью клавиатуры. Кроме того, работать с такими командами через меню не очень удобно.

Команда Expression Input открывает подменю с рядом команд, задающих вид ячеек. Если надо представлять и редактировать ячейки ввода как двумерные объекты, то следует использовать команду Make 2D. Практика, однако, показывает, что гораздо проще вводить содержимое ячеек в обычном текстовом формате, чем в двумерном. В этот формат легко перейти средствами изменения формата ячейки.

Операции с буфером обмена

Как известно, операционные системы класса Windows имеют так называемый буфер обмена — в дальнейшем просто «буфер». Это специально организованная динамическая область памяти, в которую можно помещать информацию различного формата — например, текстовую или графическую. Буфер используется как для редактирования, так и для обмена информацией между различными приложениями. Буфер обладает определенным «интеллектом» и «понимает», какая именно информация (например, текстовая или графическая) в него помещается.

Команда Nut удаляет выделенную ячейку и помещает ее содержимое в буфер. Команда Сору делает то же самое, что и Cut, но без удаления выделенной ячейки. Команда Paste копирует содержимое буфера в место вставки, определяемое положением текстового курсора. При этом содержимое буфера сохраняется. Команда Paste and Discard, расположенная в подменю Paste As, переносит содержимое буфера на место, определяемое положением курсора, но при этом сам буфер очищается. Таким образом, в этом случае возможна только одна операция переноса. Ее применение разумно при перемещении больших объемов информации, поскольку позволяет сразу же высвободить память, занимаемую буфером. Команда Clear уничтожает выделенную ячейку без ее сохранения в буфере.

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

Применение этих команд очень удобно при подготовке сложных документов. Например, серию похожих надписей не стоит вводить целиком вручную. Гораздо удобнее одну из надписей поместить в буфер, выделив ее и задав команду Сору. Затем, используя команду Paste, можно поместить эту надпись в другие ячейки, а затем выполнить необходимые модификации. Важно отметить еще раз, что применение буфера возможно для обмена данными между системой Mathematica и другими приложениями.

Существование многих форматов для ячеек разного типа нередко препятствует организации корректного обмена данными между системой Mathematica и другими программными средствами и приложениями. В этом случае можно рекомендовать попробовать осуществить обмен, явно выбрав подходящий формат данных, благо выбор форматов в системе довольно обширный. Скопировать или вставить данные в заданном формате можно с помощью команд, собранных в подменю Edit -> Copy As и Edit -> Paste As.

 

gl2-12.jpg

Изображение: 

gl2-13.jpg

Изображение: 

gl2-14.jpg

Изображение: 

gl2-15.jpg

Изображение: 

gl2-16.jpg

Изображение: 

gl2-17.jpg

Изображение: 

gl2-18.jpg

Изображение: 

8. Работа с ячейками

 

Работа с ячейками

Понятие о ячейках документов

Итак, ячейки (Cells) являются основными объектами документов. Ячейки отличаются друг от друга статусом, то есть совокупностью свойств, определяющих тип ячейки и ее поведение в различных ситуациях. Важными понятиями, относящимися к ячейкам и отражающими особенности работы систем символьной математики, являются понятия оценивания (evaluation) и модификации содержимого ячеек.

К примеру, ячейки, содержащие текстовые надписи-комментарии, не оцениваются и не меняются в ходе пересчета документа. Ячейки ввода, напротив, оцениваются, их содержимое меняется, и они порождают ячейки вывода с разным содержимым — например, ячейка, выражение которой содержит функцию f [х], будет меняться в соответствии с изменением f [ х ]. Ячейки могут быть заблокированными от модификации, разблокированными и т. д. Итак, статус ячеек постоянно проверяется с помощью операции оценивания в ходе пересчета документа.

Статус ячеек можно распознать и без пересчета документа по ряду характерных признаков. Один из них — вид курсора мыши при его размещении в области ячеек — был описан выше. Другой признак — малозаметный опознавательный знак в верхней части квадратной скобки, обрамляющей ячейку. Отсутствие знака означает, что это обычная ячейка ввода. Знак «-» (короткая горизонтальная черточка) отмечает ячейку вывода со статусом Inactive. Заблокированная (закрытая) ячейка {Locked) помечается знаком «х», а инициализационная ячейка (Initialization) — знаком «т». Кроме того, меняющие свое содержимое ячейки отмечаются маленьким треугольником. О типе ячейки можно также судить по ее стилю, в частности по шрифту используемых в ней символов.

Для получения информации о стиле ячейки нужно поместить в нее текстовый курсор. Текущий стиль будет показан в списке стилей, имеющемся на панели форматирования (команда вывода этой панели на экран, как уже говорилось; расположена в меню Format). Для смены стиля ячейки просто выберите нужный вариант в списке. Это можно сделать и с помощью команд меню Format | Style.

Меню Cell

В меню Cell (рис. 2.19) собраны команды для работы с ячейками. Как видно из рис. 2.19, это меню содержит следующие команды:

  • Convert To — преобразование формата ячеек;
  • Display As — установка формата отображения ячеек;
  • Default Input Format Type — установка формата по умолчанию для ячеек ввода;
  • Default Output Format Type — установка формата по умолчанию для ячеек вывода;
  • Default Inline Format Type — установка формата по умолчанию для ячеек Inline;
  • Cell Properties — установка свойств ячеек;
  • Cell Grouping — группировка ячеек;
  • Divide Cell (Shift+Ctrl+D) — разделение сгруппированных ячеек;
  • Merge Cells (Shift+Ctrl+M) — объединение ячеек;
  • Animate Selected Graphics (Ctrl+Y) — анимация выделенной ячейки с графиком;
  • Play Sound — воспроизведение синтезированного звука;
  • Rerender Graphics — построение графиков заново;
  • Rerender And Save Graphics — построение графиков заново с последующей записью;
  • Make Standard Size — установка стандартного размера ячейки;
  • Allign Selected Graphics — выравнивание выделенных графиков;
  • Cell Size Statistics — вывод статистики о размерах ячеек.

Далее эти команды описаны более подробно.

Рис. 2.19. Меню Cell

 

Манипуляции с ячейками

При вводе данных в ячейки ввода данные представляются в одном из форматов, заданных командой Default Input Format Type. Соответственно, в ячейках вывода результаты представляются в формате, установленном командой Default Output Format Type. Однако есть возможность изменить формат данных в ячейках с помощью команды преобразования форматов Convert To. Эта команда открывает подменю с перечнем всех возможных форматов (см. рис. 2.19). Текущий формат ячейки помечен галочкой. Для задания другого формата надо выбрать его в подменю, предварительно активизировав ячейку.

Как видно из рис. 2.19, возможна установка следующих форматов ячеек:

  • InputForm (Shift+Ctrl+I) — формат ввода; О OutputForm — формат вывода; . ..
  • StandardForm (Shift+Ctrl+N) — стандартный формат;
  • TradidonalForm (Shift+Ctrl+T) — традиционный формат;
  • PostScript — векторный графический формат PostScript;
  • Bitmap — растровый формат изображений;
  • Metafile — векторный графический формат Windows Metafile.

Из этих форматов (стоит их просмотреть, поскольку форматов множество) особо надо отметить стандартный формат, который позволяет отображать формулы в ячейках ввода в виде, наиболее приближенном к обычному, то есть с применением стандартных математических знаков для интегралов, сумм, произведений и т. д. Указанные форматы фигурируют и в других подменю меню Cell.

Подменю Cell Properties служит для установки свойств, то есть статуса ячеек. Это подменю содержит следующие команды:

  • Cell Open — делает ячейку открытой или закрытой;
  • Cell Editable — делает ячейку редактируемой или нередактируемой;
  • Cell Edit Duplicate — делает ячейку заново создаваемой при попытке редактирования;
  • Cell Evaluatable — делает ячейку оцениваемой или неоцениваемой;
  • Cell Active — делает ячейку активной или неактивной;
  • Initialization Cell — делает ячейку инициализационной или неинициализационной.

Установка свойств выделенной ячейки осуществляется выбором нужной команды в подменю Cell Properties. Одновременно может быть установлено несколько свойств. Для удаления свойства надо выбрать соответствующую команду еще раз.

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

Интересно отметить, что редактировать можно не только входные, но и выходные ячейки — например, вручную задавая более приемлемый вид результата. Однако для этого выходную ячейку надо сделать редактируемой, установив свойство Cell Editable. Редактируемая ячейка имеет символ «?» у своей обрамляющей скобки.

Ячейки могут быть оцениваемыми и исполняемыми или неоцениваемыми, что задается командой Cell Evaluatable. Только оцениваемые ячейки исполняются ядром системы и порождают выход. Неоцениваемые ячейки помечаются знаком «-» в обрамляющей их правой скобке.

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

Ячейки также могут быть активными и неактивными. Изменение активности достигается командой Сеll Active. Активная ячейка помечается в скобке знаком «А» и обычно управляется кнопкой.

Наконец, ячейки могут быть инициализационными и нет, в зависимости от установки свойства Initialization Cell. Инициализационная ячейка помечается в скобке знаком «|» и автоматически исполняется при загрузке документа, содержащего такую ячейку (или ряд ячеек).

Команда Group Cells используется для объединения ряда ячеек в одну группу. Вначале нужно выделить объединяемые ячейки (рис. 2.20), а затем использовать команду объединения.

Рис. 2.20. Выделение ячеек документа перед их объединением

При этом выбранные ячейки обрамляются общей для них длинной квадратной скобкой (рис. 2.21). Активизация этой скобки позволяет управлять просмотром ячеек.

Сделав двойной щелчок на группирующей скобке, можно получить скрытый блок ячеек, в качестве названия которого выступает первая ячейка (рис. 2.22). Таким образом можно поочередно то открывать, то закрывать блок ячеек. Заметим, что закрытые ячейки по-прежнему оцениваются в соответствии с их статусом (свойствами).

Рис. 2.21. Документ после объединения ячеек в группу

Рис. 2.22. Документ со скрытым блоком ячеек

Команда Ungroup Cells разъединяет объединенные в группу ячейки. Если при этом в группе есть ячейки, объединенные в более мелкие подгруппы, то они сохраняются. Для деления ячейки на части используется команда Divide Cell, а для объединения двух ячеек — команда Merge Cells.

Чтобы иметь возможность воспользоваться командами объединения и разъединения ячеек, необходимо предварительно выбрать в подменю Cell Grouping команду Manual Grouping. По умолчанию в этом подменю выбран режим Automatic Grouping, при котором Mathematica сама управляет группировкой ячеек, базируясь на их стилях.

Команда Open All Subgroups открывает все выделенные группы и подгруппы ячеек, а команда Close All Subgroups закрывает все выделенные группы и подгруппы.

Действие команды Open/Close Group уже описывалось — она сокращает число ячеек в группе так, что видимой остается только первая ячейка — как правило, имеющая титульную надпись.

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

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

Работа с графическими и звуковыми возможностями

Система Mathematica обладает превосходными графическими возможностями — от построения двумерных и трехмерных графиков до синтеза сложных изображений (например цветных карт) и динамически изменяющихся поверхностей. Эти возможности задаются встроенными в ядро графическими функциями и дополняются средствами пакетов расширения.

Например, графическая функция


Plot[f[х],{х,xmin,xmax}]

строит, график произвольной математической функции f [ х ] одной переменной х при ее изменении от минимального значения xmin до максимального хтах.

Другая графическая функция,


Plot3D[f[x,y] , { {х, xmin, хтах}, {у, ymin, углах} } ]

строит график трехмерной поверхности для математической функции f [х,у] двух переменных, изменяющихся в указанных пределах. Примеры применения этих функций приводились ранее.

Каждая графическая функция в ответ на обращение к ней возвращает графический объект — тот или иной рисунок. Именно поэтому в системе Mathematica для построения графиков используются функции, а не операторы, как в большинстве языков программирования. Это говорит о том, что понятие функции в данной системе существенно расширено.

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

В меню Cell можно найти ряд команд, относящихся только к ячейкам вывода с графическими и звуковыми объектами (см. рис. 2.19) — ранее, в версиях ниже Mathematica 3.0, они были расположены в меню Graph.

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

Рис. 2.23. Окно документа с проигрывателем анимационных рисунков

Демонстрация на уроках математики или физики демонстрационных анимационных картинок в среде Mathematica 3/4 производит не изгладимое впечатление. Однако при их описании в обычных книгах эффект от созерцания таких картинок исчезает, поскольку анимация при этом невозможна. Тем не менее, показ отдельных фаз анимации позволяет улучшить восприятие материала и в данном случае.

Мы рассмотрим эти команды более детально после описания графических и звуковых возможностей систем Mathematica.

Операции форматирования ячеек

Mathematica обладает обширными возможностями форматирования ячеек ввода и вывода. К этим возможностям относятся изменение размеров и цвета символов, выбор шрифтов, задание цвета фона и т. д.

Команды меню Format

Средства форматирования сосредоточены в меню Format (рис. 2.24).

Рис. 2.24. Меню Format и его подменю Style

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

Изменение стиля документов

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

На рис. 2.25 представлена серия ячеек ввода, отформатированная под все возможные стандартные стили. Стили существенно отличаются друг от друга, что позволяет легко распознавать их визуально. Самые распространенные из них — это текстовые ячейки разного стиля и ячейки ввода и вывода.

Рис. 2.25. Ячейки ввода, отформатированные разными стилями

Следующие две команды меню Format — это ScreenStyleEnvironment и PrintStyle-Environment Данные подменю служат для изменения текущего формата ячеек документа при его наблюдении на экране дисплея и при печати. Возможны следующие установки:

  • Working — рабочий стиль (типичный);
  • Presentation — презентационный (увеличенные размеры символов);
  • Condensed — сжатый (уменьшенный размер символов);
  • Ptintout — принтерный (оптимальный для печати).

Смысл глобальной замены стиля довольно очевиден. Можно порекомендовать читателю самостоятельно просмотреть различные документы после их форматирования тем или иным стилем.

Опции стилей и программ и их изменение

Команда-ShowExpression служит для управления показом выражений в стандартном и развернутом видах. Например, введем и исполним простое выражение при отключенном режиме ShowExpression:


2*Log[3]/Exp[5]

2Log[3]/Е5

Здесь вид ячеек стандартный. А теперь, выделив эти ячейки и исполнив команду ShowExpression (Shift+Ctrl+E), получим представление в развернутом формате:


Cell["2*Log[3]/Exp[5]", "Input",

CellLabel->"In[53]:="]

Cell[BoxData[

FractionBox[

RowBox["2", " ",

RowBox["Log", "[", "3", "]"]],

SuperscriptBox["E", "5"]]], "Output",

CellLabel->"Out[53]="]

Такой формат является внутренним в том смысле, что он характерен для внутреннего представления вывода на экран дисплея, принятого в языке программирования системы Mathematica. Словом, это типичная программа для вывода указанных выражений. Чем сложнее выражение, тем длиннее и непонятнее для непосвященных выглядит его развернутое представление во внутреннем формате.

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


Имя_0пции->3начение_0пции

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

Поспешим успокоить рядового пользователя системы Mathematica — опции задаются по умолчанию настолько удачно, что можно вообще не вспоминать о них, работая с системой без программирования. Тем не менее, система позволяет контролировать и изменять опции, используемые в программах. Для этого служит специальный инспектор опций, запускаемый командой меню Format -> Option Inspector (Shift+Ctrl+0). Эта команда выводит окно инспектора опций (рис. 2.26).

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

Рис. 2.26. Окно инспектора опций

Команда Remove Options убирает все опции, введенные пользователем, и восстанавливает исходное состояние системы — то, с которым и целесообразно работать в большинстве случаев.

Утонченное управление стилем документов

Целый ряд последующих команд служит для утонченного управления стилем документов:

  • Style Sheet — выбор готовых описаний стилей документа из обширного стандартного набора;
  • Edit Style Sheet — редактирование набора описаний стилей;
  • Font — установка типа шрифта;
  • Face — установка начертания символов (наклонное, полужирное, подчеркнутое);
  • Size — установка размера символов;
  • Text Color — установка цвета текста;
  • Background Color — установка цвета фона;
  • Chooze Font — вывод диалогового окна для задания сразу всех атрибутов шрифта;
  • Text Alignment — установка типа выравнивания текста (по правому краю, по левому краю, по центру);
  • TextJustification — установка выравнивания текста по ширине;
  • Word Wrapping — установка разбивки текста на строки;
  • Cell Dingbat — выбор маркеров ячеек из обширного списка (маркеры сохраняются при отключении номеров строк);
  • Horizontal Lines — установка типа горизонтальной линии сверху или снизу ячейки.

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

Управление элементами окна документа

В новых версиях Mathematica 3/4 управление окном документа также производится с помощью меню Format. Для этого имеются четыре команды:

  • Show Ruler — отображение мерной линейки;
  • Show ToolBar — вывод на экран панели инструментов;
  • Show Page Breaks — показ линий разрыва страниц;
  • Magnitification — установка (в процентах) масштаба отображения документа.

Все эти команды влияют на вид окна документа. На рис. 2.27 показан вид окна документа с мерной линейкой и панелью инструментов при задании масштаба отображения 200 % вместо обычных 100 %.

Рис. 2.27. Окно документа с линейкой и панелью инструментов при масштабе отображения 200 %

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

 

gl2-19.jpg

Изображение: 

gl2-20.jpg

Изображение: 

gl2-21.jpg

Изображение: 

gl2-22.jpg

Изображение: 

gl2-23.jpg

Изображение: 

gl2-24.jpg

Изображение: 

gl2-25.jpg

Изображение: 

gl2-26.jpg

Изображение: 

gl2-27.jpg

Изображение: 

9. Ввод элементов документов

 

Ввод элементов документов

Чтобы начать любые вычисления, нужно ввести по крайней мере исходные данные для вычислений и математические выражения, по которым выполняются вычисления. Иными словами, нужно освоить ввод элементов в создаваемые пользователем документы. Это и описывается в данном разделе.

Меню Input

Меню Input (рис. 2.28) содержит целый ряд описанных ниже команд ввода. Следует отметить, что для некоторых из этих команд более принятым является термин Insert (вставка).

Рис. 2.28. Меню Input и его подменю Create Button

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

Ввод координат двумерных графиков

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

Для получения координат нужно прежде всего выделить двумерный график. Затем следует нажать и удерживать клавишу Ctrl и поместить курсор мыши вблизи нужной точки графика. При этом в левой части строки состояния появятся координаты точки. Можно повторить определение координат для ряда точек. Затем следует воспользоваться командой Сору для переноса координат точек в буфер, а затем, исполнив команду Paste, можно перенести список с координатами точек в текущую строку ввода. Это удобно делать, используя команды контекстно-зависимого меню, вызываемого правой кнопкой мыши. К примеру, координаты трех точек графика в строке ввода могут выглядеть так:


{{3.04804, 0.0165875}, {-8.21841, 0.73632},

{9.39226, 0.0165875}}

Этот способ не очень удобен, но зато позволяет получать списки координат ряда точек графика.

Выбор точки обзора трехмерных графиков

Команда 3D View Point Selector (Shift+Ctrl+V) служит для вывода селектора точки обзора трехмерных графиков (рис. 2.29). Это следует делать при наличии в документе трехмерного графика.

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

  • Close Dialog — завершение диалога;
  • Cancel — прекращение работы;
  • Paste — перенос параметров точки обзора в окно документа;
  • Defaults - возврат к принятым по умолчанию значениям параметров вращения и перспективы;
  • Help — вызов справки.

Рис. 2.29. Трехмерный график (справа) и селектор точки обзора (слева)

Действие всех кнопок вполне очевидно. Поэтому остановимся на главном - нажатие кнопки Paste создает строку с опцией Viewpoint [ {х, у, z} ], которая вставляется в текущий документ в месте расположения текстового курсора В нашем случае текстовый курсор надо расположить в строке функции Show [gl g2 ] после запятой, установленной вслед за g2. Если теперь исполнить модифицированную функцию Show, то рисунок будет перестроен (рис. 2.30).

Подобное средство введено и в новую версию системы Mathematica 4 -оно реализуется пакетом расширения RealTime3D. Мы его уже рассматривали. Вращение SD-объектов мышью - очень удобное средство. Оно позволяет в считанные секунды найти наиболее удачное положение фигуры или ряда фигур в пространстве, при котором их особенности видны наиболее отчетливо.

Разумеется, такая процедура поворота фигуры в пространстве не очень удобна При очередном повороте надо будет отредактировать строку с функцией Show!

убрав из нее старую запись опции Viewpoint и вставив новую запись. Между тем, в ряде систем компьютерной математики (например в Maple V R5 и Mathcad 8) уже давно появилось новое мощное средство редактирования изображений ЗD-объектов — их вращение мышью в реальном масштабе времени.

Рис. 2.30. Пример разворота трехмерной фигуры

Изменение цветовой гаммы

Команда Color Selector выводит стандартное окно изменения цветовой гаммы, используемой при функциональной окраске графиков (рис. 2.31). Это типовое окно системы Windows 95/98. С его помощью можно создать дополнительные цвета и изменить гамму цветов линий рисунков и заливки.

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

Рис. 2.31. Окно селектора цветов

 

Звукозапись

Команда Record Sound выводит окно программы Звукозапись, входящей в состав операционной системы Windows 95/98 (рис. 2.32). Звукозапись — это специальное приложение, позволяющее записывать звуки с микрофона и воспроизводить их с помощью звуковой карты компьютера. Органы управления программы по виду подобны применяемым у обычных магнитофонов, а потому не нуждаются в подробном описании.

Рис. 2.32. Интерфейс программы Звукозапись

Особенности работы со звуком будут описаны в дальнейшем. Отметим лишь, что Mathematica имеет возможность работы как с математическим синтезом звуковых сигналов, так и с реальными звуковыми сигналами речи и музыки, записываемыми в виде файлов с расширением .wav. Для такой записи и служит команда Record Sound.

Не стоит забывать, что для реализации возможностей записи и воспроизведения звуков компьютер должен быть оснащен звуковой платой, звуковыми колонками или наушниками и микрофоном. Желательно, чтобы эти средства были отлажены в среде Windows 95/98 до их использования системой Mathematica.

Вставка имен файлов

Иногда возникает необходимость вставить в документ ссылку на имя файла, в котором хранятся какие-либо данные. Команда Get File Path предоставляет удобный способ вставить в документ имя файла вместе с полным путем к нему. При выборе команды открывается стандартное окно загрузки файлов. После выбора нужного файла и щелчка на кнопке Open полное имя файла будет вставлено в документ в месте расположения текстового курсора.

Ввод таблиц, матриц и палитр

Задание таблиц и матриц в системе Mathematica легко выполняется с помощью соответствующих функций. Однако команда Create Table/Matrix/Palette дает возможность сделать это и через главное меню. Она выводит окно задания таблиц, матриц и палитр, показанное на рис. 2.33 справа.

Рис. 2.33. Работа с окном Create Table/Matrix/Palette

Практика показывает, что таблицы и матрицы малых размеров проще вводить в виде списков в режиме ввода из командной строки. Только в том случае, когда вводимые элементы таблиц и матриц — громоздкие числа, их удобнее вводить с помощью окна Create Table/Matrix/Palette.

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

Ввод и редактирование кнопок

При создании сложных документов для диалогового режима работы с системой Mathematica иногда полезно создание кнопок. Оно выполняется командой Create Button. Она выводит подменю, содержащее небольшое число типов кнопок. Например, кнопка типа Evaluate Cell служит для создания ячейки, исполняющей вычисления. Она выглядит как прямоугольник:


2+3/4;

Обратите внимание на то, что записанное перед кнопкой выражение не вычисляется, поскольку строка завершается точкой с запятой. Если активизировать кнопку двойным щелчком, получим вместо кнопки знак «%» и выполнение вычислений:


%

11/4

Редактирование кнопок осуществляется по команде Edit Button. Она выводит окно редактирования кнопок, показанное на рис. 2.34. В этом окне содержатся перечень кнопок и окно с программой, создающей кнопку с нужными свойствами.

Рис. 2.34. Окно редактирования кнопок

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

Вставка гиперссылок

Гиперссылка является объектом класса ButtonBox (кнопка), связанным с некоторым другим объектом, представленным файлом — например, каким-либо документом или рисунком. При активизации гиперссылки загружается связанный с ней объект.

Гиперссылка создается следующим образом. В строке ввода готовится некоторый текст, например фраза: «Просмотр документа dl.nb». Какое-либо слово или вся фраза выделяются с помощью мыши, затем исполняется команда Create Hyperlink (Создать гиперссылку). Открывается окно, показанное на рис. 2.35 в правой части экрана.

Рис. 2.35. Создание гиперссылки

Следующий этап заключается в установке связи гиперссылки с нужным файлом. Его полное имя можно прямо указать в верхнем поле над кнопкой Browse. Однако чаще всего пользователь не помнит полного имени файла. Тогда он может воспользоваться кнопкой обзора файловой системы Browse, которая выводит стандартное окно поиска файлов, показанное на рис. 2.35 слева. В этом окне надо найти нужный файл (в нашем случае это файл документа dl.nb) и нажать кнопку Открыть. Имя файла появится в поле окна Create Hyperlink, теперь для создания гиперссылки достаточно нажать кнопку ОК.

Выделенное слово (фраза) превратится в кнопку, подчеркнутую снизу чертой. Это и есть гиперссылка. Активизация гиперссылки вызовет немедленное появление документа, представленного (в нашем примере) файлом dl.nb (рис. 2.36).

Рис. 2.36. Пример использования гиперссылки

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

Создание и ввод специальных объектов

Еще одна редко используемая возможность — создание объекта, которому присвоен номер. При этом номер генерируется автоматически. Для этого служит команда Create Automatic Numbering Object. Она открывает окно, показанное на рис. 2.37.

Рис. 2.37. Окно создания объекта с автоматической нумерацией

Как видно из рис. 2.37, окно содержит переключатель, выводящий обширный перечень возможных вариантов нумерованных объектов. В дальнейшем мы не будем пользоваться объектами данного типа, так что ограничимся приведенным выше описанием и предоставим читателю самому поэкспериментировать с такими объектами. Предоставим читателю самостоятельно разобраться и с еще одной редко используемой возможностью — вставкой объектов, отображающих значения опций системы Mathematica, с помощью команды Create Value Display Object. Эта команда также выводит окно для задания свойств таких объектов.

Вставки, связанные с ячейками

Для вставки содержимого предшествующих ячеек ввода и вывода служат команды Copy Input from Above и Copy Output from Above. Поясним это примерами. Введем в ячейку ввода выражение


1+2

Нажав клавиши Shift+Enter, получим строку вывода:


3

Теперь, исполнив команду Copy Input from Above, получим в новой строке ввода:


1+2

Исполнение этой ячейки даст такой же вывод:


3

То же самое, но в строке ввода, может быть получено с помощью команды Сору Output from Above:


3

Еще одна команда — Start New Cell Below — служит для вставки новых пустых ячеек ввода между уже имеющимися. Ячейка вставляется ниже положения текстового курсора, указывающего место вставки.

Вставка имен функций и списков их параметров

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

Первая из них работает, если вы ввели часть ключевого слова в строке ввода. Тогда исполнение команды Complete Selection (Ctrl+K) выводит список имен всех функций, которые начинаются с уже введенных символов. Рисунок 2.38 поясняет это на примере ввода слова «Plot».

Рис. 2.38. Пример исполнения команды Complete Selection

Следующая команда — Make Template — выдает список параметров функции, в имени которой установлен текстовый курсор. Например, если введено слово «Plot» и курсор стоит после него, то команда Make Template приведет к следующему изменению строки ввода:


Plot[f, {x, xmin, xmax}]

Теперь становится ясно, какие параметры имеет эта функция, и редактированием строки ввода можно ввести нужные конкретные значения этих параметров.

 

gl2-28.jpg

Изображение: 

gl2-29.jpg

Изображение: 

gl2-30.jpg

Изображение: 

gl2-31.jpg

Изображение: 

gl2-32.jpg

Изображение: 

gl2-33.jpg

Изображение: 

gl2-34.jpg

Изображение: 

gl2-35.jpg

Изображение: 

gl2-36.jpg

Изображение: 

gl2-37.jpg

Изображение: 

gl2-38.jpg

Изображение: 

10. Управление работой ядра

 

Управление работой ядра

 

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

Команды меню Kernel

Меню Kernel служит для управления действиями, проводимыми ядром системы над ячейками загруженного документа. Внешний вид меню Kernel и его подменю Evaluation показан на рис. 2.39.

Рассмотрим команды этого подменю более подробно.

Управление процессом вычислений

Основные команды управления процессом вычислений сосредоточены в подменю Evalution меню Kernel:

  • Evaluate Cells (Shift+Enter) — вычисление выделенных ячеек;
  • Evaluate in Place (Shift+Ctrl+Enter) — вычисление выделенного выражения «на месте»;
  • Evaluate Next Input (Shift+Enter на цифровом поле клавиатуры) — вычисление следующей строки ввода;
  • Evaluate in Subsession — вычисление выделенных ячеек в параллельном интерактивном сеансе работы с ядром;
  • Evaluate Notebook — вычисление всех ячеек документа;
  • Evaluate Initialization — вычисление инициализационных ячеек;
  • Enter Subsection — запуск диалогового сеанса работы с ядром;
  • Exit Subsection — завершение диалогового сеанса работы с ядром.

Рис. 2.39. Меню Kernel и его подменю Evaluation

Данная группа команд управляет вычислением ячеек. Перед вычислением каждая ячейка оценивается по своим признакам. Команда Evaluate Cells оценивает все выделенные ячейки, вызывает их вычисление и помещает результат вычисления каждой ячейки сразу после нее. Это одна из наиболее распространенных команд. Следует помнить, что, казалось бы, естественное нажатие клавиши Enter вызывает лишь переход на новую строку, а не вычисление выделенных ячеек ввода. При управлении с клавиатуры вычисление выделенных ячеек происходит при одновременном нажатии клавиш Shift и Enter.

Особое внимание надо обратить на команду Evaluate in Place. Допустим, вы ввели в ячейку ввода, выражение


(2+3)/7

Выделите мышью выражение (2+3). Теперь, исполнив команду Evaluate in Place нажатием клавиш Ctrl+Shift+Enter, мы получим в строке ввода следующее:


5/7

Таким образом, выражение (2 + 3) было вычислено прямо в строке ввода, и на его месте появился результат — 5. Если теперь исполнить команду Evaluate Cells, то появится строка вывода с результатом:


5/7

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

Команда Evaluate Next Input позволяет последовательно вычислить ряд ячеек, расположенных под выделенной ячейкой. Если текстовый курсор находится в ячейке ввода, данная команда вычисляет эту ячейку. В противном случае она перемещает выделение на следующую ячейку. Последующее использование команды ведет к исполнению этой ячейки, затем к выделению следующей ячейки, ее вычислению и т. д. Таким образом, можно последовательно вызывать вычисление ячеек документа, используя эту команду дважды для каждой ячейки.

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

Команда Evaluate Initialization вычисляет все ячейки, помеченные как инициали-зационные, то есть имеющие символ «т» над квадратной скобкой, обрамляющей ячейку. О задании такого признака говорилось ранее в разделе «Манипуляции с ячейками». Ячейки с указанным признаком выполняются этой командой без их выделения.

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

  • Interrupt (Alt+,) — прерывание вычислений;
  • Abort (Alt+.) — полное прекращение вычислений.

Их действие вполне очевидно. Команда Interrupt служит для прерывания текущих вычислений. Эта команда при исполнении задает запрос о том, каким образом вы хотите прервать вычисления и сколько шагов вычислений надо еще сделать. Разумеется, можно и отменить прерывание. Команда Abort вызывает полное прекращение вычислений, так что их можно возобновить лишь с самого начала. Вместо результата выдается сообщение $Abort.

Полезно запомнить клавиатурные комбинации для этих команд, поскольку «зависание» системы из-за чрезмерно большого времени исполнения неудачного алгоритма (например, глубокой рекурсии) не редкость. Кстати, в процессе таких вычислений команды прерывания доступны и из меню.

Используйте команды Interrupt и Abort, если вы загнали систему в режим «вечных вычислений» — зацикливание. Это позволит вам благополучно выйти из этого режима, сохранив текущие данные и текущую программу (документ). Иные способы прерывания вычислений чреваты потерей текущих данных и документа.

Выбор ядра системы

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

  • Start Kernel — запуск выбранного ядра;
  • Quit Kernel — завершение работы выбранного ядра;
  • Default Kernel — выбор ядра, используемого по умолчанию;
  • Notebook's Kernel — выбор ядра для данного документа;
  • Kernel Configuration Options — выводит окно установки свойств ядер.

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

Управление показом номеров ячеек

Номера строк ввода и вывода — причуда системы, унаследованная от старого доброго Бейсика. В принципе, нумерация строк при культурном программировании в системе Mathematica не нужна и даже вредна. В частности, нумерация не является строго последовательной и нарушается при изменении ячеек ввода в начале документа и повторном их вычислении после редактирования. К тому же в общем случае она меняется после записи и повторной загрузки документа.

Поэтому предусмотрена команда-переключатель Show In/Out Names. Она управляет показом или скрытием номеров строк. Если напротив этой команды в меню стоит галочка, то номера строк будут показаны в виде In [n] и Out [n]. При отсутствии галочки номера строк и слова In и Out не отображаются.

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

Удаление всех ячеек вывода

Иногда желательно удалить все ячейки вывода, например для того, чтобы при объединении в группы они не превратились в элементы ячеек ввода. Для удаления всех ячеек вывода служит команда Delete All Output. Выбор этой команды приводит к удалению из текущего документа всех ячеек вывода.

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

 

gl2-39.jpg

Изображение: 

11. Операции поиска и замены

 

Операции поиска и замены

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

Меню Find

Меню Find содержит команды поиска и замены фрагментов текстов и выражений (рис. 2.40).

Эти операции характерны для любого текстового процессора, например Microsoft Word 95/97, и знакомы даже начинающим пользователям. Поэтому ограничимся их кратким описанием.

Рис. 2.40. Меню Find

 

Команды поиска и замены

Первая группа команд меню Find реализует типичные операции поиска и замены:

  • Find (Ctrl+F) — поиск заданных строк вперед и назад (но без замены);
  • Enter Selection (Ctrl+E) — ввод выделенной строки в окно поиска;
  • Find Next (F3) — поиск по документу вперед;
  • Find Previous (Shift+F3) — поиск по документу назад;
  • Find in Cell Tags — поиск ячейки с заданной этикеткой (tag);
  • Replace (Ctrl+R) — замена одной строки на заданную другую;
  • Replace and Find Again (Shift+Ctrl+R) — выполнение замены с продолжением поиска;
  • Replace All — выполнение замены по всему документу.

Эти операции выполняются с помощью окна поиска и замены, показанного на рис. 2.41. Оно имеет поля для задания искомой строки и строки замены.

Рис. 2.41. Пример поиска подстроки «4х» и ее замены на подстроку «6х»

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

Обнаружение и открытие выделенных строк

Следующие три команды меню Find служат для работы с выделенными строками:

  • Open Selected — открытие групп, содержащих выделенные строки;
  • Scroll to Selection — прокрутка документа до выделенной строки;
  • Go Back — возврат назад после использования гиперссылки.

Их действие также очевидно.

Работа с этикетками

Особым признаком ячеек ввода могут быть их этикетки (tags) — короткие сообщения, характеризующие суть выполняемых ячейками действий и размещаемые сверху строки ввода. Этикетки вводятся для того, чтобы можно было одним разом вызвать на просмотр те ячейки, которые объединены какими-либо общими свойствами.

Признаком наличия у данного документа этикеток является их список, который появляется в подменю Cell Tags (Ячейки с этикетками) меню Find. Например, документ, представленный на рис. 2.42, имеет целый набор этикеток.

Рис. 2.42. Выбор этикетки

Если выбрать имя этикетки (например Euler), будут выделены все ячейки, помеченные данной этикеткой.

Команда Add/Remove Cell Tags (Ctrl+J) позволяет вставить этикетку в строку ввода, в которой ее нет, или удалить этикетку из строки, где она есть. Эта команда вызывает появление окна редактирования этикеток, показанного на рис. 2.43. Работа с этим окном вполне очевидна — кнопка Add добавляет этикетку, а кнопка Remove удаляет ее. Команда Cell Tags from In/Out Names позволяет создать для текущей ячейки этикетку на основе номера ячейки.

Последняя команда меню Find — Make Index — помещает в буфер все этикетки текущего документа. Перед этим она выводит окно, в котором можно указать признаки этикеток. Нажатие кнопки ОК помещает список этикеток в буфер, откуда его можно извлечь с помощью команды Paste. Рисунок 2.44 показывает окно команды Make Index и созданный список этикеток под ним.

Рис. 2.43. Окно редактирования этикеток

Рис. 2.44. Окно подготовки списка этикеток и результат вставки списка этикеток из буфера

 

gl2-40.jpg

Изображение: 

gl2-41.jpg

Изображение: 

gl2-42.jpg

Изображение: 

gl2-43.jpg

Изображение: 

gl2-44.jpg

Изображение: 

12. Работа с окнами и справкой

 

Работа с окнами и справкой

Как и большинство приложений Windows, Mathematica 3/4 является многооконной системой. Поэтому важно с самого начала работы с ней научиться управлять окнами системы. Система может работать с многими окнами документов, окнами интерфейса и справочной системы. Как это делается, описано в этом небольшом разделе.

Управление показом окон

Система Mathematica многооконная и может работать сразу с несколькими документами. По мере загрузки файлов их список появляется в нижней части меню Window (Окно). Само меню содержит следующие команды для работы с окнами:

  • Stack Windows — каскадное расположение окон;
  • Tile Windows Wide — расположение мозаикой по высоте;
  • The Windows Tall — расположение мозаикой по ширине;
  • Messages — управление выводом окна сообщений об ошибках.

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

Управление расположением окон

Если выбрать команду Stack Windows, то окна будут расположены каскадом (рис. 2.45).

Рис. 2.45. Каскадное расположение окон документов

При каскадном расположении окон на переднем плане находится окно с текущим документом. Оно заслоняет другие окна, но так, что остаются видны их строки заголовка.

Заметим, что, как принято в операционной системе Windows 95/98, положением и размерами окон легко управлять, используя кнопки в строке заголовка окна.

Две другие команды — Tile Windows Wide и Tile Windows Tall — обеспечивают расположение окон мозаикой. Рисунок 2.46 показывает расположение окон мозаикой по высоте после исполнения команды Tile Windows Wide.

Рис. 2.46. Расположение окон после исполнения команды Tile Windows Wide

Ha рис. 2.47 показано расположение тех же окон после исполнения команды Tile Windows Tall.

Как видно из сравнения, рис. 2.46 и 2.47 различаются способом деления окон — по ширине или по высоте. Естественно, сохраняются все описанные выше возможности управления окнами — их расширения на весь экран, изменения размеров и местоположения.

Каждое окно можно минимизировать с помощью команды Свернуть (Minimize) системного меню окна или левой кнопки строки заголовка окна.

Рис. 2.47. Расположение окон после исполнения команды Tile Windows Tall

 

Справочная база данных

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

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

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

В то же время, если вы уже сидите за компьютером, то пользоваться книгами не очень удобно. Куда проще тут же найти нужные сведения во встроенной в Mathematica справочной системе. К тому же, в отличие от книг, она содержит «живые» примеры, которые можно быстро приспособить к своим нуждам.

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

Открытие справочной базы данных

Справочная база данных управляется командами, расположенными в меню Help (Справка).

Справочная система Mathematica, начиная с версии 3, переработана кардинально и построена в виде броузера справки. Его можно вызвать с помощью команды Help Browser (Shift+Fl). Почти аналогично действует команда Find Selection Function (F1), которая служит для поиска заданной функции.

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

Рис. 2.48. Окно броузера справочной системы

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

  • Built-in Functions — встроенные функции;
  • Add-ons — пакеты расширений;
  • The Mathematica Book — электронная версия книги «The Mathematica Book», написанной разработчиком системы Стивеном Вольфрамом;
  • Getting Started/Demos — руководство для начинающих и примеры;
  • Other Information — другая информация;
  • Master Index — справка по индексу (алфавитный указатель).

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

Рис. 2.49. Пример замены примера в ячейке 1п[1] и его вычисления

 

Работа с примерами

Практически по каждой функции приведен ряд примеров, которые открываются при активизации гиперссылки в виде треугольника с надписью Further Examples (вначале примеры скрыты). Примеры являются «живыми» в том смысле, что, не выходя из справочной системы, можно перенабрать содержимое любой ячейки ввода и тут же, вычислив ячейку, получить новый результат. К примеру, на рис. 2.49 показано, как список синусов, заданный ранее (см. рис. 2.48) строкой ввода In , заменен на построение графика функции Sin [х] (а строка ввода получила номер In ).

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

Работа с электронным учебником

Для демонстрации возможностей системы служит электронный учебник Getting Started/Demos. На рис. 2.50 показан пример работы с ним — иллюстрируется построение документов в формате Notebook.

Электронный учебник содержит множество полезных применений системы Mathematica 4. Однако в целом он рассчитан на начальный уровень знакомства с системой. Учебник представляет материал по контексту.

Рис. 2.50. Пример работы с электронным учебником

 

Справка по пакетам расширения

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

Доступ к ним возможен объявлением соответствующего пакета. На рис. 2.51 показан раздел справки по применению одного из таких пакетов для прямого и обратного преобразований Фурье.

Рис. 2.51. Пример справки по преобразованию Фурье

Доступ к справке по пакетам расширения обеспечивается разделом Add-ons справочной системы. Фактически, справка повторяет материал книги от соответствующей версии системы [31,32].

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

Работа с электронной книгой

Раздел справки The Mathematica Book — это электронный вариант книги Стивена Вольфрама по соответствующей версии системы. Рисунок 2.52 иллюстрирует работу с электронной книгой — открыт раздел со списком ряда определенных интегралов (видно лишь начало списка).

Рис. 2.52. Раздел электронной книги со списком определенных интегралов

С первого взгляда трудно уловить отличие электронной книги «The Mathematica Book» («Математическая книга») от справки по пакетам расширения системы. Однако эти различия есть и заключаются в следующем:

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

Галерея формул (Formula Gallery), показанная на рис. 2.52, представляет собой весьма полное собрание математических формул. Любую формулу можно выделить и поместить в буфер обмена для использования в документах. Таким образом, электронная книга в состоянии заменить обычный математический справочник. Приходится еще раз сожалеть, что как и вся справочная база данных, электронная книга написана на английском языке.

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

Электронная книга системы Mathematica являет собой наглядный пример развития электронных книг. Они характеризуются рядом новых качеств:

  • красотой и наглядностью оформления;
  • простотой поиска нужных сведений;
  • возможностью применения действующих примеров;
  • использованием гипертекстовых ссылок;
  • применением наглядных средств анимации изображений;
  • объединением с другими программными средствами;
  • легкостью модификации.

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

Просмотр другой информации

Раздел Other Information (Другая информация) посвящен различным сведениям об интерфейсе системы Mathematica и данным по связи с ее разработчиком — фирмой Wolfram Research. На рис. 2.53 показана одна из страниц этого раздела, посвященная правилам ввода показателей степени.

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

Работа с алфавитным указателем

Последний раздел справочной системы — алфавитный (или индексный) указатель Master Index. Если вы знаете, какую команду или функцию ищете, то достаточно указать ее в поле у кнопки Go То (Перейти к...) и нажать эту кнопку. Можно также воспользоваться системой поиска по начальным буквам искомого слова (рис. 2.54).

Риc. 2.53. Одна из страниц раздела Other Information справочной системы

Рис. 2.54. Пример работы с алфавитным указателем

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

Другие команды меню Help

Помимо упомянутых команд меню Help имеет команды, повторяющие разделы справочной системы, и еще ряд команд:

  • Why the Beep? — информация о причинах выдачи звукового сигнала;
  • Registration — вывод формы регистрации (для легальных пользователей);
  • About Mathematica — вывод окна с краткими сведениями о системе и фирме Wolfram (рис. 2.55);
  • Rebuild Help Index — создание индексного указателя (обычно требуется сразу после первого запуска системы).

Рис. 2.55. Окно с данными о системе Mathematica 4

Справочная система Mathematica 3/4 во многим дублирует обычную документацию по системам в виде обычных книг. Как показывает практика, оба вида документации (электронная в виде справки и обычная) прекрасно уживаются друг с другом и занимают разные ниши. Так, электронной справкой можно пользоваться только сидя за компьютером. Обычные книги позволяют полнее охватить информацию и найти нужные сведения. Однако фирменные книги и электронная справка подготовлены на английском языке и не могут заменить обычные книги, особенно для русскоязычных пользователей.

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

 

gl2-45.jpg

Изображение: 

gl2-46.jpg

Изображение: 

gl2-47.jpg

Изображение: 

gl2-48.jpg

Изображение: 

gl2-49.jpg

Изображение: 

gl2-50.jpg

Изображение: 

gl2-51.jpg

Изображение: 

gl2-52.jpg

Изображение: 

gl2-53.jpg

Изображение: 

gl2-54.jpg

Изображение: 

gl2-55.jpg

Изображение: 

13. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Пользоваться строкой меню.
  • Управлять окном редактирования документов.
  • Работать с файлами.
  • Создавать простые документы и осуществлять их редактирование.
  • Работать с ячейками и форматировать их содержимое.
  • Вставлять в ячейки различные объекты системы Mathematica.
  • Управлять вычислением ячеек.
  • Производить поиск и замену текста в документе.
  • Управлять расположением окон.
  • Пользоваться справочной системой.

 

Урок 3. Типы данных

Урок 3. Типы данных

1. Типы данных

 

Типы данных

  • Основные классы данных
  • Выражения
  • Списки и массивы
  • Объекты и идентификаторы
  • Функции, опции, атрибуты и директивы
  • Подстановки
  • Функции линейной алгебры

С этого урока начинается серьезное освоение математических возможностей систем Mathematica 3 и 4. Мы изучим основные типы данных, операторов, функций и объектов, с которыми может работать система Mathematica 3/4, а попутно познакомимся и с некоторыми простыми операциями ввода данных и их обработки.

 

2. Основные классы данных

 

Основные классы данных

 

Mathematica оперирует с тремя основными классами данных:

  • численными данными, представляющими числа различного вида;
  • символьными данными, представляющими символы, тексты и математические выражения (формулы);
  • списками — данными в виде множества однотипных или разнотипных данных.

Каждый из этих классов данных в свою очередь имеет ряд специальных, более частных типов данных. На них мы остановимся более подробно.

Численные данные

Двоичные числа, биты и байты

Минимальной единицей информации в компьютерной технике является двоичная единица — бит. Она имеет представление в виде 0 или 1, удобное для реализации простейшими электронными схемами с двумя состояниями электрического равновесия (например, триггерами или иными ячейками памяти). Многоразрядные двоичные числа представляют собой набор цифр 0 и 1, например, 100110 или 111001. Каждый старший разряд относительно предыдущего имеет весовой коэффициент, равный 2.

Именно с битами работает микропроцессор на нижнем уровне операций. Однако бит — слишком мелкая единица, не очень удобная в обращении. К тому же мы привыкли к куда более удобным и наглядным для нас элементам информации, таким как буквы, цифры, знаки арифметических операций, спецзнаки и символы псевдографики. В принципе, набор этих знаков, минимально необходимый для представления обычной текстовой и цифровой информации, содержит до 2 8 = 256 элементов. Каждый из них в компьютере представляется кодом от 0 до 255. Для задания таких кодов достаточно 8 бит (2^8=256), которые и образуют наиболее распространенную единицу представления информации — байт. 1024 байта образуют килобайт (Кбайт), 1024 Кбайт дают 1 Мбайт (мегабайт) и т. д.

Широко применяется общеизвестный стандарт кодирования текстовой информации ASCII (American Standard Code for Information Interchange).

Десятичные числа

К наиболее известным типам данных в математике относятся привычные нам десятичные числа (DECIMAL). Каждый разряд таких чисел имеет представление, заданное одной из арабских цифр — 0, 1, 2,..., 9. Весовой коэффициент старшего разряда относительно предшествующего равен 10. Количество цифр, представляющих число, может быть, в принципе, любым. Десятичные числа относятся к следующим основным типам.


Обозначение

Тип чисел

Примеры задания

Integer

Целочисленные

123

-345

Rational

Рациональные

123/567

-23/67

Real

Вещественные

123.

-123.45610 ^ 6

Complex

Комплексные

-3.5 + 0.

56 I

Десятичные числа наиболее распространены в научно-технических расчетах.

Целые числа

Целочисленные данные (Integer) — это целые числа, например 1, 2 или 123, которые представляются системой без погрешности и ограничения разрядности. Более того, арифметические операции над целыми числами система выполняет также без погрешностей и без ограничения числа цифр (рис. 3.1).

Рис. 3.1. Операции с целыми числами

Количество цифр, представляющих большое целое число, ограничено лишь его значением, но не какими-либо фиксированными форматами. Рациональные данные задаются отношением целых чисел, например 123/567, и также представляют результат точно. Поэтому система при символьных и численных расчетах всегда старается выдать результат в виде целых или рациональных чисел, там где это возможно:


1000000/3000000

1/3

(124-1)/(455+1)

41/152

Фактически целые числа произвольной разрядности в системах символьной математики представляются списками отдельных цифр. Особая организация списков повышает компактность представления больших целых чисел. Характерным примером работы с целыми числами большой разрядности является вычисление факториала n!=1*2*3*. . . *n. Примеры его вычисления уже приводились (см. рис. 1.16).

Числа с произвольным основанием

Для вычисления чисел с произвольным основанием используется конструкция


Основание^^Число

Число должно быть записано по правилам записи чисел с соответствующим основанием. Если основание больше 10, для обозначения значений чисел используются буквы от а до z. Наиболее известными из чисел с основанием системы счисления, превышающим 10, являются шестнадцатеричные числа (HEX — от слова hexagonal). Разряды таких чисел могут иметь следующие значения:


HEX 0123456789abCdef

DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

Примеры задания шестнадцатеричного и двоичного чисел:


16^^123abcde

305839326

2^^1010111

87

Для представления чисел с произвольным основанием n (до 32) используется функция BaseForm[expr, n], которая возвращает выражение ехрг в форме числа с основанием n, которое указывается как подстрочный индекс.

Примеры использования функции BaseForm:


BaseForm[87,2]

10101112

BaseForm[305839326,16]

123abcde16

В дальнейшем мы будем использовать только десятичные числа.

Вещественные числа

Численные данные могут быть представлены также десятичными вещественными числами, которые могут иметь различную форму, например 123.456, 1.23456 10^2,12345.6 10^-2 и т. д. В общем случае они содержат мантиссу с целой и дробной частями и порядок, вводимый как степень числа 10. Как правило, вещественные числа в системах символьной математики могут иметь мантиссу с любым, но конечным числом знаков. Пробел между мантиссой и порядком эквивалентен знаку умножения *:


23.456*10^100

2.345бх10^101

10^-100

1/

100000000000000000000000000000

0000000000000000000000000000

0000000000000000000000000000000000000000000

10.^-100

1.x 10^-100

Как принято в большинстве языков программирования, целая часть мантиссы отделяется от дробной части точкой, а не запятой.

Mathematica производит операции с числами изначально как с целыми. Однако установка значка разделительной точки означает, что число должно рассматриваться как вещественное. Например, 1 — целое число, но 1. — уже вещественное число. Для представления выражения ехрг в форме вещественного числа используется функция N [ехрг] или N [ехрг, число_цифр_результата].

Примеры:


1/3

1/3

1./3 .

0.333333

N[1/3]

0.333333

N[2*Pi,50]

6.283185307179586476925286766559005768394338

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

Mathematica имеет две системные переменные, позволяющие вывести максимально и минимально возможные значения чисел, с которыми оперирует система:


$MaxMachineNumber

1.79769х10^308

$MinMachineNumber

2.22507х 10^-308

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

Функции IntegerPart [x] и FractionalPart [x] обеспечивают возврат целой и дробной частей вещественного числа х:


N[Pi]

3.14159

IntegerPart[Pi]

3

FractionalPart[Pi]

-3.+ Л

N[FractionalPart[Pi]]

0.141593

Еще одна функция RealDigits [x] возвращает список реальных цифр результата и число цифр целой части х:


RealDigits[N[2*Pi]]

{{6, 2, 8, 3, 1, 8, 5, 3, 0, 7, 1, 7, 9, 5, 8, 6}, 1}

Есть и множество других функций для работы с вещественными числами. Они будут рассмотрены в дальнейшем. В Mathematica 4 функция RealDigits имеет расширенные формы, например RealDigits [x, b, len, n]. Для получения цифр мантиссы введены функции MantissaExponent [x] и MantissaExpo-nent[x,b].

Комплексные числа

Многие математические операции базируются на понятии комплексных чисел. Они задаются в форме


z=Re(z)+I*Im(z)

или


z=Re(z)+i Im (z)

где знак I (i) — мнимая единица (квадратный корень из -1), Re (z) — действительная часть комплексного числа, a Im (z) — мнимая часть комплексного числа. Пример задания комплексного числа:


2 + I3

или


2 + 3*I

Мнимая часть задается умножением ее значения на символ мнимой единицы I. При этом знак умножения * можно указывать явно или заменить его пробелом — в последнем случае комплексное число выглядит более естественным. Функции Re [ z ] и Im [ z ] выделяют, соответственно, действительную и мнимую части комплексного числа z. Это иллюстрируют следующие примеры:


Re[3+2*1]

3

Im[3+2 I]

2

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

Символьные данные и строки

Символьные данные в общем случае могут быть отдельными символами (например a, b,..., z), строками (strings) и математическими выражениями ехрг (от expression — выражение), представленными в символьном виде.

Символьные строки задаются цепочкой символов в кавычках, например "sssss". В них используются следующие управляющие символы для строчных объектов:

  • \n— новая строка (line feed);
  • \ t — табуляция.

Это иллюстрируется следующими примерами:


"Hello my friend!"

Hello my friend!

"Hello\nmy\nfriend!"

Hello

my

friend!

"Hello\tmy\tfriend!"

Hello my friend;

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

Выражения

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


Запись на языке Mathematica

Обычная математическая запись

2*Sin[x]

2*sin(x)

2 Sin[x]

2*sin(x)

(а +b^2 + с^З) / (3*d - 4*e)

(a + b 2 3 )/(3d-4е)

sqrt(2)

Кореннь из 2

Integrate [Sin [x] , х]

Интеграл sin(x) dx

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

  • знак умножения может быть заменен пробелом;
  • встроенные функции начинаются с большой буквы и обычно повторяют свое общепринятое математическое обозначение (за исключением тех, в названии которых есть греческие буквы — они воспроизводятся латинскими буквами по звучанию соответствующих греческих букв);
  • круглые скобки () используются для выделения частей выражений и задания последовательности их вычисления;
  • параметры функций задаются в квадратных скобках [ ];
  • фигурные скобки {} используются при задании списков.

Новые системы Mathematica 3/4 обладают обширными возможностями по заданию форматов записи математических выражений при их выводе на экран или принтер, а также при вводе с клавиатуры. Они будут рассмотрены в дальнейшем.

Списки и массивы

Наиболее общим видом сложных данных в системе являются списки (lists). Списки представляют собой совокупности однотипных или разнотипных данных, сгруппированных с помощью фигурных скобок:

  • { 1 , 2 , 3 } — список из трех целых чисел;
  • { а , b , с } — список из трех символьных данных;
  • {1, а, x^ 2} — список из разнотипных данных;
  • {{a,b},{c,d}} — список, эквивалентный матрице

    a     b

    c     d

  • {х^2+у^2, 2*Sin [x] } — список из двух математических выражений.

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

Объекты и идентификаторы

В общем случае система Mathematica оперирует с объектами. Под ними подразумеваются математические выражения (ехрг), символы (symbols), строки из символов (strings), упомянутые выше числа различного типа, константы, переменные, графические и звуковые объекты и т. д.

Каждый объект характеризуется своим именем — идентификатором. Это имя должно быть уникальным, то есть единственным. Существуют следующие правила задания имен:

  • sssss — имя объекта, заданного пользователем;
  • Sssss — имя объекта, входящего в ядро системы;
  • $Sssss — имя системного объекта.

Итак, все объекты (например функции), включенные в ядро, имеют имена (идентификаторы), начинающиеся с большой буквы (например Plus, Sin или Cos). Идентификаторы относящихся к системе объектов начинаются со знака $. Заданные пользователем объекты следует именовать строчными (малыми) буквами. Разумеется, под символами s...s подразумеваются любые буквы и цифры (но не специальные символы, такие как +, -, * и т. д.).

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

Функции, опции, атрибуты и директивы

К важному типу объектов принадлежат функции — объекты, имеющие имя и список параметров, возвращающие некоторое значение в ответ на обращение к ним по имени с указанием списка конкретных (фактических) значений параметров. В системах Mathematica 2/3/4 встроенные функции задаются в виде


И дентификатор_Функции [ol, о2, o3, ...]

где ol, о2, оЗ... — объекты (параметры, опции, математические выражения и т. д.). Список входных параметров задается необычно — в квадратных скобках. В числе входных параметров могут быть специальные объекты — опции. Они задаются в виде


Имя_опции->3начение_опции

Значением опции обычно является то или иное слово. Например, в функции построения графиков


Plot [sin[x] , {x, 0,20} ,Axes->None]

опция Axes->None указывает на то, что отменяется вывод координатных осей (Axes). Функция Options [name] выводит для функции с идентификатором name список всех возможных для нее опций. Некоторые функции, например Sin, могут вообще не иметь опций, другие, такие как Solve, могут иметь целый «букет» опций:


Options [Sin]

Options [Solve]

{InverseFunctions -> Automatic, MakeRules -> False,

Method -> 3, Mode -> Generic, Sort -> True,

VerifySolutions -> Automatic, WorkingPrecision -> 00}

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

Каждый объект может характеризоваться некоторой совокупностью своих свойств и признаков, называемых атрибутами. Функция Attributes [name] возвращает список всех атрибутов функции с именем name, например:


Attributes [Sin]

{bistable, NumericFunction, Protected}

Attributes [Solve]

{Protected}

Как видите, для функции синуса характерны три атрибута:

  • bistable — указывает на применимость в списках и таблицах;
  • NumericFunction — указывает на отношение к числовым функциям;
  • Protected — указывает на то, что слово Sin защищено от какой-либо модификации.

Кроме того, в Mathematica 2/3/4 имеется понятие функций-директив. Эти функции не возвращают значений, а указывают, как в дальнейшем будут выполняться функции, работа которых зависит от директив. Синтаксис функций-директив тот же, что и у обычных функций.

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

Константы

Константы являются типовыми объектами системы, несущими заранее предопределенное численное или символьное значение. Это значение не должно меняться по ходу вычисления документа. К численным константам относятся любые числа, непосредственно используемые в математических выражениях или программных объектах, например процедурах и функциях. Так, числа 1 и 2 в выражении 2*Sin [ 1 ] являются численными константами. Константы-числа не имеют идентификаторов. Идентификатором, в сущности, является само число. Его представление и хранится в памяти.

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

Используются следующие встроенные именованные константы:

  • Complexlnf inity — комплексная бесконечность, которая представляет величину с бесконечным модулем и неопределенной комплексной фазой.
  • Degree — число радиан в одном градусе, которое имеет числовое значение Pi/180.
  • Е- основание натурального логарифма с приближенным числовым значением 2 . 71828....
  • EulerGamma — постоянная Эйлера с числовым значением 0.577216....
  • GoldenRatio — константа со значением (l+Sqrt[5] ) /2, определяющая деление отрезка по правилу золотого сечения.
  • I — представляет мнимую единицу Sqrt [-1].
  • Infinity — «положительная» бесконечность (со знаком «минус» дает «отрицательную» бесконечность).
  • Catalan — константа Каталана 0 . 915966....
  • Pi — число, имеющее значение 3 .14159... и равное отношению длины окружности к ее диаметру.

Константы, имеющие значение, дают его в виде вещественного числа:


{N [Degree], N[E], N[Pi]}

{0.0174533, 2.71828, 3.14159}

{N[EulerGamma],N[GoldenRatio],N[Catalan]}

{0.577216, 1.61803, 0.915966}

Константы в описываемой системе используются вполне естественно, так что от дальнейшего их описания можно воздержаться.

Размерные величины

Mathematica позволяет оперировать с размерными величинами, которые широко используются в физических и химических расчетах. Размерные величины характеризуются не только численными значениями, но и единицами измерения, например Meter (метр), Second (секунда) и т. д. Последние могут стоять в числителе и в знаменателе выражений, представляющих размерные величины:


1 Meter

Meter

5Meter

5 Meter

0.5Second

0.5Second

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

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

Для ввода констант достаточно активизировать соответствующую кнопку с нужной константой. Будут введено выражение, задающее константу. Ниже представлены примеры ввода первой и последней констант, содержащихся в палитре, представленных в стандартной форме:


2.99792458000000028'*^8 Meter/ Second

2.99792х108 Meter/ Second

6. 9599 x 108 Meter

6.9599xl08 Meter

Следует отметить, что без острой необходимости применять размерные величины не следует, поскольку они усложняют математические выражения и зачастую не позволяют выполнять с ними символьные преобразования. Рекомендуется нормировать выражения (формулы) так, чтобы результаты их вычисления имели безразмерный вид.


Рис. 3.2. Дополнительная палитра физических констант

 

Переменные

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

Имена переменных называют их идентификаторами. Они должны быть уникальными, то есть не совпадать с именами директив, атрибутов, опций и функций в ядре системы. Имена переменных должны начинаться с буквы. Общеприняты, скажем, имена х и у для функциональной зависимости у (х) или представления графиков, f — для функций. Желательно назначать именам переменных смысловые значения, например xcoordinaate или ycoordinate для координат точки. Все сказанное об идентификаторах объектов справедливо и для идентификаторов переменных, поскольку переменные — распространенные виды объектов.

Особенности применения переменных

В отличие от переменных в математике, каждая переменная в системе Mathematica, как и в любой системе программирования, всегда отождествляется с некоторой физической областью памяти, в которой и хранится значение переменной. Для уменьшения объема памяти применяются различные способы компактного размещения информации. Надо помнить, что и имя переменной занимает определенную область памяти. Распределение памяти под переменные — динамическое. Это означает, что местоположение ячеек памяти и объем памяти под ту или иную переменную не фиксированы, а меняются в ходе выполнения задачи.

Заранее объявлять тип переменной не требуется. Он определяется операцией присваивания переменной некоторого значения. Такой подход упрощает построение программ и естественен при использовании переменных в обычной математической литературе.

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


var = value

Здесь var — имя переменной, value — ее значение. Ниже представлены основные операции по присваиванию переменным значений:

  • х = value — переменной х присваивается вычисленное значение value;
  • х = у = value — вычисленное значение value присваивается переменным х и у;
  • x:=value — присваивание переменной х невычисленного значения value;
  • х =. — с переменной х снимается определение.

Примеры (комментарий ln[...] опущен):

  • g = Plot[Sin[x],{x,0,20}] — переменной д присваивается значение в виде графического объекта;
  • у = 1 + х ^ 2— переменной у присваивается символьное значение в виде математического выражения (1 + х ^ 2);
  • z= {1, 2, х, a + b}— переменной z присваивается значение в виде списка, содержащего четыре элемента.

Различие в присваивании переменным значений с помощью знаков «=>> и <<:=» иллюстрируют следующие примеры:


а=12;

b=а

12

с:=а

с

12

а=15;

b

12

с

15

Как видите, после первоначальных присваиваний b=а и с: =а обе переменные, b и с, имеют значение 12. Однако после присваивания переменной а нового значения (15) переменная b, которой было присвоено вычисленное значение а, остается равной 12, а переменная с, которой было присвоено невычисленное значение а, становится равной 15.

Особо обратите внимание на то, что возможно снятие с переменной определения с помощью символов «=.» или функции Clear [var]. В символьной математике это очень полезная возможность, поскольку нередко переменные с одним и тем же именем в разных частях программы могут иметь разный смысл и представлять объекты, требующие значительных затрат памяти.

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

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

Оценивание переменных и операции присваивания

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

Основная функция Set [ Ihs, rhs ] имеет аналогичные по действию упрощенные операторы:

  • Ihs = rhs — вычисляет правую часть rhs и присваивает ее значение левой части Ihs. С этого момента Ihs замещается на rhs всюду, где бы этот идентификатор ни появился;
  • {11, 12, ...} = {rl, г2, ...} — вычисляет ri и назначает полученные результаты соответствующим 11.

Функция задержанного присваивания SetDelayed[lhs,rhs] может быть заменена аналогичным по действию оператором Ihs : =rhs, который назначает правой части rhs роль отложенного значения левой части Ihs. При этом rhs содержится в невычисленной форме. После этого, когда появляется идентификатор Ihs, он заменяется на значение rhs, вычисляемое каждый раз заново.

При задержанном (отложенном) присваивании вывода нет, тогда как при обычном немедленном присваивании lhs=rhs значение rhs вычисляется немедленно и результат выводится в строку вывода.

Функция присваивания верхнего уровня UpSet [Ihs, rhs] применяется в виде lhs A =rhs. При этом левой части Ihs присваивается значение правой части rhs, причем это значение связывается с символами, которые появляются на первом уровне вложенности в Ihs.

И, наконец, функцию отложенного присваивания верхнего уровня UpSetDelayed[lhs, rhs] может заменить оператор lbs^ :=rhs. При этом величина rhs выполняет роль отложенного значения Ihs, и связывается это присваивание с символами, которые появляются на первом уровне вложенности в Ihs.

Отметим еще одну важную конструкцию SetOptions [s, namel->valuel, name2->value2, . . . ], которая устанавливает для символа s указанные опции, определяемые по умолчанию.

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

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

 

gl3-1.jpg

Изображение: 

gl3-2.jpg

Изображение: 

3. Операторы и функции

 

Операторы и функции

 

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

Арифметические операторы

Математические выражения в системе Mathematica записываются с помощью операторов и функций. Операторы (от слова operator — исполнитель) являются элементами записи математических выражений, указывающими на то, какие действия производятся над символьными или числовыми данными. Когда эти данные используются совместно с операторами, их называют операндами.

Выражения, составленные из операторов, операндов и функций, способны возвращать результат своего вычисления. К примеру, если вычисляется сумма 2+3, то знак «+» является оператором, числа 2 и 3 — операндами, а вся запись 2+3 — выражением. Сами по себе операторы не возвращают какого-либо значения.

Существуют общепринятые приоритеты выполнения операций, например, в первую очередь выполняются сложение и вычитание, затем умножение и деление и далее другие операции. С помощью круглых скобок можно изменять последовательность выполнения действий, например, в выражении (2+3) М вначале будет вычислено 2+3, а затем уже результат будет умножен на число 4. В сомнительных случаях применение скобок особенно желательно, например 2^2+3 даст 7, а 2^ (2 + 3) даст 32.

Ниже перечислены основные операторы для выполнения арифметических операций (х, у и z — операнды, задающие данные, над которыми выполняются вычисления):


x+y+z  Сложение

x-y-z    Вычитание

х*у*z   или x у z    Умножение

х/у       Деление

х^у      Возведение х в степень у

Expr //N        Дает приближенное (с установленной точностью и                 формой) значение выражения ехрг

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

Как уже отмечалось, при выполнении вычислений особая роль принадлежит символам «%». Эти символы как сами по себе, так и в качестве аргументов функций используются для указания на применение результата предшествующих операций:

  • % — возвращает результат последней операции;
  • %% — возвращает результат предпоследней операции;
  • %...% — возвращает результат операции, выполненной в строке, отстоящей от конца на число повторений символа «%»;
  • %n — возвращает результат операции в строке n.

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

Как уже отмечалось, для представления арифметических выражений ехрг в виде вещественного результата используется функция N[expr,m]. Можно также задать вычисление любого выражения в численном виде, используя выражение ехрг //N:


1/3+2/7

13/21

1/3+2/7 //N

0.619048

Таким образом, используя функцию N[expr,m] или вывод с помощью символов //N, можно организовать вычисления в режиме калькулятора, находясь в среде оболочки системы.

Если х имеет вещественное значение, то функция


MantissaExponent[x]

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


123.456 10^10

1.23456 х1012

MantissaExponent[%]

{0.123456, 13}

Арифметические вычисления с повышенной точностью

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

Следующие две функции, Rationalize [х] и Rationalize [x, dx], дают приближение для числа х в виде рациональных чисел. Вторая из этих функций задает приближение с заданной точностью dx.

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

Как видно из примеров представления рациональных чисел, результат приближения зависит от заданной погрешности. Чем она меньше, тем большие значения целых чисел в числителе и знаменателе результата разыскивает система. Функция Rationalize открывает широкие возможности для разработки целочисленных алгоритмов вычислений, позволяя легко получать рациональные приближения для наиболее распространенных числовых констант — на рис. 3.3 примеры этого даны для числа 8.

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

Рис. 3.3. Примеры представления чисел в разных формах

Укороченная форма записи арифметических операций

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


Функция

Оператор

Назначение

Increment [i]

i++

Увеличивает значение i на 1 после использования i в выражении

Decrement [i]

i --

Уменьшает значение i на 1 после использования i в выражении

Preincrement [i]

++i

Увеличивает значение i на 1 до использования i в выражении

PreDecrement [i]

--i

Уменьшает значение i на 1 до использования i в выражении

AddTo[x,d]

x += dx

Прибавляет dx к х и возвращает новое значение х

SubtractFrom[x,dx]

x -= dx

Отнимает dx от х и возвращает новое значение х _

TimesBy [х, с]
X **= 'С
Умножает х на с и возвращает новое значение х
DivideBy [х, с]
X /= С
Делит х на с и возвращает новое значение х

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


Ввод (In)

Вывод (Out)

i=0

0

++i; ++i; ++i

3

i=0; i++; i++; i++

2

i=5

5

-- i

4

i=5

5

i --

5

i --

4

x=5

5

x+=0 . 5

5.5

x-=0 . 5

5.

x*=2

10.

x/=5

2.

 

Встроенные функции

Важнейшим объектом любой компьютерной математической системы является функция. Она отражает зависимость некоторой величины от одного или нескольких аргументов. Например, функция sin(x) дает зависимость синуса х от величины аргумента х при изменении последнего от -°° до +°°.

Признаком функции является возврат результата выполняемого ею действия. Характер результата будет зависеть от смысла функции, который нередко явно указывается ее именем — идентификатором. Например, функция Digitslnteger [n] возвращает число десятичных цифр десятичного целого числа. Это ясно из прямого перевода имени функции — слово Digitslnteger говорит о том, что она возвращает число цифр целого числа. Подобные смысловые имена задаются для большинства функций системы Mathematica и облегчают их запоминание.

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

Функции могут входить в состав математических выражений. Обычно они имеют один или несколько параметров, указываемых в квадратных скобках. Если параметров несколько, то в квадратных скобках указывается список параметров, разделенных запятыми. В общем случае параметрами могут быть списки. Наконец, в состав функций могут входить опции, указанные своим именем и (после знака ->) значением. Для обозначения положительной бесконечности используется символ Infinity. Целочисленные функции имеют в своем имени слово Integer.

В ядро систем Mathematica 3/4 входит множество встроенных функций, то есть функций, готовых к немедленному использованию без какого-либо предварительного объявления. Таких функций многие сотни. Среди них различные арифметические функции, тригонометрические и гиперболические функции, специальные математические функции и т. д. Мы рассмотрим их в дальнейшем.

Основные арифметические функции

Для выполнения арифметических действий в системах Mathematica 3/4 определены следующие арифметические функции:

  • Divide [х, у] — возвращает результат деления х на у эквивалентно выражению х у ^ -1;
  • Plus[x, у,...] — возвращает сумму элементов списка;
  • PowerModta, b, n] — возвращает Mod[a ^ b, n]. Для b<0 возвращает инверсию остатка;
  • Times [х, у,...] — возвращает произведение аргументов х*у*...;
  • Mod [m, n] — возвращает остаток от деления m на п. Результат имеет такой же знак, как п.

Ниже представлены примеры применения арифметических функций.


Ввод (In)

Вывод (Out)

Divide [1. ,3]

0.333333

Mod [123, 20]

3

Mod [123, -20]

-17

Mod[-123,20]

17

Plus[2,3,4]

9

Times [2, 3,4]

24

Для обмена значениями переменных х и у можно использовать выражение {х,у}={у,х}

 Пример обмена переменных значениями:


а=1;b=2;

{а,b}={b,а};

{а,b}

{2, 1}

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

  • Ceiling [х] — возвращает значение наименьшего целого числа, большего или равного х;
  • Floor [х] — возвращает наибольшее целое число, не превышающее данного х;
  • Quotient [n, m] — возвращает целое значение n/m, определяемое как Floor[n/m];
  • Round [х] — округляет х до ближайшего целого.

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


Ввод (In)

Вывод (Out)

Ceiling [{-5. 9, -5..1, 5, 5.1, 5.9}]

{-5, -5, 5, б, 6}

Floor [{-5. 9, -5.1,, 5, 5.1, 5.9}]

{-6, -6, 5, 5, 5}

Round[{-5.9, -5.1,, 5, 5.1, 5.9}]

{-6, -5, 5, 5, 6}

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

  • Divisors [n] — возвращает список целочисленных делителей числа п;
  • DivisorSigma [k, n] — возвращает сумму &-х степеней положительных делителей числа п;
  • ExtendedGCD [n, m] — возвращает расширенный наибольший общий делитель целых чисел пит;
  • GCD [nl,n2,...] — возвращает наибольший общий делитель целых чисел ni;
  • LCM[nl, n2,...] — возвращает наименьшее общее кратное целых чисел ni.

Ниже представлены примеры применения этих функций.


Ввод (In)

Вывод (Out)

LCM[124,12,6]

372

GCD [144, 12, 6] 6
Divisors [123] {1,3,41,123}
DivisorSigma [17,3] 129140164
ExtendedGCD [144,12] {12, {0,1}}

К целочисленным функциям можно отнести также функции вычисления факториала и двойного факториала:

  • Factorial [n] или n! — возвращает значение факториала числа n (n!=n* (n-1) *...*3*2*1, причем 0 !=1 и 1 !=1);
  • Factorial2 [n] или n! ! — возвращает значение двойного факториала числа п, равное п* (n-2) * (n-4) *...«%»

Ниже представлены примеры вычисления факториалов.


Ввод (In)

Вывод (Out)

Factorial [10]

3628800

20!

2432902008176640000

10!!

3840

20!//N

2.4329Х10 18

Mathematica способна вычислять факториалы больших чисел. Практически мгновенно (даже на компьютере с 486-м процессором) вычисляются значения до 1000!, хотя результат при этом занимает несколько страниц на экране дисплея. Можно вычислить даже 10000!, но для этого потребуется время до нескольких минут (зависит от типа компьютера). Обратите внимание на то, что управляющий символ //N за выражением дает вывод (аппроксимацию) в форме научной нотации.

Следующие функции служат для получения простых чисел и некоторых их характеристик:

  • Prime [n] — возвращает п-е простое число. Например, Prime [5] возвращает пятое простое число — 11. Всего лишь доли секунды требуются системе для вычисления миллиардного простого числа: Рг1те[10 Л 9] дает 22801763489;
  • PrimePi [x] — возвращает количество простых чисел, не превышающих х. Например, PrimePi [10] возвращает 4;
  • Partitions? [n] — возвращает числор(п) неупорядоченных разбиений целого числа п. Например, Partitions? [10] возвращает 42;
  • PartitionsQ [n] — возвращает q(n) — число разбиений с неравными частями для целого числа п. Например, PartitionsQ [15] возвращает 27.

Эти функции полезны при решении задач теории чисел.

Функции генерации случайных чисел

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

  • Random [ ] — возвращает равномерно распределенное псевдослучайное число типа Real в интервале от 0 до 1;
  • Random [type, range] — дает псевдослучайное число указанного типа type, лежащее в указанном интервале range. К возможным типам относятся Integer, Real и Complex. По умолчанию принят интервал от 0 до 1. Можно задать интервал явно в виде {min, max}; спецификация интервала в виде max эквивалентна {0, max};
  • SeedRandom[n] — сбрасывает (устанавливает в начальное состояйие) генератор случайных чисел, используя целое п как начальное число;
  • SeedRandom [ ] — устанавливает генератор, используя в качестве начального числа текущее время.

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

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

Рис. 3.4. Графическая иллюстрация распределения точек со случайными координатами (х, у)

Возможно, читателю не сразу понятны графические средства, использованные в документе, показанном на рис. 3.4. Это не беда — в последующих уроках они будут описаны довольно подробно.

Функции выявления погрешностей и анализа структуры чисел

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

  • Accuracy [х] — возвращает количество десятичных цифр справа от десятичной точки числа х;
  • EvenQ [expr] — возвращает значение True, если expr есть четное число, и False — в противном случае;
  • IntegerDigits [n] — возвращает список десятичных цифр целого числа n;
  • IntegerDigits [n,b] — возвращает список цифр целого числа п в записи по основанию b;
  • IntegerDigits [n, b, k] — возвращает список длиной k, содержащий самые младшие (наименьшие) значащие цифры в n;
  • Precision [x] — возвращает количество точных знаков в числе х.

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


Ввод (In)

Вывод(Out)

Accuracy [123 . 456]

14

EvenQ [2*3+2]

True

EvenQ [2*3+3]

False

IntegerDigits [12345]

{1, 2,3, 4, 5}

IntegerDigits [12345, 16]

{3, 0,3, 15}

IntegerDigits [12352 , 16]

{3, 0,4, 0}

IntegerDigits [12352 ,2]

{1,1,0,0,0,0,0,0,1,0,0,0,0,0,0}

Precision [123. 452]

16

Функциями Accuracy и Precision возвращаются значения, установленные в последний раз или по умолчанию при первой загрузке системы.

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

Функции пользователя

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

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

  • f (x_) := х^3 — отложенное задание функции пользователя с именем f;
  • f (х_) = х^3 — немедленное задание функции пользователя с именем f;
  • ?f — вывод информации о функции f;
  • Clear [f] — уничтожение определения функции f.

В обозначениях вида х_ знак _ применяется для создания так называемых образцов, задающих локальные переменные в теле функции — в нашем примере это х. При этом в самом теле функции переменные обозначаются как обычно, без знака образца. Он лишь указывает на особый статус переменных в ограниченном пространстве программы — в теле функции. Так, если вместо х_ будет подставлено число 2, то f (2) будет возвращать 2 А 3. Вне тела функции значение переменной х не изменяется. Переменная х может быть и неопределенной: х_ определяет переменную х только для тела функции. Более подробно создание образцов будет описано в дальнейшем.

Mathematica позволяет записать введенные пользователем функции с их определениями на магнитный диск с помощью оператора


Save["filename", fl, f2, ...]

После этого функция пользователя становится внешней функцией. При этом для ввода таких функций в текущий документ (notebook) достаточно вызвать файл с именем filename:


<<filename

Рекомендуется создавать файлы с типовым расширением .т. Такие файлы входят в пакеты расширений системы. Имя файла нужно задавать по общепринятым для MS-DOS правилам, то есть при необходимости указывать логическое имя дисковода и путь к файлу, например, так:


<<D: \MAT\myfunc .m

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

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

Функции пользователя можно задавать и выводить на печать как на языке системы, так и на некоторых общепринятых языках программирования, например Fortran, С или ТеХ. Для этого существует ряд функций преобразования, в имена которых входит слово Form (форма) и название языка для записи функций. Основные из них — это CForm [expr], FortranForm [expr ] и TeXForm [expr]. С их помощью выражения можно преобразовать в форму, принятую для языков программирования С, Fortran и ТеХ. При преобразовании в форму языка ТеХ греческие буквы заменяются их латинскими именами, например alpha, Alpha, beta, Beta, gamma и т. д. К сожалению, в отличие от систем класса MathCAD и Maple V R3, вывод математических формул в их полностью естественном виде не предусмотрен, хотя многое для этого уже сделано.

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

  • Splice ["file.rar"] — читает текстовый файл file.mx, интерпретирует его фрагменты, заключенные в ограничители <*...*>, и пишет текстовый файл file.*, в котором эти фрагменты преобразованы в формат, определяемый расширением х (с — С, f — Fortran, tex — ТеХ);
  • Splice ["infile", "outfile"] — то же, но с раздельным заданием имен входного и выходного файлов.

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

Mathematica может общаться также с иными системами, например текстовыми редакторами. К примеру, для передачи содержимого каких-либо ячеек в текстовый редактор Write, входящий в оболочку Windows, достаточно выделить эти ячейки и поместить их в буфер обмена, используя команду Сору из меню Edit. После этого надо запустить текстовый редактор и с помощью команды Edit | Paste поместить в окно редактирования содержимое ячеек. Если оно символьное, то с помощью редактора можно записать полученный документ с расширением .txt, то есть в стандартном текстовом формате, с которым работает большинство DOS-приложений.

Логические операторы

Логическими принято называть операции, отражающие чисто логическое соответствие между данными. В обиходном языке эти связи выражаются утверждениями типа «да» или «нет». Например, на вопрос «Сын вырос выше отца?» мы можем ответить «да» или «нет». В математике (да и в информатике) принято характеризовать логическое соответствие утверждениями True («Верно», «Истина» или «Да») и False («Неверно», «Ложь» или «Пет»). Слова True и False являются символьными константами, отражающими результаты логических операций и в системе Mathematica.

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


Равенство (например, а == b)

! = Неравенство

> Больше (например, b > а)

>= Больше или равно

< Меньше

<= Меньше или равно

Возможны следующие формы применения операторов сравнения:


а == b == с

а != b != с

х < у < z

и т. д.

Результатом вычисления этих выражений является выдача логических значений True или False. Это демонстрируют следующие примеры.


Ввод (In)

Вывод (Out)

2=2

True

a=a

True

a=b

a == b

2=3

False

2<3

True

2>3

False

2!=3

True

2+1==3==4-1

True

 

Логические функции

Основные логические функции над логическими данными р, q и т. д. задаются следующим образом:

Not[p] или !р Логическое отрицание

And[p, q,...] или р && q &&... Логическое умножение — операция «И»

Or[p,q,...] или р || q | |... Логическое сложение — операция «ИЛИ»

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


Ввод (In)

Вывод(Out)

And [True , True , True ] True
True && True && False False

Not [True]

False

Not [False]

True

Or [True, True, False]

False

2==2 && 3==3

True

True && True

True

And[l,l,0]

11111 1 0

And[l,l,0]

1 && 1&& 0

Эти примеры показывают, что аргументами логических функций и операндами логических операций должны быть только логические константы True и False или выражения, значения которых представлены ими. Недопустимо использовать численные значения 1 и 0, отождествляя их с логической единицей и логическим нулем. Результатом задания операций с ними будет повтор задания — возможно, в укороченной форме.

Отметим еще ряд логических операторов и функций:

Equal[Ihs, rhs] Greater[х,у] или х > у Возвращает True, если Ihs и rhs тождественны

Greater[xl,x2,x3] или xl > х2 > хЗ Возвращает True, если х оказывается больше у, иначе возвращает False

GreaterEqual[х,у] или х >= у Возвращает True, если xi образуют строго убывающую последовательность, иначе возвращает False

GreaterEqual[xl,х2,хЗ] или xl>= х2 >= хЗ Возвращает True, если х больше или равно у, иначе возвращает False

Negative[х] NonNegative[х] Positive[х] Возвращает True, если xi образуют невозрастающую последовательность, иначе возвращает False

SameQtlhs,rhs] или Ihs === rhs Возвращает True, если х оказывается отрицательным числом, иначе возвращает False

Xor[el, e2,...] Возвращает True, если х — неотрицательное число, иначе возвращает False

Возвращает True, если х — положительное число, иначе возвращает False

Возвращает значение True, если выражение Ihs тождественно rhs, иначе False. В отличие от Equal, сравнивает форму представления операндов, а не их значения

Является логической функцией XOR (исключающее «ИЛИ»). Возвращает True, если нечетное количество из ei имеют значение True, а остальные False. Возвращает False, если четное количество ei имеют значение True, a остальные False

Ниже приводятся примеры использования этих функций.


Ввод (In)

Вывод (Out)

Positive [2-3]

False

Equal [1+2, 4-1]

True

Equal [1+2, 2]

False

Greater [5, 4]

True

Greater [5, 4,3]

True

Greater [5, 4, 9]

False

Less [3,2+3]

True

Positive [2]

True

Negative [-2]

True

Neganbve[2]

False

NonNeganive [ -2 ]

False

NonNegative[2]

True

Xor[ True, True]

False

Xor [False , False]

False

Xor [True, False]

True

Ряд дополнительных логических функций читатель найдет в приложении.

Функции комплексного аргумента

Элементарные функции в системе Mathematica могут иметь аргумент в виде действительного числа х или комплексного z. Аргументы указываются как параметры функций в квадратных скобках.

Прежде всего отметим функции для работы с комплексными числами z:

  • Abs[z] — возвращает модуль комплексного числа z;
  • Arg [ z ] — возвращает аргумент комплексного числа z;
  • Conjugate [z] — возвращает комплексно-сопряженное с z число;
  • Directedlnf inity [] — представляет бесконечную числовую величину с неопределенным направлением на комплексной плоскости;
  • Directedlnfinity[z] — представляет бесконечную числовую величину, направление которой на комплексной плоскости определяется фазой комплексного аргумента z;
  • Im [ z ] — возвращает мнимую часть комплексного числа z;
  • Re [ z ] — возвращает вещественную часть числа z.

Далее приведены примеры операций с комплексными числами в непосредственном режиме. 


Ввод (In)

Вывод (Out)

z1 : =2+1*3;

z2: =4+1*5;

N[zl+z2]

6. + 8.1 I

Re [2+1*3]

2

H[Im[z2]J

5.

N[zl/z2]

0.560976 + 0.0487805 I

N[Abs[zl*z2]]

23.0868

Con j ugate [ z 1 ]

2-31

Если ввести N [ z 1 / 0 ], то система выдаст следующее сообщение:


N[zl/0]

Power::infy : Infinite expression 1/0 encountered.

Complexlnfinity

Итак, в этом случае система выдает сообщение об ошибке, но после него возвращает константу Complexlnfinity, означающую комплексную бесконечность.

Элементарные функции

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


Ввод (In)

Вывод (Out)

Sqrt[2]

Sqrt[2]

Sqrt[2.]

1.41421

2*Sin[l]

2 Sin[l]

N[2*Sin[l]]

1.68294

Log[Exp[l]]

1

Simplif у [Sin [x] /Cos [x] ]

Tan[x]

ComplexExpand [ Sin [ a+b* I ] ]

Cos[b] Sin[a]+ I Cosfa] Sinh[b)

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

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

 

gl3-3.jpg

Изображение: 

gl3-4.jpg

Изображение: 

4. Работа с объектами

 

Работа с объектами

 

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

Получение данных об объектах

Различные объекты системы будут более подробно описаны в дальнейшем по мере знакомства с системой. Полный список объектов, заданных в ядре системы, легко получить, используя команду ? * (ниже приведены лишь начало и конец этого списка):


?*

Abort

AbortProtect

Above

Abs

AbsoluteDashing

AbsolutePointSize

$Version

$VersionNumber

Можно также получить список всех определений на заданную букву, используя команду ?S*, где S — любая буква латинского алфавита. Ниже дан пример вывода всех определений ядра на букву U:


?U*

UnAlias Unevaluated Update

Underflow Uninstall UpperCaseQ

Underoverscript Union UpSet

UnderoverscriptBox Unique UpSetDelayed

Underscript Unprotect Upvalues

UnderscriptBox UnsameQ Using

Unequal Unset

Аналогичные возможности предоставляет функция Names ["S"], например, Names ["А*"] дает список всех ключевых слов, начинающихся с символа «А». Наконец, командой ?Name можно вывести справку по любому определению с именем Name. Например, после выполнения команды


?Abs

Abs[z] gives the absolute

value of the real or complex number z.

становится ясно, что идентификатор Abs задает функцию Abs [ z ] для вычисления абсолютного значения комплексного числа.

С помощью выражения ?Name можно проверить, является имя объекта Name уникальным или оно уже использовано в системе:


?sin

Information::notfound : Symbol sin not found.

?Sin

Sin[z] gives the sine of z.

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

Всякий объект перед использованием должен быть определен (задан). Внутренние объекты уже заданы в ядре. Объекты пользователя последний задает в текстах своих документов (notebooks).

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

Оперативная помощь по объекту

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

  • ? Name или Names [ "Name" ] — справка по заданному слову Name;
  • ?? Name — расширенная справка по заданному слову Name;
  • ?Аbс* — перечень всех определений, начинающихся с символов Abc;
  • ©ptions [name] — получение информации об опциях объекта Name.

Примеры получения оперативной справки показаны на рис. 3.5.

Рис. 3.5. Примеры получения оперативной справки

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

Многие встроенные функции защищены от модификации атрибутом Protected. К примеру, нельзя определить новую функцию Sin[x]=x A 2, причем вовсе не потому, что это определение абсурдно (далее мы покажем, что можно снять защиту и переопределить любую функцию даже самым абсурдным образом), а потому, что имя функции защищено указанием атрибута Protected (Защищенное). Позднее мы ознакомимся и с иными атрибутами — под ними подразумеваются определенные свойства объектов.

Средства диагностики и сообщения об ошибках

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


Тип::Метка%Диагностика:Сообщение

Эти сообщения появляются в отдельных неактивных ячейках. Тип указывает на тип ошибки, например, General — ошибка общего вида, Syntax — синтаксическая ошибка, Arg — ошибка задания аргумента и т. д. Метка указывает место ошибки в списке ошибок данного типа, а Диагностика указывает (увы, не всегда...) на ошибочное выражение. Сообщение обычно раскрывает суть ошибки.

Допустим, мы пытаемся вычислить значение экспоненциальной функции, указав ошибочно аргумент 2,3 с разделительной запятой вместо точки. Вот как Mathematica отреагирует на такую попытку (рис. 3.6, первый пример).

Рис. 3.6. Примеры выполнения «ошибочных» операций

Итак, ясно, что произошла ошибка задания аргумента — функция Ехр должна иметь только один аргумент, а число 2,2 система воспринимает как два аргумента, разделенные запятой. Вот еще один пример — вроде бы ошибочно заданы круглые скобки в выражении N (Ехр (2) ). Mathematica 3 в этом случае дала бы два предупреждающих сообщения:


Syntax::bktwrn : "Ехр(2)" should probably be "Ехр[2]".

Syntax::bktwrn : "N(Exp(2)l" should probably be "N[Exp(2)]".

2ExpN

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

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

Включение и выключение сообщений об ошибках

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

Для отключения сообщений об ошибках служит ключ


Off[Function::tag]

Например, отключим сообщение об ошибках у функции Ехр:


Off[Exp::argx]

Ехр[2,2]

Ехр[2,2]

Ехр[2]

Е2

N[Exp[2]]

7.38906

Для включения сообщения об ошибках используется ключ


On[Function::tag]

Например, для возобновления выдачи ошибок у функции Ехр надо исполнить команду


On[Exp::argx]

К сожалению, диагностика ошибок не способна опознать ошибки, имеющие формально правильный синтаксис. Чаще всего эти ошибки связаны с неверным описанием алгоритма вычислений. Например, если пользователь в математическом выражении вместо Sin [х] записал Cos [х], то эта грубая ошибка никак не будет распознана системой, поскольку синтаксически вызов функции Cos [х] записан безупречно. Часто пользователи путают идентификаторы переменных. Естественно, что ответственность за такие ситуации целиком лежит на пользователе — программисте.

Защита от модификации и ее отмена

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

  • Protect [s1, s2,...] — устанавливает атрибут защиты от модификации Protected для перечисленных объектов si;
  • Protect ["forml", "form2",...] — устанавливает атрибут защиты от модификации для всех объектов, имена которых сопоставимы с любым из указанных строковых шаблонов formi;
  • Unprotect [s1, s2,...] — удаляет атрибут защиты от модификации Protected для объектов si, что делает возможной их модификацию;
  • Unprotect ["form1", "form2",...] — снимает защиту всех объектов, имена которых текстуально (по буквам) сопоставимы с любым из указанных шаблонов formi.

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


Log[7]=2

Set::write : Tag Log in Log[7] is Protected.

2

Итак, здесь предпринята попытка приписать логарифму числа 7 вовсе не свойственное ему значение 2. В ответ система выдала сообщение, что символ Log имеет атрибут Protected, то есть защищен от модификации. С помощью директивы Unprotect снимем защиту:


Unprotect[Log]

{Log}

Теперь выражение Log [ 7 ] можно модифицировать:


Log[7] =2

2

и использовать его уже в новом значении:


Log[7]=2

2

Log[7]+Log[3]

2 + Log[3]

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


Log[7]=.

Protect[Log]

{Log}

Теперь можно проверить, что присваивание Log [7] =2 не действует и функция Log работает как положено, возвращая значение In (7) =1. 94591:


Log[7]

Log[7]

N[Log[7]]

1.94591

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

Подстановки

Важное значение в числовых и символьных преобразованиях имеют операции подстановки (rules). Их смысл заключается в замене одного объекта или его части другим объектом или частью другого объекта. Например, часто возникает необходимость вычислить значение математического выражения при замене некоторой переменной ее конкретным численным значением. Для этого достаточно вместо этой переменной подставить нужное численное значение.

Куда менее тривиальной является замена переменной ее символьным значением в виде математического выражения. При этом исходное выражение может в ходе решения задачи превратиться в совершенно новое выражение, поскольку после подстановки система может провести над исходным выражением достаточно сложные математические преобразования. Говорят, что в этом случае ячейка, содержащая выражение (а точнее — само выражение), оценивается и изменяется по ходу решения задачи. Операции подстановки обычно вводятся с помощью комбинации символов «/ .»:

  • ехрг / . х -> value — в выражение ехрг вместо переменной х подставляется ее значение value;
  • ехрг /. {х -> xvalue,. у -> yvalue} — в выражение ехрг вместо переменных х и у подставляются их значения xvalue и yvalue.

Примеры:


l+x^3/.x->l+z

1 + (1+ z)3

х^2+2*х+3/.х->2

11

Обратите внимание на то, что в результате подстановки в первом примере вместо переменной х оказалось математическое выражение (1 + z). Второй пример иллюстрирует подстановку на место переменной х ее численного значения.

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

  • Ihs -> rhs — прямая подстановка Ihs в rhs;
  • Ihs :> rhs — отложенная подстановка (RuleDelayed), которая преобразует Ihs в rhs, вычисляя rhs не сразу, а только при использовании правила подстановки.

Ниже приведены еще два примера на использование операций подстановки:


р:=1+х^2+3*х^3

р/.х->1+у

1+ (1 + у)2+3 (1 + у)3

{f[1],f[2],f[3]}/.f[n_]->n^2

{1, 4, 9}

f[n_]:=n^2

f[4]+f[y]+f[x+y]

16+y2+(x+y)2

В первом примере подстановка произведена в математическое выражение, а во втором — в список.

Подстановки — мощный и необычайно гибкий инструмент системы Mothematica. С их помощью можно задать даже новые математические закономерности и произвольные соотношения (к примеру, можно задать абсурдное правило, что 2 + 2 = 5). Эти необычные возможности мы рассмотрим в дальнейшем.

 

gl3-5.jpg

Изображение: 

gl3-6.jpg

Изображение: 

5. Работа со списками и массивами

 

Работа со списками и массивами

 

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

Списки и их свойства

Часто математические или иные объекты содержат множество данных, которые желательно объединять под общим именем. Например, под объектом с именем М можно подразумевать квадратную матрицу размером 10x10 с общим числом элементов, равным 100. Человека с именем Victor, например, можно характеризовать целым списком разных данных — символьными фамилией, именем и отчеством, целочисленным годом рождения, вещественным ростом, объемом груди и т. д.

Для объединения данных могут использоваться списки (list). Mathematica имеет обширные возможности работы с объектами-списками, содержащими не только однотипные, но и разнотипные элементы. В частности, элементами списков могут быть числа, константы, переменные, выражения и даже сами списки. Списки используются для конструирования более частных типов данных — массивов, матриц и векторов [87].

На языке данной системы список — это совокупность произвольных данных, указанных в фигурных скобках, например: {1, 4, 2, 7, 9} или {а, Ь, с, d, e, sin[x], ln[y], "string"}

Возможно задание списков в списке, например, так:


{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

Такой список представляет матрицу


1  2  3

4  5  6

7  8  9

Однако, чтобы вывести список в такой матричной форме, надо использовать после списка выражение //MatrixForm (рис. 3.7).

Рис. 3.7. Примеры задания и вывода матрицы

На рис. 3.7 показан еще один способ задания списка или матрицы — с помощью функции List:

  • List [a, b, с,...] — создает список {а, b,, с,...};
  • List [ {а,b, с,...}, {d,e, f,...}, {i, k, 1,...} ] — создает список — матрицу { {a,b, с,...}, {d,e, f,...}, {i, k, 1,...} }.

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


V:={1, 2, 3, 4, 5}

Списки характеризуются размером, который представляет собой произведение числа элементов списков по каждому направлению (размерности). Например, одномерный список является вектором и характеризуется числом элементов по единственному направлению. При этом вектор может быть вектором-строкой или вектором-столбцом. Двумерный список представляет матрицу, имеющую m строк и n столбцов. Ее размер равен mxn. Если m=n, то матрица называется квадратной. Трехмерный список можно представить в виде параллелепипеда, содержащего mxnxp элементов. Списки большей размерности трудно наглядно представить, но они вполне возможны. Напомним, что имена векторов и матриц в данной книге обозначены жирными символами, например, V для вектора и М для матрицы.

Генерация списков

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

  • Table [expr, {imax} ] — генерирует список, содержащий imax экземпляров выражения ехрг;
  • Table [expr, {i, imax} ] — генерирует список значений ехрг при 1, изменяющемся от 1 до imax;
  • Table [expr, {i, imin, imax}] — генерирует список значений ехрг при i, изменяющемся от imin до imax;
  • Table [expr, {i, imin, imax, di} ] — использует шаг приращения i, равный di;
  • Table[expr, {i, imin, imax}, {j, jmin, jmax},...] —возвращает вложенный список. Самым внешним является список по переменной i.

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


Пример

Комментарий

  Table[i*j,{i,l,3},{j,l,3}]

{{1, 2, 3), [2, 4, 6}, {3, 6, 9}}

 Генерация матрицы размером

Table[N[Exp[i]], {1,0, 2,0.5}]

{1., 1.64872, 2.71828, 4.48169, 7.38906}

Генерация пяти значений Е ^ 1 численном виде

Table[Exp[i],{i,l,5}]

{е, е 2 , е 3 , е 4 , е 5 }

Генерация пяти значений Е ^ i (i=l, 2, 3,4 и 5)

Table[Exp[i],{5}]                        {е i , е i , е i , е i , е i }

Генерация пяти значений Е ^i

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

  • Range [imax] — генерирует список числовых элементов {1, 2, ..., imax};
  • Range [imin, imax] — генерирует список числовых элементов {imin, ...,
  • Range [imin, imax, di] — генерирует список числовых элементов от imin до imax с шагом di.

Примеры использования функции Range.


Пример

Комментарий

Range [5]

{1, 2, 3, 4, 5}

Генерация пяти целых чисел


Range[0,2,0.5]

{0, 0.5, 1.,1.5, 2.}

Генерация чисел пяти вещественных

 

Выделение элементов списков

Для выделения элементов списка list используются двойные квадратные скобки:

  • list [ [i] ] — выделяет i-й элемент списка;
  • list [ [ { i, j , --.}]] — выделяет i-й, j-й и т. д. элементы списка.

Ниже приведены примеры выделения элементов списков.


Пример

Комментарий

11:={1,2,3,4,5)

Задание исходного списка 11

11[[3]]

Выделение третьего элемента

3

11[[{1,2,5}]]

Выделение первого, второго и пятого элементов

(1, 2, 5}

12={{1,2,3},{4,5,6}}

Задание сдвоенного (двумерного) списка

{{1, 2, 3}, {4, 5, 6}}

TableForm[12]

Вывод сдвоенного списка в табличной форме

1 2 3

4 5 6

L2[[2,3]]

Выделение элемента сдвоенного списка

6

Для выделения заданного z'-ro элемента списка list используется также функция Part [list, i]. При i>0 отсчет номеров элементов идет с начала списка, а при i<0 — с его конца. Это правило поясняют следующие примеры:


L:={l,2,3,a,b,c}

{Part[L,2],Part[L,5],Part[L,6]}

{2, b, с}

{Part[L,-2],Part[L,-5],Part[L,2]}

{b, 2, 2}

Функция Part может использоваться для выбора заданного элемента выражения из списка. В этом случае вместо i надо указать три числа — номер выражения как элемента списка, уровень выражения и порядковый номер извлекаемого из

выражения объекта. Показанные на рис. 3.8 примеры иллюстрируют работу со списком, последним (четвертым) элементом которого является математическое выражение.

Рис. 3.8. Примеры выделения элементов выражения

Обратите внимание на то, что в последнем примере неверно задан уровень выражения — использованное выражение имеет только один (первый) уровень. Поэтому задание второго уровня вызывает появление сообщения об ошибке.

Функция Select используется для выделения элементов списка, удовлетворяющих заданному критерию:

  • Select [list, crit] — выбирает все элементы ei списка list, для которых функция критерия crit [ei] имеет значение True;
  • Select [list, crit, n] — выбирает первые п элементов, для которых critfei] есть True.

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


Select[{1,а,2,b,3,c},NumberQ]

{1, 2, 3}

Select[{l,a,2,b,3,c),NumberQ,2]

{1, 2}

Select[{l,a,2,b,3,c},PrimeQ]

{2, 3}

 

Вывод элементов списков

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

  • MatrixFormflist] — выводит список в форме массива (матрицы);
  • TableForm [list] — выполняет вывод элементов списка list в виде таблицы.

С этими функциями используются следующие опции:

  • TableAlignments — указывает, каким образом должно выравниваться содержимое списка в каждой размерности (слева, по центру или справа);
  • TableDepth — устанавливает максимальное количество уровней, выводимых в табличном или матричном формате;
  • TableDirections — указывает, как следует располагать последовательные (соседние) размерности — в виде строк или столбцов;
  • TableHeadings — задает подписи (labels) для каждой размерности таблицы или матрицы;
  • TableSpacing — устанавливает количество пробелов, которое следует оставлять между соседними строками или столбцами.

Обратите внимание на то, что эти опции используются как для функции TableForm, так и для функции MatrixForm, используемой для вывода матриц. Вообще, векторы и матрицы являются разновидностью списков. На рис. 3.9 поясняется использование функций MatrixForm и TableForm на примере вывода списка.

Рис. 3.9. Примеры вывода списка в матричной и табличной формах

Дополнительные возможности функции TableForm демонстрирует рис. 3.10. Здесь особенно полезно отметить возможность выравнивания данных в таблицах по левому и правому краям, а также по середине.

В большинстве случаев опции для функций MatrixForm и TableForm не используются. Точнее, они установлены по умолчанию. Проверить, какие опции использованы, можно, например, следующим образом:


Options[MatrixForm]

{TableAlignments -> Automatic, TableDepth-> со, TableDirections -> Column,

TableHeadings->None, TableSpacing-> Automatic}

Options[TableForm]

{TableAlignments -> Automatic, TableDepth ->бесконечность, TableDirections -> Column,

TableHeadings -» None, TableSpacing-> Automatic}

Рис. 3.10. Примеры вывода списка в табличной форме

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

Функции выявления структуры списков

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

Для выявления структуры списков используется ряд функций:

  • Count [list, pattern] — возвращает количество элементов в списке list, которые соответствуют образцу pattern;
  • Dimensions [list] — возвращает список размеров списка по каждой размерности;
  • FreeQ [list, form] — возвращает True, если список list не содержит form;
  • Length [list] — возвращает число элементов одномерного списка list или число размерностей в случае многомерного списка;
  • MatrixQ [list ] — проверяет, является ли список матрицей, и дает True, если это так, и False в противном случае;
  • MemberQ [list, form] — проверяет, есть ли form в списке, и возвращает True, если это так, и False в противном случае;
  • Position [list, form] — возвращает номер позиции form в списке;
  • TensorRank[list] — находит ранг списка, если он является тензором;
  • VectorQ [list] — проверяет, является ли список вектором, и дает True, если это так, и False в противном случае.

Функции с буквой Q в конце имени являются тестирующими и возвращают логические значения True или False. Остальные функции возвращают численные значения соответствующего параметра списка.

Ниже даны примеры использования этих функций.


Ввод (In)

Вывод(Out)

11={1,2,3,4,1};

Length [11]

5

Dimensions [11]

{5}

MatrixQ [11]

False

TensorRank [ 11 ]

1

MemberQ[ll,l]

True

Count[ll,l]

2

FreeQ [11, 5]

True

Position [11,1]

{{1},{5}}

VectorQ [11]

True

M={{1, 2,3}, {4, 5, 6}}

Length [M]

2

Dimensions [M]

{2,3}

Система предоставляет пользователю свободу действий, производимых по результатам анализа структуры списков.

Работа со списком в стеке

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

Система Mathematica предоставляет широкие возможности для операций со стеками:

  • Drop [list, n] — возвращает список list, из которого удалены первые п элементов;
  • Drop [list, -n] — возвращает список list с отброшенными последними п элементами;
  • Drop [list, {n}] — возвращает список list без n-го элемента;
  • Drop [list, {m, n}] — возвращает список list с отброшенными элементами от m-го до п-го;
  • Fold[f, x, list] — возвращает последний элемент из FoldList [f,x, list];
  • Last [list] — возвращает последний элемент списка list;
  • Rest [list] — возвращает список с уничтоженным первым элементом;
  • Take [list, n] — возвращает первые п элементов списка list;
  • Take [list, -n] — возвращает последние п элементов списка list;
  • Take [list, {m, n}] — возвращает элементы списка с порядковыми номерами от m до п.

Следующие примеры поясняют работу со стеком.


Ввод (In)

Вывод(Out)

Drop[{l

,2

,3

,4

,5},

2]

{3,

4,

5}

Drop [ { 1

,2

,3

,4

,5},

-2]

{1,

2,

3}

Drop [ { a

,b

,c

,d

,e>,

{2,4}]

(a,

e}

Last[{l

,2

,3

,4

,5}]

5

Rest[{l

,2

,3

,4

,5}]

{2,

3,

4, 5}

Take[{l

,2

,3

,4

,5},

2]

(1,

2}

Take [ { 1

,2

,a

,b

,c},

-2]

{b,

c}

Take [ { 1

,2

,3

,4

,5},

{2,4}]

{2,

3,

4}

Тривиальная процедура общения со стеком (ввести/вывести данные) ограничивает возможности стековых операций. Из житейского опыта мы знаем, что, проявив настойчивость, можно вставить тарелку и в середину стопки. Mathematica предоставляет ряд расширенных возможностей для работы со списками, выходящих за рамки обычных стековых операций.

Так, например, для расширения списка путем включения в него новых элементов используются следующие функции:

  • Append [list, element] — добавляет элемент в конец списка;
  • PreoendTlist.element1 — добавляет элемент в начало списка:
  • Insert [list, element, n] — вставляет элемент в позицию п (отсчет пози-ций.ведется с начала списка, а если число п отрицательное — то с конца). Данной функцией можно включать элемент в несколько позиций, указав каждую в фигурных скобках, взяв все перечисление в еще одни фигурные скобки и использовав его вместо п. При этом надо учитывать, что все позиции включаемых элементов определяются одновременно до начала расширения списка.

Следующие примеры иллюстрируют применение этих функций.


Ввод (In)

Вывод(Out)

1={1,2,3}

(1,

2,

3}

Append[l,e]

(1,

2,

3,

e}

Prepend[l,e]

{e,

1,

2,

3}

Insert[l,e,2]

{1,

e,

2,

3}

L={1, 2, 3, 4

, 5}

{1,

2,

3,

4, 5}

Insert [L, e,

-5]

(1,

e,

2,

3, 4, 5}

Insert [L, e,

{{1},{5}}]

(e,

1,

2,

3, 4, e, 5}

Обратите внимание на то, что в данном случае элементы списка — числа, тогда как вставляемый элемент имеет символьное значение е.

Следует отметить, что описанные для стека функции Drop и Rest позволяют удалить из списка последний или первый элемент. Функция Delete [list, i] позволяет удалить из списка произвольный i-й элемент. Если i>0, то отсчет удаленного элемента идет с начала списка, а если i<0 — с конца:


L:={1,2,3,4,5}

{Delete[L,l],Delete[L,3],Delete[L,5]}

{{2, 3, 4, 5}, {1, 2, 4, 5}, {1, 2, 3, 4}}

{Delete[L,-2],Delete[L,-5]}

{{1, 2, 3, 5}, (2, 3, 4, 5}}

Delete[{l,2,3,{a,b,c},4,5},2]

{1, 3, {a, b, c}, 4, 5}

Если элементом списка является список, то он фигурирует как один элемент. Можно, однако, удалить избранный элемент из элемента списка, указав в фигурных скобках вместо i номер элемента списка во внешнем списке и номер удаляемого элемента во внутреннем списке. Это иллюстрируют следующие примеры:


Delete[(1,2,3,{а,Ь,с},4,5},{4,3}]

{1, 2, 3, {а, b}, 4, 5}

Delete[{1,2,3,{а, b, с},4,5},{4,1}]

{1, 2, 3, {b, с}, 4, 5}

Наконец, с помощью функции Delete можно удалить несколько элементов списка, указав каждый из них в фигурных скобках и оформив это указание также в фигурных скобках:


Delete [ {1,2,3, {a, b, c} , 4, 5}, {{2}, {4} ,{ 5}}]

{1, 3, 5}

Следует иметь в виду, что некоторые функции удаляют в списках определенные элементы. Этот вопрос будет рассмотрен ниже.

Изменение порядка расположения элементов в списке

Помимо добавления в список новых данных имеется возможность изменения порядка расположения элементов в списке. Она реализуется следующими операциями:

  • Flatten [list] — выравнивает (превращает в одномерный) список по всем его уровням;
  • Flatten [list, n] — выравнивает список по п его уровням;
  • Flatten [list, n, h] — выравнивает выражения с заголовком h no n уровням;
  • FlattenAt [list, n] — выравнивает подсписок, если он оказывается п-м элементом списка list. Если n отрицательно, позиция отсчитывается с конца;
  • Sort [list] — сортирует элементы списка list в каноническом порядке;
  • Sort[list,p] — сортирует согласно функции упорядочения р;
  • Reverse [list] — возвращает список с обратным порядком расположения элементов;
  • RotateLeft [list] — возвращает список после однократного поворота влево;
  • RotateLeft [list, n] — возвращает список после n-кратного поворота влево;
  • RotateRight [list] — возвращает список после однократного поворота вправо;
  • RotateRight [list, n] — возвращает список после n-кратного поворота вправо;
  • Transpose [list] — осуществляет транспозицию (смену строк и столбцов) для двумерного списка;
  • Transpose [list, п] — осуществляет транспозицию n-мерного списка. Ниже приведен ряд примеров на использование этих функций.
Ввод (In) Вывод (Out)
13={{1,2,3},{4,5,6},{7,8,9}}; {1,2,3,4,5,6,7,8,9}
Flatten [13]  
FlattenAt[13,l] {1,2,3,{4,5,6},{7,8,9}}
Sort[{l,5,3,4,2}] {1,2,3,4,5}
Reverse[{l,2,3,4}] {4,3,2,1}
RotateLeft[ {1,2,3,4,5}, 2] {3,4,5,1,2}
RotateRight[{l,2,3,4,5} ,2] {4,5,1,2,3}
12={{a,b},{c,d}};  
TableForm[12] a b c d
TableFormf Transpose [12] ] a c d b

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

Комбинирование списков и работа с множествами

Иногда возникает необходимость комбинирования нескольких списков. Для этого используются следующие функции:

  • Complement [list, listl, list2, ...] — возвращает список list с элементами, которые не содержатся ни в одном из списков listl, Iist2, ...;
  • Intersection [listl, list2,...] (пересечение множеств) —возвращает упорядоченный список элементов, общих для всех списков listi;
  • Join[list1, list2,... ] — объединяет списки в единую цепочку (выполняет конкатенацию). Join может применяться к любому множеству выражений, имеющих один заголовок;
  • Union [listl, Iist2, ...] (объединение множеств) — удаляет повторяющиеся элементы списков и возвращает отсортированный список всех различающихся между собой элементов, принадлежащих любому из данных списков listi. Функция обеспечивает теоретико-множественное объединение списков;
  • Union [list] — возвращает отсортированный вариант списка list, из которого удалены все повторяющиеся элементы.

Приведенные ниже примеры иллюстрируют применение функций комбинирования списков.


Ввод (In)

Вывод (Out)

Complement! {1, 2, 3,4, 5}, {1, а, 2}, {b, с, 5}]

{3,

4}

11={1,2,3,4,5};

12={а,b,3,4,с};

Intersection [11 , 12]

{3,

4}

Join [11, 12]

(1,

2, 3, 4, 5, a, b, 3, 4, c}

Union[{l,2,4,3,2,7,3,5}]

{1,

2, 3, 4, 5, 7}.

Union[{3,2},{!,4}]

(1,

2, 3, 4}

Union[{a,b,c,a},{l,d,3}]

{1,

3, a, b, c, d}

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

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

 

gl3-10.jpg

Изображение: 

gl3-7.jpg

Изображение: 

gl3-8.jpg

Изображение: 

gl3-9.jpg

Изображение: 

6. Операции линейной алгебры

 

Операции линейной алгебры

 

Линейная алгебра — один из фундаментальных разделов математики. Он во многом способствовал развитию методов вычислений. Средства линейной алгебры (преобразование матриц, решение систем линейных уравнений и т. д.) широко используются при решении задач механики, электро- и радиотехники и других отраслей науки и техники. В этом разделе мы познакомимся с основным набором средств системы Mathematica, предназначенных для решения задач линейной алгебры.

Создание массивов

Совокупность данных образует массив (Array). Массивы могут быть одномерными (один список), двумерными и многомерными (два и более списка). Одномерные массивы в математике называют векторами, двумерные — матрицами. В общем случае массив характеризуется размерностью (числом измерений) и размером — произведением числа элементов по всем размерностям. Mathematica позволяет создавать многомерные массивы — число элементов в них ограничено лишь объемом памяти компьютера.

Для задания массивов используются следующие функции:

  • Array [ f, n] — генерирует список длиной п с элементами f [ 1 ], f [ 2 ], ..., f[n];
  • Array [f, {nl, n2, ...}] — генерирует массив размером n1x n2 x... в виде вложенных списков с элементами f [ i I, i2,...] (аргумент функции i k меняется от 1 до nk);
  • Array[f, dims, origin] — генерирует список с размерностью dims, используя спецификацию индекса origin;
  • Array [f, dims, origin, h] — использует заголовок h, а не List, для каждого уровня массива.

Далее приводятся примеры задания массивов и их вывода.


Ввод (In)  

 

Вывод (Out)  

Y : =Array [Exp , 4 ]

Y

 {e,

 e 2 ,

 e 3 ,

 e 4 }

N[Y]

 

 

{2.

71828,

7.

38906,

20.0855, 54

.5982}

Array[f,{3

,

3}]

{{f

[1,

1],

f

[1, 2]

{

f[l,

3]},

{f[2, 1], f[2, 2],

{[2

, 3]

},

{f

[3, 1]

{

f[3,

2], f

[3, 3] }}

Array [Sin,

3

,0]

{0,

Sin

[1]

, Sin[2]

}

Array [Sin,

4

,l,Plus]

Sin

[1]

+ Sin

[2] +

Sin[3]

+ Sin

[4]

Array[f ,5,

2

,2]

2[f

[2],

f [

3]

, f[4]

{

f [5]

, f[6]

]

 

Основные понятия линейной алгебры

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

Матрица — прямоугольная двумерная таблица, содержащая m строк и п столбцов элементов, каждый из которых может быть представлен числом, константой, переменной, символьным или математическим выражением (расширительная трактовка матрицы).

Квадратная матрица — матрица, у которой число строк m равно числу столбцов п. Пример квадратной матрицы размером 3x3:


1  2  3

4  5  6

7  8  9

Сингулярная (вырожденная) матрица — квадратная матрица, у которой детерминант (определитель) равен 0. Такая матрица обычно не упрощается при символьных вычислениях. Линейные уравнения с почти сингулярными матрицами могут давать большие погрешности при решении.

Единичная матрица — это квадратная матрица, у которой диагональные элементов равны 1, а остальные элементы равны 0. Ниже представлена единичная матрица размером 4x4: 


    1 0 0 0
    0 1 0 0
E = 0 0 1 0
    0 0 0 1

Транспонированная матрица — квадратная матрица, у которой столбцы и строки меняются местами. Приведем простой пример.

Исходная матрица:


    a b c
A = d e f
    i k l

Транспонированная матрица:


    a d i
А т = b e k
    c f l

Обратная матрица — это матрица М -1 , которая, будучи умноженной на исходную квадратную матрицу М, дает единичную матрицу Е.

Ступенчатая форма матрицы соответствует условиям, когда первый ненулевой элемент в каждой строке есть 1 и первый ненулевой элемент каждой строки появляется справа от первого ненулевого элемента в предыдущей строке, то есть все элементы ниже первого ненулевого в строке — нули.

Диагональ матрицы — расположенные диагонально элементы А., матрицы А. В приведенной ниже матрице элементы диагонали представлены заглавными буквами:

 


    A b c
А = d E f
    i k L

Обычно указанную диагональ называют главной диагональю — для матрицы А, приведенной выше, это диагональ с элементами А, Е и L. Иногда вводят понятия поддиагоналей (элементы d и k) и наддиагоналей (элементы b к f).

Ранг матрицы — наибольший из порядков отличных от нуля миноров квадратной матрицы.

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


detА = Сумма a1j(-1)j+1M1<j>

где M <J> — определитель матрицы порядка n-1, полученной из матрицы А вычеркиванием первой строки и j-то столбца. В таком виде определитель (он же детерминант) легко получить в символьных вычислениях. В численных расчетах мы будем подразумевать под определителем численное значение этого многочлена.

Матрица в целой степени — квадратная матрица в степени п (п — целое неотрицательное число), определяемая следующим образом: М° = Е, М 1 = М, М 2 = = М*М,..., Мn = М n-1 -М.

Идемпотентная матрица — матрица, отвечающая условию Р 2 = Р.

Инволютивная матрица — матрица, отвечающая условию I 2 = Е.

Симметрическая матрица — матрица, отвечающая условию А т = А.

Кососимметрическая матрица — матрица, отвечающая условию А т = -А.

Ортогональная матрица — матрица, отвечающая условию А т = А- 1 .

Комплексно-сопряженная матрица — матрица А , полученная из исходной матрицы А заменой ее элементов на комплексно-сопряженные.

Эрмитова матрица — матрица А, удовлетворяющая условию А = А .

Собственный вектор квадратной матрицы А — любой вектор х е V n , х не равно 0, удовлетворяющий уравнению Ах = gx, где g — некоторое число, называемое собственным значением матрицы А.

Характеристический многочлен матрицы — определитель разности этой матрицы и единичной матрицы, умноженный на переменную многочлена — |А - g Е|.

Собственные значения матрицы — корни ее характеристического многочлена.

Норма — обобщенное понятие абсолютной величины числа. Норма трехмерного вектора ||х|| — его длина. Норма матрицы — значение sup(||Ax||/||x||). I-норма матрицы А — число

Матричная форма записи системы линейных уравнений — выражение А-Х = В, где А — матрица коэффициентов системы, X — вектор неизвестных, и В — вектор свободных членов. Один из способов решения такой системы очевиден — X = А -1 В, где А- 1 — обратная матрица.

Функции линейной алгебры

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

  • Cross [vl,v2, v3,...] — векторное произведение (может задаваться в виде v1*v2*v3*...);
  • Det [m] — возвращает детерминант (определитель) квадратной матрицы m;
  • DiagonalMatrix [list] — возвращает диагональную матрицу с главной диагональю, сформированной из элементов списка list, и нулевыми остальными элементами матрицы;
  • Dot [a, b, с] — возвращает произведения векторов, матриц и тензоров. Операцию произведения можно задавать также в виде а. b. с;
  • Eigensystem[m] — возвращает список {values, vectors} собственных значений и собственных векторов квадратной матрицы т;
  • Eigenvalues [m] — возвращает список собственных значений квадратной матрицы m;
  • Eigenvectors [m] — возвращает список собственных векторов квадратной матрицы m;
  • IdentityMatrix [n] — возвращает единичную матрицу размером пхп (у нее диагональные элементы имеют значения 1, остальные 0);
  • Inverse [m] — возвращает обратную матрицу для квадратной матрицы т, то есть матрицу m- 1 , которая, будучи умноженной на исходную матрицу, дает единичную матрицу;
  • LinearSolve [m, b] — возвращает вектор х, представляющий собой решение матричного уравнения m. x==b, где m — матрица коэффициентов левой части системы линейных уравнений, х — вектор неизвестных и b — вектор свободных членов в правой части системы;
  • Tr [list] — возвращает след матрицы или тензора (эта функция есть только у Mathematica 4);
  • Transpose [m] — возвращает транспонированную матрицу, у которой столбцы и строки меняются местами в сравнении -с исходной матрицей m;
  • RowReduce [m] — производит гауссовское исключение переменных, возвращая упрощенную форму матрицы m, полученную путем линейного комбинирования строк.

Следующие примеры иллюстрируют применение основных из этих функций.


Ввод (In)

Вывод (Out)

A: =IdentityMatrix [3]

А

{{1,

0,

0},

{0, 1, 0}, {0, 0, 1}}

MatrixExp [A]

{{E,

0,

0},

{0, E, 0}, {0, 0, E}}

MatrixQ [A]

True

MatrixPower [MatrixExp [A] , -1 . 5]

{{0. {0,

22313, 0, 0}, {0, 0.22313, 0), 0, 0.22313}}

А+{{1,2,3},{4,5,6},{7,8,9}}

{{2,

2,

3},

{4, 6, 6}, {7, 8, 10}}

m:={{1,2},{3,7}}

Inverse [m]

{{7,

-2}

, (

-3, 1}}

MatrixQ [m]

True

RowReduce [m]

{{1,

0},

{0

, 1}}

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

Рис. 3.11. Вычисление детерминанта, собственных значений и векторов матрицы

Приведем еще несколько примеров:


m={{1,2},{3,7}}

{{1, 2}, {3, 7}}

Transpose[m]

{{1, 3), {2, 7}}

m//MatrixForm

1 2

3 7

Transpose[m]//MatrixForm

Inverse[m]//MatrixForm

7 -2

-3 1

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

Решение систем линейных уравнений

Приведем также примеры на решение систем линейных уравнений матричными методами. В первом из них решение выполняется в символьном виде на основании формулы X = А -1 В, где А — матрица коэффициентов системы линейных уравнений, В — вектор свободных членов. Для перемножения используется функция Dot, а для инвертирования матрицы — функция Inverse:


A:={{a,b},{c,d}}

B:={e,f}

X:=Dot[Inverse[A],B]

X

{-de/(bc+ad) -bf/(bc+ad)- ce/(bc+ad) -af/(bc+ad)}

Во втором примере для решения системы линейных уравнений используется функция LinearSolve:


LinearSolve[{{l,2},{3,4}},{7,9}]

{-5, 6}

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


А={ U+2I,2+3I},{3+4I,4+5I}}

{{1+21, 2 + 31}, {3 + 41, 4+ 51}}

В={21,3}

{21,3} X=LinearSolve[А,В]

{1/4-41, 11I/4}

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

 

gl3-11.jpg

Изображение: 

7. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Использовать основные классы данных системы Mathematica.
  • Выполнять арифметические вычисления.
  • Применять встроенные и пользовательские функции.
  • Получать данные об объектах.
  • Осуществлять подстановки.
  • Работать со списками.
  • Создавать массивы, векторы и матрицы.
  • Пользоваться функциями линейной алгебры

 

Урок 4. Операции математического анализа

Урок 4. Операции математического анализа

1. Операции математического анализа

 

Операции математического анализа

  • Вычисление сумм
  • Вычисление произведений
  • Вычисление производных
  • Вычисление интегралов
  • Вычисление пределов функций
  • Решение уравнений и систем уравнений
  • Решение дифференциальных уравнений
  • Поиск максимального и минимального чисел в списке
  • Поиск максимума и минимума функции
  • Решение задач линейного программирования
  • Преобразования Лапласа
  • Z-преобразования

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

 

2. Вычисление сумм

 

Вычисление сумм

 

Вычисление сумм в аналитическом виде

В числе операций математического анализа прежде всего надо отметить суммы


Сумма от i=min до imax по fi

В этих операциях индекс i принимает целочисленные значения от минимального (начального) imin до максимального (конечного) imax с шагом, равным +1.

Суммы и произведения легко вычисляются численными математическими системами, такие вычисления просто описываются на всех языках программирования. Однако важным достоинством систем символьной математики, включая Ма-thematica, является вычисление сумм и произведений в аналитическом виде (если это возможно) и при большом числе членов — вплоть до стремящегося к бесконечности.

Для вычисления сумм в системе Mathematica предусмотрена функция Sum, используемая в ряде форм:

  • Sum [ f, {i, imax} ] — вычисляет сумму значений f при изменении индекса i от 1 до imax с шагом +1;
  • Sum[f, {i, imin, imax}]—вычисляет сумму значений f при изменении индекса i от минимального значения i=imin до максимального i=imax с шагом +1;
  • Sum[f, {i, imin, imax, di}]— вычисляет сумму значений f при изменении управляющей переменной вещественного типа от минимального значения i=imin до максимального i=imax с шагом di;
  • Sum[f, {i, imin, imax}, {j, jmin, jmax},...] — вычисляет многократную сумму значений f при изменении индексов i от imin до imax с шагом +1, j от jmin до jmax с шагом +1 и т. д. (число индексов не ограничено).

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


Sum[i^2,{i,10}]

385

Sum[i*2,{i,l,10}]

385

Sum[i^2, {1,1,2,0.25}]

11.875

Sum[i*j, {i,1,10},{j, 2, 5}]

770

В последнем примере использована стандартная форма вывода — при ней функция суммирования представляется в виде оператора суммирования.

Обычно в математических системах недопустима перестановка imin и imax, хотя в математике известно школьное правило — от перестановки слагаемых сумма не изменяется. Рискнем проверить это:


Sum[i,{i, 1,100}]

5050

Sum[i, {1,100,1}]

0

Sum[i, {1,100, 1,-1}]

5050

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

Не применяйте установки параметров, противоречащие синтаксису записи той или иной функции — в частности, Sum. Это чревато возникновением серьезных ошибок.

Приведем еще ряд примеров выполнения операции суммирования:


Sum[ xn/n! , {n, 0, 8}]

1+X+X2/2 X3/6 X4/24 X5/120 X6/720 X7/5040 X8/40320

Sum[xn/n! , {n, 1, 9, 2}]

X+X3/3 X5/120 X7/5040 X9/362880


Sum[xi yi , {i, 1, 4},{j, 1, i}]

xy+ x2 у + x3 у + x4 у + x2:/2 + x3 у2 + x4y2 + x3 у3 + x4 у3 + x4y4

Sum[1/n*n , {n, 1, бесконечность}]

л2/6

Sum[i4 {i, 1, n}]

1/30n(1-n)(1+2n) (-l + 3n+3n2)

1/3(3 - 3 EulerGamma + 2 n + n3) - PolyGamma[0, 2 + n]

Из этих примеров видно, что Mathematica 3/4 обеспечивает возможность символьного вычисления сумм, в том числе с бесконечным пределом суммирования. Вычисляются даже суммы, выраженные через специальные математические функции (см. последний пример). При этом для вычисления сумм в символьном виде, в отличие от предшествующих версий Mathematica, уже не требуется загрузка специального пакета для расширенных (символьных) операций с суммами.

Вычисление сумм в численном виде

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

  • NSum[f, {i, imin, imax }]— возвращает численное значение суммы f [ i ] при i, изменяющемся от imin до imax с шагом +1;
  • NSumff, {i, imin, imax, di }]— возвращает сумму численных значений функции f [i] при i, изменяющемся от imin до imax с шагом di;
  • NSum[f, {i, imin, imax}, {j, jmin, j max },...]— выполняет многомерное суммирование. Функция NSum[... ] эквивалентна выражению N[Sum[...] ].

Особенностью этой функции является возможность использования ряда опций, управляющих вычислительным процессом. Одной из них является NSumTerms, задающая число членов, которые явно должны быть включены в сумму перед экстраполяцией. Вы можете просмотреть список опций, используя команду Options [NSum] . 

Пример применения функции NSum представлен ниже:


NSum[1/i3, {i, 1, бесконечность}]

1.20206

Пример точного вычисления суммы (для сравнения) с помощью функции Sum:


truesum = Sum [1+k/ 2k k/ 3k{k, 1, 50}

1818632874295681087853745424762603034467 / 808281277464764060643139600456536293376

N[%]

2.25

Пример вычисления той же суммы с помощью функции NSum с опциями:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit,

NSumTerms -> 2 , NSumExtraTerms -> 4 ] - truesum

0.0530365

При следующем наборе опций результат еще лучше:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit, WorkingPrecision -> 30 , NSumTerms -> 2 ,

NSumExtraTerms -> 10, WynnDegree -> 4] - truesum

0.x10-26

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

 

3. Вычисление произведений

 

Вычисление произведений

 

Вычисление произведений в аналитическом виде

Операции вычисления произведений

Произведение от i=imin до i=imax по fi представлены следующими функциями:

  • Product [f, {i, imax}] — возвращает произведения значений f [i] для значений i, изменяющихся от 1 до imax;
  • Product [f, {i, imin, imax}]—возвращает произведение значений f [ i ] при изменении i от imin до imax с шагом +1;
  • Product[f, {i, imin, imax, di}] — возвращает произведение f [ i ] при i, меняющемся от значения imin до значения imax с шагом di;
  • Product [f, {i, imin, imax}, {j, jmin, jmax},...] — вычисляет многократное произведение (произведение по нескольким переменным).

Примеры использования функций вычисления произведения.


Ввод (In)

Вывод (Out)

Product [i,{i ,10}]

3628800

NProduct [k ^ 2,{k, 1,5}] 14400.
NProduct[i ^ 2, {1,1,2,0. 2}] 93.6405
Product [Logfi], {±,2,5,0.5}] 4.23201 Log[2]

Следующий пример иллюстрирует вычисление произведения в символьном виде:


Произведение (x+i2) , где i=1...5

(1+х) (4 + х) (9 + х) (16 + х) (25 + х)

Об опасности перестановки сомножителей свидетельствуют следующие примеры: Product [i, i,l, 10] 3628800


Product [i,i, 10,1]

1

Product[i,i,10,l,-l]

3628800

Как и в случае вычисления суммы, средний пример явно ошибочен. Он просто недопустим с точки зрения синтаксиса данной функции.

Вычисление произведений в численном виде

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

  • NProduct [f , {i, imax }]— возвращает численное значение произведения значений f [i] для значений i, изменяющихся от 1 до imax;
  • NProduct [f, {i, imin, imax}] — возвращает численное значение произведения значений f [i] при изменении i от imin до imax с шагом +1;
  • NProduct [f, {i, imin, imax, di }]— возвращает численное значение произведения значений f [i] при i, меняющемся от значения imin до значения imax с шагом di;
  • NProduct[f, {i, imin, imax}, {j, jmin, j max },...]— вычисляет численное значение многократного произведения (произведение по нескольким переменным).

Эти функции применяются с теми же опциями, которые используются для функции Nsum, что позволяет управлять вычислительным процессом. Ознакомиться с опциями можно, выполнив команду Options [NProduct] . Ниже представлен пример на использование функции Nproduct. Сначала вычисляем точное значение произведения для использования в качестве эталона:


trueproduct = Product [ j/(1+j), { j , 1 , 50 } ]

1/ 51

Пример вычисления того же произведения с помощью функции NProduct — погрешность велика:


NProduct [ j/(1+j) , {j, I, 50},

Method -> SequenceLimit, NProductFactors -> 2 ,

NProductExtraFactors -> 4] - trueproduct

0.188235

В следующем примере опции подобраны лучше — погрешность мала:


NProduct[j/(1+j) , {j, 1, 50},

Method-» SequenceLimit, NProductFactors -> 50,

NProductExtraFactors ->4] - trueproduct

-1.38778 x 10-17

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

 

4. Вычисление производных

 

Вычисление производных

 

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

  • D [ f, х ] — возвращает частную производную функции f по переменной х;
  • D [f, {х, n}]— возвращает частную производную n-го порядка по х;
  • D[f, xl, х2,...] — возвращает смешанную производную;
  • Dt[f, х] — возвращает обобщенную производную функции f по переменной х;
  • Dt [ f ] — возвращает полный дифференциал f.

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

Для функции D существует опция NonConstants, которая позволяет задать список объектов, находящихся в неявной зависимости от переменных дифференцирования. По умолчанию этот список пустой. Для функции Dt имеется опция Constants, которая, наоборот, указывает символы, которые являются константами (по умолчанию их список также пуст). На практике применять данные опции приходится редко.

Существует еще одна функция, Derivative [nl, n2,...] [f ], — основная (общая) форма представления функции, полученной в результате nl-кратного дифференцирования функции f по первому аргументу, п2-кратного — по второму аргументу и т. д.

К примеру, Derivative [2] [х*у] возвращает (ху)", a Derivative [2, 3] [х*у] — соответственно, (ху) (2.3)

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

  • Производная тригонометрической функции:

    D[x*Sin[x],x]

xCos[x] + Sin[x]

  • Производная экспоненциальной функции:

    D[Exp[x/b],x]

    ex/b/b

  • Производная логарифмической функции:

    D[Log[3*x/4],x]

    1/x

  • Производная степенного многочлена:

    D[а*х^2+b*х+с,х]

    b+ 2ах

  • Пятая производная от х n :

    D[х^n,{х,5}]

    (-4 + n) (-3+n) (-2+n) (-1+n)nх -5+n

  • Производная функции двух переменных:

    D[(x^m)*y^n,x,y]

    mnx -1+m y -1+n

  • Производная функции Бесселя:

    D[BesselJ[2,x] ,x]

    1/2 (BesselJ[l, х] -BesselJ[3, x] )

  • Производная ортогонального полинома Чебышева:

    D[ChebyshevT[4,x],x]

    -16x + 32x3

Следующие примеры иллюстрируют вычисление производных от первого до третьего порядка включительно для функции f [ х ], заданной пользователем.


Ввод (In) Вывод (Out)
f[x] :=х/(1+х ^ 2)  
D[f[x],{x,l}] -2x 2 /(1+x 2 ) 2 +1/(1+x 2 )
D[%,x] -8x 3 /(1+x 2 ) 3 +6x/(1+x 2 ) 2
D[f[x],{x,2}] -8x 3 /(1+x 2 ) 3 +6x/(1+x 2 ) 2
D[D[D[f[x],x],x],x] -48x 4 /(1+x 2 ) 4 +48x 2 /(1+x 2 ) 3-6/(1+x 2 ) 2
D[f[x],{x,3}] -48x 4 /(1+x 2 ) 4 +48x 2 /(1+x 2 ) 3-6/(1+x 2 ) 2

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

На рис. 4.1 показано построение графика функции Sin [x] /х, заданной как функция пользователя, и ее производной с помощью функции Plot.

Рис. 4.1. График функции Sin[x]/x и ее производной

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

Использование функции Dt демонстрируют примеры, приведенные ниже.


Ввод (In) Вывод (Out)
Dt[x*n,x] x n (n/x +Dt[n, x] Log[x] )
Dt[x*Sin[x] ,x] xCos[x] + Sin[x]
Dt[Exp[x/b],x] e x/b /b(1/b-xDt[b, x]/b 2 )
Dt[a*x ^ 2+b*x+c,x] b+ 2 ax + x 2 Dt[a, x] + xDt[b, x] + Dt[c, x]
Dt[x*n,{x,2}] x n (n/x+Dt[n, x] Log[x] ) + x n (-n/x 2 2Dt[n, x] +Dt[n, {x/2}]Log[x])
Dt[Log[3*x/4],x] 1/x
Dt[BesselJ[2,x] ,x] 1/2(BesselJ[l, x] -BesselJ[3, x] )
Dt[ChebyshevT[4,x] ,x] -16x + 32x 3

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

 

gl4-1.jpg

Изображение: 

5. Вычисление интегралов

 

Вычисление интегралов

 

Вычисление интегралов в символьном виде

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


f(x)dx = F(x) + C,

где С — постоянная интегрирования. А вычисление определенного интеграла с пределами — верхним b и нижним а — производится по формуле


f(X)dX = F(b)-F(a)

Заметим, что определенный интеграл может быть представлен как аналитическим, так « численным значением. Для вычисления численных значений определенных интегралов разработан ряд приближенных методов — от простых (прямоугольников и трапеций) до сложных, автоматически адаптирующихся к характеру изменения подынтегральной функции f(x).

Для интегрирования в системе Mathematica используются следующие функции:

  • Integrate [f, x] — возвращает первообразную (неопределенный интеграл) подынтегральной функции f по переменной х;
  • Integrate [f, {x, xmin, xmax}] — возвращает значение определенного интеграла с пределами от x min до x max ;
  • Integrate [f, {x, xmin, xmax}, {у, ymin, ymax},...] —возвращает значение кратного интеграла с пределами от x min до x max по переменной х, от y min до y max по переменной у и т. д. (кратность реально не ограничена).

Обычно функция Integrate применяется в простейшей форме, но она имеет три характерные опции:


Options[Integrate]

{Assumptions -> {}, GenerateConditions->Automatic,

PrincipalValue > False)

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

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

Здесь входная ячейка в первом примере представлена в формате ввода (Input-Form), а в остальных примерах — в стандартном формате (StandardForm). При записи интегралов последний предпочтителен ввиду большей наглядности, поскольку при этом знаки интеграла имеют естественный математический вид. Обратите внимание на проверку операции интегрирования с помощью дифференцирования в двух последних примерах.

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

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

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

Рис. 4.2. Примеры вычисления неопределенных интегралов (начало)

Рис. 4.3. Примеры вычисления неопределенных интегралов (продолжение)

Рис. 4.4. Примеры вычисления неопределенных интегралов (окончание)

 

Вычисление определенных интегралов

Следующая серия примеров (рис. 4.5) иллюстрирует вычисление определенных интегралов в символьном виде.

Рис. 4.5. Примеры вычисления определенных интегралов обычного вида

Приведенные на рис. 4.6 примеры показывают вычисление определенных интегралов с пределами-функциями.

Рис. 4.6. Примеры вычисления определенных интегралов с пределами-функциями

Системы Mathematica имеют самые обширные возможности вычисления интегралов. Ядро системы вобрало в себя формулы интегрирования из всех известных справочников и даже древних рукописей.

Вычисление кратных интегралов

Mathematica способна вычислять даже кратные интегралы с фиксированными и переменными верхним или нижним пределами. Кратный, например двойной, интеграл с фиксированными пределами имеет вид:


f(x,y)dxdy

На рис. 4.7 представлено вычисление нескольких двойных определенных интегралов.

Рис. 4.7. Примеры вычисления двойных определенных интегралов

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


Integrate!Integrate[x^3+y^3,x],y]

x4y/4+y4x/4

( (x3 + y3) dx) dy

x4y/4+y4x/4

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

Рис. 4.8. Примеры вычисления кратных интегралов с пределами-функциями

Хотя вычисление двойного интеграла предусмотрено в синтаксисе функции Integrate, это не всегда дает результат. Как правило, вычисление кратных интегралов лучше производить, используя последовательное вычисление однократных интегралов, вложенных друг в друга. Это и показывают приведенные примеры.

Особые случаи вычисления интегралов

При вычислении сложных интегралов, например не имеющих представления через элементарные функции, система Mathematica 2 обращалась к своим пакетам расширений в попытке найти решение, которое может быть представлено через специальные математические функции. Mathematica 3/4 уже не акцентирует внимание пользователя на своих проблемах и, как правило, выдает результат интегрирования. Однако порой он может иметь довольно необычный вид (рис. 4.9).

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

Рис. 4.9. Примеры вычисления особых интегралов

В заключение надо отметить, что результаты символьного интегрирования в системах Mathematica 3 и Mathematica 4 нередко различаются. Более того, они могут различаться и в пределах одной версии Mathematica, так как ядро системы постоянно совершенствуется. Обычно более поздние версии дают более точные результаты вычислений особых интегралов, хотя подчас они и выглядят более сложными и даже необычными. Это говорит о необходимости вдумчиво относиться к получаемым результатам.

Численное интегрирование

Для вычисления численных значений определенных интегралов используется функция NIntegrate [f, {x, xmin, xmax}], которая возвращает численное приближение интеграла от функции f по переменной х в пределах от x min до x max .

Она имеет ряд опций, которые можно получить, исполнив команду Options [Nlnteg-rate]. Описание этих опций дано в приложении. Приведем примеры численного интегрирования.

Ввод (In)

Вывод (Out)

NIntegrate [Bessel J [l,x] ^ 3,{x,0,l}]

0.0243409

N[Sqrt [Pi] *Gamma [1/6] / (6*Gamma [2/3] ) ] 1.21433
NIntegrate [1/Sqrt [1-х^6] , {х , 0 , 1 } ] 1.21433
NIntegrate [E ^ -x*Cos [х] , {х, 0 , Infinity} ] 0.5
NIntegrate [х*у, {х,0,1} , {у,х,х ^ 2} , {z,x*y,x ^ 2*y ^ 3}] 0.010582
NIntegrate [l/(x*y) , {х,4,4 .4} , {у, 2, 2. 6}] 0.025006
NIntegrate [Sqrt[2*x+l] ,{x,0,l}] 1.39872

Эти примеры показывают, что функция NIntegrate с успехом может применяться для вычисления как однократных, так и многократных определенных интегралов, в том числе с переменными пределами.

 

gl4-2.jpg

Изображение: 

gl4-3.jpg

Изображение: 

gl4-4.jpg

Изображение: 

gl4-5.jpg

Изображение: 

gl4-6.jpg

Изображение: 

gl4-7.jpg

Изображение: 

gl4-8.jpg

Изображение: 

gl4-9.jpg

Изображение: 

6. Вычисление пределов функций

 

Вычисление пределов функций

Многие функции при приближении аргумента к некоторому значению или к некоторой области значений стремятся к определенному пределу. Так, функция sin(x)/x при х, стремящемся к нулю (обозначим это как х—> 0), дает предел 1 в виде устранимой неопределенности 0/0.

Численные математические системы, равно как и большинство программ на обычных языках программирования, не воспринимают выражение 0/0 —> 1 как объективную реальность. Их защитный механизм настроен на примитивное правило — ничего нельзя делить на 0. Следовательно, вычисление sin(x)/x при х = 0 будет сопровождаться выдачей ошибки типа «Деление на 0». Конечно, в данном конкретном случае можно предусмотреть особый результат — выдать 1 при х = 0. Но это частный случай. В целом же подобные системы «не понимают» понятия предела.

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

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

Рис. 4.10. Примеры вычисления пределов

При работе с функцией Limit используются следующие опции:

  • Analytic — указывает, следует ли неопознанные функции интерпретировать как аналитические (значение по умолчанию — Automatic);
  • Direction — указывает направление, в котором происходит приближение к пределу. Опция используется в виде Direction -> -1 (или +1), по умолчанию выбор остается за системой (Automatic). Значение +1 означает предел слева, а -1 — справа (казалось бы, должно быть наоборот, но задано именно так).

Применение данных опций поясняют примеры, показанные на рис. 4.11.

 

Рис. 4.11. Примеры вычисления пределов с применением опций

 

gl4-10.jpg

Изображение: 

gl4-11.jpg

Изображение: 

7. Уравнения и системы уравнений

 

Уравнения и системы уравнений

 

Решение уравнений

Многие математические задачи сводятся к решению в общем случае нелинейных уравнений вида f(x) = 0 или f(x) = expr.

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

Для решения уравнений (как одиночных, так и систем) в численном и символьном виде Mathematica имеет функцию Solve:

  • Solve [eqns, vars] — предпринимает попытку решить уравнение или систему уравнений eqns относительно переменных vars;
  • Solve [eqns, vars, elims] — пытается решать уравнения eqns по переменным vars, исключая переменные elims.

Входные параметры этой функции могут быть представлены списками или записаны выражениями через объединительный знак«&&». В eqns в качестве знака равенства используется знак «= =». Примеры применения функции Solve представлены на рис. 4.12.

Рис. 4.12. Примеры решения уравнений

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

Решение систем нелинейных уравнений в символьном виде

Приведенные на рис. 4.13 примеры показывают решение систем нелинейных уравнений с помощью функции Solve.

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

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

Рис. 4.13. Примеры решения систем нелинейных уравнений

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

В первом примере решение кажется очевидным (равенства выполняются, например, при х=2 и у=3). Однако здесь Mathematica дает сразу три пары решений, и все они оказываются верны, поскольку после подстановки проверка всех равенств возвращает True.

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

Рис. 4.14. Примеры решения уравнений с проверкой

 

Опции функции Solve

С функцией Solve можно использовать ряд опций. Их можно вывести командой Options [Solve]. Ниже описано их назначение:

  • InverseFunctions — указывает, следует ли использовать обратные функции;
  • MakeRules — указывает, должен ли результат быть представлен как объект AlgebraicRulesData;
  • Method — устанавливает алгоритм, используемый для вычисления результата (возможны методы 1, 2 и 3);
  • Mode — задает характер решения уравнения (возможны Generic, Modular и Rational);
  • Sort — устанавливает, нужна ли сортировка результатов;
  • Verif ySolutions — устанавливает, следует ли проводить проверку полученных решений и удаление посторонних решений;
  • WorkingPrecision — устанавливает число цифр промежуточных вычислений (по умолчанию Infinity).

На рис. 4.15 приведены примеры применения функции Solve с опцией Inverse-Functions.

Обратите внимание на то, что последняя система уравнений при отсутствии опции InverseFunctions решается с предупреждением. Она вообще не решается, если эта опция задана как False, и гладко решается при InverseFunctions -> True.

Рис. 4.15. Примеры решения уравнений с опцией InverseFunction

То, насколько может влиять на решение опция Method, наглядно показывают примеры, представленные на рис. 4.16.

Рис. 4.16. Примеры решения уравнений разными методами

Множество примеров решения систем нелинейных уравнений в символьном виде можно найти в справочной системе Mathematica.

Численное решение уравнений

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

  • NSolve [eqns, vars] — пытается численно решить одно уравнение или систему уравнений eqns относительно переменных vars;
  • NSolve [eqns, vars, elims] — пытается численно решить уравнения eqns относительно vars, исключая переменные elims.

С этой функцией используется единственная опция WorkingPrecision, задающая число верных цифр результата — по умолчанию 16. На рис. 4.17 представлены примеры использования функции NSolve для численного решения уравнений.

Риc. 4.17. Примеры численного решения уравнений

Результаты решения с помощью функции NSolve также рекомендуется проверять с помощью подстановки, например, так:


е=2*х^2 + 5*х- 15 == х^3

-15 + 5х + 2х2 ==х3

r=NSolve[e,x]

{{х->-2.4734}, {х->2.2367-1.03038i},

{х->2.2367 + 1.03038i}}

е/.r

{True, True, True}

Нетрудно заметить, что в данном случае решение верно.

Поиск корней уравнений

Для вычисления корней полиномиальных уравнений используется функция Roots:

Roots[lhs==rhs, var]

На рис. 4.18 представлены примеры применения функции Roots.

Рис. 4.18. Примеры использования функции Roots

Формат выдачи результатов для функции Roots отличается от такового для функции Solve. Поэтому проверку решения подстановкой надо выполнять как в следующем примере:


e = x^2+3x==2

Зх + х2 == 2

N[Roots[e, x]]

х == -3.56155 | | х == 0.561553

r= {ToRules[%]}

{{х^-3.56155}, {х^ 0.561553}}

е/. r

{True, True}

Для преобразования результата вычислений в список решений (подобный решениям, получаемым с помощью функции Solve) здесь использована функция ToRules.

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


Options[Roots]

{Cubics -> True, Eliminate -> False, EquatedTo-> Null,

Modulus -> 0, Multiplicity->1, Quar tics -> True, Using -> True}

Ниже они описаны подробно:

  • Cubics — указывает, следует ли искать явные решения для неприводимых кубических уравнений;
  • EquatedTo — задает выражение для замещения переменной в решении;
  • Modulus — задает промежуточную факторизацию полинома;
  • Multiplicity— устанавливает кратность каждого из корней в конечном результате;
  • Quartics — задает точное решение квадратного уравнения и полинома четвертой степени;
  • Using — указывает какие-либо дополнительные уравнения, которые следует использовать для решения уравнений.

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

Дополнительные функции для решения уравнений

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

  • Auxiliary [v] — применяется модулем Solve для указания того, что переменная v должна использоваться функцией Roots для результирующих решений, но соответствующие значения v не должны быть включены в окончательный ответ;
  • Eliminate [eqns, vars] — исключает переменные vars из системы уравнений eqns;
  • FindRoot [Ihs == rhs, {x, x0}] — ищет численное решение уравнения Ihs == rhs, начиная с х = x0;
  • MainSolve [eqns] — основная функция для преобразования системы уравнений. Ее вызывают Solve и Eliminate. Уравнения должны быть представлены в форме Ihs == rhs. Они могут объединяться с помощью && и | |. MainSolve возвращает False, если не существует решения уравнений, и возвращает True, если все значения переменных являются решениями. MainSolve перестраивает уравнения, применяя определенные директивы;
  • MainSolve [eqns, vars, elim, rest] — пытается перестраивать уравнения eqns так, чтобы найти решения для переменных vars и исключить переменные elim. Список rest может включаться для указания порядка исключения любых остальных переменных;
  • NRoots [lhs==rhs, var] — возвращает список численных приближений корней полиномиального уравнения;
  • Residue [ехрr, {х, х0 } ] — ищет вычет ехрг в точке х = х0;
  • SolveAlways [eqns, vars] — возвращает значения параметров, которые превращают уравнения eqns в тождества для всех значений переменных vars.

Примеры использования некоторых из этих функций показаны на рис. 4.19.

Рис. 4.19. Примеры применения дополнительных функций для решения уравнений

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

Графическая иллюстрация и выбор метода решения уравнений

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

На самом деле порой даже простые уравнения могут не иметь решения. В сложных случаях очень полезна графическая визуализация решения. В качестве примера на рис. 4.20 показана визуализация вычисления корней квадратного уравнения. В данном случае график функции явно указывает на существование двух действительных корней при х, близких к 0.2 и 2.3. Функция Nsolve без труда находит оба корня.

Рис. 4.20. Визуализация решения квадратного уравнения для случая двух действительных корней

А вот на рис. 4.21 показан случай, когда из-за изменения последнего члена квадратичной функции ее график уже не пересекает ось х вообще. Это говорит о том, что решения в виде действительных корней нет. И в самом деле, NSolve находит корни как комплексно-сопряженные числа. Действительная часть найденных корней дает координату х для впадины кривой — параболы.

Если требуется решение равенства f1(х) = f 2 (x), то для графической визуализации решения можно построить графики функций f1(х) и f 2 (лг) — наличие точек их пересечения будет означать существование действительных корней. Этот случай иллюстрирует рис. 4.22. В данном случае проблем с решением нет, поскольку, по существу, решается квадратное уравнение.

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

Рис. 4.22. Пример визуализации решения уравнения вида f(x) = 5х + 1

Но вот на рис. 4.23 показан случай решения уравнения f(x) = ехр(х/2). Графики функций ясно показывают, что парабола пересекается экспонентой в двух точках. Однако функция NSolve отказывается решать такое уравнение и выдает сообщение о том, что оно является трансцендентным.

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

Рис. 4.23. Пример решения уравнения вида f(x) = ехр(х/2)

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

Получение сразу нескольких корней

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

Пусть требуется в интервале изменения х от 0 до 20 найти все решения уравнения


х sin(x) + х/2 - 1 = 0

График функции, представляющей левую часть уравнения, показан на рис. 4.24. Хорошо видно, что он пересекает ось х семь раз, то есть имеет в интересующем нас диапазоне семь корней.

Рис. 4.24. График функции х sin(x) + х/2 - 1 и пример вычисления всех ее корней в интервале изменения х от 0 до 20

Колебательная составляющая функции обусловлена входящей в нее функцией sin(x), которая имеет нули в точках 0, n, 2n, Зn... Однако, как видно из рис. 4.24, эти значения лишь приближенные, ввиду влияния других членов уравнения.

Ключевая идея получения всех корней уравнения заключается в поиске нужных решений с помощью функции FindRoot, которой последовательно подставляются различные начальные приближения. Однако вместо уже испытанного приема — поиска корней поодиночке — можно воспользоваться «таблицей» решений, используя функцию Table. Решение, приведенное под графиком функции на рис. 4.24, наглядно иллюстрирует возможности этого приема — найдены (или, вернее, уточнены) все семь корней исходного уравнения.

Получение неизвестных в явном виде

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


{х,у,z,...}/.

Список переменных в этом выражении должен однозначно соответствовать списку неизвестных системы уравнений. Покажем этот прием в действии. Ниже приведено решение системы из трех нелинейных уравнений:


FindRoot[{x-2==9,y^2=16,x+y+z==10},{x,l.},{y,l.},{z,l.}]

(Х-> 3., у-> 4., z->3.} {x,y,z}

{X, у, 2}

Обратите внимание на то, что вывод списка {х, у, z } не дает полученных значений неизвестных. Это связано с тем, что переменные в блоке решения имеют ло-к(1лъный характер и за пределами блока их значения (в том числе неопределенные) сохранятся такими, какими они были до применения в блоке решения.

Теперь зададим решение в ином виде:


{x,y,z}/.FindRoot[{x*2==9, уА2==1б, x+y+z==10}, {x,l.}, {у,1.}, {z,l.}]

{3., 4., 3.}

Как видите, на сей раз решение получено в виде списка с числами — явными значениями неизвестных. Можно обозначить их как а, Ь и с, получить список {а, b, с} и даже использовать их отдельно:


{а,b,с}=%

(З.,4.,3.)

а,b,с

{З.,4.,3.}

а

3.

b

4.

с

3.

Теперь можно проверить решение данной системы:


{а^2, b^2,а+b+с}

{9., 16., 10.}

Полученный вектор правых частей системы совпадает с заданным, что свидетельствует о правильности решения. Разумеется, вместо нового списка { а , b , с } для вектора решения можно было использовать и вектор { х, у, z } .

 

gl4-12.jpg

Изображение: 

gl4-13.jpg

Изображение: 

gl4-14.jpg

Изображение: 

gl4-15.jpg

Изображение: 

gl4-16.jpg

Изображение: 

gl4-17.jpg

Изображение: 

gl4-18.jpg

Изображение: 

gl4-19.jpg

Изображение: 

gl4-20.jpg

Изображение: 

gl4-21.jpg

Изображение: 

gl4-22.jpg

Изображение: 

gl4-23.jpg

Изображение: 

gl4-24.jpg

Изображение: 

8. Дифференциальные уравнения

 

Дифференциальные уравнения

 

Решение дифференциальных уравнений в символьном виде

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


у'(х) = eqn=f(x,y).

Несколько дифференциальных уравнений образуют систему дифференциальных уравнений. Решение таких систем также возможно средствами Mathematica и подробно описано в ряде книг по использованию системы [65-71]. Дифференциальные уравнения и системы дифференциальных уравнений могут быть линейными и нелинейными. Для линейных уравнений обычно существуют решения в аналитическом виде. Нелинейные дифференциальные уравнения в общем случае аналитических решений не имеют, но могут решаться приближенными численными методами.

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

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

  • DSolve[eqn, y[x], х] — решает дифференциальное уравнение относительно функций у [ х ] с независимой переменной х;
  • DSolve[{eqnl, eqn2,...}, {yl [xl,...],...}, {xl,...}]-решает систему дифференциальных уравнений.

У функции DSolve и ее численного варианта NDSolve есть пара опций, на которые следует обратить внимание:

  • DSolveConstants — опция к DSolve, определяющая постоянные интегрирования, которые будут использованы в результате;
  • StartingStepSize — опция к NDSolve, определяющая величину начального шага.

В решении дифференциальных уравнений встречаются постоянные интегрирования. По умолчанию они обозначаются как С [ i ].

Приведем примеры решения дифференциальных уравнений:


DSolve [Derivative [1] [у] [х] ==2*а*х^3, у[х], х]

{{у[х]->aх4/2+С[1]}}

DSolve[{yl' [х] == 2 х2, у2' [х] == 3 х}, {yl[х], у2[х]}, х]

{{yl[x] ->-2х3/3+C[1], у2[х] ->3х2/2+C[2]}}

DSo2ve{y'[x] +у[х] ==х, у[х], х}

{{у[х] -*-1+х + е-хС[1]}}

DSolve [у" [х] - у' [х] - 6 у [х] == 0, у [х] , х] {{У[х] ->| е-4хС[1] + С[2] -Cos[2x] -|sin[2x]}}

DSolve [у" [х] + 4 у'[х] == 10 Sin [2 х] , у [х] , х]

{{У[х] ->| е-4хС[1] + С[2] -Cos[2x] -|sin[2x]}}

DSolve[y'[x] == Sin[Ex] , y[x] , x]

{{y[x] ->C[1] +Sinlntegral[ex]}}

DSolvefz2 w"[z] +zw'[z] - (z2 + l)w[z] ==0, w[z], z]

{{w[z] ->BesselI[l, z] C[l] +BesselK[l, z] C[2] }}

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

Решение дифференциальных уравнений в численном виде

Многие дифференциальные уравнения не имеют аналитических решений — например, нелинейные. Однако они могут с приемлемой точностью решаться численными методами. Для численного решения систем дифференциальных уравнений используется функция NDSolve:

  • NDSolve [eqns, у, {x, xmin, xmax }]— ищет численное решение дифференциальных уравнений .eqns относительно функции у независимой переменной х в интервале от xmin до xmax;
  • NDSolve [eqns, {yl, y2,...}, {x, xmin, xmax }]— ищет численные решения относительно функций yi.

MaxSteps — опция к NDSolve, которая определяет максимальное количество шагов.

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

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

Простота задания решения и вывода его результатов в графической форме открывает широкие возможности применения системы для математического моделирования сложных явлений. При этом, в отличие от такого решения с помощью обычных языков высокого уровня (например, Фортран, Бейсик, Паскаль или С), не требуется составления каких-либо программ по реализации численных методов решения систем дифференциальных уравнений, таких как, скажем, метод Рунге— Кутта. Они представлены в виде уже готовых функций.

Рис. 4.25. Решение системы дифференциальных уравнений с выводом решения в виде графиков временных зависимостей

Рис. 4.26. Решение системы дифференциальных уравнений с выводом решения в форме кривых на фазовых плоскостях

 

gl4-25.jpg

Изображение: 

gl4-26.jpg

Изображение: 

9. Оптимизационные задачи

 

Оптимизационные задачи

 

Поиск максимального и минимального чисел в списке

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

Для поиска максимального и минимального значений ряда чисел, входящих в список, система Mathematica предоставляет следующие средства:

  • Max [xl, х2,...]— возвращает наибольшее значение из xi;
  • Max[{xl, x2,...}, {yl,...},...] — выбирает наибольший элемент из нескольких списков;
  • Min[xl, x2,...] — возвращает наименьшее значение из xi;
  • Min[{xl, x2,...}, {yl,...},...] — выбирает наименьший элемент из нескольких списков.

Следующие примеры показывают действие этих простых функций.


Ввод (In) Вывод(Out)
Мах[1,5,2,6.5,3,4] 6.5
Мах[{1,3,2},{4,5,6},{9,8,7}] 9
Min[1,5,2,6.5,-3,4] -3
Min[{1,3,2},{4,5,6},{9,8,7}] 1

 

Поиск локального минимума аналитической функции

Если нужен поиск локального минимума некоторой аналитической функции, используется функция FindMinimum [ f, {х, х0 } ], которая выполняет поиск локального минимума функции f, начиная со значения х=х0, и возвращает его значение.

Для указания градиента минимизируемой функции используется опция Gradient.

Приведем примеры применения функции FindMinimum:


FindMinimum[-хЕхр[-2 х] , {х, 1}]

{-0.18394, {х^ 0.5}}

FindMinimum[-хЕхр[-2 х] , {х, 0.2, 6, 1}]

{-0.18394, {х^ 0.5}}

FindMinimum [-5 xExp[-x/2] (2 + Sin[3x]), {х, 1}]

{-7.17833, {х^ 0.783139}}

FindMinimum[-5xExp[- x/2] (2 + Sin[3 x]) , {x, 3}]

(-10.6299, {x^ 2.5805}}

FindMinimum[-5xExp[- x/2] (2+Sin[3x]), {x, 4}]

{-6.79134, {x^ 4.6179}}

FindMinimum[l00 (y-x2)2+ (1 -x)2, {x, 0}, {y, 0},

AccuracyGoal-»Automatic]

{9.90511X10-13, {x->l., y^ 0.999999}}

Эти примеры показывают, что выбирая разные начальные значения х, можно найти ряд минимумов функции f(x), разумеется, если таковые имеют место. Если необходимо разыскивать локальные максимумы, достаточно перед функцией поставить знак «минус» или умножить ее на -1.

Поиск глобального максимума и минимума аналитической функции

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

  • ConstrainedMax [f, {inequalities}, {x, у,...}] — ищет глобальный максимум функции f в области, определяемой неравенствами inequalities. Полагается, что все переменные х, у... неотрицательны;
  • ConstrainedMin [f, {inequalities}, {x, у,...}]— ищет глобальный минимум функции f в области, определяемой неравенствами inequalities. Все переменные х, у... полагаются неотрицательными.

Решение задач линейного программирования

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


LinearProgramming[с, m, b]

которая ищет вектор х, минимизирующий величину с. х в соответствии с условиями m.x>=b и х>=0.

Рассмотрим типичный пример на линейное программирование. Пусть цех малого предприятия должен изготовить 100 изделий трех типов, причем не менее 20 штук каждого. На изготовление этих изделий уходит, соответственно, 4, 3,4 и 2 кг металла. Имеющийся в наличии запас материала — 700 кг. Спрашивается, сколько изделий xl, х2 и хЗ каждого типа надо выпустить для обеспечения максимальной стоимости продукции, если цена изделий равна, соответственно, 4, 3 и 2 рубля.

Ниже представлено решение этой задачи с помощью функции ConstrainedMax:


ConstrainedMax [

4 * xl + 3 * x2 + 2 * хЗ ,

{xl >= 20, x2 >= 20, хЗ >= 20,

4 * xl + 3 . 4 * x2 + 2 * x3 <= 340 ,

4 .75 * xl + 11 * x2 + 2 * x3 < = 700 ,

xl + x2 + x3 == 100},

{xl, x2, x3}]

{332., {xl^ 56^x2^ 20., x3^24.}}

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

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

 

10. Преобразования Лапласа — LaplaceTransform

 

Преобразования Лапласа-LaplaceTransform

 

Преобразования Лапласа — важный вид интегральных преобразований. Они лежат в основе, например, символического метода расчета электрических цепей. В системе Mathematica 3 функции преобразования размещены в подпакете Laplace-Transform. Но в CKM Mathematica 4 эти функции стали встроенными.

Основными являются следующие функции этого класса:

  • LaplaceTransform[expr, t, s] — возвращает результат прямого преобразования Лапласа для выражения expr [t] в виде функции переменной s;
  • InverseLaplaceTransform[expr, s,t] — возвращает результат обратного преобразования Лапласа для выражения expr [s] в виде функции переменной t;
  • LaplaceTransform [expr, {tl, t2,...}, {s1i, s2,...} ] — возвращает результат прямого преобразования Лапласа для выражения expr [ 11, t2,... ] в виде функции переменных {s1, s2,...};
  • InverseLaplaceTransform [expr, {s1, s2,...}, {tl, t2,...} ] — возвращает результат обратного преобразования Лапласа для выражения expr [s1, s2,...] в виде функции переменных {tl, е2,...}.

Хотя имена переменных t и s можно выбирать произвольно, обычно t означает время, as — оператор Лапласа. Ниже представлено несколько примеров выполнения преобразования Лапласа: 


<<Calculus'LaplaceTransfornT'

LaplaceTransform[Exp[-t]*Sin[t], t, s]

1+1/ (1 + s)2

InverseLaplaceTransform[%,s,t]

E-tSin[t]

LaplaceTransform[t^2 Exp[-x], {t,x}, {s,v}]

2/s3(1 + v)

 

Функции z-преобразований — ZTransform

Z-преобразования широко используются в теории автоматического регулирования. Поэтому в системе Mathematica 4 для осуществления z-преобразований в ядро включены следующие функции:

  • ZTransform[expr, n, z] — возвращает результат прямого 2-преобразования для выражения ехрr, представленного как функция целочисленного аргумента n;
  • InverseZTransform[expr, n, z] — возвращает результат обратного z-npeобразования для выражения ехрr, представленного как функция целочисленного аргумента п.

Приведем примеры выполнения z-преобразований:


ZTransform[Cos[n], n, z]

(1-cos(1)/z)/(1+1/z2-2Cos(1)/z)

InverseZTransform[%,s,t]

Cos[n]

ZTransform[n^2 а^n, n, z]

[-a(1+a/z)/(-1+a/z)3 z

InverseZTransf orm [%, z, n] // Together

ann2

Как и следовало ожидать, прямое, а затем обратное z-преобразование выражения ехрг восстанавливает его в исходном виде. В системе Mathematica 3 эти функции становятся доступными после исполнения команды «DiscreteMath' ZTransform' поскольку они входят не в ядро, а в пакет расширения дискретной математики.

 

11. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Вычислять суммы в аналитическом и численном видах.
  • Вычислять произведения в аналитическом и численном видах.
  • Вычислять производные.
  • Вычислять интегралы в символьном и численном видах.
  • Вычислять пределы функций.
  • Решать в аналитическом и численном видах уравнения и системы уравнений.
  • Осуществлять графическую иллюстрацию решения уравнений.
  • Решать дифференциальные уравнения в символьном и численном видах.
  • Искать максимальное и минимальное числа в списке.
  • Искать локальный максимум и минимум аналитической функции.
  • Решать задачи линейного программирования.
  • Выполнять преобразования Лапласа и z-преобразования.

 

Урок 5. Представление и обработка данных

Урок 5. Представление и обработка данных

1. Представление и обработка данных

 

Представление и обработка данных

  • Разложение функций в ряды Тейлора и Маклорена
  • Удаление члена с остаточной погрешностью ряда
  • Графическая визуализация разложения в ряд
  • Прямое и обратное дискретные преобразования Фурье
  • Спектральный анализ на основе преобразования Фурье
  • Фильтрация сигналов на основе преобразований Фурье
  • Полиномиальная интерполяция и аппроксимация
  • Регрессия и визуализация ее результатов
  • Спектральный анализ таблично заданных сигналов с интерполяцией
  • Моделирование нелинейных цепей с применением интерполяции

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

 

2. Разложение функций в ряды

 

Разложение функций в ряды

 

Разложение функций в ряды Тейлора и Маклорена

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

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

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

  • Series[f, {х, х0, п}]— выполняет разложение в степенной ряд функции f в окрестности точки х=х0 по степеням (х-х0) ^ n;
  • Series [f, {х, х0, nх}, {у, у0, nу}] — последовательно ищет разложения в ряд сначала по переменной у, затем по х;
  • SeriesCoef ficient [s,n] — возвращает коэффициент при переменной n-й степени ряда s;
  • SeriesData [х, х0, {а0, al,...}, nmin, nmax, den] —представляет степенной ряд от переменной х в окрестности точки х0. Величины ai являются коэффициентами степенного ряда. Показатели степеней (х-х0) представлены величинами nmin/den, (nmin+1) /den, ..., nmax/den.

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

Рис. 5.1. Разложение в ряд обобщенной функции f(x)

В первом примере разложение идет относительно исходной точки х0=0, что соответствует упрощенному ряду Тейлора, часто называемому рядом Маклорена. Во втором случае разложение идет относительно исходной точки х0, отличной от нуля. Обычно такое разложение сложнее и дает большую остаточную погрешность.

В соответствии с принятой математической символикой эта погрешность обозначается как О [x] i с показателем степени, указывающим на порядок погрешности. Следует отметить, что разложение в ряд использует особый формат вывода, частью которого и является член остаточной погрешности. На рис. 5.2 показано разложение в ряд Тейлора для нескольких функций, причем вывод дан в стандартной форме.

Рис. 5.2. Примеры представления функций рядами

Нетрудно заметить, что не все функции разлагаются в ряд Тейлора системой . Mathematica. Например, не имеют разложения логарифм и квадратный корень — они возвращаются в исходном виде. А разложение факториала представлено через гамма- и полигамма-функции.

Удаление члена с остаточной погрешностью ряда

Из-за особого формата результаты разложения в ряд нельзя явно использовать для расчетов (например, для построения графика функции по данным ее разложения в ряд). Для устранения остаточного члена и получения приемлемых для расчетов выражений можно использовать функции Collect и Normal. Ниже показаны примеры применения этих функций:


Series[Sin[x],{х,0,7}]

x-x3/6+x5/120 -x7/5040+0[Xl 8

Collect[%,x]

x-x3/6+x5/120 -x7/5040

Normal[Series[Sin[x*y],{х,0,3},{у,0,3}] ]

xy-х3 у3/6

f [х_, у ] =xy-х3 у3/6

xy-х3 у3/6

f[0.1,0.2]

0.0199987

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


F[x_, у_] = Normal [Series [Sin[x* у] , {х, 0, 3), {у, 0, 3}]

xy-х3 у3/6

F[0.1, 0.2]

0.0199987

В Mathematica 3/4 преобразование результатов разложения в ряд в стандартные расчетные выражения несколько упрощено. Это позволяет ограничиться описанными выше (но вовсе не единственными) приемами.

Графическая визуализация разложения в ряд

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

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

Рис. 5.3. Представление синусоидальной функции рядом Тейлора с графической иллюстрацией его точности

На рис. 5.3 представлены график синусоиды, построенной по аналитическому выражению, и график ее разложения в ряд Тейлора в окрестности точки х 0 =2. Хорошо заметно расхождение за пределами области, примыкающей к оперной точке функции. Как отмечалось, погрешность уменьшается, если х0=0 (ряд Маклорена). К сожалению, при большом числе членов ряда его поведение становится трудно предсказуемым, и погрешность приближения катастрофически нарастает.

 

gl5-1.jpg

Изображение: 

gl5-2.jpg

Изображение: 

gl5-3.jpg

Изображение: 

3. Преобразования Фурье

 

Преобразования Фурье

 

Основные понятия о спектральном анализе и синтезе

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

Схема применения спектрального подхода достаточно проста. Сигнал вначале представляется совокупностью гармонических составляющих — гармоник ~ в виде тригонометрического ряда Фурье. Для точного представления сигнала требуется бесконечное число гармоник, но на практике оно всегда ограничено. Такое ограничение порождает волнообразный характер изменения сигнала и появление выбросов, что известно под названием эффекта Гиббса.

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

Итак, спектральный подход заключается в следующем. Вначале получают достаточно представительный (с большим числом гармоник) спектр заданного сигнала. Довольно часто используют тестовые сигналы в виде прямоугольных, треугольных, пилообразных и других импульсов. Для моделирования таких сигналов можно использовать различные функции, например, Sign [Sin [t] ] позволяет получить симметричные прямоугольные импульсы (меандр), а Abs [Sin [t] ] моделирует результат двухполупериодного выпрямления синусоидального напряжения. Для получения разрывных сигналов можно использовать функции с условиями сравнения, например функцию If (на рис. 5.4 даны примеры имитации с помощью этой функции импульсов прямоугольной и пилообразной формы).

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

На рис. 5.5 показан пример прямого синтеза разнополярных коротких прямоугольных импульсов. Используется известное разложение их в ряд, причем графики построены для 5 и 20 гармоник. Нетрудно заметить, что даже при двадцати гармониках представление такого сигнала гармоническим рядом не очень точно — отчетливо наблюдаются колебания и выбросы, то есть эффект Гиббса.

Рис. 5.4. Имитация импульсов прямоугольной и пилообразной формы с помощью функции If

Рис. 5.5. Гармонический синтез коротких разнополярных прямоугольных импульсов

Еще один подобный пример — синтез разнополярных треугольных импульсов — представлен на рис. 5.6. Здесь также используется известное выражение для ряда

Фурье. Графики построены для 3 и 20 гармоник. Нетрудно заметить, что гармонический синтез для этого сигнала дает гораздо лучшие результаты — даже три гармоники неплохо воспроизводят сигнал. Это связано с тем, что данный сигнал не имеет разрывов — для него характерны лишь точки резких перегибов временной зависимости.

Рис. 5.6. Гармонический синтез симметричных треугольных импульсов

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

Итак, в результате гармонического анализа сигнала (или его прямого гармонического синтеза) сигнал получается в виде совокупности гармонических сигналов — гармоник. В общем случае каждая гармоника имеет свою амплитуду и фазу, и для их получения в общем случае можно использовать прямое преобразование Фурье (см. ниже).

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

Простота спектрального подхода обманчива, поскольку он требует довольно громоздких вычислений. Для быстрого их выполнения были созданы различные ускоренные методы спектрального анализа и синтеза — например, метод быстрого преобразования Фурье (БПФ). Но лишь с появлением СКМ класса Mathematica (и ей подобных) спектральный подход превращается в «рабочую лошадку», обеспечивая наглядное и достаточно быстрое решение задач спектрального анализа и синтеза.

Прямое и обратное преобразования Фурье

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

  • Fourier [list] — осуществляет дискретное преобразование Фурье для списка list комплексных чисел;
  • InverseFourier [list] — осуществляет дискретное обратное преобразование Фурье списка list комплексных чисел.

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


DF:=Fourier[{1,1,0,0}]

DF

{1. + 0.I, 0.5+0.51, 0. + 0.I, 0.5-0.51}

IF:=InverseFourier[DF]

IF

{1.+ 0. I, 1. + 2.77556х10-171, 0. + 0. I, 0. -2.77556x 10-17I}

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

Применение описанных функций имеет некоторые тонкости. Прежде всего надо отметить, что отсчет элементов векторов начинается не с нуля, а с единицы. Поэтому нулевая гармоника (в электро- и радиотехнике ее называют постоянной составляющей разлагаемой в ряд Фурье зависимости) соответствует индексу 1, первая гармоника — индексу 2 и т. д. Таким образом, имеет место смещение нумерации индексов на единицу.

Согласно теореме отсчетов, именуемой также теоремой Котельникова, если функция имеет N отсчетов, то максимальное число гармоник спектрального разложения равно N/2. Между тем, функция Fourier в системе Mathematica дает все N элементов создаваемого ею вектора. При этом на спектрограмме «лишние» гармоники на деле просто образуют зеркальное отображение реально возможных N/2 гармоник. Именно поэтому двойное (прямое и обратное) преобразование Фурье в системе Mathematica 3/4 почти идеально точно восстанавливает исходный вектор.

Еще одна тонкость связана с необычным представлением нулевых мнимых частей элементов векторов, получаемых в ходе преобразований. Они записываются в виде 0.1. Для их устранения может использоваться функция Chop [V].

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

Спектральный анализ на основе прямого преобразования Фурье

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

На рис. 5.7 представлен пример спектрального анализа простого сигнала — треугольного импульса, заданного с помощью функции If. Затем с помощью функции Fourier прямого преобразования Фурье получены в явном виде векторы амплитуд Мg и фаз Аg гармоник этого сигнала.

Рис. 5.7. Спектральный анализ пилообразного импульса на основе прямого преобразования Фурье

На рис. 5.8 представлено продолжение документа, показанного на рис. 5.7. Здесь с помощью графиков лестничного типа, подчеркивающих дискретность гармоник, построены спектрограммы амплитуд и фаз гармоник пилообразного импульса. Хорошо видно симметричное отражение линий спектра относительно восьмой гармоники — в нашем случае имелось 16 отсчетов сигнала. Это значит, что амплитуда и фаза девятой гармоники те же, что у седьмой гармоники, у десятой — те же, что у шестой, и т. д.

Рис. 5.8. Спектрограммы амплитуд и фаз гармоник пилообразного импульса

Теперь рассмотрим более сложный случай — получение спектра сложного сигнала (рис. 5.9). :

Рис. 5.9. Получение спектра сложного сигнала с помощью прямого преобразования Фурье

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

Во второй части рисунка показан график частотных отсчетов, полученных после прямого преобразования Фурье. На нем отчетливо виден пик в районе частоты 50 Гц (поскольку первый элемент результирующего списка соответствует нулевой частоте, этот пик возникает на 51-м элементе списка). Однако помимо него существует еще один пик на частоте 256 - 50 = 206 Гц. Он связан с отмеченным ранее свойством симметрии спектра вещественного сигнала.

Фильтрация сигналов на основе преобразований Фурье

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

Рис. 5.10. Часть документа, показывающая создание сигнала и синтез фильтра для него

Как и в ранее рассмотренном примере, сигнал формируется как сумма чистого сигнала со случайной составляющей, моделирующей шум. Выбранная форма сигнала напоминает затухающую синусоиду. Уровень шумов выбран достаточно большим, так что форма чистого сигнала с трудом угадывается на фоне шумов (верхний график). Далее показаны синтез цифрового частотного фильтра и его амплитудно-частотная характеристика (АЧХ). График АЧХ показан в нижней части рис. 5.10.

На рис. 5.11 показан процесс фильтрации. Он сводится к уточнению модели фильтра (сдвигу АЧХ в область более низких частот и созданию зеркального отражения спектра), проведению прямого преобразования Фурье, выделению фильтром соответствующих составляющих сигнала и, наконец, выполнению обратного преобразования Фурье. Оба преобразования и фильтрация осуществляются в одном выражении (строка с переменной conv). При этом векторы прямых преобразований Фурье для сигнала и для отсчетов частотной характеристики фильтра перемножаются. Обратное преобразование Фурье переводит результат фильтрации во временную область. Полученный в результате фильтрации сигнал практически очищен от шума. Это подтверждает график выходного сигнала, представленный в нижней части рис. 5.11.

Рис. 5.11. Часть документа, показывающего фильтрацию сигнала и построение графика сигнала, очищенного от шума

Эти примеры показывают высокую эффективность средств Mathematica 3/4 в решении задач спектрального анализа, синтеза сигналов, их фильтрации и иных преобразований. Важно отметить, что в новейшей версии Mathematica 4 использованы ускоренные алгоритмы преобразований Фурье, повышающие скорость выполнения описанных операций в несколько раз. Это открывает возможность решения серьезных задач обработки сигналов, представленных многими тысячами отсчетов. Другими словами — сигналов, реально применяемых в технике связи.

Функции пакета — FourierTransform

Подпакет FourierTransform пакета Calculus в версии Mathematics 3 служит для осуществления расширенных преобразований Фурье. Он вызывается командой


<<Calculus` FourierTransform`

Ввиду важности этих преобразований в системе Mathematica 4 их функции были размещены уже в ядре системы. Это следующие функции:

  • FourierTransform [expr, t, w] — возвращает результат прямого преобразования Фурье над выражением expr [t], выраженного через переменную w;
  • InverseFourierTransform[expr, w, t] — возвращает результат обратного преобразования Фурье над выражением expr[w], выраженного через переменную t;
  • FourierCosTransform[expr, t, w] — возвращает результат косинусного преобразования Фурье над выражением expr [t ], выраженного через переменную w;
  • FourierSinTransform[expr, t, w] — возвращает результат синусного преобразования Фурье над выражением expr [t], выраженного через переменную w;
  • FourierTransform [expr, {tl,t2}, {wl, w2 } ] — возвращает результат прямого преобразования Фурье над выражением expr [ tl, t2,...], выраженного через переменные {wl, w2,-...};
  • InverseFourierTransformtexpr, {tl,t2}, {wl,w2} ]'— возвращает результат обратного преобразования Фурье над выражением expr [ wl, wl,...], выраженного через переменные {tl, t2,...}.,

Примеры осуществления прямого и обратного преобразований Фурье представлены ниже:


FourierTransform[Sin[t]*t:2, t, w]

-Iл(DiracDelta"[l - w] - DiracDelta" [1 + w])

InverseFourierTransform[%, w, t]

t2Sin[t]

FourierCosTransform[Sin[t]*t:2, t, w]

-8w2/(1-w2)3-2/(1-w2)2

FourierSinTransform[Cos[a*t], t, w]

-w/(a2-w2)

FourierTransform[tl^2 Exp[-a t2] UnitStep[tl, t2],

{tl, t2}, {wl, w2}]

-2I/w13-лDiracDelta''[w1]/a-IW2

InverseFourierTransformtwl/(l-b*w2), {wl, w2}, {tl, t2}]

Для реализации спектрального анализа и синтеза имеются следующие функции:

  • FourierExpSeries [expr, {x, xmin, xmax), n] — возвращает разложение expr [х] в экспоненциальный ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierExpSeriesCoef f icient [expr, {x, xmin, xmax} ,n] —возвращает коэффициенты разложения expr [x] в экспоненциальный ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierTrigSeries [expr, {x, xmin, xmax}, n] — возвращает разложение expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax};
  • FourierSinSeriesCoef f icient [expr, {x, xmin, xmax}, n] —возвращает синусные коэффициенты разложения expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin,xmax};
  • FourierCosSeriesCoef f icient [expr, {x, xmin, xmax}, n] —возвращает косинусные коэффициенты разложения expr [x] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax}.

Рисунок 5.12 иллюстрирует создание пилообразного сигнала, его разложение в тригонометрический ряд Фурье с п = 4, графическое воспроизведение сигнала и его представление суммой из четырех гармоник (на рисунке оставлены только совмещенные графики). Таким образом, последняя операция демонстрирует проведение синтеза пилообразного сигнала по четырем гармоникам.

Рис. 5.12. Создание пилообразного сигнала, его разложение в тригонометрический ряд Фурье и синтез сигнала по четырем гармоникам

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

  • NFourierTrigSeries [expr, {x, xmin,xmax}, n] — возвращает разложение expr t x ] в тригонометрический ряд Фурье с n членами на отрезке {xmin, xmax} в численном виде.

Предоставляем читателю опробовать эти функции самостоятельно.

 

gl5-10.jpg

Изображение: 

gl5-11.jpg

Изображение: 

gl5-12.jpg

Изображение: 

gl5-4.jpg

Изображение: 

gl5-5.jpg

Изображение: 

gl5-6.jpg

Изображение: 

gl5-7.jpg

Изображение: 

gl5-8.jpg

Изображение: 

gl5-9.jpg

Изображение: 

4. Интерполяция, аппроксимация и регрессия

 

Интерполяция, аппроксимация и регрессия

 

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

Полиномиальная интерполяция и аппроксимация

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

  • InterpolatingFunctionfrange, table] — возвращает интерполирующую функцию, позволяющую вычислять промежуточные значения в заданном диапазоне range для таблицы table;
  • InterpolatingPolynomial [data, var] — возвращает полином (степенной многочлен) по переменной var, значения которого в узловых точках точно совпадают с данными из списка data. Он может иметь форму { {xl, f1}, {х2, f2},...} или {fl, f2,...} (во втором случае xi принимают значения 1, 2,...). Вместо fi может быть список {fi, dfi, ddfi,...}, указывающий значения производных в точках xi;
  • Interpolation [data] — конструирует объект InterpolatingFunction.

InterpolationOrder — опция функции Interpolation, указывающая степень подходящего полинома. При ее значении, равном 1, осуществляется кусочно-линейная интерполяция. Целое значение, большее единицы, задает степень глобальной полиномиальной интерполяции.

Применение основной функции Interpolation поясняет следующий пример:


data = ТаЫе[{х, х^2 + 1}, {х, 1, 5}]

{{1, 2}, {2, 5}, {3, 10}, {4, 17}, {5, 26}}

funi = Interpolation[data]

InterpolatingFunctionf{{1, 5}}, 0]

{funi [1.5], funi[3], funi[4.5]}

{3.25, 10, 21.25}

Таким образом, на заданном отрезке изменения х функция Interpolation позволяет найти любое промежуточное значение функции funi [x], в том числе значения в узловых точках.

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

Степень интерполирующего (и аппроксимирующего) полинома всегда на 1 меньше числа узловых точек интерполяции или аппроксимации. Аппроксимация отличается от интерполяции тем, что предполагает получение аппроксимирующей функции в явном виде. При полиномиальной аппроксимации такой функцией является степенной многочлен.

Пример на рис. 5.13 иллюстрирует технику проведения полиномиальной аппроксимации с применением интерполирующего степенного многочлена.

Рис. 5.13. Полиномиальная аппроксимация таблично заданных данных

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

В узлах интерполяции значения интерполирующего многочлена точно совпадают со значениями исходных данных. Однако это не гарантирует малую погрешность за пределами узловых точек (особенно при экстраполяции функций). Чем больше пар данных и чем выше степень аппроксимирующего многочлена, тем выше погрешность аппроксимации. Обычно аппроксимация при степени многочлена выше 8-10 не применяется из-за резкого возрастания погрешности. При большом числе пар исходных данных более полезной на практике является регрессия.

Регрессия и визуализация ее результатов

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

Для решения задач регрессии используется функция ядра


Fit: Fit[data, funs, vars]

Эта функция ищет приближение для списка данных data методом наименьших квадратов в виде линейной комбинации функций funs переменных vars. Данные data могут иметь форму {{xl, yl,..., f1}, {х2, у2,..., f2 },...}, где число координат х, у,... равно числу переменных в списке vars. Также данные data могут быть представлены в форме {f 1, f 2, =..} с одной координатой, принимающей значения 1, 2... Аргумент funs может быть любым списком функций, которые зависят только от объектов vars.

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


Fit[{{0, 0.9}, {2, 8.099999999999999), {3, 17}, {4, 33}}, {а, х, х2}, х]

0. 997273-1.40864 х+2.33409 х2

Fit[{{0, 0.9}, {2, 8.099999999999999}, {3, 17}}, {х2, Ехр[х], х} , х]

0.9ех + 2.89276х- 1.08392 х2

Здесь в первом примере выполняется полиномиальная регрессия со степенью полинома, равной 2. Максимальная степень на 1 меньше числа пар исходной зависимости (в нашем случае их 4) — при такой степени регрессия вырождается в обычную полиномиальную аппроксимацию, которая рассматривалась ранее.

Рисунок 5.14 показывает несколько иной путь проведения полиномиальной аппроксимации — исходные данные заданы объектом-списком data.

В конце документа рис. 5.14 показано построение графика аппроксимирующего полинома второй степени и точек исходных данных. Заметно, что при регрессии график полинома проходит в середине «облака» исходных точек и не укладывается на них точно.

В уроке 12 будут рассмотрены дополнительные функции для проведения регрессии. Они входят в различные пакеты расширения системы Mathematica 3/4.

Рис. 5.14. Полиномиальная регрессия с графическим выводом

 

gl5-13.jpg

Изображение: 

gl5-14.jpg

Изображение: 

5. Спектральный анализ с линейной интерполяцией сигнала

 

Спектральный анализ с линейной интерполяцией сигнала

Как уже отмечалось, одной из проблем точного представления сигналов при гармоническом синтезе является ограничение числа гармоник, связанное с конечностью числа отсчетов сигнала. К примеру, если вещественный сигнал задан 20 отсчетами, то максимальное число гармоник будет всего 10, что недостаточно для хорошего представления большинства реальных сигналов.

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

Еще одна проблема при спектральном анализе связана с необходимостью нормировки коэффициентов Фурье. Их расчет по аналитическим формулам не является достаточно эффективным — уже давно доказано, что если сигнал представлен отдельными выборками, то единственно обоснованным методом вычисления интегралов (коэффициентов) Фурье является простейший метод прямоугольников. Это обстоятельство также учтено в описанном ниже документе (вполне законченном «блокноте» системы Mathematica).

Пусть сигнал задан N отсчетами. На рис. 5.15 показан пример задания достаточно сложного сигнала путем формирования вектора его ординат Yi (индекс i от 1 до 20). Пусть сигнал задан на периоде Т = 4*10^-6 с, что соответствует частоте f 1 основной гармоники сигнала, равной 250 кГц. Рисунок 5.15 поясняет технику нормировки сигнала и построения его графика с реальной шкалой времени (то есть на отрезке времени от 0 до Т).

Рис. 5.15. Задание сигнала, его кусочно-линейная интерполяция и построение графика временной зависимости

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

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

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

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

Рис. 5.17. Спектрограмма амплитуд гармоник

Рисунок 5.18 представляет спектрограмму фаз гармоник. Фазы гармоник также имеют дискретные значения и показаны точками с номерами. Значение фазового сдвига лежит в пределах от -л до л.

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

Рис. 5.18. Спектрограмма фаз гармоник

Рис. 5.19. Гармонический синтез сигнала и сравнение его результатов с временной зависимостью интерполированного сигнала

Самый «волнующий» момент представлен во второй части рис. 5.19 — здесь показано сравнение результата гармонического синтеза сигнала с его временной зависимостью (интерполированной). Чтобы исходный и синтезированный сигналы не сливались, синтезированный сигнал намеренно немного сдвинут вправо и вверх. Нетрудно заметить, что несмотря на сложный характер сигнала его гармонический (спектральный) синтез в данном случае дает превосходные результаты уже при использовании 51 гармоники (включая нулевую). Если убрать отмеченный выше сдвиг, то сигналы практически сливаются.

Учет искажений сигнала

Рисунок 5.20 показывает задание амплитудно-частотной и фазо-частотной (ФЧХ) характеристик некоего фильтра, ослабляющего высокие частоты и вносящего фазовый сдвиг, пропорциональный частоте сигнала. В нижней части рисунка построены эти характеристики. Заметим, что здесь АЧХ и ФЧХ заданы без «хитростей», присущих решению аналогичной задачи с применением встроенных функций дискретного преобразования Фурье. Они задаются в явном виде как функции от частоты.

Рис. 5.20. Амплитудно-частотная и фазочастотная характеристики фильтра

Рисунок 5.21 показывает, как влияет на форму сигнала его прохождение через фильтрующую цепь. Для оценки этого используется формула синтеза гармоник. Однако отличные от нуля амплитуды гармоник умножаются на модуль коэффициента передачи (АЧХ) фильтра, а к фазе каждой гармоники добавляется фазовый сдвиг, вносимый фильтром (ФЧХ). Таким образом, в процессе синтеза временной зависимости сигнала учитываются амплитудно-частотные и фазо-частотные искажения сигнала фильтром.

Рис. 5.21. Сравнение исходной временной зависимости сигнала и сигнала на выходе фильтрующей цепи

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

 

gl5-15.jpg

Изображение: 

gl5-16.jpg

Изображение: 

gl5-17.jpg

Изображение: 

gl5-18.jpg

Изображение: 

gl5-19.jpg

Изображение: 

gl5-20.jpg

Изображение: 

gl5-21.jpg

Изображение: 

6. Моделирование нелинейных цепей с применением интерполяции

 

Моделирование нелинейных цепей с применением интерполяции

Интерполяция может быть очень полезной при решении задач моделирования нелинейных цепей как с обычными (например, электронные лампы и транзисторы), так и с «необычными» активными приборами, например туннельными диодами или лавинными транзисторами.

Одна из проблем такого моделирования — задание нелинейных вольт-амперных характеристик (ВАХ) активного прибора. Mathematica позволяет задать такие ВАХ, используя различные виды интерполяции и аппроксимации — от кусочно-линейной до полиномиальной или сплайновой. Рисунок 5.22 демонстрирует простое табличное задание N-образной ВАХ туннельного диода с полиномиальной интерполяцией (используется полином четвертой степени). Обратите внимание на применение импортируемого рисунка — схемы цепи. Он готовился отдельно в графическом редакторе.

Рис. 5.22. Начало документа, позволяющего моделировать схему на туннельном диоде

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

Рис. 5.23. Моделирование возникновения и установления синусоидальных колебаний в схеме на туннельном диоде

Поведение схемы очень наглядно характеризует фазовый портрет колебаний, представленный на рис. 5.24 и построенный на фоне интерполированной ВАХ туннельного диода и линии нагрузки резистора Rs, задающей положение рабочей точки на падающем участке ВАХ. В этом случае туннельный диод вносит во внешнюю цепь отрицательную дифференциальную проводимость, что и ведет к возможности возникновения гармонических или релаксационных колебаний (уменьшив С или увеличив L, вы можете посмотреть, как происходит переход к релаксационным колебаниям).

Рис. 5.24. Фазовый портрет колебаний в схеме с туннельным диодом для случая почти гармонических колебаний

Если задать вместо постоянного напряжения Es некоторый импульсный сигнал, то можно смоделировать множество других режимов работы цепи, например генерацию ждущих колебаний, нелинейное усиление, триггерный режим и т. д. Рисунок 5.25 показывает задание e(t) в виде постоянного напряжения Es, на которое наложены положительный и отрицательный запускающие импульсы.

Если линия нагрузки резистора Rs пересекает ВАХ туннельного диода в трех точках (две из них расположены на восходящих участках ВАХ), то будет наблюдаться триггерный режим с раздельным запуском. Этот случай показан на рис. 5.26, где построены временные зависимости напряжения и тока в триггере на туннельном диоде.

Риc. 5.25. Задание временной зависимости e(t), обеспечивающей триггерный режим работы схемы с туннельным диодом

Риc. 5.26. Моделирование триггерного режима работы схемы с туннельным диодом

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

Риc. 5.27. Фазовый портрет, иллюстрирующий работу схемы с туннельным диодом в триггерном режиме

Если собрать приведенные на рис. 5.22-5.27 фрагменты воедино, вы получите еще один полностью завершенный «блокнот», прекрасно иллюстрирующий решение одной из реальных научно-технических задач. Вы можете дополнить его анализом ряда других режимов работы схемы, причем не обязательно на туннельном диоде, а на любом приборе с нелинейной В АХ вида I(U). Для этого достаточно просто сменить вектор с табличными данными опорных точек ВАХ, полученных, например, в эксперименте, и использовать иные параметры схемы.

 

gl5-22.jpg

Изображение: 

gl5-23.jpg

Изображение: 

gl5-24.jpg

Изображение: 

gl5-25.jpg

Изображение: 

gl5-26.jpg

Изображение: 

gl5-27.jpg

Изображение: 

7. Что нового мы узнали?

 

Что нового мы узнали

В этом уроке мы научились:

  • Находить разложения заданных функций и выражений в ряды Тейлора и Маклорена.
  • Удалять член с остаточной погрешностью ряда.
  • Представлять разложение в ряд графически.
  • Осуществлять прямое и обратное дискретные преобразования Фурье.
  • Выполнять спектральный анализ на основе преобразования Фурье.
  • Осуществлять фильтрацию сигналов на основе преобразования Фурье.
  • Выполнять полиномиальную интерполяцию и аппроксимацию.
  • Осуществлять регрессию и визуализацию ее результатов.
  • Выполнять спектральный анализ таблично заданных сложных сигналов с интерполяцией их временных зависимостей.
  • Выполнять моделирование схем на приборах с N-образными ВАХ, используя при этом их интерполяцию.

 

Урок 6. Специальные математические функции

Урок 6. Специальные математические функции

1. Специальные математические функции

 

Специальные математические функци

  • Ортогональные многочлены
  • Интегральные показательные и родственные им функции
  • Гамма-и полигамма-функции
  • Функции Бесселя
  • Гипергеометрические функции
  • Эллиптические интегралы и интегральные функции
  • Функции Эйри
  • Бета-функция и родственные ей функции
  • Специальные числа и полиномы
  • Специальные математические функции являются решениями линейных дифференциальных уравнений специального вида или представлениями особых интегралов, которые не могут быть выражены через элементарные функции. Здесь не приводятся определения специальных математических функций ввиду их общеизвестности и наличия соответствующей информации в справочной базе данных систем Matheraatica.

    К сожалению, входной язык общения с системами Mathematica 3/4 не предусматривает использования греческих букв для имен специальных функций (хотя палитра с такими буквами есть), и их имена задаются английскими словами. Специальные математические функции удобно подразделять на несколько групп, представленных ниже.

     

    2. Ортогональные многочлены

     

    Ортогональные многочлены

    Одними из широко распространенных специальных функций являются ортогональные многочлены (полиномы). Mathematica имеет следующие функции, возвращающие значения ортогональных многочленов:

    • ChebyshevT [n, х] — полином Чебышева п-й степени первого рода;
    • CyebyshevU [n, x] — полином Чебышева п-йстепени второго рода;
    • HermiteH[n, х] — полином Эрмита п-йстепени;
    • JacobiP[n, a, b, х] — полином Якоби п-й степени;
    • 'GegenbauerC [n, m, х] — полином Гегенбауэра;
    • LaguerreL[n, х] — полином Лагерра n-й степени;
    • LaguerreL[n, а, х] — обобщенный полином Лагерра п-й степени;
    • LegendreP [n, х] — полином Лежандра n-й степени;
    • LegendreP [n, m, x] — присоединенный полином Лежандра;
    • LegendreQ [n, z] — функция Лежандра второго рода n-го порядка;
    • LegendreQ [n, m, z] — присоединенная функция Лежандра второго рода.

    LegendreType — опция для функций LegendreP и LegendreQ; она указывает выборы разрывов кривой для функций Лежандра на комплексной плоскости.

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

    Следующие примеры иллюстрируют работу с ортогональными многочленами.


    Ввод (In) Вывод (Out)
    ChebyshevT [ 8, х] 1 - 32 x 2 + 160 x 4 - 256 x 6 + 128 x 8
    ChebyshevT [5, 0.2] 0.84512
    ChebyshevU [3,0. 15] -0.573
    HermiteH[4,3] 876
    JacobiP[3,l,2,0.2] -0.256
    GegenbauerC [ 3 , 1 , x] -4 x + 8 x 3
    N [LaguerreL [3,x]] 0.166667 (6. -18. x+ 9. x 2 - 1. X 3 )
    LegendreP [ 5 , x ] 15 x /6-35 x 3 /4+63 x 5 /8
    LegendreQ[2,0.2] -0.389202

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

    На рис. 6.1 показаны графики ортогональных полиномов Чебышева ChebyshevT и ChebyshevU. Для этих полиномов характерно изменение от -1 до +1 при \х\<1, причем при высоком порядке полиномов графики функций имеют колебательный характер.

    Рис. 6.1. Графики ортогональных полиномов Чебышева ChebyshevT (сверху) и ChebyshevU (снизу)

    Графики функций полиномов Лагерра LaguerreL и Лежандра LegendreP показаны на рис. 6.2. Они дают представление о поведении этих функций.

    Рис. 6.2. Графики ортогональных полиномов Лагерра LaguerreL и Лежандра LegendreP (снизу)

    На рис. 6.3 представлены графики полиномов Лежандра LegendreQ.

    Рис. 6.3. Графики функций Лежандра LegendreQ (сверху) и полиномов Гегенбауэра GegenbauerC (снизу)

     

    gl6-1.jpg

    Изображение: 

    gl6-2.jpg

    Изображение: 

    gl6-3.jpg

    Изображение: 

    3. Интегральные показательные и родственные им функции

     

    Интегральные показательные и родственные им функции

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

    • Coshlntegralfx] — гиперболический интегральный косинус;
    • Coslntegral [х] — интегральный косинус С1(х);
    • Erf [z] — функция ошибок (интеграл вероятности);
    • Erf[z0, zl] — обобщенная функция ошибок erf (zl)-erf (z0);
    • Erf с [z] — дополняющая функция ошибок 1-erf (z);
    • Erfi [z] — мнимое значение функции ошибок erf (iz) /i;
    • ExplntegralE [n, z] — интегральная показательная функция Е(п,z);
    • ExplntegralEi[z] — интегральная показательная функция Ei(z);
    • Loglntegral [z] — интегральный логарифм li(z);
    • Sinhlntegral [x] — интегральный гиперболический синус;
    • Sinlntegral [х] — интегральный синус 81(лг).

    Ниже представлены примеры применения этих функций.


    Ввод (In)

    Вывод (Out)

    Coshlntegral[1.]

    0.837867

    Coslntegral [1 . ]

    0.337404

    Erf[l.]

    0.842701

    Erf [2. +1*3.]

    -20.8295 + 8.68732 I

    Erf[2.,3.]

    0.00465564

    Erfc[l.]

    0.157299

    Erfi[l.]

    1.65043

    ExplntegralE [3,1.]

    0.109692

    ExpIntegralEi [1 . ]

    1.89512

    Loglntegral [2 . +3 . *I ]

    2.3374 + 2.51301 I

    Sinhlntegral [1 . ]

    1.05725

    Sinlntegral [1 . ]

    0.946083

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

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

    Рис. 6.4. Графики интегральных показательных функций

     

    gl6-4.jpg

    Изображение: 

    4. Гамма- и полигамма-функции

     

    Гамма- и полигамма-функции

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

    • Gamma [ а ] — эйлерова гамма-функция;
    • Gamma [ a, z] — неполная гамма-функция;
    • Gamma [a, z 0, z 1 ] — обобщенная неполная гамма-функция Gamma (а, z 0) -Gamma(a,zl);
    • GammaRegularized[a, z] — регуляризованная неполная гамма-функция
    • (а,2)=Gamma(а,z)/Gamma(a);
    • GammaRegularized[a, z0, zl] — обобщенная неполная гамма-функция Q(a,z0)-Q(a, zl);
    • LogGamma [ z ] — логарифм эйлеровой гамма-функции;
    • Pol у Gamma [ z ] — дигамма-функция \|/(z);
    • Pol у Gamma [n, z] — n-я производная от дигамма-функции.

    Приведем примеры вычисления этих функций.


    Ввод (In)

    Вывод (Out)

    Gamma[l,2.+3.*I] -0.133981- 0,.0190985 I
    Gamma [0.5] 1.77245

    Gaitima [1,2. , 3 . ]

    0.0855482

    GammaRegularized [ 1 , 2 . +3 . I , 4 . +6 . *I ]

    -0.139176- 0.0366618 I

    LogGamma [0.5]

    0.572365

    LogGarama [ 2 . +3 . * I ]

    -2.09285 + 2.3024 I

    PolyGamma[l]

    -EulerGamma

    PolyGamma [ 1 . ]

    -0.577216

    PolyGarama [2 . +3 . *I]

    1.20798 + 1.10413 I

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

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

    Рис. 6.5. Графики эйлеровой гамма-функции (сверху) и неполной гамма-функции (снизу)

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

    Рис. 6.6. Контурный график эйлеровой гамма-функции на комплексной плоскости

    Графики других гамма-функций пользователь может' построить и просмотреть самостоятельно.

     

    gl6-5.jpg

    Изображение: 

    gl6-6.jpg

    Изображение: 

    5. Функции Бесселя

     

    Функции Бесселя

     

    Функции Бесселя, являющиеся решениями линейных дифференциальных уравнений вида z 2 y" + zy'+ (z 2 - п 2 )у = 0, широко используются в анализе и моделировании волновых процессов. В системе Mathematica к этому классу относятся следующие функции:

    • Bessell[n, z] — модифицированная функция Бесселя первого рода I(n, z);
    • BesselJ[n, z] — функция Бесселя первого рода J(и, z);
    • BesselK[n, z] — модифицированная функция Бесселя второго рода К(п, z);
    • BesselY[n, z] — функция Бесселя второго рода Y(n, z).

    Соотношения между этими функциями хорошо известны. Следующие примеры показывают вычисление функций Бесселя.


    Ввод (In) Вывод (Out)
    Bessell[0,l.] 1.26607
    Bessell[3,l.] 0.0221684
    Bessell[l,2.+3.*I] -1.26098 + 0.780149 I
    Bessell[2,2.+3.*I] 1.25767 + 2.31877 I
    BesselK[2,2.+3.*I] -0.0915555 + 0.0798916 I
    BesselY[2,2.+3.*I] -2.3443 + 1.27581 I
    BesselY[2,2.+3.*I]
    N[BesselJ[l,0.5]] 0.242268
    N[BesselJ[l, 2+1*3]] 3.78068- 0.812781 I

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


    D[BesselJ[l, x], (х, 2}]

    1/2 (-BesselJ[l, x] +

    1/2 (-BesselJ[l, x] +BesselJ[3, x]) )

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

    В другом примере — вычислении интеграла от функции Бесселя — результат выражается через гипергеометрическую функцию:


    Integrate[BesselJ[2,x],x]

    1/24 x3 HypergeometricPFQ [ { 2/3 }, { 5/2,3}, -x2/4]

    На рис. 6.7 показаны графики функций Бесселя Bessell и BesselJ первых четырех порядков.

    Рис. 6.7. Графики функций Бесселя Bessell (сверху) и Bessell (снизу) первых четырех порядков

    Графики других функций Бесселя вы можете получить самостоятельно. Они представляют меньший интерес, чем графики, приведенные на рис. 6.7.

     

    gl6-7.jpg

    Изображение: 

    6. Гипергеометрические функции. Эллиптические интегралы и интегральные функции

     

    Гипергеометрические функции

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

    • HypergeometricU [a, b, z] — конфлюэнтная (вырожденная) гипергеометрическая функция U(a, b, z);
    • Hypergeometric0Fl [a, z] — гипергеометрическая функция 0 F 1 , (; a; z);
    • HypergeometriclFl [а, b, z] — вырожденная гипергеометрическая функция Куммера 2 F 1 (a; b; z);
    • Hypergeometric2Fl [a, b, с, z] — гипергеометрическая функция F 1 (a, b; c, z). Следующие примеры показывают вычисления гипергеометрических функций.
    Ввод (In) Вывод (Out)
    HypergeometricOFl [2 . , 1 . ] 1.59064
    HypergeometricOFl [2 . , 2 . +3 . *I] 1.22457 + 2.31372 I
    HypergeometriclFl [1 . , 2 . , 2 . +3 . *I] -1.03861 + 2.07929 I
    Hypergeometric2Fl[l. ,2. ,3. ,2.+3.*I] 0.0291956 + 0.513051 I

    На рис. 6.8 представлены графики ряда гипергеометрических функций, перечисленных выше. 

    Рис. 6.8. Графики гипергеометрических функций

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

    Эллиптические интегралы и интегральные функции

    В ядро системы Mathematica входят эллиптические функции и функции вычисления эллиптических интегралов:

    • EllipticE [m] — полный эллиптический интеграл Е(т);
    • EllipticE [phi, m] — эллиптический интеграл второго рода Е(Ф\т);
    • EllipticExp [u, {a, b}] — обобщенный экспоненциал, связанный с эллиптической кривой у 2 = х 3 + ах 2 + bx,
    • EllipticExpPrime [и, {а, Ь}] — производная по первому аргументу EllipticExp[u, {a, b}];
    • Elliptic? [phi, m] — эллиптический интеграл первого рода Р(Ф\т);
    • EllipticK[m] — полный эллиптический интеграл первого рода К(т)\
    • EllipticLog [ {х, у}, {а, Ь}] — обобщенный логарифм, связанный ц эллиптической кривой у 2 = л 3 + а х 2 + b т,
    • EllipticNomeQ [m] — возвращает значение q = Exp[-PiEllipticK[l - m]/EllipticK[m]];
    • Elliptic?! [n, phi, m] — эллиптический интеграл третьего рода П(и; Ф\т);
    • Elliptic?! [n, m] — полный эллиптический интеграл П(п|т);
    • EllipticTheta [i, z, q] — эллиптическая тета-функция &.(z, q), где i = i, 2, 3 или 4;
    • EllipticThetaC [u, m] — эллиптическая тета-функция Невилла $ с (и, т);
    • EllipticThetaD [u, m] — эллиптическая тета-функция Невилла $ d (u, m);
    • EllipticThetaN [u, m] — эллиптическая тета-функция Невилла $ п (и, m ) ;
    • EllipticThetaPrime [i, z, q] — производная по второму аргументу эллиптической тета-функции в .(z, q), где i= I, 2, 3 или 4;
    • EllipticThetaS [u, m] — эллиптическая тета-функция Невилла u s (w, т);
    • FresnelCfx] — интеграл Френеля С(х),
    • FresnelS[x] — интеграл Френеля S(x);
    • InverseJacobi** [v, m] — обратная эллиптическая функция Якоби с обобщенным названием **. Возможны следующие наименования для **: CD , CN, CS, DC, DN, DS, NC, ND, NS, SC, SD И SN;
    • JacobiAmplitude [u, m] — амплитуда для эллиптических функций Якоби;
    • Jacobian — опция для FindRoot; может применяться для указания якобиана системы функций, для которых ищется корень;
    • Jacob!** [u, m] — эллиптическая функция Якоби с обобщенным именем **, которое может принимать значения CD, CN, CS, DC, DN, DS, NC, ND, NS, SC, SD и SN;
    • JacobiSymbol [n, m] — символ Якоби от n и in;
    • JacobiZeta [phi, m] — дзета-функция Якоби Z(Ф|m);
    • WeierstrassP [u, g2, g3] — эллиптическая функция Вейерштрасса Р,
    • WeierstrassPPrime [u, g2, g3] — производная эллиптической функции Вейерштрасса Р'по переменной и.

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


    Ввод (In)

    Вывод (Out)

    EllipticE[0.1]

    1.53076

    EllipticE[Pi,0.1]

    3.06152

    EllipticF [Pi/2 ,0.1]

    1.61244

    EllipticPi[Pi,0.1]

    -0.0266412- 1.09088 I

    EllipticK[0.l]

    1.61244

    FresnelC[1.0]

    0.779893

    FresnelSfl.0]

    0.438259

    JacobiCD[l,0.2]

    0.605887

    JacobiZeta [ Pi , 0 . 5]

    0

    WeierstrassPPrime [1. ,2. ,3.]

    -1.31741

    Эллиптические функции (интегралы) широко используются в оптических расчетах и в астрофизике. На рис. 6.9 показаны графики некоторых эллиптических функций.

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

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

    Рис. 6.9. Графики некоторых эллиптических функций

    Рис. 6.10. Контурный график с параметрическим заданием комбинированной функции, содержащей функцию Якоби и эллиптические интегралы

     

    gl6-10.jpg

    Изображение: 

    gl6-8.jpg

    Изображение: 

    gl6-9.jpg

    Изображение: 

    7. Функции Эйри

     

    Функции Эйри

     

    Функции Эйри представляют собой независимые решения линейного дифференциального уравнения w"- zw = 0. В Mathematica эти функции представлены следующим набором:

    • AiryAi [z] — возвращает значение функции Эйри Ai(z);
    • AiryAiPrime [ z ] — возвращает значение производной функции Эйри Ai '(z);
    • AiryBi [z] — возвращает значение функции Эйри Bi(z);
    • AiryBiPrime [z] — возвращает производную функции Эйри Bi'(z).

    Ниже представлены примеры на вычисление функций Эйри.


    Ввод (In) Вывод (Out)
    AiryAi [2. +3.*I] 0.00810446 + 0.131178 I
    AiryAi[l.] 0.135292
    AiryBi [2. +3.*I] -0.396368 - 0.569731 I
    AiryBiPrime [2 . +3 . *I] 0.349458 - 1.10533 I

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


    D[AiryAi[x],х]

    AiryAiPrime[x]

    Integrate[AiryBi[x],x]

    {xGamma[1/3 ] HypergeometricPFQ[{1/3 }, {2/3,4/3}, x3/9]} /{3 31/6 Gamma [ 2/3 ] Gamma [ 5/3 ]}

    { x2Gamma[1/3 ] HypergeometricPFQ[{1/3 }, {2/3,4/3}, x3/9]} /{3 35/6 Gamma [ 4/3 ] Gamma [ 5/3 ]}

    Series[AiryBi[x],{x,0,5}]

    {1 /31/6xGamma[2/3]}+ {31/6x /Gamma[1/3]}+ {x3 /631/6Gamma[2/3]}+{x4 /435/6Gamma[1/3]}+O[x]6

    Графики функций, Эйри представлены на рис. 6.11.

    Нетрудно заметить, что при х < 0 они имеют колебательный характер.

    Рис. 6.11. Графики функций Эйри (сверху) и их производных (снизу)

     

    Бета-функция и родственные ей функции

    Класс бета-функций, имеющих специальное интегральное представление, в Mathematica представлен следующим набором:

    • Beta [а, b] — эйлерова бета-функция В(a, b);
    • Beta[z, а, b] — неполная бета-функция;
    • Beta[z0, zl, a, b] — обобщенная неполная бета-функция Beta [z1, a, b] - Beta[z0, а, b];
    • BetaRegularized [z, a> b] — регуляризированная неполная бета-функция I(z,a,b) = Betafz, a, b]/Beta[a, b];
    • BetaRegularized [z0, zl, a, b]—регуляризированная обобщенная неполная бета-функция I(z1l,a,b) - I(z0, a, b).

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


    Ввод (In) Вывод (Out)
    Beta[l.,2.] 0.5
    Beta[l.,2.,3.] 0.0833333
    Beta[2.+3.*I,4.+6.*I,l,2] 4. - 12. I
    BetaRegulari zed [0.1,1,2] 0.19

     

    gl6-11.jpg

    Изображение: 

    8. Специальные числа и полиномы

     

    Специальные числа и полиномы

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

    • BernoulliB [n] — n-е число Бернулли;
    • BernoulliB [n, х] — полином Бернулли n-й степени;
    • Binomial [n, m] — биномиальный коэффициент;
    • Cyclotomic [n, х] — циклотомический полином порядка п по переменной х;
    • EulerE[n] — n-е число Эйлера;
    • EulerE[n, х] — n-й полином Эйлера;
    • EulerPhi [n] — эйлерова функция сумм ф(n) — количество положительных целых чисел, не превосходящих п и взаимно простых с и;
    • Fibonacci [n] — n-е число Фибоначчи;
    • Fibonacci [n, х] — полином Фибоначчи F n (x);
    • Multinomial [n1, n2, . . . ] — мультиномиальный коэффициент (n! + n2 + . . .) !/(n1! n2! ...);
    • NBernoulliB [n] — численное значение n-го числа Бернулли;
    • NBernoulliB [n, d] — n-е число Бернулли с n?-цифровой точностью представления;
    • Pochhammer [а, n] — символ Похгамера;
    • StirlingSl [n, m] — число Стирлинга первого рода;
    • StirlingS2 [n, m] — число Стирлинга второго рода.

    Ниже представлены примеры вычисления данных функций.


    Ввод (In)

    Вывод (Out)

    N [BernoulliB [2]]

    0.166667

    BernoulliB [2, 0.1]

    0.0766667

    Binomial [6, 4]

    15

    Cyclotomic [ 5, х]

    1 + x + x 2 + x 3 + x 4

    Cyclotomic [5,0.2]

    1.2496

    EulerE[2]

    -1

    EulerE[2,0.1]

    -0.09

    EulerPhi [2]

    1

    Fibonacci [10]

    55

    Fibonacci [ 6 , x]

    3 x + 4 x 3 + x 5

    Pochhammer [1,3]

    6

    StirlingSl [8, 4]

    6769

    На рис. 6.12 показаны графики полиномов Бернулли и циклотомического полинома различных порядков.

    Рис. 6.12. Графики полиномов Бернулли (сверху) и циклотомических полиномов (снизу)

    Обратите внимание на то, что здесь использована функция Plot, модифицированная пакетом расширения plot.m, который будет описан в уроке 10. Эта функция позволяет автоматически строить графики ряда функций с линиями разного стиля, что облегчает их распознавание.

    На рис. 6.13 представлены графики полиномов Эйлера EulerE разного порядка п.

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

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

    Рис. 6.13. Графики полиномов Эйлера разного порядка

     

    gl6-12.jpg

    Изображение: 

    gl6-13.jpg

    Изображение: 

    9. Что нового мы узнали?

     

    Что нового мы узнали

    В этом уроке мы научились:

    • Вычислять ортогональные многочлены.
    • Вычислять интегральные показательные и родственные им функции.
    • Вычислять гамма- и полигамма-функции.
    • Работать с функциями Бесселя разного рода и порядка.
    • Вычислять гипергеометрические функции.
    • Вычислять эллиптические интегралы и интегральные функции.
    • Вычислять функции Эйри.
    • Вычислять бета-функцию и родственные ей функции.
    • Использовать специальные числа и полиномы.

     

    Урок 7. Работа с периферийными устройствами

    Урок 7. Работа с периферийными устройствами

    1. Работа с периферийными устройствами

     

    Работа с периферийными устройствами

    • Функции ввода/вывода
    • Работа со строками
    • Потоки и файлы
    • Запись определений
    • Системные функции

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

    Функции ввода/вывода

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

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

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

    • Input [ ] — останавливает работу системы и возвращает значение выражения, которое будет введено в появившемся диалоговом окне (служит для организации диалогового ввода);
    • Input [ "prompt" ] — то же, что и предыдущая функция, но с выводом в диалоговое окно комментария prompt;
    • InputString [ ] — выполняет интерактивное чтение в символьную строку;
    • InputString [ "prompt" ] — то же, но с выводом в диалоговое окно комментария prompt;
    • StylePrint [ехрr] — создает в текущем документе новую ячейку со стилем по умолчанию и заносит в нее выражение ехрг;
    • StylePrint[expr,"style"] — создает в текущем документе новую ячейку со стилем style и заносит в нее выражение ехрr;
    • Print [expr] — выводит на экран дисплея значение выражения ехрг; совместно с Input может использоваться для организации диалога;
    • Print ["prompt", expr] — выводит на экран дисплея текстовый комментарий, указанный в кавычках, и следом — значение выражения ехрr.

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

    На рис. 7.1 показан простейший пример организации диалога в стиле, принятом в языке Бейсик. В данном случае вычисляется длина окружности с запросом радиуса R.

    Рис. 7.1. Пример организации диалога

    При вычислении документа, приведенного на рис. 7.1, вначале исполняется функция Input. Это ведет к появлению диалогового окна в центре экрана — на рис. 7.1 оно несколько смещено вниз, чтобы не загораживать содержимое ячейки документа. В окне виден запрос, который указан в кавычках как параметр функции Input. После ввода нужного значения (в нашем примере это радиус окружности) и нажатия клавиши Enter или щелчка на кнопке ОК диалогового окна функция Input возвращает введенное значение, и оно присваивается переменной Р.. После этого функция Print выводит на экран вычисленное значение длины окружности с кратким комментарием (рис. 7.2).

    Рис. 7.2. Документ рис. 7.1 по окончании диалога

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

    К сожалению, комментарий, отображаемый в окне функции ввода Input, возможен только на английском языке — при вводе символов кириллицы вместо обычных надписей выводятся коды (в то же время функция Print исправно выводит комментарии на русском языке). Это связано с выбором для данного окна шрифта, не содержащего символов кириллицы.

     

    gl7-1.jpg

    Изображение: 

    gl7-2.jpg

    Изображение: 

    2. Функции задания формата вывода

     

    Функции задания формата вывода

     

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

    • AccountingForm [ехрг] — выполняет вывод всех чисел, содержащихся в выражении ехрr, в бухгалтерской форме представления;
    • CForm[expr] — выполняет вывод expr в форме, принятой для языка С;
    • EngineeringForm [expr ] — дает вывод, представляя все вещественные числа в выражении expr в инженерной форме (это означает, что порядок чисел равен нулю или кратен трем);
    • FortranForm[expr] — выводит expr в форме, принятой для языка Фортран;
    • FullForm [expr] — выводит полную форму выражения expr без испол