89
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ Факультет прикладной математики и информатики Кафедра вычислительной математики ЧИСЛЕННЫЕ МЕТОДЫ И ВИЗУАЛИЗАЦИЯ ДАННЫХ В СРЕДЕ MATHEMATICA Методическое пособие Для студентов специальности прикладная математика

Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Embed Size (px)

Citation preview

Page 1: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет прикладной математики и информатики

Кафедра вычислительной математики

ЧИСЛЕННЫЕ МЕТОДЫ И ВИЗУАЛИЗАЦИЯДАННЫХ В СРЕДЕ MATHEMATICA

Методическое пособие

Для студентов специальности прикладная математика

Минск-2006

Page 2: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ...................................................................................................................................4

ВЫРАЖЕНИЯ..............................................................................................................................6

ЧИСЛЕННЫЕ ДАННЫЕ..................................................................................................................6СИМВОЛЬНЫЕ ДАННЫЕ И СТРОКИ..............................................................................................9ВЫРАЖЕНИЯ..............................................................................................................................10СПИСКИ И МАССИВЫ................................................................................................................10ОБЪЕКТЫ И ИДЕНТИФИКАТОРЫ................................................................................................11ФУНКЦИИ, ОПЦИИ, АТРИБУТЫ И ДИРЕКТИВЫ..........................................................................11КОНСТАНТЫ...............................................................................................................................12РАЗМЕРНЫЕ ВЕЛИЧИНЫ............................................................................................................13ПЕРЕМЕННЫЕ.............................................................................................................................14ТЕКСТОВЫЕ КОММЕНТАРИИ.....................................................................................................15

ОПЕРАЦИИ С РАБОЧЕЙ ОБЛАСТЬЮ И ФАЙЛАМИ..................................................17

ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ................................................................20

УДАЛЕНИЕ СТРОК И СТОЛБЦОВ................................................................................................21ОБЪЕДИНЕНИЕ МАТРИЦ............................................................................................................22ТРАНСПОНИРОВАНИЕ МАТРИЦ.................................................................................................22СОЗДАНИЕ МАТРИЦ С ЗАДАННЫМИ СВОЙСТВАМИ..................................................................22СОЗДАНИЕ ВЕКТОРА РАВНООТСТОЯЩИХ ТОЧЕК......................................................................23РАЗРЕЖЕННЫЕ МАТРИЦЫ..........................................................................................................23

ГРАФИКА...................................................................................................................................25

КОМАНДА PLOT.........................................................................................................................25ОПЦИИ ФУНКЦИИ PLOT.............................................................................................................25ДИРЕКТИВЫ ДВУМЕРНОЙ ГРАФИКИ..........................................................................................28ПОСТРОЕНИЕ ГРАФИКА ПО ТОЧКАМ — ФУНКЦИЯ LISTPLOT..................................................28ПОЛУЧЕНИЕ ИНФОРМАЦИИ О ГРАФИЧЕСКИХ ОБЪЕКТАХ.........................................................29ПЕРЕСТРОЕНИЕ И КОМБИНИРОВАНИЕ ГРАФИКОВ....................................................................29ПРИМИТИВЫ ДВУМЕРНОЙ ГРАФИКИ.........................................................................................31ГРАФИКИ ФУНКЦИЙ, ЗАДАННЫХ В ПАРАМЕТРИЧЕСКОЙ ФОРМЕ.............................................31ПОСТРОЕНИЕ ГРАФИКОВ ПОВЕРХНОСТЕЙ — ФУНКЦИЯ PLOT3D............................................33ОПЦИИ И ДИРЕКТИВЫ ТРЕХМЕРНОЙ ГРАФИКИ.........................................................................34ГРАФИЧЕСКАЯ ФУНКЦИЯ LISTPLOT3D.....................................................................................36РАСШИРЕНИЯ ГРАФИКИ - ПАКЕТ GRAPHICS.............................................................................36АНИМАЦИЯ ГРАФИКОВ РАЗЛИЧНОГО ТИПА – ANIMATION......................................................37СПЕЦИАЛЬНЫЕ ТИПЫ ТРЕХМЕРНЫХ ГРАФИКОВ - GRAPHICS3D..............................................37ПОСТРОЕНИЕ ГРАФИКОВ НЕЯВНЫХ ФУНКЦИЙ - IMPLICITPLOT...............................................39

ПРОГРАММИРОВАНИЕ В СИСТЕМЕ MATHEMATICA..............................................40

АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ И МАССИВЫ...........................................................................40ОПЕРАТОРЫ ОТНОШЕНИЯ.........................................................................................................41ЛОГИЧЕСКИЕ ОПЕРАТОРЫ И ФУНКЦИИ....................................................................................41ПРИОРИТЕТ ВЫПОЛНЕНИЯ ОПЕРАТОРОВ..................................................................................41ОРГАНИЗАЦИЯ ЦИКЛОВ.............................................................................................................42ЦИКЛЫ ТИПА DO.......................................................................................................................42ЦИКЛЫ ТИПА FOR.....................................................................................................................44ЦИКЛЫ ТИПА WHILE.................................................................................................................44ДИРЕКТИВЫ-ФУНКЦИИ ПРЕРЫВАНИЯ И ПРОДОЛЖЕНИЯ ЦИКЛОВ............................................45

Page 3: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

УСЛОВНЫЕ ВЫРАЖЕНИЯ И БЕЗУСЛОВНЫЕ ПЕРЕХОДЫ.............................................................46ФУНКЦИЯ IF..............................................................................................................................46ФУНКЦИИ-ПЕРЕКЛЮЧАТЕЛИ.....................................................................................................47БЕЗУСЛОВНЫЕ ПЕРЕХОДЫ.........................................................................................................48ИНВЕРСНЫЕ ФУНКЦИИ..............................................................................................................49ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ........................................................................................................49ЧИСТЫЕ ФУНКЦИИ....................................................................................................................51АНОНИМНЫЕ ФУНКЦИИ............................................................................................................52РЕШЕНИЕ СИСТЕМ ЛИНЕЙНЫХ УРАВНЕНИЙ ИТЕРАЦИОННЫМИ МЕТОДАМИ..........................52ОБРАТНАЯ МАТРИЦА И ОПРЕДЕЛИТЕЛЬ....................................................................................53ФАКТОРИЗАЦИЯ ХОЛЕЦКОГО...................................................................................................53LU ФАКТОРИЗАЦИЯ...................................................................................................................54QR ФАКТОРИЗАЦИЯ...................................................................................................................56МАТРИЧНАЯ ЭКСПОНЕНТА........................................................................................................57СОБСТВЕННЫЕ ЗНАЧЕНИЯ И СОБСТВЕННЫЕ ВЕКТОРА.............................................................58НОРМАЛЬНАЯ ФОРМА ЖОРДАНА..............................................................................................58РАЗЛОЖЕНИЕ ШУРА..................................................................................................................60СИНГУЛЯРНОЕ РАЗЛОЖЕНИЕ.....................................................................................................60ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ.................................................................................................61УМНОЖЕНИЕ И ДЕЛЕНИЕ МНОГОЧЛЕНОВ.................................................................................61ВЫЧИСЛЕНИЕ ПРОИЗВОДНОЙ ОТ МНОГОЧЛЕНА.......................................................................62ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ МНОГОЧЛЕНА...................................................................................62НАХОЖДЕНИЕ КОРНЕЙ МНОГОЧЛЕНА.......................................................................................62ПОСТРОЕНИЕ СОБСТВЕННЫХ ЗНАЧЕНИЙ МАИРИЦЫ................................................................63ПОИСК ЛОКАЛЬНОГО МИНИМУМА АНАЛИТИЧЕСКОЙ ФУНКЦИИ.............................................63РЕШЕНИЕ СИСТЕМ НЕЛИНЕЙНЫХ УРАВНЕНИЙ.........................................................................64ПРЯМОЕ И ОБРАТНОЕ ПРЕОБРАЗОВАНИЯ ФУРЬЕ......................................................................65РАССМОТРИМ ПРИМЕНЕНИЕ ПРЕОБРАЗОВАНИЯ ФУРЬЕ ДЛЯ ФИЛЬТРАЦИИ СИГНАЛА............66Решение обыкновенных дифференциальных уравнений....................................................67

Page 4: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ВВЕДЕНИЕ

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

Еще с 1960-х появлялись специализированные пакеты для решения численных, алгебраических, графических и других задач. Но концепцией системы Mathematica стало однажды и навсегда создать одну систему для работы с разными видами технических вычислений в последовательном и объединенном виде. Ключом к этому стало создание нового символьного компьютерного языка, который мог управлять широким кругом объектов, вовлеченных в технические вычисления, используя малое число исходных. Когда впервые появилась Mathematica 1.0 газета "New York Times" написала, что "важность программы не может быть не оценена", а журнал "Newsweek" оценил систему Mathematica среди 10 наиболее важных продуктов года.

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

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

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

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

Использование системы Mathematica в интерактивном режиме. Наиболее простой способ работы с системой Mathematica – интерактивный. Вы задаете вопрос, a Mathematica отвечает Mathematica назначает последовательные номера для каждого ввода и вывода, n-ный ввод в сеансе системы Mathematica помечен In[n], и соответствующий вывод помечен Out[n]. Вы можете обратиться к предыдущему результату оператором %. Также возможно сослаться на любой результат оператором %n, где n - номер вывода.

Page 5: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Сохранение и чтение документа. Запись (сохранение) документа программы Mathematica (блокнота) производится как обычно в системах с графическим интерфейсом выберите SAVE AS из меню FILE, далее назначьте диск, каталог и имя файла, в который Вы хотели бы сохранить текущий документ программы Mathematica, а затем щелкните мышью на кнопке ОК. По умолчанию файл, содержащий блокнот, получит расширение *.nb

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

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

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

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

Вы можете напечатать документ системы Mathematica. Для этого выберите PRINT из меню FILE.

Page 6: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ВЫРАЖЕНИЯ

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

численными данными, представляющими числа различного вида; символьными данными, представляющими символы, тексты и математические

выражения (формулы); списками - данными в виде множества однотипных или разнотипных данных.

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

Численные данные.

Двоичные числа, биты и байты. Минимальной единицей информации в компьютерной технике является двоичная единица - бит. Она имеет представление в виде 0 или 1, удобное для реализации простейшими электронными схемами с двумя состояниями электрического равновесия (например, триггерами или иными ячейками памяти). Многоразрядные двоичные числа представляют собой набор цифр 0 и 1, например, 100110 или 111001. Каждый старший разряд относительно предыдущего имеет весовой коэффициент, равный 2.

Именно с битами работает микропроцессор на нижнем уровне операций. Однако бит - слишком мелкая единица, не очень удобная в обращении. К тому же мы привыкли к куда более удобным и наглядным для нас элементам информации, таким как буквы, цифры, знаки арифметических операций, спецзнаки и символы псевдографики. В принципе, набор этих знаков, минимально необходимый для представления обычной текстовой и цифровой информации, содержит до 28 = 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/67Real Вещественные 123. -123.45610^6Complex Комплексные -3.5 + 0. 56 I

Десятичные числа наиболее распространены в научно-технических расчетах.Целые числа. Целочисленные данные (Integer) — это целые числа, например 1, 2 или

123, которые представляются системой без погрешности и ограничения разрядности. Более того, арифметические операции над целыми числами система выполняет также без погрешностей и без ограничения числа цифр (рис. 3.1).

Page 7: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

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

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

41/152Фактически целые числа произвольной разрядности в системах символьной

математики представляются списками отдельных цифр. Особая организация списков повышает компактность представления больших целых чисел. Характерным примером работы с целыми числами большой разрядности является вычисление факториала n!=1*2*3*. . . *n. Примеры его вычисления уже приводились (см. рис. 1.16).

Числа с произвольным основанием. Для вычисления чисел с произвольным основанием используется конструкция:

Основание^^ЧислоЧисло должно быть записано по правилам записи чисел с соответствующим

основанием. Если основание больше 10, для обозначения значений чисел используются буквы от а до z. Наиболее известными из чисел с основанием системы счисления, превышающим 10, являются шестнадцатеричные числа (HEX — от слова hexagonal). Разряды таких чисел могут иметь следующие значения:

HEX 0123456789abCdefDECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

Примеры задания шестнадцатеричного и двоичного чисел:2^^101011187

Page 8: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Для представления чисел с произвольным основанием п (до 32) используется функция BaseForm[expr, n], которая возвращает выражение ехрr в форме числа с основанием п, которое указывается как подстрочный индекс.

Примеры использования функции BaseForm:BaseForm[87,2]10101112

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

десятичными вещественными числами, которые могут иметь различную форму, например 123.456, 1.23456 10^2,12345.6 10^-2 и т. д. В общем случае они содержат мантиссу с целой и дробной частями и порядок, вводимый как степень числа 10. Как правило, вещественные числа в системах символьной математики могут иметь мантиссу с любым, но конечным числом знаков. Пробел между мантиссой и порядком эквивалентен знаку умножения *:

10^-1001.x 10^-100

Как принято в большинстве языков программирования, целая часть мантиссы отделяется от дробной части точкой, а не запятой.

Mathematica производит операции с числами изначально как с целыми. Однако установка значка разделительной точки означает, что число должно рассматриваться как вещественное. Например, 1 — целое число, но 1. — уже вещественное число. Для представления выражения ехрг в форме вещественного числа используется функция N [ехрг] или N [ехрг, число_цифр_результата].

Примеры:N[2*Pi,50]6.283185307179586476925286766559005768394338

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

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

$MinMachineNumber2.22507х 10^-308

Обратите внимание на то, что функция N [ехрr, m] позволяет получить число с практическим любым числом цифр результата m. Разработчики последней версии Mathematica 4 утверждают, что это верно при количестве цифр результата до одного миллиона, что с лихвой удовлетворяет требованиям подавляющего большинства расчетов и вычислений.

Функции IntegerPart [x] и FractionalPart [x] обеспечивают возврат целой и дробной частей вещественного числа х:

N[Pi]3.14159IntegerPart[Pi]3FractionalPart[Pi]-3.+ ЛN[FractionalPart[Pi]]0.141593

Page 9: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Еще одна функция 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]3Im[3+2 I]2

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

Символьные данные и строки.

Символьные данные в общем случае могут быть отдельными символами (например a,b,..., z), строками (strings) и математическими выражениями ехрr (от expression - выражение), представленными в символьном виде.

Символьные строки задаются цепочкой символов в кавычках, например "sssss". В них используются следующие управляющие символы для строчных объектов:

\n— новая строка (line feed); \ t — табуляция.

Это иллюстрируется следующими примерами:"Hello my friend!"Hello my friend! "Hello\nmy\nfriend!" Hellomyfriend!"Hello\tmy\tfriend!" Hello my friend;

Page 10: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

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

Выражения.

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

Запись на языке Mathematica Обычная математическая запись2*Sin[x] 2*sin(x)2*Sin[x] 2*sin(x)(а +b^2 + с^З) / (3*d - 4*e) (a + b2+с3)/(3d-4е)sqrt(2) Кореннь из 2Integrate [Sin [x] , х] Интеграл sin(x) dx

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

знак умножения может быть заменен пробелом; встроенные функции начинаются с большой буквы и обычно повторяют свое

общепринятое математическое обозначение (за исключением тех, в названии которых есть греческие буквы — они воспроизводятся латинскими буквами по звучанию соответствующих греческих букв);

круглые скобки () используются для выделения частей выражений и задания последовательности их вычисления;

параметры функций задаются в квадратных скобках [ ]; фигурные скобки {} используются при задании списков.

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

Списки и массивы.

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

{ 1 , 2 , 3 } — список из трех целых чисел; { а , b , с } — список из трех символьных данных; {1, а, x^ 2} — список из разнотипных данных; {{a,b},{c,d}} — список, эквивалентный матрице a bc d{х^2+у^2, 2*Sin [x] } — список из двух математических выражений.

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

Page 11: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Объекты и идентификаторы.

В общем случае система Mathematica оперирует с объектами. Под ними подразумеваются математические выражения (ехрr), символы (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}

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

Page 12: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Каждый объект может характеризоваться некоторой совокупностью своих свойств и признаков, называемых атрибутами. Функция 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... и равное отношению длины окружности к

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

Page 13: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

{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 (секунда) и т. д. Последние могут стоять в числителе и в знаменателе выражений, представляющих размерные величины:

5 Meter 5 Meter 0.5 Second0.5 Second

Между значением размерной величины и единицей измерения знак умножения можно не ставить. Это видно из приведенных выше примеров.

Для облегчения ввода физических констант, представляющих собой размерные величины, в наборе файлов Mathematica можно найти файл PhysicalConstants.nb. При его загрузке появляется дополнительная палитра физических констант, показанная на рис. 3.2.Для ввода констант достаточно активизировать соответствующую кнопку с нужной константой. Будут введено выражение, задающее константу. Ниже представлены примеры ввода первой и последней констант, содержащихся в палитре, представленных в стандартной форме:

2.99792458000000028'*^8 Meter/ Second2.99792х108 Meter/ Second6. 9599 x 108 Meter6.9599xl08 Meter

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

Рис. 3.2. Дополнительная палитра физических констант

Page 14: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Переменные.

Переменными в математике принято называть именованные объекты, которые могут принимать различные значения, находящиеся в определенном множестве допустимых значений. Подобно этому, переменными в системе 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 присваивается значение в виде списка,

содержащего четыре элемента.

Page 15: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Различие в присваивании переменным значений с помощью знаков «=>> и <<:=» иллюстрируют следующие примеры:

а=12; b=а12с:=а с12а=15; b12 с15

Как видите, после первоначальных присваиваний b=а и с: =а обе переменные, Ь и с, имеют значение 12. Однако после присваивания переменной а нбвого значения (15) переменная Ь, которой было присвоено вычисленное значение а, остается равной 12, а переменная с, которой было присвоено невычисленное значение а, становится равной 15.

Особо обратите внимание на то, что возможно снятие с переменной определения с помощью символов «=.» или функции Clear [var]. В символьной математике это очень полезная возможность, поскольку нередко переменные с одним и тем же именем в разных частях программы могут иметь разный смысл и представлять объекты, требующие значительных затрат памяти.

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

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

Текстовые комментарии.

Для создания текстовых комментариев различного назначения (как выводимых, так и не выводимых на экран в ходе работы с пакетом) в языке программирования системы MATHEMATICA используются следующие средства:

(* Comment *) - задание не выводимого на экран текстового комментария, как однострочного, так и многострочного, в любом месте пакета;

Message [symbol: : tag] - вывод сообщения symbol::tag, если только вывод сообщений не отключен;

Message [symbol: :tag, e1, e2,...] - выводит сообщение, вставляя значения ei по мере необходимости;

$MessageList - глобальная переменная, возвращающая список имен сообщений, вырабатываемых во время вычисления текущей входной строки. Имя каждого сообщения заключено в HoldForm [ ]. $MessageList сохраняется в MessageList [n] и переустанавливается в { } после того, как произведена п-я выходная строка;

MessageList [n] - глобальный объект, который является списком имен (сообщений), которые вырабатываются в процессе обработки п-й входной строки;

MessageName, применяется в виде symbol: : tag или MessageName [symbol, "tag" ] - имя для сообщения;

Messages [symbol] - возвращает все сообщения, присвоенные данному символу symbol.

Print[expr1,expr2,...] - печатает в окне вывода expr1,expr2,....

Page 16: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Приведем несколько примеров вместе с результатами выполнения:

ПРИМЕР 1:f::”overflow”=”Factorial argument ‘1‘ too large.”;f[x_]:=If[x>10,Message[f::”overflow”,x];∞,x!];

Если задаем x<10 то вычисляется факториал от числа:f[10]

3628800Если задаем x>10 то выдается сообщение, которое мы написали:

f[20]f::overflow: Factorial argument 20 too large.

∞Если надо, то можно отключить вывод сообщения:

Off[f::”overflow”];f[20]

ПРИМЕР 2:

Sqrta, b, c; Expa, b;$MessageListSqrt::argx: Sqrt called with 3 arguments; 1 argument is expected.Exp::argx: Exp called with 2 arguments; 1 argument is expected.Sqrt::argx, Exp::argx InputForm%{HoldForm[Sqrt::argx], HoldForm[Exp::argx]}

ПРИМЕР 3:

MessageNamesymbol, "tag", "lang"symbol::tag::lang

ПРИМЕР 4:

func::"usage" "This message is about the function func."

MessagesfuncThis message is about the function func.HoldPatternfunc::usage This message is about the function func.ПРИМЕР 5:

p Print"Evaluating this won't make p into a string."Evaluating this won't make p into a string.

Page 17: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ОПЕРАЦИИ С РАБОЧЕЙ ОБЛАСТЬЮ И ФАЙЛАМИ

Сеанс работы с MATHEMATICA принято именовать сессией (session). Сессия отражает работу пользователя с системой. Переменные и определения новых функций в системе MATHEMATICA хранятся в особой области памяти – рабочей области. Основным типом документов являются так называемые блокноты (notebooks). Им соответствуют файлы текстового формата с расширением .nb. Эти файлы могут редактироваться любым текстовым редактором, поддерживающим формат ASCII. Файлы содержат подробное описание документа с указаниями типов шрифтов, деталей оформления и местоположения различных объектов. Save ["filename", x1, x2,...] — создает файл с заданным именем filename, содержащий значения переменных x1, х2, ...;

ПРИМЕР:a 15;

c 3;

Save"file", a, cfile a = 15 c = 3

Для записи объекта (переменной, массива, списка и т. д.) в уже существующий файл служат упрощенные команды:

expr >> filename — передает значение ехрг в файл с заданным именем; ехрr >>> filename — добавляет ехрг в конец файла с заданным именем.

ПРИМЕР:

200 file11

100 file11

300 file11

file11

200 100 300

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

Get ["filename", "key"] — читает файл, который закодирован функцией Encode с использованием ключа "key";Get"file11", "key"

200 100 300

Put[exprl, expr2, ..., "filename"] — записывает последовательность выражений expri в файл с именем filename;Putx, 2, Sin5., "filename"filenamex2

Page 18: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

-0.9589242746631385 PutAppend[expr1, expr2, ..., "filename"] — присоединяет последовательность

выражений expri к файлу с именем filename.Putx, 2, Sin5., "filename"PutAppend3, y, "filename"filenamex2-0.95892427466313853y

Упрощенная функция — ! ! filename — выводит содержимое файла с заданным именем.Функции: Splice [ "file .mx" ] — вставляет в файлы на других языках программирования

вычисленные выражения системы Mathematica, которые должны быть записаны в скобках вида <* и *>;

Splice ["infile", "outfile"] — читает файл infile, интерпретирует фрагменты, содержащиеся между скобками <* и *>, и записывает результат в файл outfile.

То есть, имеется возможность экспорта выражений системы MATHEMATICA в программы, составленные на этих языках.

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

!!demo.me#include "mdefs.h" double f(x)double x;{

double y;у = <* Integrate[Sin[x]^5, x] *> ;return (2*y- 1) ;

}

После исполнения функции Splice ["demo.me"] программа будет записана в файл demo.с, в котором выражение в скобках <*...*> заменено вычисленным значением интеграла (в форме CForm). Файл при этом будет выглядеть так:

!!demo.с#include "mdefs.h" double f(x) double x; {

double y;у = -5*Cos(x)/8 + 5*Cos(3*x)/48- Cos(5*x)/80 ;return (2*y- 1) ;

}

Операции с файлами. Для работы с файлами служит меню File. В этом меню содержатся следующие команды:

New (Ctrl+N) — вывод окна нового документа; Open (Ctrl+0) — загрузка существующего документа;

Page 19: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Close (Ctrl+F4) — закрытие текущего окна; Save (Ctrl+S) — запись документа с текущим именем; Save As (Shift+Ctrl+S) — запись документа с изменением имени; Save As Special — запись в специальных форматах; Open Special — открытие файлов в специальных форматах; Import — вставка содержимого файла в ячейку текущего документа; Palettes — вывод палитр математических спецзнаков, операторов и функций: Notebook — вывод списка документов, которые загружались ранее; Printing Settings — установка параметров печати; Print (Ctrl+P) — печать текущего документа; Print Selection — печать выделенных ячеек; Exit (Alt+F4) — завершение работы с системой. MATHEMATICA может записывать и считывать файлы, представленные в ряде

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

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

Для загрузки файлов в специальных форматах служит команда Open Special. Команда Get File Path предоставляет удобный способ вставить в документ имя файла

вместе с полным путем к нему.

Page 20: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ

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

Рассмотрим способы построения матриц. В следующих примерах вектор является матрицей размером 1x3, а скаляр матрицей 1x1:

v:= {2, 0, -1}// MatrixFormv

123s: = 7s

7

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

M:={{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}//MatrixFormM

1 2 34 5 67 8 9

задает квадратную матрицу, которую можно вывести, набрав в командной строке M.

M

1 2 34 5 67 8 9

В качестве элементов матриц можно использовать арифметические выражения, например:

V := N[{2+3*5, exp(2), sqrt(2)}]//MatrixFormV =

17.7.389061.41421

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

и столбце J матрицы A обозначается A(I, J). Если элементу A(2, 3) надо присвоить значение 10, следует ввести команду:

A0 0 00 0 00 0 0

;A2, 3: 10;AMatrixForm

Page 21: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

0 0 00 0 100 0 0

K={{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}

Выражение K[[I]] с одним индексом дает доступ к строке матрицы номера I.TableForm[K]K[[2]]

1 1 12 2 23 3 3

{2,2,2}

Выражение M[[All,I]] дает доступ к столбцу матрицы номера I.TableForm[K]K[[All,2]]

1 1 12 2 23 3 3

{1,2,3}

Выражение M[[I,J]] дает доступ к элементу (I,J) матрицы.M[[2,1]]

4

Если попытаться использовать значение элемента вне матрицы, MATHEMATICA выдаст ошибку:

M[[4,1]] Part 4 of {{1,2,3},{4,5,6},{7,8,9}} does not exist.

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

Удаление строк и столбцов.

Строки и столбцы матрицы можно удалить, используя команду Drop.Создадим матрицу размером 4x4 :

М=

Затем удалим второй столбец:

Drop[M, {}, {2}]

M =

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

Delete[M,{2,3}]

a b c de f g hk l m no p r s

a c de g hk m no r s

Page 22: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

M =

a, b, c, de, f, hk, l, m, no, p, r, s

Объединение матриц.

Объединение матриц – это процесс соединения нескольких матриц в одну большую. Фактически, исходная матрица создается объединением ее отдельных элементов. Оператор объединения – Union. Так, Union[A, B] – вертикальная конкатенация (объединение) матриц A и B, которые должны иметь одинаковое количество столбцов. Вертикальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [A, B, C]. Приведем пример:

M1 = ; M2 =

Union[A, B]

Транспонирование матриц.

Матрицы можно транспонировать с помощью команды Transpose, например Transpose[A] - транспонированная матрица A. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы.

Создание матриц с заданными свойствами.

Для создания единичной матрицы служит функция eye: IdentityMatrix[n] – возвращает единичную матрицу размером nxn;

Пример использования функции IdentityMatrix: M = IdentityMatrix[5];

М =

Для создания матриц, все элементы которых – единицы, используется функция ones: Table[1, {n}] – возвращает вектор размером n, все элементы которого – единицы; Table[Table[1, {n}], {m}] – возвращает матрицу размером mxn, состоящую из

единиц;

a1 b1 c1 d1e1 f1 g1 h1k1 l1 m1 n1o1 p1 r1 s1

a b c de f g hk l m no p r s

a b c de f g hk l m no p r sa1 b1 c1 d1e1 f1 g1 h1k1 l1 m1 n1o1 p1 r1 s1

1 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 00 0 0 0 1

Page 23: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Пример:Table[Table[1, {4}], {4}]

{{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}}Table[i, {i, 2,5}]

{2,3,4,5}Создавать матрицы с заданными диагональными элементами позволяет функция

DiagonalMatrix: X = DiagonalMatrix [v] – для вектора v, состоящего из n компонент,

возвращает квадратную матрицу X порядка n, помещает вектор v на главную диагональ;

Пример: DiagonalMatrix[{a,b,c,d}]

{{a,0,0,0},{0,b,0,0},{0,0,c,0},{0,0,0,d}}Для создания матриц, состоящих из других матриц, служат следующие функции:

Intersection (A, B) логическое И. возвращает матрицу A, состоящую из элементов (векторов) содержащихся в обоих матрицах;

Complement (A,B) возвращает матрицу A, элементов (векторов) отсутствующих в матрице B;

Создание вектора равноотстоящих точек.

Функция linspace формирует линейный массив равноотстоящих узлов. Формы применения:

Range[a] формирует линейный массив из а точек, равномерно распределенных на отрезке от 1 до a;

Range[a, b] формирует линейный массив из b-a точек , равномерно распределенных на отрезке от a до b;

Range[a, b, n] формирует линейный массив точек, равномерно распределенных на отрезке от a до b с шагом n;

Пример:Range[12]

{1,2,3,4,5,6,7,8,9,10,11,12} Range[5,12] {5,6,7,8,9,10,11,12} Range[5,12,3] {5,8,11}

Разреженные матрицы.

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

SparseArray[{pos1->val1, pos2->val2, … }] создает разреженную матрицу, в которой значения vali появляются в позиции posi.

Page 24: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

SparseArray[{pos1, pos2, … }->{val1, val2, … }] создает аналогичную разреженную матрицу.

SparseArray[list] создает разреженную матрицу, используя какую-либо версию списка list.

SparseArray[data, {d1, d2, … }] создает разреженную матрицу и представляет ее в виде матрицы размера d1*d2*… .

SparseArray[data, dims, val] создает разреженную матрицу, в которой неопределенные элементы заменяются значением val.

По умолчанию SparseArray заменяет неопределенные элементы нулями.Normal[SparseArray[ … ]] дает обычный массив, ссылающийся на объект разреженной

матрицы.Элементы в SparseArray не обязательно должны быть числовыми.Позиции posi могут описываться шаблоном:SparseArray[{{i_, i_}->1}, {d, d}] дает единичную матрицу.

Примеры:Создадим некоторое правило для формирования разреженной матрицы:

rules={{i_,i_}11,{1,5}22};Получим разреженную матрицу, используя это правило:

ss=SparseArray[rules,{5,5}]

Эта конструкция формирует такую же разреженную матрицу по аналогичному правилу:

ss2=SparseArray[{{i_,i_},{1,5}}{11,22},{5,5}]То есть:

ss==ss2 есть True.

Дадим представление ss в обычной форме:Normal[ss]//MatrixForm11 0 0 0 220 11 0 0 00 0 11 0 00 0 0 11 00 0 0 0 11

Разреженная матрица, в которой неопределенные элементы заменяются числом 333 вместо 0:

SparseArray[rules,{5,5},333]//Normal//MatrixForm11 333 333 333 22333 11 333 333 333333 333 11 333 333333 333 333 11 333333 333 333 333 11

Обычные команды для матриц работают и с разреженными матрицами:tt=Transpose[ss]Normal[tt]//MatrixForm11 0 0 0 00 11 0 0 00 0 11 0 00 0 0 11 022 0 0 0 11

Page 25: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ГРАФИКА

Команда Plot.

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

Plot[Sin[x],{x,0,20}] - построение графика синусоиды; g:=Plot [Sin [x], {х, 0, 20} ] - задание объекта - графика синусоиды - с отложенным

выводом; g=Plot [Sin [x], {х, 0, 20} ] - задание объекта - графика синусоиды - с немедленным

выводом. Начнем рассмотрение графических возможностей системы с построения простейших графиков функций одной переменной вида у =f(x) или просто f(x). График таких функций строится на плоскости, то есть в двумерном пространстве. При этом используется прямоугольная (декартова) система координат. График представляет собой геометрическое положение точек (х, у) при изменении независимой переменной (абсциссы) в заданных пределах, например от минимального значения xmin до максимального хmах с шагом dx. По умолчанию строятся и линии координатной системы. Для построения двумерных графиков функций вида f(x) используется встроенная в ядро функция Plot:

Plot [f, {x, xmin, xmax}] - возвращает объект, представляющий собой график функции f аргумента х в интервале от xmin до xmax;

Plot[{f1, f2,...}, {x, xmin, xmax}] - возвращает объект в виде графиков ряда функций fi.

Функция Plot используется для построения одной или нескольких линий, дающих графическое представление для указанных функций f, f1, f2 и т. д. На рисунке показано построение графика функции sin(x)/x без использования каких-либо опций (точнее, с набором опций по умолчанию).

Plot[Sin[x]/x,{x,0,20}]

5 10 15 20

-0.2

-0.1

0.1

0.2

0.3

0.4

Опции функции Plot.

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

Page 26: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

графических функций Для вывода их списка надо использовать команду Options [Plot]. Полный список опций дан в приложении. Опции внутри графических функций задаются своим именем name и значением value в виде

name -> value Наиболее распространённые символьные значения опций:

Automatic — используется автоматический выбор; None — опция не используется; All — используется в любом случае; True — используется; False — не используется.

Многие опции могут иметь числовые значения. В сомнительных случаях рекомендуется уточнять форму записи опций и их значений по оперативной справочной смстеме. Рассмотрим примеры применения опций двумерной графики. Для изменения масштаба использована опция PlotRange->{ -.25,1.2}. Нетрудно догадаться, что эта опция задает пределы отображения графика по вертикали от -0.25 до 1.2. График функции sin(x)/x с масштабом, дающим его отображение в полном виде

Plot[Sin[x]/x,{x,0,20},PlotRange→{-.25,1.2}]

5 10 15 20-0.2

0.2

0.4

0.6

0.8

1

По умолчанию система строит графики, не указывая надписей ни по осям координат, ни в верхней части графика. Такая надпись на графике по центру сверху называется титульной. Рисунок 8.3 показывает построение графика с надписями у координатных осей. Для создания таких надписей используется опция Axes Label. После нее указывается список, содержащий две надписи — одну для оси х, вторую — для оси у. Надписи указываются в кавычках. Таким образом, задание опции выглядит следующим образом: AxesLabel-> {"X value","f(x)}.

График с надписями по координатным осям. Plot[Sin[x]/x,{x,0,20},PlotRange→{-.25,1.2},AxesLabel→{"x ","f(x)"}]

5 10 15 20x

-0.2

0.2

0.4

0.6

0.8

1

fx

Page 27: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

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

Plot[Sin[x]/x,{x,0,20},PlotRange→{-.25,1.2},Axes→None ,PlotLabel->"Sin[x]/x"]Sinxx

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

PlotBesselJ0, x2, BesselJ0, x3, BesselJ1, x,x, 0, 5,AxesLabelx, BesselJ;

1 2 3 4 5x

-0.4

-0.2

0.2

0.4

0.6

0.8

1

BesselJ

Рисунок иллюстрирует недостаток одновременного представления нескольких графиков, создаваемого по умолчанию, — все графики построены одинаковыми линиями, и не сразу ясно, какой график к какой функции относится. Следующий рисунок показывает возможности управления стилем линий (густотой черного цвета) графиков с помощью опции PlotStyle. Если желательно выделение линий разными цветами, удобно использовать в качестве значения опции PlotStyle список вида {Hue [cl] , Hue [с2] ,...}, где параметры c1, с2, ... выбираются от 0 до 1 и задают цвет соответствующей кривой. Построение графиков линиями разного стиля. PlotBesselJ0, x2, BesselJ0, x3, BesselJ1, x,x, 0, 5,AxesLabelx, BesselJ0, x2, PlotStyleHue0.1, Hue0.2, Hue0.6;

Page 28: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

1 2 3 4 5x

-0.4

-0.2

0.2

0.4

0.6

0.8

1

BesselJ

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

Директивы двумерной графики.

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

AbsoluteDashing [ {dl, d2,...}]— задает построение последующих линией пунктиром со смежными (последовательными) сегментами, имеющими абсолютные длины dl, d2, ... (повторяемые циклически). Значения длины di задаются в пикселях;

AbsolutePointSize [d] — задает построение последующих точек графика в виде кружков с диаметром d (в пикселях);

AbsoluteThickness [d] — задает абсолютное значение толщины (в пикселях) для последующих рисуемых линий;

Dashing [{rl, r2,...}] — задает построение последующих линий пунктиром с последовательными сегментами длиной rl, г2, ..., повторяемыми циклически, причем ri задается как доля полной ширины графика;

PointSize [d] — задает вывод последующих точек графика в виде кружков с относительным диаметром d, заданным как доля общей ширины графика;

Thickness [r] — устанавливает для всех последующих линий толщину г, заданную как доля полной ширины графика.

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

Построение графика по точкам — функция ListPlot

Часто возникает необходимость построения графика по точкам. Это обеспечивает встроенная в ядро графическая функция ListPlot:

ListPlot [ {yl, у2,...}]— выводит график списка величин. Координаты х принимают значения 1, 2, ...;

ListPlot [{{x1, y1}, {х2, у2 },...}]—выводит график списка величин с указанными х- иy-координатами.

Пример построения графика функции по некоторой табличной функции, с заданным шагом

Page 29: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

h 0.1;

t Tablei5 2i3 1,i, 0, 1, h;ListPlott, PlotJoined True

4 6 8 10

1.5

2

2.5

3

3.5

4

Получение информации о графических объектах

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

FullAxes [g] — возвращает список опций координатных осей; Options [g] — возвращает упрощенный список опций; FullOptions [g] — возвращает полный список опций; InputForm[g] — возвращает информацию о графике (включая таблицу точек).

Для получения полного списка опций вместе с их значениями можно использовать функцию FullOptions. Аналогично можно получить и иные данные — они не приводятся ввиду громоздкости выводимой информации. Анализ графиков с применением этих функций может оказаться весьма полезным при построении и редактировании сложных графиков. Функции FullOptions и Options можно также использовать в следующем виде:

Options [g, option] — возвращает значение указанной опции option; FullOptions [g, option] — возвращает значение указанной опции option.

В этом случае можно получить информацию по отдельной опции.

Перестроение и комбинирование графиков.

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

Show [plot] — построение графика; Show [plot, option -> value] — построение графика с заданной опцией; Show[plotl, plot2,...] — построение нескольких графиков с наложением их друг на

друга.

Page 30: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Директива Show полезна также и в том случае, когда желательно, не трогая исходные графики, просмотреть их при иных параметрах. Соответствующие опции, меняющие параметры графиков, можно включить в состав директивы Show. Другое полезное применение директивы - объединение на одном графике нескольких графиков различных функций или объединение экспериментальных точек и графика теоретической зависимости. Для этого также удобна функция Display-Together, которая будет описана при описании пакета расширения Graphics в уроке 14. В отличие от функции Show, она позволяет объединять графики без предварительного построения каждого из них. Рисунок показывает создание двух графических объектов p1 и p2 с отложенным выводом, а затем построение графиков функций и применение директивы Show для создания объединенного графика. В этом случае директива Show вначале строит исходные графики отдельно, а затем создает объединенный график.

Построение двух графических объектов и их объединение p1=Plot[x Sin[x],{x,-10,10},PlotStyle→Hue[0.1]];

-10 -5 5 10

-4

-2

2

4

6

8

p2=Plot[x Cos[x],{x,-10,10},PlotStyle→Hue[0.5]];

-10 -5 5 10

-7.5

-5

-2.5

2.5

5

7.5

Show[{p1,p2},Axes→False];

Page 31: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Разумеется, при использовании директивы Show надо побеспокоиться о выравнивании масштабов графиков, налагаемых друг на друга. Полезно особо обратить внимание на возможность присваивания графиков функций переменным (в нашем примере — p1 и p2) в качестве значений. Такие переменные становятся графическими объектами, используемыми директивой Show для вывода на экран дисплея. Директива Show часто применяется, когда надо построить на одном графике кривую некоторой функции и представляющие ее узловые точки (например, при построении кривых регрессии в облаке точек исходных данных).

Примитивы двумерной графики.

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

Рисунок показывает применение функции Graphics для построения ломанной и прямоугольников.

Show[Graphics[Line[Table[{Random[],Random[]},{24}]]]];Show[Graphics[{Hue[.77],Rectangle[{0,0},{5,1}],Hue[.17],Rectangle[{3,0},{4,2}]}]];

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

Графики функций, заданных в параметрической форме.

Построение графиков в параметрической форме основано на использовании обычной декартовой системы координат. Координаты каждой точки при этом задаются в параметрическом виде: x = f x (t) и у = f y (t), где независимая переменная t меняется от минимального значения £ min до максимального t mах с шагом dt. Особенно удобно применение таких функций для построения замкнутых линий, таких как окружности, эллипсы, циклоиды и т. д. Для построения параметрически заданных функций используются следующие графические средства:

Page 32: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ParametricPlot [ {fx, fy}, {t, tmin, tmax} ]—строит параметрический график с координатами f х и f у (соответствующими х и у), получаемыми как функции от t;

ParametricPlot [{{fx, fy}, {gx, gy},...}, {t, tmin, tmax}] —строит графики нескольких параметрических кривых.

Функции f x, f у и т. д. могут быть как непосредственно вписаны в список параметров, так и определены как функции пользователя.

ParametricPlot[{Cos[5t],Sin[3t]},{t,0,2},AspectRatioAutomatic];

-1 -0.5 0.5 1

-1

-0.5

0.5

1

Построение контурных графиков.

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

ContourPlot[f,{x, xmin, xmax}, {у, ymin, ymax}] — порождает контурный график f как функции от х и у;

ContourGraphics [array] — представляет контурный график массива array; ListContourPlot[array] — формирует контурный график из массива величин высот.

Этих функций достаточно для построения практически любых монохромных графиков такого типа.Для управления возможностями графической функции ContourPlot используются опции, полный список которых выводит команда Options [ContourGraphics].

Помимо уже рассмотренных ранее опций используются следующие: ColorFunction — задает окраску областей между линиями; Contours — задает число контурных линий; ContourLines — задает прорисовку явных (explicit) контурных линий; ContourShading — задает затенение областей между контурными линиями; ContourSmoothing — задает сглаживание контурных линий; ContourStyle — задает стиль рисуемых линий для контурных графиков; MeshRange — задает области изменения х- и y-координат.

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

Контурный график поверхности sin(x у) с закраской областей между линиями равного уровня оттенками серого цвета

ContourPlot[Sin[x y],{x,-5,5},{y,-5,5},ColorFunction→Hue,ContourSmoothing→True];

Page 33: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

-4 -2 0 2 4

-4

-2

0

2

4

Следующий пример иллюстрирует эффективность применения опции ContourShading. Если задать ее значение равным False, то заполнение пространства между линиями будет отсутствовать. Таким образом, в данном случае строятся только линии равного уровня. Иногда график оказывается более наглядным, если убрать построение контурных линий, но оставить закраску областей между линиями. Такой вариант графика более предпочтителен, если нужно наблюдать качественную картину. Для построения такого графика надо использовать опцию ContourLine->False

ContourPlot[Sin[x y],{x,-5,5},{y,-5,5},ContourLines→False];

-4 -2 0 2 4

-4

-2

0

2

4

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

Пример контурного графика с заданным количеством контурных линий ContourPlot[Sin[x y],{x,-5,5},{y,-5,5},Contours→3];

-4 -2 0 2 4

-4

-2

0

2

4

Построение графиков поверхностей — функция Plot3D.

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

Page 34: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Для построения графиков трехмерных поверхностей используется основная графическая функция Plot 3D:

Plot3D[f, {x, xmin, xmax), {у, ymin, ymax}] — строит трехмерный график функции f переменных х и у;

Plot3D[{f, s}, {x, xmin, xmax}, {y, ymin, ymax}] — строит трехмерный график, в котором высоту поверхности определяет параметр f, а затенение — параметр s.

На рисунке показан пример построения поверхности, описываемой функцией двух переменных sin(x у) при х и у, меняющихся от 0 до 4. Поверхность строится в виде каркаса с прямоугольными ячейками с использованием функциональной окраски. Все опции заданы по умолчанию.

Plot3D[Sin[x y],{x,0,4},{y,0,4}];

01

23

4 0

1

2

3

4

-1-0.5

00.51

01

23

4

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

Опции и директивы трехмерной графики.

Для модификации трехмерных графиков могут использоваться многочисленные опции и директивы, список которых дан в приложении. Их применение позволяет строить большое число графиков различных типов даже при задании одной и той же поверхности. В качестве примера рассмотрим отдельные кадры документа, демонстрирующего влияние опций на вид трехмерной математической поверхности. На рисунке показана исходная поверхность, построенная с применением опции PlotPoint->50. Это означает, что поверхность по каждой оси делится на 50 частей (в исходном графике по умолчанию используется деление на 10 частей). Масштаб по вертикали задается автоматически, с тем чтобы все высоты поверхности не ограничивались.

Plot3D[Sin[x y],{x,0,4},{y,0,4},PlotPoints50];

0

1

2

3

40

1

2

3

4

-1-0.5

0

0.5

1

0

1

2

3

4

На следующем рисунке показана та же поверхность, полученная с применением опции PlotRange-> {0, 0.5}, срезающей верхнюю часть поверхности (точки с ординатами выше 0.5). График поверхности при этом существенно меняется.

Plot3D[Sin[x y],{x,0,4},{y,0,4},PlotRange{0,0.5}];

Page 35: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

0

1

2

3

4 0

1

2

3

4

0

0.2

0.4

0

1

2

3

4

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

Plot3D[Sin[x y],{x,0,4},{y,0,4},BoxedFalse];

0

1

2

3

40

1

2

3

4

-1-0.5

0

0.5

1

0

1

2

3

4

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

Plot3D[Sin[x y],{x,0,4},{y,0,4},ViewPoint->{1.2,1.2,1.2}];

0

1

2

3

4

0

1

2

3

4

-1-0.5

0

0.5

1

0

1

2

3

4

-1-0.5

0

0.5

1

Опция Mesh -> False позволяет удалить линии каркаса фигуры. Нередко это придает фигуре более естественный вид — обычно мы наблюдаем такие фигуры без линий каркаса.

Plot3D[Sin[x y],{x,0,4},{y,0,4},MeshFalse];

0

1

2

3

40

1

2

3

4

-1-0.5

0

0.5

1

0

1

2

3

4

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

Page 36: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

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

Графическая функция ListPlot3D.

Часто трехмерная поверхность задается массивом своих высот (аппликат). Для построения графика в этом случае используется графическая функция ListPlotSD:

ListPlot3D [array] - строит трехмерный график поверхности, представленной массивом значений высот;

ListPlot3D [array, shades] - строит график так, что каждый элемент поверхности штрихуется (затеняется) согласно спецификации shades.

Plot Joined - дополнительная опция для ListPlot, указывающая, следует ли соединять линией точки, нанесенные на график.

Пример применения функции ListPlot3D показан на рисункеListPlot3DTableSinxy RandomReal,0.15, 0.15,x, 0, 3Pi

2,Pi15,y, 0, 3Pi

2,Pi15;

510

1520

5

10

15

20

-1-0.5

00.51

510

1520

Командой Options [ListPlot3D] можно вывести полный список опций данной функции, чтобы использовать их для модификации графиков, которые строит эта функция.

Расширения графики - пакет Graphics. 

Анимация графиков различного типа Использование цвета Построение стрелок Графики комплекснозначных функций Построение объемных контурных графиков Построение графиков с окраской внутренних областей Графики специальных типов Специальные типы трехмерных графиков Построение графиков неявных функций Вывод обозначений кривых Построение трехмерных параметрических графиков Представление полей на плоскости и в пространстве Трехмерные графические объекты

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

Page 37: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Анимация графиков различного типа – Animation.

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

Подпакет Animation подключается автоматически и в ряде случаев не требует загрузки (хотя на всякий случай его лучше загрузить при использовании средств анимации). Пакет задает две важнейшие функции:

Animate [grcom, {t, tmin, tmax, dt] - задает построение серии графических объектов grcom при изменении параметра t от tmin до tmax с шагом dt;

ShowAnimation [ {p1,p2, р3,...} ] - дает анимацию последовательным воспроизведение ранее подготовленных объектов р1,р2,р3,…

Следующий пример иллюстрирует анимацию графика с параметрическим заданием функции:

ShowAnimation[Table[ Graphics[Line[{{0 0}, {Cos[t], Sin[t]}}], PlotRange -> {{-1, 1}, {-1, 1}}], {t, 0, 2Pi, Pi/8}]]

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

Специальные типы трехмерных графиков - Graphics3D.  В подпакете Graphics3D, загружаемом командой <<Graphics`Graphics 3D` имеется ряд программ для простого построения трехмерных графиков. Они описаны ниже с примерами:

BarChart3D[ {{ zll, z!2,...},{z21, z22 },...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z 11 , z п , ... ;

BarChart3D[ {{{zll, stylell}, {z21, style21},...} ] — строит трехмерную столбцовую диаграмму по наборам данных высот столбцов z u , z vl , ... с указанием спецификации стиля для каждого столбца.

Функция BarChartSD автоматически задает стиль и цвет построения столбцов диаграммы. Эта функция имеет массу опций, с помощью которых можно менять вид диаграммы. Как обычно, перечень опций можно вывести с помощью команды Options [BarChart3D].

Построение трехмерной столбцовой диаграммы. BarChart3D[{{1, 2, 3}, {4, 5, 6}}]

0.511.5

22.5

12

3

0

2

4

6

0.511.5

22.5

12

3

Построение трехмерной поверхности по координатам ее точек

Page 38: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ListSurfacePlot3D[{ { {x11, y11, zll}, {x12, y12, z13},...} } }] - строит трехмерную поверхность по координатам ее точек.

apts = Table[{Cos[t] Cos[u], Sin[t] Cos[u], Sin[u]}, {t, 0, Pi, Pi/5}, {u, 0, Pi/2, Pi/10}];ListSurfacePlot3D[apts]

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

ShadowPlot3D [f, {х, xmin, xmax}, {у, ymin, углах} ] - строит график поверхности f(z, y) с ее проекцией на опорную плоскость;

ListShadowPlot3D[{{ {xll, yll, zll}, {x!2, y!2, z!3},...}} }] - строит график поверхности z(x, у) с ее проекцией на опорную плоскость по координатам точек поверхности.

Простой и эффектный пример применения функции ShadowPlot3D показан на следующем рисунке. Здесь изображение поверхности — пика — проецируется на верхнюю плоскость, что дает наглядное представление о построенной фигуре. ShadowPlot3D[ Exp[-(x^2 + y^2)],{x, -2, 2}, {y, -2, 2},ShadowPosition -> 1]

С помощью функции Shadow [go], где до — графический объект, представляющий трехмерную фигуру, можно построить и более сложные рисунки — например, график объемной фигуры и сразу всех трех ее проекций на взаимно перпендикулярные плоскости. Такое построение иллюстрируется документом, показанным на рисункеdbell = ParametricPlot3D[{Sin[t], Sin[2t] Sin[u], Sin[2t] Cos[u]},{t, -Pi/2, Pi/2}, {u, 0, 2Pi}, Ticks -> None]

Shadow[dbell]

Page 39: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

С функцией Shadow можно использовать различные опции. Отметим наиболее существенные - XShadow, YShadow и ZShadow. Например, задав Zshadow-> False, можно удалить одну из проекций, плоскость которой перпендикулярна оси z. Для получения проекций на заданную плоскость, расположенную в пространстве, служат следующие функции:

Project [g,pt] - дает проекцию объекта g на плоскость, нормаль которой задана списком из трех элементов pt. Например, список {1,1,0} даст проекцию на диагональную плоскость;

Project[g, {e1,e2},pt] - дает проекцию объекта g в плоскости, определенной векторами {el,e2}, выходящими из точки с координатами pt;

Project[g, {e1, e2 } ,pt, origin] — то же, но направление проецирования определяется точками pt и origin.

Пример построения проекции на заданной плоскости Show[Project[dbell, {0, 1, 0}]]

Построение графиков неявных функций - ImplicitPlot.

Подпакет ImplicitPlot задает три варианта функции для построения графиков неявно заданных функций:

ImplicitPlot [eqn, {x, xmin, xmax} ] - построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax;

ImplicitPlot [eqn, {x, xmin,ml,m2,..., xmax} ] - построение функции, неявно заданной уравнением eqn, при х, меняющемся от xmin до xmax с исключением точек m1, m2;

ImplicitPlot [ {eqnl, eqn2,...}, ranges, options] - построение функций, неявно заданных уравнениями eqni, при х, меняющемся в пределах ranges и при задании опций options.

<< Graphics`ImplicitPlot` ImplicitPlot[{x^2+2 y^2==3,x^2-2 y^2==1},{x,-2,2},PlotStyle→{Hue[0.1],Hue[0.6]}]

-2 -1 1 2

-1

-0.5

0.5

1

Page 40: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

ПРОГРАММИРОВАНИЕ В СИСТЕМЕ MATHEMATICA

В систему Mathematica встроен очень гибкий и интуитивно понятный язык программирования.

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

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

Арифметические операторы и массивы.

В качестве примера рассмотрим произведение скаляра и матрицы:Eсли A – квадратная матрица с размерностью nxn, а B – вектор-столбец с n

компонентами или матрица с несколькими такими столбцами, то X = A\B есть решение системы уравнений AX = B вычисленное методом исключения Гаусса. Если матрица A плохо масштабирована или близка к сингулярной (определитель матрицы равен нулю), то система выдает соответствующее предупреждение. Если A не является квадратной матрицей, то X = A\B является квази-решением недоопределенной (число уравнений меньше числа неизвестных) или переопределенной (число уравнений больше числа неизвестных) системы уравнений AX = B.

Оператор B.Inverse[A] создает матрицу с элементами B(i,j)*A-1(i,j). Матрицы A и B должны иметь одинаковую размерность.

Пример:B.Inverse[A]out = 8 1 6 3 5 7 4 9 2

Так же оператор Inverse[A] может быть записан в более компактном виде: A-1

Оператор матричного транспонирования Transpose[Matrix] меняет местами строки и столбцы исходной матрицы. Если элементы матрицы являются комплексными числами, то при транспонировании они не заменяются своими комплексно-сопряженными значениями:

D = {{1, 1-2I}, {1+3I, 2}}Transpose[D]//MatrixForm

1 1 + 3I 1 - 2I 2

При сложении двух матриц A+B (или вычитании A-B) требуется, чтобы они имели одинаковую размерность. Если одна из матриц является константой, то при сложении эта константа прибавляется к каждому элементу другой матрицы:

A+Bout = 99 68 73

70 96 7471 71 93

Page 41: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

A+4out = 12 5 10 7 9 11 8 13 6

Следует отметить, что каждый арифметический оператор имеет аналогичную по своему названию функцию. Например, вместо оператора матричного сложения Sum[A+B] можно использовать оператор “+” , а вместо матричного умножения Product[A.B] можно использовать оператор “.” Полный список операторов можно получить по команде help. Соответствие функций операторам позволяет одновременно использовать элементы как операторного, так и функционального программирования.

Операторы отношения.

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

Функция Оператор Описание ПримерLess < Меньше чем X<YLessEqual <= Меньше или равно X<=YGreater > Больше чем X>YGreaterEqual >= Больше или равно X>=YEqual == Равно X==YUnEqual != Не равно X!=Y

Данные операторы выполняют поэлементное сравнение векторов или матриц одинаковой размерности и возвращают значение 1 (True), если элементы идентичны, и значение 0 (False) в противном случае. Результат операции отношения выдается в виде массива той же размерности, что и размерность операндов отношения:

A=[1 2; 2 3]; B=[1 2; 2 4];A==BOut = False

Логические операторы и функции.

Логические операторы и соответствующие им функции реализуют логические операции над массивами одинаковой размерности.

Оператор Функция Название&& and Логическое И|| or Логическое ИЛИ! not Логическое НЕXor xor Исключающее ИЛИ

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

Приоритет выполнения операторов.

Page 42: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

В математических выражениях операторы имеют определенный приоритет исполнения. Перечислим операторы в порядке убывания их приоритета:

1) выполняются операторы, заключенные в скобки ()2) транспонирование (TRANSPOSE), возведение в степень (.^), матричное

возведение в степень (^)3) унарное сложение (+), унарное вычитание (–), логическое отрицание (!)4) умножение (.*), правое деление (./), левое деление (.\), матричное умножение (*),

матричное правое деление (/), матричное левое деление (\)5) сложение (+), вычитание (–)6) оператор двоеточие (:)7) меньше чем (<), меньше или равно (<=), больше чем (>), больше или равно (>=),

равно (==), не равно (~=)8) логическое И (&)

логическое ИЛИ (|)

Организация циклов.

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

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

Циклы типа Do.

К важнейшим управляющим структурам в языках программирования относятся циклы. С их помощью осуществляется циклическое исполнение некоторого выражения ехрr заданное число раз. Это число нередко определяется значением некоторой управляющей переменной (например, i, j и т. д.), меняющейся либо с шагом +1, либо от начального значения imin до конечного значения imax с шагом di. Циклы могут быть одинарными или множественными — вложенными друг в друга. Последние используют ряд управляющих переменных. Такого рода циклы организуются с помощью функции Do: О Do [expr, {imax} ] — выполняет imax раз вычисление ехрг; О Do [expr, {i, imax}] — вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax (с шагом 1);Do [expr, {i, imin, imax} ]—вычисляет ехрr с переменной i, последовательно принимающей значения от imin до imax с шагом 1; Do [expr, {i, imin, imax, di}] — вычисляет ехрг с переменной i, последовательно принимающей значения от 1 до imax с шагом di; Do [expr, {i, imin, imax}, {j, jmin, j max},...] — вычисляет expr, организуя ряд вложенных циклов с управляющими переменными j, i и т. д.

Примеры организации цикла Do и его исполнения представлены ниже:Do[Print["hello"], {3}]hello hello

Page 43: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

hello

Do[Print[i], {i, 5, 8}]5678

Do[Print[i], {i, 0 , 1, 0.25}]00.250.50.751.

Нетрудно убедиться в том, что переменная i в теле цикла (итератор) является локальной и по выходе из цикла ее значение остается тем же, что было до входа:i=22

Do[Print[i], i, 1, 5]1234512

Вся программа с циклом является содержанием одной ячейки, и ее листинг охвачен квадратной скобкой. Для иллюстрации вывода здесь использована команда Print в теле цикла. Нетрудно заметить, что управляющая переменная цикла может принимать как целочисленные, так и вещественные значения. Возможность организации цикла в цикле иллюстрируется следующим примером:Do [Do [Print [i, " ", j, " ", i + j], {j, 1, 3}], {i, 1, 3}];1 1 21 2 31 3 42 1 32 2 42 3 53 1 43 2 53 3 6

Здесь используются два цикла с управляющими переменными i и j. Командой Print выводятся значения переменных i и j, а также их суммы i+j.

Следующий пример показывает применение цикла Do для задания функции, вычисляющей п-е число Фибоначчи:fibonacci[(n_Integer)?Positive] := Module[fnl = 1, fn2 =0,Do[fnl, fn2 = fnl + fn2, fnl, n- 1] ; fnl] fibonacci[10]55

Page 44: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

fibonacci[100]354224848179261915075

fibonacci[-10]fibonacci[-10]

Обратите внимание на применение в этом примере функции Module. Она создает программный модуль с локальными переменными (в нашем случае fnl и fп2), в котором организовано рекуррентное вычисление чисел Фибоначчи.

Наконец, последний пример показывает применение цикла Do для создания цепной дроби:х = у; Do[x = 1/(1 + k х), {k, 2, 8, 2}]; х

Циклы типа For.

Другой вид цикла — цикл For — реализуется одноименной функцией:For[start, test, incr, body]

В ней сначала один раз вычисляется выражение start, а затем поочередно вычисляются выражения body и incr до тех пор, пока условие test не перестанет давать логическое значение True. Когда это случится, то есть когда test даст False, цикл заканчивается.

Следующий пример показывает создание простой программы с циклом For и результат ее выполнения:Print["i x"]For [x=0; i=0, i < 4, i++[x += 5*i, Print[i, " ", x]]]i x15 ,2 153 30 4 50 Return[x] Return[50]

Программа, приведенная выше, позволяет наблюдать за изменением значений управляющей переменной цикла i и переменной х, получающей за каждый цикл приращение, равное 5*i. В конце документа показан пример на использование функции возврата значений Return [x]. В цикле For не предусмотрено задание локальных переменных, так что надо следить за назначением переменных — при использовании глобальных переменных неизбежны побочные эффекты.

Циклы типа While.

Итак, функция For позволяет создавать циклы, которые завершаются при выполнении (эволюции) какого-либо условия. Такие циклы можно организовать и с помощью функции While [test, expr], которая выполняет expr до тех пор, пока test не перестанет давать логическое значение True.

Ниже дан практический пример организации и использования цикла While:i := 1; х := 1; Print["i x"] ;While[i < 5, i += 1; x += 2*i; Print[i, " ", N[x]]]i x 2 5.

Page 45: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

3 11.4 19.5 29. Return[x] Return[29]

Циклы типа While, в принципе, могут заменить другие, рассмотренные выше, типы циклов. Однако это усложняет запись и понимание программ. Аппарат локальных переменных в этом типе циклов не используется.

Директивы-функции прерывания и продолжения циклов.

В указанных типах циклов и в иных управляющих структурах можно использовать следующие директивы-функции:Abort [ ] — вызывает прекращение вычислений с сообщением $ Aborted;Break [ ] — выполняет выход из тела цикла или уровня вложенности программы, содержащего данный оператор (циклы типа Do, For и While или тело оператора-переключателя Switch). Оператор возвращает Null-значение (без генерации секции выхода);Continue [ ] — задает переход на следующий шаг текущего цикла Do, For или While;Interrupt [ ] — прерывает вычисления с возможностью их возобновления;Return [ ] — прерывает выполнение с возвратом значения Null;Return [expr] — прерывает выполнение с выводом значения выражения ехрr;Throw [value] — задает прекращение выполнения цикла Catch, если в ходе эволюции ехрг встречается значение value (см. примеры выше).

Рис.1 Действие директив Abort[] и lnterrupt[]

Page 46: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

На рис.1 представлено применение директив Abort [ ] и Interrupt [ ] в середине набора команд. Нетрудно заметить, что директива Abort [ ] просто прерывает выполнение цепочки команд и выводит сообщение $ Aborted. А вот директива Interrupt [ ] выводит диалоговое окно, с помощью которого можно либо прервать вычисления, либо продолжить их.

Если продолжить вычисления (нажав кнопку Continue Evaluation), то вывод выражений командами Print будет продолжен, что видно из рис.2:

Условные выражения и безусловные переходы.

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

Рис. 2. Продолжение вычислений после команды Interrupt[]

Функция IF.

Как у большинства языков программирования, условные выражения задаются с помощью оператора или функции IF. Система Mathematica имеет функцию If, формы которой представлены ниже:If [condition, t, f] — возвращает t, если результатом вычисления condition является True, и f, если результат равен False;If [condition, t, f, u ]—то же, но дает и, если в результате вычисления condition не было получено ни True, ни False.

Следующий пример показывает создание программной процедуры с циклом Do, выход из которой реализуется с помощью функции I f и директивы прерывания Aborted! ]:х := 1; Print["i x"];Do[{If [i == 5, Abort[], None],

Page 47: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

i += 1; x += 2*i; Print[i, " ", N[x]]},{i, 1, 100}]i x2 53 11.4 19.5 29. $Aborted Return[x]Return[1]

Тот же пример, но с применением директивы выхода из цикла Break [] в функции If показан ниже:х := 1; Print["i x"];Do[{If [i == 5, Break[], None],i += 1; x += 2*i; Print[i, " ", N[x]]},{i, 1, 100}]i x2 5.3 11.4 19.5 29.Return[x] Return[29]

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

Функции-переключатели.

Для организации ветвления по многим направлениям в современных языках программирования используются операторы-переключатели. В системе Mathematica множественное ветвление организовано с помощью функций Which и Switch:Which [testl, valuel, test2, value2,...] — вычисляет в порядке следования каждый из testi, сразу возвращая именно ту величину из valuei, которая относится к первому testi, давшему True;Switch [expr, forml, valuel, form2, value2,...] — вычисляет селектор expr, затем сравнивает его последовательно с каждой из меток f ormi, вычисляя и возвращая то valuei, которое соответствует первому совпадению.Приведем примеры работы функции which:Whichtl == 2,1,2== 2, 2, 3 == 3, 3] 2

Which[l == 2, x, 2 == 2, у, 3 == 3, z]Y

Следующие примеры иллюстрируют работу функции Switch:Switch[1, 1, а, 2, b, 3, с]a

Switch[2, 1, а, 2, b, 3, с]

Page 48: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

b

Switch[3, 1, а, 2, b, 3, с]с

Switch[8, 1, а, 2, b, 3, с]Switch[8,1, а,2, b,3, с]

Обратите внимание на последний пример — при неверном задании первого параметра (селектора) просто повторяется запись функции.

Следующий пример показывает возможность выбора с применением вещественных значений селектора и меток:Switch[8., 1.5, а, 2.5, b, 8., с]с

Switch[1.5, 1.5, а, 2.5, b, 8., с]а

Switch[8, 1.5, а, 2.5, b, 8., с]Switch[8, 1.5, а, 2.5, b, 8., с]

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

Безусловные переходы.

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

Label [tag]. Возможны также формы Goto [expr] и Label [expr], где ехрr — вычисляемое выражение.

Применение оператора Goto иллюстрирует следующий пример:(q = 2; Label[start]; Print[q]; q += 2;If[q < 7, Goto[start]])2 46

Здесь с помощью оператора Goto [start] организован цикл с возвратом на метку Label [start], действующий до тех пор, пока значение q меньше 7. При этом q меняется от начального значения 2 с шагом 2, причем добавление 2 к текущему значению q осуществляется укороченным оператором сложения q+=2.

Page 49: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Интересной особенностью языка программирования Mathematica является возможность создания переходов по значению вычисляемого выражения. Например, Goto [2+3] дает переход к метке Label [5] или даже Label [1+4], что видно из следующего примера:

Goto[2 + 3];Print["ааааа"]; Label[1 + 4]; Print["bbbbb"]bbbbb

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

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

Инверсные функции.

Инверсными функциями называют функции, полученные в результате обращения заданных функций. Например, для функции Sin [x] инверсной будет ArcSin [х] и т. д. Следующие функции обеспечивают представление инверсных функций:

InverseFunction [f ] — представляет функцию, обратную для f, то есть определенную таким образом, что InverseFunction [f ] [у] возвращает значение х, для которого f [х] равно у. Для функции нескольких переменных InverseFunction [ f ] представляет обращение по первому аргументу;

InverseFunction [f, n] — представляет обращение по п-му аргументу; InverseFunction [f, n, tot] — представляет обращение по п-му аргументу, когда

имеется всего tot аргументов.Следующие примеры иллюстрируют работу с этими функциями.

Ввод (In) Вывод (Out)InverseFunction [Sin] ArcSin%[х] ArcSin[x]Composition [ f , g , h] Ccrrposition[f , g, h]InverseFunction [Composition [% , q] ] Corpositiont [q-1 , h-1 , g-1 ,f-1]

Обратите внимание на то, что в этих примерах фигурируют заголовки функций — например, для получения инверсной функции от Sin [х] следует использовать Sin в качестве аргумента f функции InverseFunction [f].

Функции пользователя.

Понятие функции ассоциируется с обязательным возвратом некоторого значения в ответ на обращение к функции по ее имени с указанием аргументов (параметров) в

Page 50: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

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

Функции подразделяются на встроенные в ядро системы внутренние функции и функции, заданные пользователем. Примером первых могут быть Sin[x], Bessell [n, x] и т.д. Mathematica содержит множество таких функций, охватывающих практически все широко распространенные элементарные и специальные математические функции. Есть и возможность создания функций со специальными свойствами — чистых (pure functions) и анонимных функций.

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

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

Хотя в системах Mathematica имеется около тысячи встроенных функций, любому пользователю рано или поздно может потребоваться создание какой-либо своей функции. Кажется естественным задать ее по правилам, принятым во многих языках программирования. Например, функцию для возведения х в степень п можно было бы определить так:powerxn[x, n] := x^n

Однако такая функция отказывается работать: {powerxn[2, 3], powerxn[a, b]}{powerxn[2, 3] , powerxn[a, b]}

Причина этого кроется в том, что в системе Mathematica символы х и п являются обычными символами, не наделенными особыми свойствами. Будучи использованными в качестве параметров функции, они не способны воспринимать формальные параметры [2,3] или [ а, b ]. Так что вычислить нашу ущербную функцию можно лишь при предварительном присваивании х и п нужных значений:х := 2; n := 3; powerxn[x, n]8

Разумеется, заданная таким образом функция является неполноценной. Для того чтобы функция пользователя нормально воспринимала переданные ей аргументы, в списке параметров надо использовать образцы в виде переменных, но имеющие после своих имен символы подчеркивания. Образцы способны быть формальными параметрами функций и воспринимать значения фактических параметров (в нашем случае значений 2 и 3). Таким образом, правильной будет запись функции пользователя в видеpowerxn[x_, n_] := х^n

Теперь вычисление по заданной функции пользователя пройдет гладко, причем как в численном, так и в символьном виде:{powerxn[2, 3], powerxn[z, у], powerxn[x, n]}{8, zy, 8}

Заметим, что для уничтожения определения заданной функции можно использовать команду-функцию Clear [Name_f unction], где Name_f unction — имя функции.

Page 51: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Можно также задать функцию пользователя, содержащую несколько выражений, заключив их в круглые скобки:f[x_] := (t = (1 + х)^2; t = Expand[t])

Переменные списка параметров, после имен которых стоит знак «_», являются локальными в теле функции или процедуры. На их место подставляются фактические значения соответствующих параметров, например:f [а + b]1+2а+а2+2b+2ab+b2t1+2а+а2+2b+2ab+b2

Обратите внимание на то, что переменная t в функции f является глобальной. Это поясняет результат последней операции. Применение глобальных переменных . в теле функции вполне возможно, но создает так называемый побочный эффект — в данном случае меняет значение глобальной переменной t. Для устранения побочных эффектов надо использовать образцы и другие специальные способы задания функций, описанные ниже. Итак, можно сформулировать ряд правил для задания функций пользователя:

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

в списке параметров функции, размещенном в квадратных скобках после идентификатора, должны использоваться образцы переменных, а не просто переменные;

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

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

только в пределах тела функции; в теле функции могут использоваться глобальные переменные, но при этом

возможны побочные эффекты; возможно обращение к функции из тела этой же функции (рекурсия).

Параметрами функций могут быть списки при условии допустимости их комбинации. Например, допустимо задать х списком, an — переменной или числом:powerxn[{l, 2, 3, 4, 5}, z]{1, 2Z, 3Z, 4Z, 5Z} powerxn[{l, 2, 3, 4, 5}, 2]{1, 4, 9, 16, 25}

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

Чистые функции.

Иногда может потребоваться создание функции, не имеющей имени (например, если функция будет использоваться только один раз, сразу же после ее создания). Эта функция представляется только выражением без идентификатора, отсюда и ее название — чистая функция (pure function). Для создания такого объекта служит встроенная функция Function, используемая в одном из следующих вариантов:Function [body] — создает чистую функцию с телом body;Function [ {х}, body ] — создает чистую функцию параметра х с телом body;

Page 52: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Function [ {xl, х2,...} ,body] — создает чистую функцию ряда параметров x1, х2, ... с телом body.

Для вычисления созданной таких образом функции после нее задается список параметров в квадратных скобках. Например, взятую ранее в качестве примера функцию возведения в степень можно задать и использовать следующим образом:Function[{x, n}, x^n]Function! {х, п), xn]%[2, 3]8

Чистую функцию можно легко превратить в обычную функцию пользователя, что показывает следующий пример:fun=Function[{x,n},х^n]Function[ {х, n}, хn]{fun[2,3],fun{z,y}}{8, zy}

Анонимные функции.

Предельно компактную форму задания имеют так называемые анонимные функции. Они не имеют ни названия, ни обычного определения и задаются только выражениями специального вида. В этом выражении вместо переменных используют обозначения # (для одной переменной) или #1, #2, ... (для ряда переменных). Завершается тело функции символом «&». Если надо вычислить функцию, то после ее записи в квадратных скобках указывается список фактических параметров.Для нашего примера анонимная функция выглядит так:#1^#2 &[2, 3] 8#1^#2 &[у, z] y^z

С помощью анонимных функций нетрудно создавать обычные функции пользоателя:f[x_, y_] = #1^#2 &[х, у]хyf[2, 3]8

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

Решение систем линейных уравнений итерационными методами.

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

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

Построим матрицу системы с три диагональной структурой и размером 10x10:

Page 53: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

n=10;f[i_,j_]=If[i==j,40,If[i==j+1,-20,If[ij-1,-10,0]]];A=TridiagonalMatrix[f,n];

В качестве элементов вектора правой части возьмем сумму элементов матрицы A в соответствующих строках:

b=Total[Flatten[SubMatrix[A,{2,1},{1,10}]]];

Для решения системы Ax=b применим один из одиннадцати существующих форматов вызова функции bigcg:

x = bicg(A, b);bicg converged at iteration 10 to a solution with relative residual 8.6e-014

В результате система выдает сообщение о сходимости итерационного процесса и приводит относительную погрешность.

Обратная матрица и определитель.

Определитель квадратной матрицы находится с помощью функции det:

Det3 3 13 5 21 2 1

1Обратная матрица находится с помощью функции Inverse

Inverse3 3 13 5 21 2 1

{{1,1,1},{1,2,3},{1,3,6}}

Факторизация Холецкого.

Если матрица системы является симметричной (или эрмитовой) и положительно определенной, то ее можно представить в виде произведения двух треугольных матриц: A=R’R, где R – верхняя треугольная матрица, R’ – транспонированная. Факторизация Холецкого выполняется с помощью функции CholeskyDecomposition

Легко проверить, что произведение R’R дает исходную матрицу Паскаля. Факторизация Холецкого приводит систему Ax=u к виду R’Rx=u. Поскольку оператор ‘\’ распознает системы с треугольными матрицами, приведенную систему можно решить очень быстро:

Page 54: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Transpose1 1 10 1 20 0 1

MatrixFormR'1 0 01 1 01 2 1

R 1 1 10 1 20 0 1

1 0 01 1 01 2 1

.1 1 10 1 20 0 1

MatrixFormCholeskyDecomposition1 1 1

1 2 31 3 6

MatrixFormLU факторизация.

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

с теоретической, так и с практической точки зрения. Так, матрицу невозможно

представить в виде произведения двух треугольных матриц без перестановки двух строк.

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

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

LUDecomposition[B] возвращает верхнюю треугольную матрицу U и нижнюю треугольную матрицу L (точнее, произведение нижней треугольной матрицы и матрицы перестановок), так что B = L*U, а такжематрицу перестановок P, так что L*U = P*B, 3 возвращаемый параметр - число обусловленности матрицы L в степени ∞

LUBackSubstitution[LU,u]— решает нашу задачу Bx=u,используя LU-разложение полученное функцией LUDecomposition[B]

Рассмотрим решение нашей системы Bx=u:

Page 55: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

0.552778

То есть х = 0.261111-0.280556

Для более наглядного рассмотрения матриц L, U, а также вектора перестановок P, приведет следующую программу, проверяющую верность разложения

Функции Upper и Lower – функции восстановления верхней -треугольной и нижней -треугольной матриц соответственно

Проверка правильности разложения:

Проверим правильность разложения, решая систему напрямую. Для этого восстановим матрицу L до перестановки строк согласно вектору P :

Page 56: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

QR факторизация.

Функция QRDecomposition выполняет QR разложение матрицы. Эта операция полезна как для квадратных, так и для прямоугольных матриц. Исходная матрица представляется в виде произведения действительной ортонормальной или комплексной унитарной матрицы Q и верхней треугольной матрицы R. Функция используется в следующих формах:

{q,r} = QRDecomposition(A) вычисляет верхнюю треугольную матрицу R и унитарную матрицу Q, так что A = Q*R;

В качестве примера рассмотрим QR разложение прямоугольной матрицы A:

6 8 A= 9 6 8 1

{q,r} =QRDecomposition[A];

Результат выведем в матричной форме и продемонстрируем правильность разложения:Map[MatrixForm,{q,r}];Функция MatrixForm дает матричное представление, а Map применяет первый аргумент ко всем параметрам из списка.

-0.4460 0.7450 q = -0.6690 0.0908 -0.5946 -0.6609

r = -13.4536 -8.17620 5.8437

6 8Transpose[q].r= 9 6 Transpose - транспонирование матрицы

8 1Решение системы Ax = u с факторизованной матрицей находится в два этапа:

y = q.u;x = Inverse[r].y Inverse - обращение матрицы

x = 0.3590 -0.0544

Page 57: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Матричная экспонента.

Матричная экспонента MatrixExp(X) возводит число e в матричную степень X. Рассмотрим в качестве примера задачу Коши для системы обыкновенных дифференциальных уравнений первого порядка с постоянными коэффициентами:

dx/dt=Ax, x(0)=u,

здесь x = x(t) – векторная функция, A – матрица коэффициентов, u – вектор начальных условий. Решение задачи можно выразить через матричную экспоненту x(t)=etAx(0). Положим:

Выразим решение формулой и построим его график при t от 0 до 1:

0

0.25

0.5

0.75

1

0

0.25

0.5

0.75

1

0

0.25

0.5

0.75

1

0

0.25

0.5

0.75

1

0

0.25

0.5

0.75

1

Page 58: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Собственные значения и собственные вектора.

Скаляр и вектор v называются собственным значением и собственным вектором матрицы A, если выполняется соотношение: Av=v. Пусть – диагональная матрица, у которой на диагонали стоят собственные значения матрицы A, а V – матрица, столбцами которой являются собственные вектора матрицы A. Тогда справедливо соотношение:AV = V. Если V несингулярная матрица, то матрицу A можно представить в виде разложения: A = VV-1. Возьмем матрицу A из предыдущего примера:

A={{0,-6,-1},{6,2,-16},{-5,20,-10}}

Тогда функция Eigenvalues[A] возвращает вектор собственных значений матрицы A:

lambda = Eigenvalues[A]//N

{-2.46452+17.6008i,-2.46452-17.6008i,-3.07095}

Так как действительная часть собственных значений является отрицательной, то et

стремится к нулю с ростом t. Ненулевая мнимая часть двух собственных значений, , является осциллирующей, Sin[t], компонентой решения дифференциального уравнения.

Для вычисления собственных значений и собственных векторов матрицы A используется функция Eigensystem с двумя выходными параметрами:

{, v} = Eigensystem[A];

//MatrixForm//N

2.46452 17.6008 2.46452 17.6008 3.07095

v//MatrixForm//N0.28898 0.201091 0.304529 0.930314 1.0.28898 0.201091 0.304529 0.930314 1.1.95978 0.836397 1.

Собственные векторы хранятся в столбцах матрицы v, а собственные значения – в

векторе .

Нормальная форма Жордана.

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

Page 59: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

жорданову форму J и матрицу трансформации V, столбцами которой являются обобщенные собственные векторы. Более точно, V-1AV=J.Рассмотрим пример:

A = {{12, 32, 66, 116},{-25, -76, -164, -294},{21, 66, 143, 256},{ -6, -19, -41, -73}};

A//MatrixForm12 32 66 11625 76 164 29421 66 143 2566 19 41 73

{V, J} = JordanDecomposition[A];

V//MatrixForm4 6 4 1

3

6 4 11 23

4 1 10 13

1 0 3 0

J//MatrixForm1 1 0 00 1 0 00 0 2 10 0 0 2

Очевидно, что матрица A имеет собственные значения 1 и 2, каждое из которых имеет кратность два. Матрица имеет только два собственных вектора: V[[All,1]] и V[[All,3]], которые удовлетворяют соотношениям:

A.V[[All,1]] = 1.V[[All,1]]A.V[[All,3]] = 2.V[[All,3]]

Два других столбца матрицы V являются обобщенными собственными векторами, удовлетворяющими соотношениям:

A.V[[All,2]] = 1.V[[All,2]] + V[[All,1]]A.V[[All,4]] = 2.V[[All,4]] + V[[All,3]]

Или в математической нотации:

(A-2IdentityMatrix[4]).V[[All,4]]=V[[All,3]](A-1IdentityMatrix[4]).V[[All,2]]=V[[All,1]]

Page 60: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Разложение Шура.

С помощью функции SchurDecomposition можно представить матрицу A в виде произведения: A=USU’, где U – унитарная матрица, а S – матрица Шура. Действительная форма Шура имеет действительные собственные значения на диагонали, а комплексные собственные значения представлены 2x2 блоками, занимающими нижнюю поддиагональ. Для матрицы A из предыдущего примера имеем:

{u, s} = SchurDecomposition[N[A]];

u//MatrixForm 0.481543 0.803334 0.347615 0.04397990.722315 0.140388 0.653914 0.175920.481543 0.542056 0.52997 0.4397990.120386 0.202783 0.413149 0.879599

s//MatrixForm1. 2.23513 33.6613 470.5070. 1. 5.91932 118.5830. 0. 2. 16.74730. 0. 1.57419 1014 2.

Сингулярное разложение.

Скаляр a и векторы u, v называются сингулярным значением и сингулярными векторами прямоугольной матрицы A, если выполняются соотношения:

Av = au и ATu = av

Эти соотношения можно переписать в виде:

A.V = U.W и ATU = VT.WT,

Где W – диагональная матрица, элементами которой являются сингулярные значения a, U и V – ортогональные матрицы, столбцы которых образуют соответствующие сингулярные векторы u и v. В силу ортогональности матриц U и V справедливо разложение:

A = U.W.V

Сингулярное разложение проводится с помощью функции SingularValueDecomposition. Рассмотрим пример:

A ={{9,4},{6,8},{2,7}};A//MatrixForm

9 46 82 7

Page 61: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

{U,W,V} = SingularValueDecomposition[N[A]];

U//MatrixForm0.610499 0.717438 0.3355190.664591 0.233606 0.7097510.430824 0.656286 0.619419

W//MatrixForm14.9359 0.0. 5.188290. 0.

V//MatrixForm0.692538 0.7213810.721381 0.692538

Проверим:

U.W.V//MatrixForm9. 4.6. 8.2. 7.

Численное интегрирование.

Численное интегрирование заключается в приближенном вычислении определенного интеграла с помощью квадратурных формул. Рассмотрим применение функции Nintegerate.Найдем значение определенного интеграла для функции f(x)=x3 на отрезке [0, 1] :NIntegratex3,x, 0, 10.25

Также можно вычислять значения n-мерных интегралов. Для примера возьмем n=2 и вычислим f(x)=x3+y3 , :

NIntegratex3 y3,x, 0, 1,y, 0, 10.5

Представление полиномов в среде MATHEMATICA.В системе MATHEMATICA полином представляется с помощью задания функции.

Например, чтобы представить многочлен p(x)=x3-2x-5, запишем:

P[x_]:= x3-2x-5;

Умножение и деление многочленов.

Рассмотрим многочлены a(s)=s2+2s+3 и b(s)=4s2+5s+6. Вычислим их произведение. Для этого воспользуемся функцией Expand[expr], которая представляет аргумент expr в виде полинома:

Page 62: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

a [s_]:= s2+2s+3 ;b[s_]:= 4s2+5s+6;c = Expand[a[s_]*b[s_]]

18 27s_ 28s_2 13s_3 4s_4

Разделим многочлен c на a функция PolynomialQuotient возвращает частное,

полученное от деления полиномов с[s_] на а[s_] :PolynomialQuotient[Expand[a[s_]*b[s_]],a[s_],s_]6 5s_ 4s_2

Вычисление производной от многочлена.

Для определения производной от многочлена используется функция D[]. Вычислим производную от многочлена a[s_]:as_: s2 2s 3; D[a[s_],s_]2+2 s_

Функция D[].позволяет находить производную от произведения двух многочленов и от их частного. Для примера, построим два многочлена a и b.a [s_]:= s2+2s+3 ;b[s_]:= 4s2+5s+6;

Вычислим производную от произведения a*b и представим ее в виде полинома:

as_: s2 2s 3;bs_: 4s2 5s 6;Expand[D[a[s_]*b[s_], s_]]27 56s_ 39s_2 16s_3

Вычислим производную от частного a[s_]*b[s_] / a[s_]:

D[PolynomialQuotient[Expand[a[s_]*b[s_]],a[s_],s_], s_]5+8 s_

Также можно вычислять n-ю производную от многочлена, например, вычислим вторую производную для предыдущего выражения:

D[PolynomialQuotient[Expand[a[s_]*b[s_]],a[s_],s_],{ s_,2}] 8

Вычисление значения многочлена.

Для вычисления значения многочлена следует подставить значение в многочлен:Px_: x3 2x 5;P5110

Нахождение корней многочлена.

Корни многочлена можно найти с помощью функции Roots. Приближенные значения корней можно найти с помощью Nroots:Roots[P[x_]0, x_]

Page 63: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

x_ 1

3

1352 31929

2

13 1245 192913323

x_ 1

61 31352

31929

2

13 1 31

245 192913

2323 x_

1

61 31352

31929

2

13 1 31

245 192913

2323NRoots[P[x_]0, x_]x_-1.04728-1.13594 x_-1.04728+1.13594 x_2.09455

Построение собственных значений маирицы.

Если в качестве аргумента использовать матрицу, то функция Eigenvalues возвращает список собственных значений маирицы:

A:={{1,2,3},{4,5,6},{7,8,9}};

Eigenvalues [A]3

25 33, 3

25 33, 0

Поиск локального минимума аналитической функции.

Если нужен поиск локального минимума некоторой аналитической функции, используется функция FindMinimum [ f, {х, х0 } ], которая выполняет поиск локального минимума функции f, начиная со значения х=х0, и возвращает его значение.

Page 64: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Функция Plot[f, {x, xmin, xmax}]используется для вывода графика операторной функции f на заданном интервале [xmin, xmax].

Для минимизации функций нескольких переменных используется та же функция:

Решение систем нелинейных уравнений.

Решение систем нелинейных уравнений осуществляется с помощью функции Solve.

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

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

Page 65: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Прямое и обратное преобразования Фурье.

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

В Mathematica имеются следующие основные функции для осуществления дискретного преобразования Фурье:

Fourier [list] — осуществляет дискретное преобразование Фурье для списка list комплексных чисел;

InverseFourier [list] — осуществляет дискретное обратное преобразование Фурье списка list комплексных чисел.

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

Итак, прямое преобразование Фурье означает перевод временного представления сигнала в частотное. Другими словами, оно позволяет получить частотный спектр сигнала, представленного отсчетами его временной зависимости. Нередко это является конечной целью спектрального анализа.

Представлен пример спектрального анализа простого сигнала — треугольного импульса, заданного с помощью функции If. Затем с помощью функции Fourier прямого преобразования Фурье получены в явном виде векторы амплитуд Мg и фаз Аg гармоник этого сигнала.С помощью графиков лестничного типа, подчеркивающих дискретность гармоник, построены спектрограммы амплитуд и фаз гармоник пилообразного импульса:

Page 66: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

Рассмотрим применение преобразования Фурье для фильтрации сигнала.

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

Продемонстрируем создание исходного сигнала. Сигнал сформируем как сумму чистого сигнала со случайной составляющей, моделирующей шум.

data=Table[N[BesselJ[3,16*n/256]+0.4*(Random[]-1/2)],{n,256}];ListPlot[data]

50 100 150 200 250

-0.4

-0.2

0.2

0.4

0.6

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

Покажем синтез цифрового частотного фильтра и его амплитудно-частотная характеристика (АЧХ).kern=Table[Exp[-n^2/200.],{n,-128,127}];ListPlot[kern,PlotRangeAll]

Для выделения исходного сигнала переведем его в частотное представление:

Page 67: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

50 100 150 200 250

0.2

0.4

0.6

0.8

1

Процесс фильтрации сводится к уточнению модели фильтра (сдвигу АЧХ в область более низких частот и созданию зеркального отражения спектра), проведению прямого преобразования Фурье, выделению фильтром соответствующих составляющих сигнала и, наконец, выполнению обратного преобразования Фурье. Оба преобразования и фильтрация осуществляются в одном выражении (строка с переменной conv). При этом векторы прямых преобразований Фурье для сигнала и для отсчетов частотной характеристики фильтра перемножаются. Обратное преобразование Фурье переводит результат фильтрации во временную область. Полученный в результате фильтрации сигнал практически очищен от шума. Это подтверждает график выходного сигнала, представленный ниже.kern=RotateLeft[kern,128]/Apply[Plus,kern];conv=InverseFourier[Sqrt[256]Fourier[data]Fourier[kern]];ListPlot[Chop[conv]]

50 100 150 200 250

-0.2

-0.1

0.1

0.2

0.3

0.4

Решение обыкновенных дифференциальных уравнений.

Для решения систем обыкновенных дифференциальных уравнений (ОДУ) в Mathematica реализованы различные численные методы – решатели ОДУ. Для численного решения систем дифференциальных уравнений используется функция NDSolve.При этом не требуется составления каких-либо программ по реализации численных методов решения систем дифференциальных уравнений, таких как, скажем, метод Рунге-Кутта. Они представлены в виде уже готовых функций.

Перечислим методы запрограммированные в Mathematica для решения ОДУ:“Adams” предиктор-корректор метод Адамса с

порядком от 1 до 12

Page 68: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

“BDF” неявная формула дифференцирования назад с порядком от 1 до 5

“ExplicitRungeKutta” явный метод Рунге-Кутта“ImplicitRungeKutta" неявный метод Рунге-Кутта“SympleticPartitionedRungeKutta” метод Рунге-Кутта для сепарабельных

Гамильтоновых систем

Покажем применение методов для решения ОДУ:

solution = NDSolve[{x’[t] = = -y[t]-z[t], x[0] = = -0.04, y’[t] = = x[t]+.425y[t], y[0] = = -0.30, z ’[t] = = 2-z[t]*(4-x[t]), z[0] = = 0.52}, {x,y,z}, {t,0,25}, Method -> ExplicitRungeKutta];y[2]/.solutionParametricPlot3D[ Evaluate[ {x[t], y[t], z[t] }/.solution], {t,0,25}, PlotPoints -> 1000,PlotRange -> All , DefaultColor -> RGBColor[1,0,1] , BoxStyle -> RgbColor[0,0,0] ];

Y[2] == {-0.909394}

-20

2

4

-4

-2

0

2

2

4

6

-20

2

4

-4

-2

0

2

solution = NDSolve[{x’[t] = = -y[t]-z[t], x[0] = = -0.04, y’[t] = = x[t]+.425y[t], y[0] = = -0.30, z ’[t] = = 2-z[t]*(4-x[t]), z[0] = = 0.52}, {x,y,z}, {t,0,25}, Method -> ImplicitRungeKutta];y[2]/.solutionParametricPlot3D[ Evaluate[ {x[t], y[t], z[t] }/.solution], {t,0,25}, PlotPoints -> 1000,PlotRange -> All , DefaultColor -> RGBColor[1,0,1] , BoxStyle -> RgbColor[0,0,0] ];Y[2] == {-0.909396}

Page 69: Học phương pháp số với Mathematica [khoa toán học tính toán-FPMI-BSU]

-20

2

4

-4

-2

0

2

2

4

6

-20

2

4

-4

-2

0

2

Сравним значение решения системы в одной точке для всех методов

try[m_] := Block [ {s=e=0}, sol = NDSolve[{x’[t] = = -y[t]-z[t], x[0] = = -0.04, y’[t] = = x[t]+.425y[t], y[0] = = -0.30, z ’[t] = = 2-z[t]*(4-x[t]), z[0] = = 0.52}, {x,y,z}, {t,0,25}, StepMonitor :> s++, EvaluationMonitor :>e++, Method -> m]; {y[1]/.sol}];try /@ {“Adams”, ”BDF”, ”ExplicitRungeKutta “, “ImplicitRungeKutta” }

{-0.909396},{-0.909396},{-0.909394},{-0.909394},{-0.909378}