Мультимедиа: геометрия, графика, кино, звук

Аналитическая геометрия на плоскости или 2Dграфика



Аналитическая геометрия на плоскости, или 2D-графика



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

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

Это нововведение оказалось чрезвычайно продуктивным...



Четвертое измерение — время Движущиеся картинки — кино



Четвертое измерение — время. Движущиеся картинки — кино



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

Мультипликация. Немой мультфильм "Бегущая волна"

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

Чарли Чаплин

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

Раскадровка

Сначала сделаем серию из 11 рисунков, каждый из которых представляет собой график функции Sin [x-t] на отрезке оси х от 0 до 4n для / = 0,2n/10, 4n/10, ..., 2mс. Вы и оком моргнуть не успеете, как эти рисунки будут помещены в последовательные ячейки блокнота.

Table[Plot[Sin[x-t],{х,0,2Pi}],(t,0,2Pi,2P1/10}]; Раскадровка выполнена!

Секреты раскадровки

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

Секреты раскадровки двухмерных образов

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

Секреты раскадровки трехмерных образов

Для трехмерных образов есть еще один источник нежелательных эффектов: перемещение коробочки с графическим объектом. Это может создать впечатление, что сцена прыгает! Чтобы устранить этот эффект, нужно установить опцию SphericalRegion -> True, обеспечивающую неподвижное положение коробочки (сцены) с графическим объектом во всех рисунках.

Монтаж

Монтаж выполняется очень просто: нужно выделить все 11 ячеек блокнота с кадрами.

Просмотр

Чтобы просмотреть смонтированный таким образом мультфильм, достаточно нажать или выбрать команду Ячейка<=>Анимация Видео. В той ячейке, которая полностью видна на экране дисплея, будет начата демонстрация фильма. Внизу экрана при этом появятся шесть кнопок, которые позволяют изменить направление времени (прокрутить фильм в обратном направлении), ускорить, замедлить показ или приостановить его.




Другие миры — другие измерения



Другие миры — другие измерения



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



Еще одно измерение — звук



Еще одно измерение — звук



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

Воспроизведение звука с аналитически заданной амплитудой — функция Play

Вызов функции Play[/, {t, tmin, tmax}} запускает проигрывание звука. Амплитуда звука определяется функцией времени f(t), причем t изменяется между tmin и tmax. (Единица измерения— секунда.) Например, вызов Play [Sin[220*2*Pit], {t, 0,1} ]; проигрывает чистый тон (частоты 220 Гц) в течение 1 с. Вызов Play [ {/7, /2}, {t, tmin, tmax}] проигрывает стереозвук, причем// задает левый канал, t2 — правый. Для проигрывания многоканального звука используется вызов вида Р1ау[{t2, t2, ...}, ...}. Частота оцифровки задается в опции SampleRate. По умолчанию она равна 8192. Количество бит, используемых для запоминания амплитуды, можно указать в опции SampleDepth. По умолчанию оно равно 8. Диапазон проигрываемых амплитуд можно указать в опции PlayRange. Есть также опции Prolog и Epilog. По умолчанию они равны {}.

Воспроизведение звука с таблично заданной амплитудой — функция List Play

Вызов функции ListPlay [список] запускает воспроизведение звука. Значения амплитуды звука задаются списком. Вызов ListPlay [{список1, список2}] воспроизводит стереозвук, причем список1 задает левый канал, а список2 — правый. Для проигрывания многоканального звука используется вызов вида ListPlay [ {список1, список2, ...}]. Частота оцифровки задается в опции SampleRate. По умолчанию она равна 8192. Количество бит, используемых для запоминания амплитуды, можно указать в опции SampleDepth. По умолчанию оно равно 8. Диапазон проигрываемых амплитуд можно указать в опции PlayRange. Есть также опции Prolog и Epilog. По умолчанию они равны {}. Вот как можно прослушать число я.



Графические директивы



Графические директивы



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

Относительная и абсолютная величина диаметра круга, изображающего точку, — директивы PointSize [d] и AbsolutePointSize[d]

Директивы PointSize [d] и AbsolutePointSize [d] определяют относительную и абсолютную величину диаметра круга, изображающего точку. В директиве PointSize [d] аргумент d есть отношение диаметра к ширине графика, и потому он обычно задается как дробь. По умолчанию d = 0.008 для двухмерных графиков и d = 0.001 для изображений трехмерных объектов. Вот график, в котором этот параметр задан по умолчанию.



Графические примитивы и их отображение на экране



Графические примитивы и их отображение на экране



Графический примитив и его изображение — разные вещи. Как же отобразить графический примитив на экране? Разберемся в этом на примере следующих двух графических примитивов: точки р = Point[{1,1)1 и линии 1 = Line[{{0,0}, {1/2,2}, {3/2,2}, {2,0}}].

Превратить их в рисунок на экране дисплея можно следующим способом. Сначала к ним нужно применить функцию Graphics, которая превратит их в один из шести графических объектов (Graphics, Density/Graphics, ContourGraphics, GraphicsSD, SurfaceGraphics или GraphicsArray). Полученный результат уже можно отобразить на экране с помощью функции show.



Графические примитивы и опции трехмерной графики



Графические примитивы и опции трехмерной графики



Если вместо заголовка Graphics воспользоваться заголовком Graphics3D, то можно получать трехмерные рисунки. При этом примитивы Point, Line, Text и Polygon с учетом третьей координаты переносятся на трехмерный случай.

Рисуем параллелепипед — графический примитив Cuboid

Единственным новым трехмерным примитивом является Cuboid [ {xmin, ymin, zmin], {xmax, ymax, zmax} ], с помощью которого рисуется параллелепипед, противоположные вершины которого имеют координаты (xmin, ymin, yniri) и (xmax, ymax, zmax).



Графические примитивы



Графические примитивы



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

Многоугольник — примитив Polygon

Графический примитив Polygon! {{х1, y1], (х2, у2}, ...}] представляет собой закрашенный многоугольник, ограниченный замкнутой ломаной линий, проходящей через точки {х1, y1}, {х2, у2), .... Вот как рисуется равносторонний треугольник салатного цвета.



Несколько графиков на одном чертеже — функция GraphicsArray



Несколько графиков на одном чертеже — функция GraphicsArray



Как вы уже знаете, функция GraphicsArray позволяет на одном листе (чертеже) нарисовать несколько графиков, расположив их в одну строку или в виде двухмерного массива. Однако если вы все графики вычерчиваете с помощью одной функции, например ParametricPlot, удобно предварительно установить те значения ее опций, которые совпадают у большинства графиков. Пусть, например, мы хотим установить опции AspectRatio->Automatic и Axes->False. Вот как это делается.

SetOptions[ParametricPlot,AspectRatio->Automatic,Axes->False] ;

Теперь можем определить нужные нам графики и при необходимости задать значения тех опций, которые отличаются от установленных ранее. Пусть, например, на первом и третьем графиках вычерчиваются оси координат. Тогда для этих графиков устанавливаем Axes->True.
Block[{$DisplayFunction=Identity}, pl=ParametricPlot[{Cos[t],Sinft]},{t,0,2Pi},Axes->True]; p2=ParametricPlot[{2Cos[t],Sin[t]),{t,0,2Pi}]; p3=ParametricPlot[{ (2Cos [t] -1) Cos [t-] , (2Cos [t]-1) Sin [t] }, {t,0,2Pi},Axes->True]; p4=ParametricPlot[{t Cos[t],t Sin[t]},{t,0,12Pi}]; p5=ParametricPlot[{t Cos[t]Sin[t],t Sin[t]Л2},{t,0,8Pi}]; p6=ParametricPlot[{Sin[2t]+Sin[5t],Cos[2t]+Cos[5 t]},{t,0,2Pi}]; p7=ParametricPlot[{Sin[2t]Sin[5t],Cos[2t]Sin[5t]},{t,0,2Pi}]; p8=ParametricPlot[{Cos[t]+l/2Cos[7t]+l/3 Cos[-17t+Pi/2], Sin[t]+l/2 Sin[7 t]+l/3Sin[-17t+Pi/2]},{t,0,2Pi}];]
После этого формируем массив фафиков и отображаем его.



я показал все промежуточные шаги.



Пример 1

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

Теперь можем написать функцию, отображающую



Пример 10

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

Если же использовать значение по



Пример 10

Если же использовать значение по
Если же использовать значение по умолчанию (оно больше 1), график будет более гладким.

Иногда криволинейная сетка линий мешает



Пример 10

Иногда криволинейная сетка линий мешает

Сетка — опция Mesh

Иногда криволинейная сетка линий мешает рассмотреть поверхность. Чтобы убрать сетку, установите Mesh->False.

Раскраска гор и впадин — опция ColorFunction

Интенсивность и цвет точки на поверхности зависят от ее координаты z и определяются опцией ColorFunction. По умолчанию ее значение равно Automatic.

Отображение отсекаемых частей — опция ClipFill

Если значение функции в какой-то области выходит за диапазон, указанный в опции PlotRange, часть поверхности отсекается. Опция ClipFill определяет, как будут отображаться плоскости отсечения. Если установить dipFill->Automatic, то плоскости отсечения будут отображаться так же, как и сама поверхность. Иными словами, те части поверхности, которые выходят за диапазон, указанный в опции PlotRange, заменяются частями отсекающих плоскостей. Части отсекающих плоскостей как бы становятся крышей (или дном) над (соответственно под) теми областями, над (под) которыми поверхность отсекается.

и таблично заданные кривые. Для



Пример 10

и таблично заданные кривые. Для
Вращать, конечно, можно и таблично заданные кривые. Для этого предназначена функция ListSurfaceOfRevolution. Вот возможные обращения к ней:
ListSurfaceOf Revolution [{точка1, точка2,...}}, ListSurfaceOfRevolution [{точка1,точка2, ...}, (theta, thetamin,thetamax}}.

Здесь Sequence превращает



Пример 11

Здесь Sequence превращает
( Здесь Sequence превращает Sequence@@InscribedCircleData[pA,pB,pC] в Sequence [рА,рВ,рС].) Теперь можем приступить к рисованию.

Для уменьшения времени вычисления функций



Пример 11

Для уменьшения времени вычисления функций
Для уменьшения времени вычисления функций в выбранных по адаптивному алгоритму точках производится их компилирование, заключающееся в создании некоторого псевдокода. Однако это может привести к уменьшению точности вычислений. Чтобы избежать подобной потери точности, нужно применить опцию Compiled->False. Давайте посмотрим, для каких функций по умолчанию установлена опция Compiled->True.
Block[{$Messages={}}, Select[Names["*"], Options[ToExpression[I],Compiled]=={Compiled->True}&]] {ContourPlot,DensityPlot,FindMaximum,FindMinimum,FindRoot, NDSolve,NIntegrate,NProduct,NSum,ParametricPlot, ParametricPlot3D,Play,Plot,Plot3D}
Построение графиков функций, заданных параметрически, — функция ParametricPlot

Функция ParametricPlot позволяет рисовать кривые и семейства кривых, заданных параметрически. Эта функция имеет те же опции, что и функция Plot. В некотором смысле эта функция универсальна. Если не учитывать неявно заданных функций, то именно функция ParametricPlot позволяет построить графики всех мыслимых функций, включая и многозначные. Без проблем строятся и графики, заданные в полярной системе координат. Фигуры Лиссажу, кривые Уатта, овалы Кассини, Декарта, Мюнгера, улитки Паскаля, однолистники, листы Декарта, всевозможные розы и розетки, рулеты, годографы, эволюты и эвольвенты всех мыслимых и немыслимых кривых, циклоиды, всевозможные спирали, циссоиды, конхоиды, строфоиды, астроиды, кардиоиды, неоиды, лемнискаты, узлы, квадратрисы, клотоиды, кохлеоиды, трохоиды, элипсиды, катакаустики, всевозможные параболы, локсодромы и лоциклики, трезубцы, трисектрисы, трилистники, верзиеры, брахистохроны, подэры, кривые с именами древнегреческих и средневековых ученых — вот далеко не полный перечень всевозможного зверья, которое может быть нарисовано функцией ParametricPlot.

Пример 9.3. Фигуры Лиссажу. Это классический пример применения функции ParametricPlot. Рисуются эти фигуры совсем просто, и потому мы нарисуем сразу несколько.

то плоскости отсечения не будут



Пример 11

то плоскости отсечения не будут
Если установить dipFill->None, то плоскости отсечения не будут отображаться вообще. Иными словами, те области, над (или под) которыми поверхность выходит за диапазон, указанный в опции PlotRange, окажутся без крыши (или дна).

Пример 11



Пример 11

Пример 11


с помощью примитива Disk, параметры



Пример 12

с помощью примитива Disk, параметры
Диски (закрашенные эллипсы, окружности и их сектора) — примитив Disk

Закрашенный диск получается с помощью примитива Disk, параметры которого в точности совпадают с параметрами примитива Circle. В частности, закрашенный круг получается с помощью примитива Disk[[х, у), r].

Текст

С помощью графического примитива Text [expr, {х, у} ] задается текст.

Здесь ехрr — любое выражение, причем центр печатной формы вычисленного его значения помещается в точку с координатами (х, у]. Предположим, мы нарисовали график параболы у = (2 + х) ^2 на отрезке [-3, -1] и обозначили через р графический объект р = Plot[ (2+х) ^2, {х,-3,-1}]. Тогда полученный нами рисунок можно снабдить поясняющим текстом.

и розетки. Эти цветы весьма



Пример 12

и розетки. Эти цветы весьма
Пример 9.4. Розы и розетки. Эти цветы весьма многочисленны, выглядят, как правило, очень мило и легко рисуются. Процесс вычерчивания совсем прост, если предварительно определить следующую функцию.
PolarR[al,a2_,omega_,phi_]:=Module[{r=al+a2*Cos[omega*phi]}, Вот как, например, с помощью этой функции рисуется многолепестковая роза.

то плоскости отсечения будут окрашены



Пример 12

то плоскости отсечения будут окрашены
Если установить clipFill->цвет, то плоскости отсечения будут окрашены в указанный цвет. Иными словами, дно и крыша окрашиваются в указанный цвет.

Если все же хотите раскрасить потолок и пол (крышу и дно) в разные цвета, их придется указать вот так: ClipFill->{ цвет пола, цвет потолка}.

В графическом примитиве Text можно



Пример 13

В графическом примитиве Text можно
В графическом примитиве Text можно задать еще один параметр — смешение offset Text [expr, coords, offset]. Этот параметр определяет смещение текста. По умолчанию он равен {0, 0}, а это означает, что центр текста должен находиться в точке с координатами coords. При установке {-1, 0} левый край текста начинается в точке с координатами coords; {l, 0} — правый край текста находится в точке с координатами coords; {0, -1} — текст центрируется выше точки с координатами coords; {0, 1} — текст центрируется ниже точки с координатами coords.

Вот пример использования смещения offset.

А вот еще один милый



Пример 13

А вот еще один милый
А вот еще один милый цветок.

расположенные ближе, могут скрывать те,



Пример 13

расположенные ближе, могут скрывать те,
Отображение скрытых поверхностей — опция HiddenSurface

Объекты, расположенные ближе, могут скрывать те, которые расположены от наблюдателя дальше. Очень часто части поверхности, расположенные ближе, скрывают те, которые расположены дальше. По умолчанию опция HiddenSurface равна True. В этом случае поверхность подсвечивается и подкрашивается так, как если бы она была поверхностью непрозрачного тела. Конечно, при этом с выбранной точки зрения некоторые участки поверхности могут быть невидимы. Убрав раскраску, их можно сделать видимыми. Для этого установите опцию HiddenSurface->False.

параметр dir позволяет указать направление



Пример 14

параметр dir позволяет указать направление
Наконец, параметр dir позволяет указать направление чтения текста: Text[ex/w, coords, offset, dir]. Если dir = {1,0}, то текст располагается как обычно, т.е. горизонтально. Если dir = {0, 1}, то текст размещается вертикально и читается снизу вверх. Если dir = {0,-!}, то текст располагается вертикально и читается сверху вниз. Если dir = (-1,0), то текст располагается горизонтально, но перевернутым, т.е. "вверх ногами".

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

В Приведенном ниже примере до рисования графика функции рисуется окружность.

Цветы эти столь разнообразны, что



Пример 14

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

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

PolarXY[r_,phi_]:=

{r*Cos[phi],r*Sin[phi]}

Вот как, например, с помощью этой функции рисуется улитка Паскаля.

Пример 14



Пример 14

Пример 14

Ниже приведен пример использования опции



Пример 15

Ниже приведен пример использования опции
Ниже приведен пример использования опции Prolog вместе с вызовом в графическом примитиве Text функции FontForm, аргументами которой являются строка с текстом, название и размер шрифта для текста. На рисунке нарисовано два графика — график функции Эйри (решение дифференциального уравнения уn-ху = 0) и ее производной.

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



Пример 15

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

PolarXYAB[r_,phi_, а_,b_]:=

{r*Cos[a*phi],r*Sin[b*phi]}

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

Пример 15



Пример 15

Пример 15

Пример 16



Пример 16

Пример 16

Как вам эта зверушка? Понравилась?



Пример 16

Как вам эта зверушка? Понравилась?
Как вам эта зверушка? Понравилась? Если да, вы подобрали параметры! Если нет, пробуйте другие параметры.

а эта зверушка? Неужели не



Пример 17

а эта зверушка? Неужели не
Ну а эта зверушка? Неужели не нравится? Тогда продолжайте перебирать параметры...

Пример 9.7. Годографы. Иногда приходится вычерчивать годографы семейства вектор-функций, заданных в полярных координатах. В определении такой функции часто участвует некий вектор (очень часто единичный), который с течением времени вращается вокруг начала координат. Пусть, например, нужно вычертить годограф вектор-функции r(t) = аte + Rt+a(e) + АRwt+p(e), где e — единичный вектор, Rф — поворот на угол ф вокруг начала координат, а а, а, А, w, p — заданные параметры. Тогда, чтобы упростить определение функции PolarXYAB, можно поступить так. Сначала определим следующую функцию.

Rphi[phi_]:={Cos[phi],Sin[phi]}

С ее помощью значительно упрощается определение функции PolarXYAB, которое упрощает задание кривой семейства.

PolarXYAB[t_,a_,alpha_,aa_,omega_,beta_]:=

{0,a*t}+Rphi[t+alpha]+aa*Rphi[omega*t+beta]

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

Как вам эта зверушка? Если



Пример 18

Как вам эта зверушка? Если
Как вам эта зверушка? Если думаете, что они все такие, вы ошибаетесь.

Вращающийся единичный вектор очень часто



Пример 19

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

Пример 9.8. Циклоиды. Циклоиды (высших порядков) описываются уравнением Z = l0+l1tiwt+l2tiwt+..+lntiwn. Вот как, например, выглядит определение функции PolarXYAB для циклоид некоторого определенного типа.

PolarXYAB[t ,rl_,r2_,a_,omega_]:=

r1+r2*Rphi[t]+a*Rphi[omega*t]

Вот как теперь рисуется одна из циклоид.

А вот тот же график



Пример 1

А вот тот же график
А вот тот же график с иным значением этого параметра.

координаты левого нижнего угла прямоугольника,



Пример 1

координаты левого нижнего угла прямоугольника,
Прямоугольник — примитив Rectangle

Частный случай многоугольника — прямоугольник — можно получить с помощью примитива Rectangle [{xmin, ymin}, {хmах, уmах} ], в котором (xmin, ymin} — координаты левого нижнего угла прямоугольника, а {хmах, уmах} - координаты правого верхнего угла прямоугольника. Показанная ниже фигура состоит из пяти прямоугольников. Все они имеют разный цвет.

Эта функция позволяет чертить сразу



Пример 1

Эта функция позволяет чертить сразу
Эта функция позволяет чертить сразу несколько графиков функций. Чтобы начертить сразу несколько графиков функций, в качестве первого аргумента функции Plot задается список функций. Для того чтобы различить графики, обычно используется опция PlotStyle -> {{dirl}, {dir2},...}, где dir1— совокупность графических директив, относящихся к 1-му графику, dir2— совокупность графических директив, относящихся к 2-му графику, и т.д. Ниже вычерчено два графика: парабола — жирной линией и прямая — потоньше. Кроме того, эти графики различаются цветом (на экране, конечно).

Функция GraphicsArray может быть полезна



Пример 1

Функция GraphicsArray может быть полезна
Функция GraphicsArray может быть полезна при подборе параметров.

Пример 9.18. Подбор параметров с помощью функции GraphicsArray. Предположим, вам нужно среди двухпараметрического множества кривых (напоминающих цветы) вида (R cos(az), R sin(fe)), где R = sin 5r, выбрать ту, которая ближе всего к окружности при условии, что параметры а и b принимают целые значения, причем 1<а<9 и 1<6<6. Можно, конечно, пересмотреть все 54 кривые по одной. Но если вы не уверены, что среди них есть окружность, лучше расположить все графики на одном чертеже. Однако в отличие от предыдущих примеров, где количество графиков было небольшим, в данном случае формирование массива лучше всего поручить системе Mathematica. Для этого как нельзя лучше приспособлена функция Table. Именно с ее помощью удобнее всего сначала сформировать двухмерный массив шириной 6 и высотой 9 графиков. Затем эти графики лучше всего отобразить на одном чертеже и выбрать (на глаз) те, которые, как вам кажется, наиболее подходят для вашей цели. Отобранные графики затем можно будет рассмотреть в деталях и выбрать наиболее подходящий из них. Вот как это делается в нашем случае.
Block[{k=5},Block[{a,b,r=Sin[k*z]}, Block[{XY={r*Cos[a*z],r*Sin[b*z]}), Show[GraphicsArray[ Table[Table[ParametricPlot[XY,{z,0,2 Pi}], {b,6}],{a,9}]]]]]]
Когда будете выполнять эту программу, перед вами промелькнет 54 графика, которые рассмотреть вы, конечно, не успеете. Зато в конце вы увидите следующую картинку.

в двухмерном случае, рисунок создается



Пример 1

в двухмерном случае, рисунок создается
Как и в двухмерном случае, рисунок создается с помощью примитивов. -

Построение графика таблично заданной функции



Пример 1

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

Функция ListPlot3D служит для построения графика таблично заданной функции двух переменных. Вызов функции имеет вид ListPlot3D [таблица] или ListPlot3D [таблица, таблица оттенков]. Таблица должна быть прямоугольным массивом вещественных чисел. Иными словами, она должна быть списком списков одинаковой длины. Числа в ней интерпретируются как значения функции. Если таблица имеет размер /пхл, то таблица оттенков должна иметь размер (m- 1)х(n- 1). Элемент таблицы оттенков и в самом деле должен быть оттенком — он должен либо быть объектом SurfaceColor, либо иметь тип GrayLevel, Hue или RGBColor. Ниже показан горный ландшафт, сгенерированный с помощью таблицы функции г = е~5а*'у, к которой добавлены случайные возмущения.

либо существенных отличий от белого



Пример 1

либо существенных отличий от белого
Честно говоря, каких- либо существенных отличий от белого шума я найти не смог.

Функция ListPlay генерирует примитив SampledSoundList, который может использоваться внутри объектов Sound, Graphics и Graphics3D. SampledSoundList [{а1, а2, ... }, r] представляет собой оцифрованный звук с амплитудами а,, аb ..., причем частота оцифровки равна гГц.

Кроме того, есть специальный пакет Miscellaneous`Audio4`, в котором предусмотрены самые разнообразные функции как для создания, так и для обработки звуков.
Назад Содержание Вперед


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



Пример 2

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

Точка — графический примитив Point

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

Основоположник искусства расстановки точек на экране

Для представления точки служит графический примитив Point [coords], где coords— координаты точки. Они могут быть представлены либо в виде {х, у] или Scaled[{х, у}] в случае плоскости, либо в виде {х, у, z} или Scaled! {х, у, r)} в случае пространства. На экране точки, конечно, изображаются в виде кружков, радиус которых задается графическим примитивом Pointsize. Для раскраски точек используются параметры CMYKColor, GrayLevel, Hue и RGBColor.

Ломаная линия — графический примитив Line

Ломаная линия, соединяющая точки /я,, pt2, рц, ..., представляется графическим -примитивом Line [ { pt, , pt-, , pt}, ,...}]. Здесь pt, — координаты точки. Представленные ниже два выдающихся произведения изобразительного искусства созданы исключительно из двух серий однозвенных ломаных (отрезков прямых). Они оба называется скромно — муар.

в полярных координатах. Введенную нами



Пример 20

в полярных координатах. Введенную нами
Пример 9.9. Гиперболы в полярных координатах. Введенную нами функцию

PolarXY[r_, phi_] : = { r*Cos [phi], r*sin [phi]} удобно использовать также в определении функции PolarXYAB для многих функций, заданных в полярных координатах. Посмотрим, как это делается на примере вычерчивания полярных гипербол.

Вы знаете, как выглядит полярная гипербола

Если нет, вас ждет сюрприз!



Пример 21

Если нет, вас ждет сюрприз!

Если нет, вас ждет сюрприз!

Сначала дадим определение функции PolarXYAB для полярных гипербол.

PolarXYAB[t_,a_,b_]:= PolarXY[r=a+ b/t,t]

Вот как теперь рисуется полярная гипербола.

в полярных координатах. Применим теперь



Пример 22

в полярных координатах. Применим теперь
Позвольте вас спросить, а сколько асимптот у полярной гиперболы?!

Пример 9.10. Параболы в полярных координатах. Применим теперь введенную нами функцию PolarXY[r_, phi_] : = {r*Cos [phi], r*sin[phi] } для вычерчивания полярных парабол r= а?2+b?+с. Сначала дадим определение функции PolarXYAB для полярных парабол.

PolarXYAB[t_,а_,n ,с_]:=

PolarXY[r=a*t~2+b*t+c,t]

Вот как теперь рисуется полярная парабола.

в полярных координатах обычную кривую



Пример 23

в полярных координатах обычную кривую
Пример 9.11. Кривые второго порядка в полярных координатах. Ну а сложно ли вычертить в полярных координатах обычную кривую второго порядка? Нисколько. Сначала дадим определение функции PolarXYAB для обычных кривых второго порядка.

PolarXYAB[t_,a_,b_]:=

Pol^rXY[r=l/(a+b*Cos[t]) , t]

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

Спираль Корню. Предположим, нужно начертить



Пример 24

Спираль Корню. Предположим, нужно начертить
Пример 9.12. Спираль Корню. Предположим, нужно начертить кривую, которая имеет сложные параметрические уравнения х = x(i) и у = y(t). Тогда лучше всего предварительно определить функции х = x(t) и у - y(t) и именно их использовать в функции ParametricPlot. Покажем, как это делается на примере спирали Корню. В соответствии с рекомендацией сначала определяем x(f) и y(f) для спирали Корню.

Как видите, система Mathematica заметила,



Пример 25

Как видите, система Mathematica заметила,
Как видите, система Mathematica заметила, что x(t) и y(f) являются интегралами Френеля. Теперь, определив x(t) и y(t), можем построить график.

Как мы видели, функция ParametricPlot



Пример 26

Как мы видели, функция ParametricPlot
Специальные типы графиков

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

Графики в полярной системе координат

Построение графиков в полярной системе координат зачастую упрощается, если воспользоваться функцией PolarPlot из пакета Graphics`Graphics`. Пакет этот загружается как обычно. <
Ниже показано, как нарисовать эллипс и улитку на одном графике.

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



Пример 27

в разных системах координат на
Пример 9.13. Несколько графиков в разных системах координат на одном чертеже.

Иногда на одном листе (чертеже) нужно начертить несколько графиков, притом в разных системах координат. Предположим, на одном листе нужно начертить четыре графика, расположив их в два ряда по два графика, т.е. два графика в верхнем ряду и два — в нижнем. Два графика создадим с помощью функции ParametricPlot, a два — с помощью функции PolarPlot. Сначала загружаем нужный графический пакет.

<
А теперь задаем радиус-вектор как функцию угла

Сlearг[r]

г[theta_]=Sin[8 theta/7];

и определяем первый график.

ppl=ParametricPlot[{г[theta]Cos[theta],r[theta]Sin[theta]},

{theta,0,14Pi},AspectRatio->Automatic,DisplayFunction->Identity] ;

После этого точно так же готовим второй график.
Clear[r] r[theta_]=theta*Cos[ theta]; pp2=ParametricPlot[{r[theta]Cos[theta],r[theta]Sin[theta]}, {theta,-19Pi/2,19Pi/2},AspectRatio->Automatic,PlotPoints->200, DisplayFunction->Identity];
Аналогично строим третий график, но в полярных координатах с помощью функции PolarPlot.
Clear[r] r[theta_]=Exp[Cos[ theta]]-2Cos[4theta]+Sin[theta/12]Л5; pp3=PolarPlot[r[theta],{theta,0,24Pi},AspectRatio->Automatic, PlotPoints->200,PlotRange->{{-4,5},{-4.5,4.5}}, DisplayFunction->Identity];
Последний, четвертый, график тоже строим в полярных координатах с помощью функции PolarPlot.
Cleart[r] pp4=PolarPlot[{Sqrt[l/theta],-Sqrt[I/theta]},{theta,0.1,lOPi}, AspectRatio->Automatic,PlotPoints~>200, PlotRange->All,DisplayFunction->Identity] ;
Наконец, группируем четыре графика в двухмерный массив с помощью функции GraphicsArray и отображаем все четыре графика (полученный массив из двух строк по два графика в строке) с помощью функции show.

Как видите, все очень просто!



Пример 28

Как видите, все очень просто!
Как видите, все очень просто! Зато сейчас вам предстоит ответить на очень трудный вопрос: какая из функций PolarPlot и ParametricPlot лучше подходит для создания графика функции, заданной в полярных координатах? По собственному опыту могу сказать, что часто ответ очевиден, но иногда легче начертить по сотне графиков с помощью обеих функций, чем обосновать без ссылок на личные предпочтения выбор конкретной функции!

График функции, заданной на дискретном множестве точек, — функция ListPlot

Функция ListPlot предназначена для построения графика функции, заданной на дискретном множестве точек. Поэтому ее первый аргумент является либо списком значений функции (в этом случае считается, что эти значения функция принимает в точках 1, 2, 3, ...), либо списком пар вида [абсцисса, ордината]. Конечно, этот список можно создать и какой-либо функцией, например Table. У этой функции есть одна отличительная особенность: размером точек управляет графическая директива Pointsize, а не Thickness, потому что в данном случае мы имеем точки, а не линии. Впрочем, иногда точки на графике нужно соединить отрезками прямых. Для этого в функции ListPlot нужно установить дополнительную опцию PlotJoined->True. К другим часто используемым опциям относятся AxesOrigin, GridLines и PlotStyle.

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

Казалось бы, плоскость двухмерна, и потому на ней можно рисовать графики только одной переменной. Но, оказывается, что на самом деле, хотя плоскость и плоская, ее можно раскрасить и с помощью цвета отобразить значение функции от двух независимых переменных! До этого давно додумались картографы. Система Mathematica тоже умеет использовать эту возможность. Функции ContourPlot и DensityPlot позволяют графически изображать функции двух независимых переменных. Функция ContourPlot, например, строит линии уровня. Первым аргументом рассматриваемых

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

Линии уровня

Вы наверняка видели топографические карты какой-нибудь местности и физические карты материков, океанов и островов. И, несомненно, вы не могли не заметить на них линии уровня. Вдоль таких линий высота над уровнем моря постоянна. Если двигаться по таким линиям, высота над уровнем моря не будет изменяться. Но высоту над уровнем моря можно рассматривать как функцию точки. Линии (точнее, множества) точек, на которых функция постоянна, называются линиями уровня, или изолиниями (данной функции). В системе Mathematica есть две функции, предназначенные для вычерчивания графиков с линиями уровня: ContourPlot и ListContourPlot.

Функция ContourPlot

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

Как видите, это подобно раскраске



Пример 29

Как видите, это подобно раскраске
Как видите, это подобно раскраске физической карты. Иногда нужно оставить только линии уровня, а сам график не раскрашивать. Тогда нужно воспользоваться опцией ContourShading->False.

Точки теперь такие жирные, что



Пример 2

Точки теперь такие жирные, что
Точки теперь такие жирные, что одна даже не влезла в область, отведенную для графика!

В директиве AbsolutePointSize[rf] значение параметра d определяет диаметр круга в единицах длины, приблизительно равных одной семьдесят второй дюйма. Вот как может выглядеть парабола.

Дугу окружности создает графический примитив



Пример 2

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

Дугу окружности создает графический примитив Circlet {х, у}, r, {thl,th2}]. Здесь {х,у} — координаты центра окружности, г — радиус, {thl,th2} — граничные значения полярного угла. Чтобы нарисовать окружность, достаточно вызвать прими- , тив Circlet {х, у}, г]. Ниже представлено произведение искусства, состоящее исключительно из окружностей.

что координатные оси пересекаются на



Пример 2

что координатные оси пересекаются на
Заметьте, что координатные оси пересекаются на этом рисунке не в начале координат (не в точке с координатами (0, 0)). Однако если установить опцию AxesOrigin-> {xorigin, yorigin}, то оси будут пересекаться в точке с координатами (xorigin, yorigiri).

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

Plot[Table[ChebyshevT[n,x] ,{n,l,4}],{x,-l,l})

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

Я думаю, вы без труда



Пример 2

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

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

Пример 9.19. Циклоиды. Пусть семейство циклоид задается параметрическим уравнением

Многие опции являются общими для



Пример 2

Многие опции являются общими для
Опции трехмерной графики

Многие опции являются общими для функций двухмерной и трехмерной графики. К таким опциям относятся AspectRatio, Axes, AxesLabel, AxesStyle, Background, Color-Output, DefaultColor, DisplayFunction, Epilog, PlotLabel, PlotRange, PlotRegion и Ticks. Опишем теперь те опции, которые присущи именно функциям трехмерной графики.

Координатный параллелепипед, или коробочка, — опция Boxed

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

Закрашивание поверхности — опция Shading

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

Далеко не все поверхности можно



Пример 2

Далеко не все поверхности можно
Построение параметрически заданных кривых и поверхностей — функция ParametricPlot3D

Далеко не все поверхности можно задать уравнением z = f(x,y)) или таблично. Часто гораздо удобнее задавать их параметрически. Параметрически можно задать также кривые в пространстве. Параметрически заданные в трехмерном пространстве двухмерные поверхности или одномерные кривые можно рисовать с помощью функции ParametricPlot3D. Проекцией нарисованной ниже кривой является фигура Лиссажу.

Пример 3



Пример 3

Пример 3

а изолинии сделать невидимыми. Тогда



Пример 30

а изолинии сделать невидимыми. Тогда
Иногда, наоборот, нужно оставить только раскраску, а изолинии сделать невидимыми. Тогда нужно воспользоваться опцией ContourLines->False.

Контурный график можно раскрасить. Для



Пример 31

Контурный график можно раскрасить. Для
Контурный график можно раскрасить. Для этого нужно воспользоваться опцией ColorFunction->Hue. (По умолчанию установлено ColorFunction->Automatic, что приводит к раскраске оттенками серого.) В случае опции ColorFunction->Automatic области с меньшими значениями функции имеют более темные оттенки серого цвета, чем области с большими значениями функции. Иногда нужно подобрать цвета. Тогда придется поэкспериментировать с этой опцией. Можно, например, установить ColorFunction->(Hue[l-t]&), ColorFunction->(Hue[Abs[0.5-i]]&) или ColorFunction-> (Hue [1-Sin [Pi (l-#) ] ] &). По возможности можете руководствоваться правилами цветового дизайна, я же советов давать не буду, поскольку, как известно, на вкус и на цвет товарища нет...

Как быть, если нужно отображать только изолинии, соответствующие заранее заданному количеству уровней, или только изолинии заданных уровней? Нет проблем! Для этого есть опция Contours. По умолчанию число линий уровня на рисунке равно десяти, но если установить Contours->1 то будут отображаться только изолинии и уровней, равномерно распределенных между максимальным и минимальным значениями функции. На следующем графике отображаются только изолинии 30 уровней.

Если же нужно отображать только



Пример 32

Если же нужно отображать только
Если же нужно отображать только изолинии заданных уровней, то опцию Contours нужно установить равной списку этих уровней.

Список стилей контурных линий можно



Пример 33

Список стилей контурных линий можно
Список стилей контурных линий можно задать в опции ContourStyle. Например, если установить ContourStyle->{{RGBColor[1,0,0]},{RGBColor[0,0,l]}}, то будет чередоваться красный и синий цвета контурных линий.

По умолчанию значение опции PlotPoints равно 25. При увеличении этого значения на графике могут появиться дополнительные детали. Вот как изменится предыдущий график, если его установить равным 50.

Кроме перечисленных, функция ContourPlot имеет



Пример 34

Кроме перечисленных, функция ContourPlot имеет
Кроме перечисленных, функция ContourPlot имеет также опции AxesOrigin, Compiled и ContourSmoothing.

При установке ContourSmoothing->True происходит сглаживание линий уровня.

Функция ListContourPlot

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

Фактически в таблицу заносятся значения функции cos(sin(;c2 + ;y2)), к которым добавляется случайное возмущение с помощью функции Random [Real, {-0.2,0.2}].

в системе Mathematica имеются функции



Пример 35

в системе Mathematica имеются функции
Графики плотности

Для построения графиков плотности в системе Mathematica имеются функции DensityPlot и ListDensityPlot.

Функция DensityPlot

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

При увеличении значения опции PlotPoints



Пример 36

При увеличении значения опции PlotPoints
При увеличении значения опции PlotPoints количество деталей, естественно, возрастает.

Если хотите убрать разграфку на



Пример 37

Если хотите убрать разграфку на
Если хотите убрать разграфку на ячейки (сетку), установите Mesh->False.

Стиль ячейки определяет опция MeshStyle.



Пример 38

Стиль ячейки определяет опция MeshStyle.
Стиль ячейки определяет опция MeshStyle. В этой опции можно использовать Dashing, Thickness, GrayLevel, Hue И RGBColor.

Дополнительно у функции DensityPlot есть опции ColorFunction и Compiled.

Функция ListDensityPlot

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

по умолчанию отображается сетка.



Пример 39

по умолчанию отображается сетка.
Конечно, по умолчанию отображается сетка.

Как видите, директива ставится перед



Пример 3

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

Show[Graphics[{PointSize[0.03],Hue[0],

Table[Point[{O.lj,0.05j}], {j,10}]}]];

приводит к появлению на экране десяти точек красного цвета относительного диаметра 0.03.

Относительная и абсолютная толщина линии — директивы Thickness и AbsoluteThickness

Как и в случае точек, управлять можно не только цветом, но и толщиной линии. Директива Thickness [r] определяет относительную ширину линии, а директива AbsoluteThickness [r] — абсолютную ширину. Вот пример указания относительной ширины линии.

в этом шедевре, скажу, что



Пример 3

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

n = 8 — количество семейств маленьких окружностей;

m= 40 — количество маленьких окружностей в каждом семействе;

r= 10 — радиус маленьких окружностей;

R = lr — расстояние от начала координат до наиболее удаленного (от начала координат) конца проведенного через начало координат диаметра окружности, на которой расположены центры маленьких окружностей; в программе положено i = 3;

i — номер семейства окружностей; отсчет номера начинается с 0;

j — номер маленькой окружности в семействе; отсчет номера начинается с 0;

Rtheta[t] — вектор с координатами {Cos[t], Sin[t]};

i*2*Pi/n — угол между осью абсцисс и отрезком, соединяющим начало координат с центром окружности, на которой расположены центры маленьких окружностей i-го семейства;

R*Rtheta[i*2*Pi/n] — координаты наиболее удаленного (от начала координат) конца проведенного через начало координат диаметра окружности, на которой расположены центры маленьких окружностей i-го семейства;

kr— расстояние от начала координат до ближайшего (к началу координат) конца проведенного через начало координат диаметра окружности, на которой расположены центры маленьких окружностей; в программе положено k = 1;

k*r*Rtheta[i*2*Pi/n] — координаты ближайшего (к началу координат) конца проведенного через начало координат диаметра окружности, на которой расположены центры маленьких окружностей i-го семейства;

R1 = (R+k*r)/2 — радиус окружности, на которой находятся центры тех окружностей, на которых расположены центры маленьких окружностей семейств;

Rl*Rtheta[i*2*Pi/n] = (R+k*r)*Rtheta[i*2*Pi/n]/2 — координаты середины проведенного через начало координат диаметра окружности, на которой расположены центры маленьких окружностей /-го семейства; иными словами, это центр той окружности, на которой лежат центры окружностей i-го семейства;

rl = (R-k*r) /2 — радиус окружности, на которой расположены центры маленьких окружностей семейства;

Rl*Rtheta[i*2*Pi/n]+rl*Rtheta [i*2*Pi/n+j/m*Pi] — координаты центра у окружности i-го семейства.

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

Здесь построены графики первых четырех



Пример 3

Здесь построены графики первых четырех
Здесь построены графики первых четырех полиномов Чебышева первого рода: ChebyshevT[0, x] — полином нулевого порядка, равный тождественно единице, ChebyshevT[l,x] = х, а также полиномы ChebyshevT[2,z] и ChebyshevT[3,x]. Но вот так график построить не удастся.
list01={ChebyshevT[0,x],ChebyshevT[1,х],ChebyshevT[2,х],ChebyshevT[3,x]} {1, х, -1 + 2х2, -Зх + 4х3} Plottlist0l,{х,-1,1}]; Plot::plnr: list0l is not a machine-size real number at x =-1.. More...
Оказывается, система Mathematica не может вычислить значения list01! Почему? Потому что функция Plot имеет атрибут HoldAll.

Attributes[Plot] {HoldAll,Protected)

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

hh[1+2,2+3,3+4] hh[3,5,7]

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

SetAttributes[hh,HoldAll] hh[l+2,2+3,3+4] hh[l+2,2+3,3+4]

Чтобы в таких случаях выполнить вычисления, можно использовать функцию Evaluate. Выражение Plot [Evaluate [list0l], {x,-l, 1} ]; строит предыдущий график без проблем. Ниже построены графики 8 полиномов Чебышева.

поворот вокруг начала координат на



Пример 3

поворот вокруг начала координат на , где е — фиксированный единичный вектор, а Rф — поворот вокруг начала координат на угол ?. Пусть параметры г,, г2 и а заданы таблицей (всего 40 наборов параметров в таблице).

№ n/n
r1
r2
а
1
2
-1
1
2
3
- 1
1
3
3
-2
2
4
4
-1
1
       


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

True окраска поверхности определяется высотой



Пример 3

True окраска поверхности определяется высотой
В случае Shading-> True окраска поверхности определяется высотой точки поверхности или освещением (опция Lighting->True).

Дополнительное освещение (опция Lighting), его тип (опция AmbientLight) и источники света (опция LightSources)

Опция Lighting определяет, будет ли использована искусственная подсветка двухмерной поверхности. Если установлено Lighting->True, то тип подсветки определяется опцией AmbientLight (фоновый цвет), а координаты источников света — опцией LightSources (источники света).

С помощью опции AmbientLight->GrayLevel [уровень освещения] (неотрицательное число уровень освещения не должно превышать 1) осуществляется равномерное окрашивание поверхности в серый цвет, а если установить AmbientLight->Hue [оттенок] (неотрицательное число уровень освещения не должно превышать 1), осуществляется окрашивание в указанный оттенок (цвет Hue-палитры). Можно также указать Пие[оттенок, насыщенность, яркость] (неотрицательные числа оттенок, насыщенность, яркость не должны превышать 1). Hue [h] эквивалентно Hue [h, 1, 1].

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

возвращает пространственную кривую, параметризованную переменной



Пример 3

возвращает пространственную кривую, параметризованную переменной
Вызов ParametricPlot3D[ {xt, yt, it], {t, tmin, tmax}] возвращает пространственную кривую, параметризованную переменной /, изменяющейся от tmin до tmах.

Вызов же ParametricPlot3D[ {xt, yt, zt}, {t, tmin, tmax}, {u, umin, umax}] возвращает поверхность в пространстве, параметризованную переменными t и и, изменяющимися от tmin до tmax и от umin до итах соответственно. Можно указать оттенок рисуемого образа, для этого вызов нужно записать так: ParametricPlotSD [{xt, yt, zt, оттенок}, ...]. Ну и, конечно, можно нарисовать несколько образов. Для этого вызов записывается так: ParametricPlotSD [{(xlt, ylt, zJt}, (x2t, y2t, z2t), ...}, ...]. На рисунке ниже хорошо видно, что кривые x=tcost, y=tsint, z= 2t и х= 2 t cos t, у = 2t sin t, z = 2 t лежат на конусах.

можно сказать, важный технический прием.



Пример 4

можно сказать, важный технический прием.

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

К специальным видам графиков относятся



Пример 40

К специальным видам графиков относятся
Специальные виды графиков

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

Диаграммы и гистограммы

Этот вид графиков в системе Mathematica весьма многочисленный. Ни численностью, ни возможностями оформления этого вида графиков система Mathematica не уступает самым лучшим специализированным пакетам. Рассказывать обо всем этом богатстве с помощью черно-белых рисунков — значит отвергать пословицу: лучше один раз увидеть, чем сто раз услышать. Поэтому я не стану утомительно перечислять всевозможные опции и приводить серенькие рисунки. Если есть потребность, вызовите справочную систему И найдите описание функций BarChart, GeneralizedBarChart, StackedBarChart, PercentileBarChart, PieChart, Histogram и их многочисленных опций, призванных удовлетворить самые изысканные вкусы. Впрочем, мне кажется, что все диаграммы наиболее эффектно смотрятся лишь в цвете.

Графики с текстом

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

Функции TextListPlot и LabeledListPlot

Функции TextListPlot и LabeledListPlot можно вызвать тремя способами.

1-й способ. TextListPlot [ у1 , у2, ...} и LabeledListPlot [ y1 , у2, ...]. При этом способе точка с координатами (/', у,) помечается с помощью числа /. Если используете TextListPlot, то даже точки не увидите — только число. Вот первые 25 десятичных знаков основания натуральных логарифмов.

data=First[RealDigits[N[E,25]]]

{2,7,1,8,2,8,1,8,2,8,4,5,9,0,4,5,2,3,5,3,6,0,2,8,7}

А вот как полученные данные можно отобразить на графике.

Точки графика просто изображаются их



Пример 41

Точки графика просто изображаются их
Точки графика просто изображаются их номерами. А вот функция LabeledListPlot отображает точки и перенумеровывает их.

А вам написать Спираль по



Пример 42

А вам написать Спираль по
2-й способ. TextListPlot [ {x1, у1 }, { х2, у2}, ...] и LabeledListPlot [ { х1, у1 }, { х2, у2}, ...]. При этом способе точка с координатами (*,, yt) помечается с помощью числа .

3-й способ. TextListPlot [{ х1, у1, выражение^, {х2, у2, выражениег}, ...] и LabeledListPlot [{ х}, у1 , выражение^ , { х1, у2, выражение?.}, ...]. При этом способе точка с координатами (х1, y1) помечается с помощью выражение,.

Пусть, например, имеем следующее.

А вам написать Спираль по спирали слабо?

Функция MultipleListPlot

Честно говоря, строку "Колебаться, колебаться, колебаться завещал нам Великий Синус... " записывать по синусоиде с помощью функции LabeledListPlot несколько хлопотно, так как нужно написать выражение, выбирающее нужный символ из списка. В пакете <

Количество опций этой функции просто



Пример 43

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

Пусть имеем следующее.

list3=Table[{x*Sin[2 Pi x],-x*Cos[2 Pi x] }, {x,0,1,0.05 } ];

Тогда получим вот это.

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



Пример 44

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

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

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


  • Построение графика неявно заданной функции одной переменной при изменении переменной на заданном интервале методом решения уравнения

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

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


  • Чтобы построить график решения уравнения, найденный функцией Solve на интервале изменения переменной (xmin, xmax), нужно вызвать функцию ImplicitPlot [уравнение, {переменная, xmin, xmax}].

    Пример 9.14. "Кривая дьявола". Эта кривая задается уравнением dс4 -9cn:2 = уn -100y2. С помощью функцииImplicitPlot рисуется она совсем просто.

    с помощью функции ImplicitPlot рисуется



    Пример 45

    с помощью функции ImplicitPlot рисуется
    Пример 9.15. Кривая х4 + у4 = х2 + у2. Эта кривая с помощью функции ImplicitPlot рисуется совсем просто, если заметить, что в полярных координатах она задается уравнением вида

    и потому вся лежит внутри



    Пример 46

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

    Пример 47



    Пример 47

    Пример 47

    х интервал изменения был взят



    Пример 48

    х интервал изменения был взят

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

    Пример 9.16. Кривая у5 + x4 = ху2. Эта кривая с помощью функции ImplicitPlot рисуется совсем просто, если заметить, что все интересные детали лежат в интервале (-10, 10).

    и других графиков неявно заданных



    Пример 49

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

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

    Ниже приведен пример указания абсолютной



    Пример 4

    Ниже приведен пример указания абсолютной
    Ниже приведен пример указания абсолютной ширины линии.

    На представленном ниже рисунке немного



    Пример 4

    На представленном ниже рисунке немного
    На представленном ниже рисунке немного смещен центр окружностей семейства.

    Иногда на рисунке через точки



    Пример 4

    Иногда на рисунке через точки
    Иногда на рисунке через точки координатных осей с координатными отметками нужно провести сетку вертикальных и горизонтальных прямых. Для этого достаточно установить опцию GridLines равной Automatic.

    в набор параметров первым элементом.



    Пример 4

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

    Сначала определим вращающийся единичный вектор.

    Rphi[phi_]:={Cos[phi],Sin[phi]}

    После этого можно дать определение функции PolarXYAB для наших циклоид.

    PolarXYAB[t_,г 1_,r2_,a_,omega_]= r1+r2*Rphi[t]+a*Rphi[omega*t]

    Теперь определим функцию, рисующую отдельный график.
    gg[n_]:=Block[{plot,rl=parTable[[n]] [[2]],r2=parTable[[n]] [ [3]], a=parTable[[n]] [[4]]}, plot=ParametricPlot[PolarXYAB[t,rl,r2,a,omega], {t,0,2 Denominator[omega]Pi}, Axes->False, PlotLabel->"n="oToString [n] ] ]
    Теперь можем нарисовать, например, первые 15 циклоид, параметры которых соответствуют порядковым номерам с 1 по 15 в нашей таблице. (Они все будут круговыми циклоидами.) Вот как это делается.
    Block[{n,m=5,omega=l/7}, Show[GraphicsArray[ Table[Table[gg[n=(a-l)*m+b],{b,m}],{a,3}]]]]
    Перед вами промелькнут 15 графиков, а в конце вы увидите вот что.

    в более темные оттенки серого.



    Пример 4

    в более темные оттенки серого.
    По умолчанию сделаны установки AmbientLight->GrayLevel [0] и LightSources->{(U.,0.,1.}, RGBColor[1,0,0]}, {{l.,l.,l.}, RGBColor[0.,1.,0.]}, { {0 . ,1.,1.}, RGBColor[0.,0.,1]}

    При установке Lighting->False точки поверхности с меньшими значениями координаты z подкрашиваются в более темные оттенки серого.

    Точка зрения — опция ViewPoint

    Опция viewEoint определяет точку зрения (называемую также центром перспективы, центром проекций или полюсом), т.е. ту точку, из которой рассматривается сцена. Иными словами, все объекты рисуются так, как они видны из этой точки. Координаты точки зрения задаются в специальной системе координат, центр которой находится в центре коробочки. Иными словами, центр коробочки в этой системе координат имеет координаты {0,0,0}. Длина единичного орта этой системы координат равна наибольшей стороне коробочки. По умолчанию задана опция ViewPoint->{l.3,-2.4,2). Часто выбираются следующие координаты точки зрения: {0, -2,0} — вид спереди (на фасад коробочки), {0, -2,2} - вид сверху спереди, {0, -2, -2} — вид снизу спереди, {-2, -2, 0} — вид из левого угла, {2, -2,0}— вид из правого угла, {0,0,2} — вид сверху. Точка зрения должна находиться вне коробочки. Чем дальше находится центр проекций от сцены, тем меньше искажения вследствие центрального проектирования. Чтобы получить представление, как изменяется рисунок при изменении точки зрения, сравните следующие два графика.

    Для оттенения этих конических винтовых



    Пример 4

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

    На следующем рисунке показаны конусы с общей вершиной.

    Пример 5



    Пример 5

    Пример 5

    максимум функция



    Пример 50

    максимум функция а максимум функция у(х) достигает при

    с помощью функции ImplicitPlot рисуется



    Пример 51

    с помощью функции ImplicitPlot рисуется

    Пример 9.17. Кривая x5 + у5 = ху2. Эта кривая с помощью функции ImplicitPlot рисуется совсем просто, если заметить, что все интересные детали лежат в интервале (-1, 1).

    График опять вычерчен очень аккуратно



    Пример 52

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

    и IV квадрантах определить на



    Пример 53

    и IV квадрантах определить на точек перегиба в II и IV квадрантах определить на глаз почти невозможно. Исследованием также находятся абсциссы

    а также уравнения вертикальных



    Пример 54

    а также уравнения вертикальных точек локальных экстремумов в I и III квадрантах, а также уравнения вертикальных касательных

    определяется по уравнению x+



    Пример 55

    определяется по уравнению x+ (х=±0,714261716914966914109...). Наличие асимптоты х+у = 0 определяется по уравнению x+ y = ху2 с первого взгляда.

    Трудные случаи построения графика неявно заданной функции одной переменной в заданном интервале изменения переменной с помощью функции ImplicitPlot. Построение графика неявно заданной функции одной переменной даже в заданном интервале изменения переменной — весьма непростая задача. Функция ImplicitPlot во многих случаях справляется с ней блестяще. Но далеко не во всех случаях. Вот тривиальный пример.
    ImplicitPlot[Min[x,у]==1,(х,-22,22},PlotPoints->200]; Solve::dinv : The expression Min'0'1* [x, y] involves unknowns in more than one argument, so inverse functions cannot be used. More... ImplicitPlot::epfail: Equation Min[x,y]==l could not be solved for points to plot.
    Конечно, уравнение Min[x,y]= =1 определяет неявно заданную функцию, график которой представляет собой прямой угол с вершиной в точке (1; 1), причем стороны его параллельны осям координат. Потому с этим примером должен без труда справляться даже шестиклассник. Впрочем, функция ImplicitPlot с этим графиком тоже может справиться, но после некоторой подсказки.

    Вот еще один трудный (для функции ImplicitPlot) случай.

    С этим примером должен без



    Пример 56

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

    А вот этот простенький пример



    Пример 57

    А вот этот простенький пример
    А вот этот простенький пример считается неоправданно долго.

    Это поистине удивительно, потому что



    Пример 58

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

    Предостережение. Заглянув в справочную систему, вы можете попытаться построить этот график так
    ImplicitPlot[x^2+y^2-25==0,16 х^2+у^2-4==0, х^2+16у^2-96у+140==0, 4x^2-16x*Sign[х]+4у^2-16у+31==0, {х,-20,20}, PlotPoints->25];
    или так
    ImplicitPlot[x^2+y^2-25==0,16 х^2+у^2-4==0, х^2+16у^2-96у+140==0, 4х^2-16х*Sign[х]+4у^2-16у+31==0, {х,-20,20},{у,-20,20), PlotPoints->25];
    Вы увидите, что ничего не произойдет! На самом деле вызов нужно записать вот так
    ImplicitPlot[{x^2+y^2-25==0,16 х^2+у^2-4= =0, х^2+16у^2-96у+140==0, 4х^2-16х*Sign[х]+4у^2-16у+31==0}, {х,-20,20}, PlotPoints->25];
    или так
    ImplicitPlot[{x^2+y^2-25==0,16 x^2+у^2-4==0, х^2+16у^2-96у+140==0, 4хл2-16х*Sign[х]+4у^2-16у+31==0}, {х,-20,20},{у,-20,20), PlotPoints->25];
    Фактически это построение графиков нескольких неявных функций. Мы этот случай рассмотрим чуть позднее.

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

    Чтобы построить график решения уравнения, найденного функцией Solve на интервале изменения переменной (xmin, xmax) , из которого исключено несколько точек, нужно в вызове функции ImplicitPlot [уравнение, (переменная, xmin, xmax}] между xmin, и хmах через запятую перечислить все исключаемые точки. Впрочем, функция ImplicitPlot, как правило, сама избегает значений, которые доставляют хлопоты, и потому прибегать к этой форме вызова не приходится даже в следующих двух классических случаях.

    Пример 59



    Пример 59

    Пример 59



    позволяет указать, что линия рисуется



    Пример 5

    позволяет указать, что линия рисуется
    Пунктиры, штрихпунктиры и другие стили линии — директива Dashing

    Директива Dashing [{rl, r2, ...}] позволяет указать, что линия рисуется в виде последовательности отрезков длиной rl, r2 и т.д., которые повторяются циклически. Вот как можно нарисовать окружность.

    На представленной ниже вариации на



    Пример 5

    На представленной ниже вариации на
    На представленной ниже вариации на эту же тему радиус окружности семейства переменный.

    В данном случае сетка видна



    Пример 5

    В данном случае сетка видна
    В данном случае сетка видна на графике функции у = sin x2, приведенном выше.

    Опция PlotStyle задается так же, как и опции AxesStyle и FrameStyle, но определяет графический стиль линий.

    При построении графиков система Mathematica использует адаптивный алгоритм, который предусматривает получение достаточно гладких кривых. Одним из критериев гладкости является величина угла между последовательными отрезками, аппроксимирующими график функции между соседними точками, в которых вычисляются ее значения. Величина этого угла устанавливается опцией MaxBend, по умолчанию он равен 10°. Вот график функции у = e-f .

    В конце вы увидите следующее.



    Пример 5

    В конце вы увидите следующее.
    Чтобы начертить графики 16 и 17, в программе изменяется лишь m и начальный порядковый номер.
    Block[{n,m=2,omega=l/7}, Show[GraphicsArray[ Table[Table[gg[n=15+(a-1)*m+b],{b,m}],{a,!)]]]]
    В конце вы увидите следующее.

    Пример 5



    Пример 5

    Пример 5

    Для рисования поверхностей вращения удобнее



    Пример 5

    Для рисования поверхностей вращения удобнее
    Поверхности вращения — пакет Graphics`SurfaceOfRevolution`

    Для рисования поверхностей вращения удобнее применять пакет Graphics`SurfaceOf Revolution`, который загружается как обычно: <

    А вот параллельные прямые, нарисованные



    Пример 6

    А вот параллельные прямые, нарисованные
    А вот параллельные прямые, нарисованные черточками разной длины.

    Построение графика неявно заданной функции



    Пример 60

    Построение графика неявно заданной функции

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

    Уравнение F, (х, у) = F2 (х, у) можно записать в виде F, (х, у) - F, (х, у) = 0. Так что фактически вместо решения уравнения F, (х, у) = F2 (х, у) можно найти линию уровня функции F, (х, у) - F2 (х, у), на которой она равна 0. Как дать такую подсказку функции ImplicitPlot? Очень просто: нужно указать интервалы изменения обеих переменных. Рассмотрим примеры, когда это полезно.

    Ранее с помощью вызова ImplicitPlot[Min[x,у] ==1, {x,-22,22},PlotPoints-> 200]; мы не смогли построить график неявной функции Min[x,y]==l. А вот с подсказкой ImplicitPlot[Min[x,y]==l,{х,-22,22},(у,-22,22},PlotPoints->200]; график строится мгновенно. Вызов

    ImplicitPlot[ (х^2+у^2-25) (16 х^2+у^2-4)* *(х^2+16у^2-96у+140) (4х^2-16х*Sign[х]+4у^2-16у+31)==0, {х,-5,5}, (у,-5,5), PlotPoints->25];
    строит график более десяти минут, а вызов
    ImplicitPlot [(х^2+у-2-25) (16 х^2+у^2-4) (х^2+16у^2-96у+140) (4x^2-16x*Sign[х]+4у^2 -1бу+31)==0, {х,-5,5}, {у,-5,5), plotPoints->250];
    нужно менее трети секунды.

    Вот еще один график, который без подсказки не строится вообще.

    Пример 61



    Пример 61

    Пример 61
    График

    344 секунды. Важна ли тут



    Пример 62

    344 секунды. Важна ли тут
    строится за 0, 344 секунды. Важна ли тут подсказка (у,-1,2}? Оказывается, график можно построить и без нее, но это займет немалое время даже при PlotPoints->25.

    Построение графиков нескольких неявных функций

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

    F1(х, у) = Ф1(х, у), F2 (х, у) = Ф2(х, у), F3 (х, у) = Ф3(х, у), ..., Fn (x, у) = Фn(х, у).

    Тогда мы можем привести эти уравнения к виду F1(х, у) - Ф1(х, у) = 0, F2 (х, у) - Ф2(х, у) = 0, F3 (х, у) - Ф3(х, у) = 0, ..., Fn (х, у) - Фn(х, у) = 0 и построить график (F1 (х, у) - Ф1(х, у))( F2(х, у) - Ф2(х, у))( F3 (х, у) - Ф3(х, у))...( Fn (х, у) - Фn(х, у)) = 0.

    Но на практике лучше поступать не так, а совсем наоборот. Например, построение графика
    ImplicitPlotf ((42-38Sign[x])y+x^(х-2) ^2/100) ^ (1/3) -1) (Sqrt [13-4х]+1) ) (9Sqrt[5]-x(x-l)Sqrt[x+2])(4х^2+16у^2+56х-64у+259)==0, {х,-2,13/4), PlotPoints->25];//Timing
    можно заменить построением следующего графика.

    можно строить часами,



    Пример 63

    можно строить часами,
    График
    ImplicitPlot[((4у+х^2)^2+Sign[х^2+2х]+1) ((х^2+у^2)^(5/2)-4х(х^2-у^2))==0, {х,-5,5}, PlotPoints->25];//Timing
    можно строить часами, а график

    641 секунды. Этот график можно



    Пример 64

    641 секунды. Этот график можно
    строится всего за 21, 641 секунды. Этот график можно попытаться построить и как линию уровня.

    Этот способ потребует всего лишь



    Пример 65

    Этот способ потребует всего лишь
    Этот способ потребует всего лишь 17,859 секунды. Но обратите внимание на отсутствие ножки у трилистника. Вместо нее на экране всего лишь несколько почти незаметных точек. Попытка же увеличения значений параметров PlotPoints и PlotDivision может привести к неоправданно большому запросу виртуальной памяти и к пробуксовыванию. Мораль: при построении контурных линий некоторые ветви могут пропадать.

    Вот что происходит при построении некоторых графиков.

    вообще выглядит пустым. График же



    Пример 66

    вообще выглядит пустым. График же
    График
    ImplicitPlot[ Sqrt[(х^2+у^2)^5]- 2*(Abs[у]+у)*(х^2+у^2)==0, (х,-10,10},{у,-10,10}, PlotPoints->300];//Timing
    вообще выглядит пустым. График же

    но не без проблем: некоторые



    Пример 67

    но не без проблем: некоторые
    рисуется, но не без проблем: некоторые параметры (PlotPoints->500, PlotDivision->200) пришлось подбирать, иначе мелкие штрихи пропадают. Еще большие проблемы возникают при вычерчивании следующего графика.

    График же



    Пример 68

    График же
    График же

    Так же легко вычерчивается



    Пример 69

    Так же легко вычерчивается
    вычерчивается без проблем.

    Так же легко вычерчивается и следующий график.

    Колесо со спицами. Примитивов Circle



    Пример 6

    Колесо со спицами. Примитивов Circle
    Пример 9.1. Колесо со спицами. Примитивов Circle и Line вполне достаточно для изобретения, простите, изображения колеса.

    Как видите, график построен не



    Пример 6

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

    Это развернутые циклоиды. Нарисуем, наконец,



    Пример 6

    Это развернутые циклоиды. Нарисуем, наконец,
    Это развернутые циклоиды. Нарисуем, наконец, развернутые циклоиды, которые образуются, когда подвижная окружность содержит внутри себя неподвижную. (Это графики с 18 по 20.)
    Block!{n,m=3,omega=l/7}, Show[GraphicsArray[ Table[Table[gg[n=17+(a-1)*m+b],{b,m}],{a,1}]]]]
    В результате вы увидите вот что.

    Относительные размеры других сторон коробочки



    Пример 6

    Относительные размеры других сторон коробочки

    Коробочка, ее размеры (опция BoxRatios) и положение на рисунке (опции ViewCenter и ViewVertical)

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

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



    Пример 6

    и плоскую параметрически заданную кривую
    Вращать можно и плоскую параметрически заданную кривую х = fx(t), у = fy(t), но тогда вызов нужно записать вот так: SurfaceOfRevolution[ (fx, fy], {t, a, b}].

    Пример 7



    Пример 7

    Пример 7

    График же



    Пример 70

    График же
    График же

    построению почти не поддается: при



    Пример 71

    построению почти не поддается: при
    построению почти не поддается: при изменении параметров PlotPoints->l000, PlotDivision->2500 в нем часто исчезают те или иные детали. Не удается его построить ни вот так
    ImplicitPlott((х+4)^2+1-Sigm[1-у^2]) ((х+3)^2+у^2+2Sign[х+3]+1)

    ((2х+3)^2+у^2-1)((х^2-х)^2-Sign[1-у^2]+1) (у^2+Sign[х^2-х]+1) ((х-3)^2+у^2+2Sign[х-3]+1) ((х-2)^2+(у-1)^2+Sign[2-х]+Sign[y-1]+1) ((х^2-9х+20)^2-Sign[1-у^2]+1) ((y+Abs[x-4]+Abs[x-5])^2-Sign[(х-4)(21/4-х)]+1)==0, (х,-4,5}, PlotPoints->1000,PlotDivision->250];
    ни вот так ImplicitPlott{(х+4)^2+1-Sign[1-у^2]==0, (х+3)^2+y^2+2Sign[х+3]+1==0, (2х+3)^2+у^2-1==0, (х^2-х)^2-Sign[1-у^2]+1==0, y^2+Sign[x^2-x]+l==0, (х-3)^2+y^2+2Sign[x-3]+l==0, (x-2)^2+(y-l)^2+Sign[2-x]+Sign[y-l]+l==0, (х^2-9х+20)^2-Sign[l-y^2]+l==0, (y+Abs[x-4]+Abs[x-5])^2-Sign[(x-4)(21/4-х)]+1==0}, {х,-4,5},PlotPoints->1000, PlotDivision->250];
    В лучшем случае получаем кучу предупреждений и вот что.

    графики многих неявных функций легко



    Пример 72

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

    а то получится колесо Эшера.



    Пример 7

    а то получится колесо Эшера.
    Но не перепутайте синус и косинус, а то получится колесо Эшера.

    Иногда значение этой опции приходится



    Пример 7

    Иногда значение этой опции приходится
    Иногда значение этой опции приходится уменьшать.

    2 ряда развернутых циклоид.



    Пример 7

    2 ряда развернутых циклоид.
    Теперь нарисуем 2 ряда развернутых циклоид. (Это графики с 20 по 30.)
    Block[(n,m=5,omega=l/7), Show[GraphicsArray[ Table[Table[gg[n=20+(a-1)*m+b],{b,m}],{a,2}]]]]
    Вы увидите следующее.

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



    Пример 7

    в поле, отведенном для рисунка,
    Положение коробочки в поле, отведенном для рисунка, определяют опции ViewCenter-и ViewVertical. Если установить ViewCenter->{!/2, 1/2, 1/2}, центр коробочки будет помещен в центр рисунка. По умолчанию установлено View-Center->Automatic, при этом центр коробочки находится в центре рисунка. Координаты центра коробочки могут принимать значения от 0 до 1.

    и пространственную параметрически заданную кривую



    Пример 7

    и пространственную параметрически заданную кривую
    Более того, вращать можно и пространственную параметрически заданную кривую x=fx(t), у = fy(f), z=fz(t), но тогда вызов нужно записать вот так: SurfaceOf Revolution[ [fx, fy, ft}, {t, a, b)].

    и rу создает графический примитив



    Пример 8

    и rу создает графический примитив
    Эллипс и его дуга — примитив Circle

    Дугу эллипса с полуосями rх и rу создает графический примитив circle [ {х, у], (rх, rу}]- Здесь {х, у] — координаты центра эллипса. Графический примитив Circle[{х, у], {rх, rу}, {thl, th2}] рисует дугу эллипса, которая получается из соответствующей дуги окружности. Центр эллипса находится в точке с координатами [х, у], rх и rу — полуоси, a (thl, th2] — граничные значения полярного угла для дуги окружности. Чтобы нарисовать эллипс, достаточно вызвать примитив circle ({x, у], (rх, rу}]. Ниже нарисован эллипс, окружность, диаметр которой совпадает с меньшей осью эллипса, и дуга окружности.

    Слева хорошо заметен излом. Этот



    Пример 8

    Слева хорошо заметен излом. Этот
    Слева хорошо заметен излом. Этот недостаток легко исправить.

    В программе достаточно изменить лишь



    Пример 8

    В программе достаточно изменить лишь
    Вспоминаем, наконец, об оставшихся 10 графиках. В программе достаточно изменить лишь начальный порядковый номер.
    Block[{n,m=5,omega=l/7}, Show[GraphicsArray[ Table[Table[gg[n=30+(a-1)*m+b],{b, m}], {a, 2}]] ] ]
    А вот и сами графики.

    Опция viewVertical указывает направление, которое



    Пример 8

    Опция viewVertical указывает направление, которое
    Опция viewVertical указывает направление, которое будет считаться вертикальным в окончательном рисунке. Настройка по умолчанию ViewVertical->{0, 0, 1} определяет, что в основной' системе координат вертикальной осью будет ось аппликат (ось z)- Координаты вектора, указывающего вертикальное направление, могут принимать значения от 0 до 1. Ниже одна и та же поверхность изображена в разных положениях.

    Иногда нужно нарисовать не всю



    Пример 8

    Иногда нужно нарисовать не всю
    Иногда нужно нарисовать не всю поверхность вращения, а только ее часть, соответствующую углам вращения в, таким, что ? min< ? < ?max . Тогда в вызов нужно добавить диапазон углов (theta, thetamin, thetamax}. Например, в случае поверхности, образованной вращением кривой, заданной уравнением у =f(x), вызов нужно записать так: SurfaceOfRevolution[t, {х, xmin, xmax}, {theta, thetamin, thetamax}}. Конечно, аналогичное добавление нужно сделать и для случаев параметрического задания вращаемой кривой. Ниже представлено изображение абстрактной скульптуры, полученное таким способом из параметрически заданной пространственной кривой.

    в треугольник. Давайте напишем функцию



    Пример 9

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

    Как видите, несколько изъянов исчезло.



    Пример 9

    Как видите, несколько изъянов исчезло.
    Как видите, несколько изъянов исчезло.

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

    Пример 9



    Пример 9

    Пример 9

    Пример 9



    Пример 9

    Пример 9

    иногда нужно указать ось вращения,



    Пример 9

    иногда нужно указать ось вращения,
    Наконец, иногда нужно указать ось вращения, проходящую через начало координат. Для этого можно воспользоваться опцией RevolutionAxis. Если ось вращения лежит в плоскости xOz, то в опции RevolutionAxis достаточно указать координаты х и г точки, отличной от начала координат: RevolutionAxis->{x, r). В иных случаях придется указать все три координаты любой, отличной от начала координат точки, инцидентной оси вращения: RevolutionAxis->{x, у, r)

    с поддержанной многими выдающимися математиками



    Резюме

    В соответствии с поддержанной многими выдающимися математиками концепцией Давида Гильберта, математика может обойтись без чертежей и графиков, а тем более без мультимедиа. Но многие выдающиеся математики (в их числе и Давид Гильберт), не говоря уже о выдающихся художниках-математиках (таких, как Анатолий Тимофеевич Фоменко), всегда объясняли самые абстрактные идеи математики с помощью не только выкладок, но и ярких, часто цветных чертежей и рисунков — подлинных произведений изобразительного искусства. Это и понятно. Ведь не только, а подчас и не столько формулы служат стимулом для генерации новых идей, сколько яркие, запоминающиеся образы. И в системе Mathematica предусмотрены разнообразные средства создания графиков, чертежей и даже произведений компьютерного искусства, способных удовлетворить самый изысканный вкус и оживить лекцию по самым абстрактным разделам математики. Что же касается других наук, как естественных, так и гуманитарных, то здесь без средств визуализации данных просто не обойтись. И уж совсем невозможно представить себе инженерную деятельность и производство без чертежей. И потому в системе Mathematica есть не только традиционные средства построения графиков функций одной и нескольких переменных, но и средства построения разнообразных диаграмм, применяемые представителями гуманитарных наук. Кроме того, система Mathematica умеет работать со звуком, и в ней легко проводить визуализацию динамических процессов.

    в своем историческом развитии повторяет



    В этой главе...

    Компьютерная графика в своем историческом развитии повторяет путь аналитической геометрии. Когда-то давно', когда возникла аналитическая геометрия, т.е. во времена Пьера Ферма и Ренэ Декарта, она мыслилась в основном как аналитическая геометрия на плоскости (а зачастую даже как аналитическая геометрия в первом квадранте). Это был способ изучения плоских образов (кривых) с помощью метода координат на плоскости. Распространение методов аналитической геометрии на пространственные образы (линии и поверхности) было сделано столетием позже французским математиком Клеро (1713—1765). Облик, близкий традиционному, придал аналитической геометрии Леонард Эйлер в 1748 году, посвятив ей второй том "Введения в анализ". Однако еще более столетия курс аналитической геометрии делился на два раздела: аналитическая геометрия на плоскости и аналитическая геометрия в пространстве. Лишь в 60-е годы XX века в мехматовских учебниках мало-помалу исчезло это деление, сохранившееся в учебных планах педагогических институтов кое-где и по сей день. Впрочем, более чем за три десятилетия до конца XX века были сделаны (в основном, Анатолием Ивановичем Мальцевым и Алексеем Васильевичем Погоре-ловым) первые попытки преподавания многомерной аналитической геометрии, логическим завершением которых стали многочисленные (в 80-х годах XX века) объединенные курсы аналитической геометрии и линейной алгебры.

    Нечто подобное наблюдается и в компьютерной графике. Поначалу графические редакторы (притом с весьма ограниченными возможностями) были предназначены для вычерчивания весьма ограниченного набора графических примитивов (в основном, точек и отрезков) на плоскости. Несколько позже набор графических примитивов был значительно расширен. Затем появились графические операции для изображения трехмерных образов, потом было добавлено еще одно измерение — время. Так в графические редакторы вошло движение и появилось компьютерное немое кино, которое почти сразу же обрело звук и тем самым превратилось в полноценное мультимедиа. Говорят, что пространство запахов оказалось 33-мерным, и вскоре в кинотеатрах и в компьютерах появятся устройства для воспроизведения запахов. С другой стороны, многие средства, впервые появившиеся в графических редакторах, впоследствии были встроены и в программы, первоначально вовсе не предназначавшиеся для художников. В систему Mathematica, например, встроены все средства мультимедиа, кроме отображения 33-мерного пространства запахов. Вы можете, например, увидеть и послушать синус, тангенс, ^-функцию Римана... (Трудно передать словами чувства, возникающие при прослушивании некоторых функций. Скажу лишь, что сбегались все домашние, чтобы посмотреть, что за зверь в компьютере издает такие звуки...) Но пока что средства воссоздания пространственных трехмерных образов лишь проектируются, и потому экраны всех компьютерных мониторов двухмерные (обычно плоские). И по этой причине наиболее простыми графическими примитивами являются те, которые предназначены для отображения плоских образов. Потому знакомство с графическими возможностями современных программ следует давней традиции, возникшей в курсах аналитической геометрии: сначала изучается аналитическая геометрия на плоскости... Ох, простите, я хотел сказать средства 2О-графики, т.е. средства изображения плоских образов (точек, кривых и других плоских фигур) с помощью метода координат на плоскости. И опять, по той же традиции основательному курсу аналитической геометрии на плоскости предшествует небольшое введение в основы метода.


    Введение или основные графические примитивы



    Введение, или основные графические примитивы



    График — это некоторый объект, с которым можно выполнять определенные операции, главнейшей из которых является отображение. Фактически двух- и трехмерные рисунки состоят из графических примитивов, таких как точки, линии, многоугольники, круги, диски, параллелепипеды и даже текст. Некоторые из этих примитивов являются составными, они сами состоят из других объектов. Например, линия есть на самом деле ломаная линия, состоящая из отрезков прямых, соединяющих последовательные угловые точки этой линии. Точка двухмерного рисунка как графический примитив есть выражение вида Point [ [х, у]}, где х и у суть декартовы координаты точки на плоскости.




    Вычерчивание графиков



    Вычерчивание графиков



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

    Функция Plot

    Эта функция уже неоднократно встречалась нам ранее. Количество ее опций просто поражает.



    Вычерчивание графиков



    Вычерчивание графиков



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

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

    Простейшими способами задания функции двух переменных являются явный (т.е. в виде равенства z=fix, у)) и табличный. Для изображения графика функции двух переменных, заданной в виде равенства z=fix, у), предназначена функция Plot3D, a графики таблично заданных функций двух переменных можно начертить с помощью функции ListPlot3D.

    Построение поверхности, заданной уравнением z = f(x, у), — функция Plot3D

    Вызов Plot3D[/, [х, xmin, xmax}, (у, ymin, ymax}} генерирует график/как функции х и у. То же самое делает и вызов Plot3D[{/, оттенок], (х, xmin, xmax), {у, ymin, ymax} ], но при этом указывается оттенок графика. Функция оттенок должна возвратить одну из директив GrayLevel, Hue или RGBColor либо объект SurfaceColor. На приведенном ниже рисунке с помощью функции оттенок на пересеченной местности, описываемой уравнением z = sin(x+3 sin у), нанесены "солнечные пятна" и "тени" (по всей видимрсти, от туч).



    Дифференцирование



    Дифференцирование



    Для дифференцирования в системе Mathematica предусмотрена команда (функция) D [.,.]. Вот как вычисляется производная функции


    Интегрирование



    Интегрирование



    Неопределенные интегралы, или первообразные

    Чтобы найти неопределенный интеграл, можно воспользоваться командой Integrate:



    Исследование функций и построение графиков



    Исследование функций и построение графиков



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

    Определение интервалов возрастания и убывания функции

    Найдем для примера интервалы возрастания и убывания функции у = x3-30x2+225x+l. Сначала определим функцию.

    у=х^3-30*х^2+225*х+1 1 + 225 х - 30 х2 + х3

    Данная функция — многочлен, поэтому она всюду дифференцируема. Найдем ее производную.

    D[y,x] 225 - 60 х + 3х2

    Так как и производная — многочлен, разложим его на множители.

    Factor[%] 3 (-15+х) (-5+х)

    Теперь видим, что производная отрицательна только на интервале (5; 15). На этом интервале функция, следовательно, строго убывает. На интервалах (-?, 5) и (15, ?) производная положительна. Поэтому на этих интервалах функция строго возрастает.

    Нахождение локальных экстремумов

    У рассмотренной нами функции у = х3-30x2+225с+1 производная обращается в нуль в точках х= 5 и х= 15. Поскольку это простые нули производной, то именно эти точки и являются точками ее локального экстремума. Легко вычислить значения функции в этих точках и построить ее график.



    Линейная алгебра



    Линейная алгебра



    Произведения векторов и матриц

    Скалярное произведение векторов и матриц обозначается точкой.

    {a1, а2, a3}.{b1, b2, b3}

    a1 b1 + a2 b2 + аз bз

    Для вычисления векторного произведения векторов применяется функция Cross. Она обозначается крестиком. Вот как вычисляется обобщенное векторное произведение пяти векторов в шестимерном пространстве.

    {1,3,4,5,7,6}х{2,4,5,7,8,1}х{4,5,3,1,2,7}х {3,3,3,4,2,5}х{4,2,1,2,2,5} {522,-1076,1379,-580,60,-55}

    Нормы векторов и матриц

    С помощью функции Norm можно вычислять разнообразные нормы векторов и матриц.



    Многочлены



    Многочлены



    Чтобы проверить, что выражение ехрr есть многочлен по некоторой переменной var, нужно вызвать функцию PolynomialQ [елрг, var]. Результат будет True, если ехрr является многочленом по переменной var, и False — в противном случае.



    Нахождение решений дифференциальных уравнений



    Нахождение решений дифференциальных уравнений



    Решает дифференциальные уравнения функция DSolve.

    Пример 10.4. Решим уравнение у'''+4у' = sec 2t.

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



    Поле рациональных дробей



    Поле рациональных дробей



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

    Функция Apart раскладывает рациональную дробь на простейшие.



    Поля направлений для дифференциальных уравнений и изоклины



    Поля направлений для дифференциальных уравнений и изоклины



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

    Построение поля направлений для дифференциального уравнения

    Давайте применим теперь средства изображения векторных полей для рисования полей направлений для дифференциальных уравнений. Если дифференциальное уравнение первого порядка разрешено относительно производной, т.е. имеет вид y' = f(x, у), то поле направлении для него строится очень просто, нужно лишь в каждой точке (х, у) задать единичный вектор, коллинеарный вектору (1, f(x, у)). Иными словами, достаточно нормировать вектор (1,f(x, у)).

    Пример 10.2. Нарисуем поле направлений для дифференциального уравнения



    Пределы



    Пределы



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



    Можно указать, что при раскрытии



    Пример 10

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

    и вычислили бы этот интеграл



    Пример 10

    и вычислили бы этот интеграл и вычислили бы этот интеграл обычным путем. Но с помощью системы Mathematica все можно сделать проще:

    Для трехмерных полей нужно загружать



    Пример 10

    Для трехмерных полей нужно загружать
    Для трехмерных полей нужно загружать пакет <
    Вот как можно нарисовать векторное поле, компоненты которого равны y/z, -x/z и 0.

    Иногда приходится строить графики решений,



    Пример 10

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

    можно указать, что раскрывать скобки



    Пример 11

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

    Момент инерции относительно оси 0у



    Пример 11

    Момент инерции относительно оси 0у
    Момент инерции относительно оси 0у можно вычислить точно таким же методом. Впрочем, очевидно, что момент инерции относительно оси 0у равен моменту инерции относительно оси Ох.

    и функция для изображения градиента



    Пример 11

    и функция для изображения градиента
    Есть, конечно, и функция для изображения градиента скалярной функции. Ниже изображен градиент функции xyz.

    Тогда это можно сделать так.



    Пример 11

    Тогда это можно сделать так.
    Тогда это можно сделать так.

    Однако функция Expand раскрывает не



    Пример 12

    Однако функция Expand раскрывает не
    Однако функция Expand раскрывает не все скобки, а только в произведениях и степенях. Она не раскрывает скобки, например, в знаменателях. Если же нужно раскрыть все скобки, нужно применить функцию ExpandAll.

    Эти средства изображения векторных полей



    Пример 12

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


    Построение графика решения задачи Коши.



    Пример 12

    Построение графика решения задачи Коши.
    Пример 10.8. Построение графика решения задачи Коши. Найдем решение задачи Коши для дифференциального уравнения у"= ау'+у с параметром и построим график его решения для нескольких значений параметра.

    Сначала с помощью функции DSolve находим решение задачи Коши.

    Конечно же, для функции ExpandAll



    Пример 13

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

    Приведение подобных

    Вызов Collect [expr, x] собирает в выражении ехрr члены с одинаковыми степенями х. Иными словами, функция Collect приводит подобные члены.
    Collect[х+4у+5ху,х]. 4 у+х (1+5 у), Collect[х+4у+5ху,у] х+(4+5 х) у
    Вызов Collect [ехрr, {x1, х2, ...}] собирает в выражении ехрr члены с одинаковыми степенями х{, затем — с одинаковыми степенями х2 и т.д.

    Теперь можем построить графики.



    Пример 13

    Теперь можем построить графики.
    Теперь можем построить графики.

    Иногда после приведения подобных нужно



    Пример 14

    Иногда после приведения подобных нужно
    Иногда после приведения подобных нужно к каждому члену применить какую-нибудь функцию. Тогда ее нужно указать третьим параметром функции Collect: Collect [expr, {x1, х2, ...}, функция]. Вот как, например, выполняется разложение коэффициентов на множители после приведения подобных.

    Все построенные решения проходят через



    Пример 14

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

    В функции Collect можно использовать



    Пример 15

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

    что полученное выражение отличается от



    Пример 16

    что полученное выражение отличается от
    Заметьте, что полученное выражение отличается от

    Ниже показано применение шаблона для



    Пример 17

    Ниже показано применение шаблона для
    хотя и равно ему тождественно.

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

    Пример 18



    Пример 18

    Пример 18


    В случае нескольких переменных при



    Пример 1

    В случае нескольких переменных при
    В случае нескольких переменных при проверке необходимо указать список переменных: PolynomialQ [expr, [varl, var2,...}]. PolynomialQ[ху,{х,у}] True

    Выражение PolynomialQ [ехрr] равно True, если ехрr является полиномом относительно каких-либо переменных. В противном случае результат равен False. PolynomialQ[ху,{х,у}] True PolynomialQ[(Pi+x)у] True PolynomialQ[1/z+xy] False

    Чтобы узнать общее число слагаемых в многочлене poly, можно вычислить выражение Length [poly]. Но не забудьте перед этим раскрыть скобки.

    PolynomialQ[(a+b+c+d)^100] True Lengthf(a+b+c+d)^100] 2 Length[Expand!(a+b+c+d)^100]] 176851

    Функция Variables, примененная к. poly, дает список всех независимых переменных в полиноме poly.

    Variables[(a+b+c+d)^100]

    {a,b,c,d}

    Коэффициенты

    Выражение Coefficient [poly, form] имеет своим значением коэффициент при выражении form в полиноме poly.

    к сумме рациональных дробей, приводит



    Пример 1

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

    Совсем просто выполняется обращение неособенных



    Пример 1

    Совсем просто выполняется обращение неособенных
    Обратные и псевдообратные матрицы

    Совсем просто выполняется обращение неособенных матриц.

    Абсолютно ничего сложного. Но помните,



    Пример 1

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

    Пример 1



    Пример 1

    Пример 1.



    Чтобы отбросить остаточный член, можно



    Пример 1

    Чтобы отбросить остаточный член, можно
    Чтобы отбросить остаточный член, можно воспользоваться командой Normal:

    Вот более сложный пример. Пусть



    Пример 1

    Вот более сложный пример. Пусть
    Вот более сложный пример. Пусть нужно найти локальные экстремумы функции

    Но не всегда все проходит



    Пример 1

    Но не всегда все проходит
    Но не всегда все проходит так гладко. Например, в интеграле

    Вот числовой пример.



    Пример 1

    Вот числовой пример.
    Вот числовой пример.

    и изоклины интегральных кривых дифференциального



    Пример 1

    и изоклины интегральных кривых дифференциального
    Совсем несложно начертить и изоклины интегральных кривых дифференциального уравнения первого порядка, разрешенного относительно производной, т.е. имеющего вид. у'= Аf(x, у).

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

    Если дифференциальное уравнение первого порядка разрешено относительно производной, т.е. задано в виде у'= f(x, у), то изоклины являются линиями уровня f(x, у) = С. Следовательно, задача построения изоклин сводится к построению линий уровня.

    Пример 10.3. Построим изоклины уравнения у'= (у-1)х.

    Как видите, система Mathematica обозначает



    Пример 1

    Как видите, система Mathematica обозначает
    Как видите, система Mathematica обозначает произвольные постоянные через С[1],С[2],С[3] и т.д.

    Пример 10.5. Решим уравнение 4у'2-9х = 0. Решение.

    yh=DSolve[4y'[х]^2-9х == 0,у[х], х] {{у[х] ->-х3/2+С[1]},{у[х]->х3/2+С[1]}}

    Заметьте, что в учебниках и задачниках это решение обычно записывается в неявной форме: (у-C)2 = х3

    Пример 10.6. Решим уравнение х = y'+sin у'. Решение.

    Теперь построим графики функций



    Пример 1

    Теперь построим графики функций
    Теперь построим графики функций x(t) и y(t) для случая, когда параметр а принимает значение 1/2.

    в виде поименованных правил. Например,



    Пример 1

    в виде поименованных правил. Например,
    Для всех дальнейших вычислений х сохраняет свое значение.

    х+у

    5.8598744820488384738229308546321653819544164930751+ у

    Подстановки удобно задавать в виде поименованных правил. Например, можно определить подстановку r1= х->а, и после этого она может быть применена к конкретному выражению с помощью функции ReplaceAll, имеющей также постфиксную форму /.:

    r1 = х -> а x+1/.rl

    1+а

    То же самое можно сделать и так:

    ReplaceAll[х + 1, r1]

    1+а

    Вот пример последовательных замен.

    {а,b, с}/.a->b/.b->d

    {d,d,c}

    Функция ReplaceAll позволяет осуществить несколько подстановок одновременно. Тогда эти подстановки должны быть оформлены в виде списка и заданы вторым аргументом этой функции. Вот пример одновременной замены:

    {а,b,с}/.(a->b,b->d)

    {b,d,c}

    Однако функция ReplaceAll выполняет замену в каждом подвыражении только

    раз, рекурсивно замена не выполняется.

    а

    ReplaceAll [х + х2 , {х -> а, х2 -> х} ]

    а+х

    Если же нужно делать подстановки повторно, необходимо использовать функцию

    ReplaceRepeated.

    ReplaceRepeated[x + х2, {х->а, х2-» х} ]

    2 а

    Функция ReplaceRepeated имеет постфиксную форму // ..

    х + х2 // . {х -> а, х2 -> х}

    2 а

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

    rr=Thread[{r,s,t}->{R, S,T}]

    (r->R,s->S,t->T)

    Теперь применим эти правила.

    Функция Together приводит рациональные дроби



    Пример 2

    Функция Together приводит рациональные дроби
    Функция Together приводит рациональные дроби к общему знаменателю и после их сложения сокращает общие множители в числителе и знаменателе.

    Особенная матрица не имеет обратной,



    Пример 2

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

    Пример 2



    Пример 2

    Пример 2

    в результате дифференцирования, пришлось упрощать,



    Пример 2

    в результате дифференцирования, пришлось упрощать,

    Заметьте, что выражение, полученное в результате дифференцирования, пришлось упрощать, так как автоматически упрощение не выполняется! Вот еще один пример.

    0[Аbз[х^2],х] 2 Abs [x] Abs'[х]

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

    D[Abs[х^2],х]/.х->1 2 Abs'[l]
    Но в целом, если подобные примеры во внимание не принимать, система Mathematica успешно справляется и с вычислением частных (в том числе и смешанных) производных.

    Для вычисления полных дифференциалов предусмотрена команда Dt.

    в ряд Тейлора функции двух



    Пример 2

    в ряд Тейлора функции двух
    Ниже приведен пример разложения в ряд Тейлора функции двух переменных.

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



    Пример 2

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

    Определим нашу функцию в системе Mathematica.

    y1=((l-x) (х-2)^2)^(1/3) ((1-х) (-2 + х)2)1/3

    Данная функция определена и непрерывна на всей числовой оси. Находим ее производную.

    не учтен случаи n=



    Пример 2

    не учтен случаи n=
    не учтен случаи n= - 1. Вот еще пример.

    Функция Inner немного похожа на



    Пример 2

    Функция Inner немного похожа на
    Функция Inner немного похожа на скалярное произведение. Собственно говоря, inner[f, список1, список2, g] и есть скалярное произведение, в котором умножение замещается функцией/, а сложение — функцией g.

    vl = {a1, a2, a3}; v2 = {b1, b2, b3>; Dot[vl,v2] a1 b1 + 32 b2 + a3 bз Inner[Times,vl,v2,Plus] a1 b1 + 32 b2 + a3 bз

    Теперь можем определить основные операции векторного анализа.

    Вот определение градиента. gradient[f ,x_List]:=Map[D[f,#]&,x] Вычислим градиент.

    gradient[f[x,у, z], {x,y,z}] {f(0,1,0)[x, y, z], f(0,1,0)[x, y, z], f(0,1,0)D[x, y, z]}

    Теперь определим гессиан hessian[f_,x_List]:=0uter[D,gradient[f,x],x] и вычислим его:

    и изоклин, несомненно, дают весьма



    Пример 2

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



    в данном случае функция DSolve



    Пример 2

    в данном случае функция DSolve
    Как видим, в данном случае функция DSolve с поиском решения не справилась. Тем не менее решение может быть представлено в параметрической форме: х = p+sin р, у = p2/2+psin p+cos р+С.

    Впрочем, не спешите обвинять функцию DSolve — ведь решение записано нами не в виде явной функции!

    Вот еще один пример, когда решение находится как неявная функция.

    Чтобы построить фазовый портрет, нужно



    Пример 2

    Чтобы построить фазовый портрет, нужно
    Чтобы построить фазовый портрет, нужно воспользоваться функцией ParametricPlot.

    в системе Mathematica имеют заголовки.



    Пример 2

    в системе Mathematica имеют заголовки.
    Выражения в системе Mathematica имеют заголовки. Например:

    Выражение Coefficient



    Пример 2

    Выражение Coefficient
    Выражение Coefficient [poly, form^n] эквивалентно Coefficient [poly, form, n].

    и знаменателе рациональной дроби не



    Пример 3

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

    С помощью псевдообратных матриц можно



    Пример 3

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

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

    Пусть имеем систему линейных уравнений т х = v, где т — матрица системы, а v — вектор правых частей. Ее решение можно найти так.

    что для отбрасывания остаточных членов



    Пример 3

    что для отбрасывания остаточных членов
    Заметьте, что для отбрасывания остаточных членов понадобилась только одна команда Normal.

    Арифметические операции над рядами

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

    что производную можно упростить, поэтому



    Пример 3

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

    Это тавтология. Между тем данный



    Пример 3

    Это тавтология. Между тем данный
    Это тавтология. Между тем данный интеграл равен еx-1 при х<0 и 1-еx в остальных случаях. (Я здесь не опустил 1 для того, чтобы интеграл был непрерывен при х = 0.) Впрочем, многие интегралы, даже технически сложные для студентов, берутся без проблем:

    Вот пример его вычисления.



    Пример 3

    Вот пример его вычисления.
    Определяем теперь лапласиан
    laplacian[f_,x_List]:=Inner[D,gradient[f,x] ,x] и вычисляем его: laplacian[f[x,y,z], {x,y,z}] f(0,0,2)[x, y, z] + f(0,2,0)[x, y, z] f(2,0,0)[x, y, z]
    Совсем несложно определить и якобиан.

    jacobian[f_List,x_List]:=0uter[D,f,x] Вот пример его вычисления.

    Однако не следует думать, что



    Пример 3

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

    Однако не всегда функция DSolve



    Пример 3

    Однако не всегда функция DSolve
    Однако не всегда функция DSolve справляется с системами дифференциальных уравнений.

    Пример 10.10. Найдем решение системы дифференциальных уравнений у"= y2+z, z'= -2yy'+y, удовлетворяющее начальным условиям у = 0, у'= 0, z = 0 при х = 0.
    sol2=DSolve[{y''[x]==y[x]^2+z[x] , z'[x]==-2*y[x]*y'[x]+y[x], у[0]==1,у'[0]==l,z[0]==0},{y,z},{x}) DSolve [{у"[x]==y[x]2+z[x], z'[x]=y[x]-2y[x]y'[x],y[0]==1,y'[0] = 1,z[0] == 0},{y, z),{x}]
    Как видите, несмотря на то что в данном случае решением является пара функций у = ё*, z - ef—e1*, функция DSolve не смогла найти его. В таких случаях, как и одно дифференциальное уравнение, так и систему дифференциальных уравнений приходится решать численно. Для этого можно воспользоваться функцией NDSolve. Вызов ее отличается от вызова функции DSolve лишь тем, что в нем нужно указать интервал, на котором ищется решение.
    sol2=NDSolve[{y''[x]==y[x]^2+z[x], 2'[х]==-2*у[х]*у'[х]+у[х], у[0]==1,у'[0]= =1, z[0]==0}, {y,z},{x,0,10}] {{y->InterpolatingFunction[{{0.,10.}},<>], z->InterpolatingFunction[{{0.,10.}),<>]}}
    В данном случае уравнения представлены в виде интерполяционных функций для у(х) и z(x) на интервале (0, 10). Хотя это и не аналитические выражения, они позволяют вычислить значения наших функций — решений системы дифференциальных уравнений — в любой точке интервала (0, 10).

    {y[5],z[5]}/.sol2 { {148.413,-21878.}}

    Несложно представить решение и в табличном виде. Ниже, например, приведена таблица значений функций у(х) и z(x) на отрезке [1, 5].

    Их тоже можно заменить.



    Пример 3

    Их тоже можно заменить.
    Их тоже можно заменить.

    представляет собой список коэффициентов при



    Пример 3

    представляет собой список коэффициентов при
    Результат вычисления выражения CoefficientList [poly, form] представляет собой список коэффициентов при степенях form в полиноме poly. Список составляется в порядке возрастания степеней.

    в знаменателе рациональной дроби. Для



    Пример 4

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

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

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



    Пример 4

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

    m.x-v

    {0,0}

    Имеются, конечно, и функции для специализированных методов, таких как Гауссово исключение, разнообразные декомпозиции, вычисление миноров и т.д.

    Деление можно выполнить так.



    Пример 4

    Деление можно выполнить так.
    Деление можно выполнить так.

    и являются критическими для данной



    Пример 4

    и являются критическими для данной
    Видим, что в точках х = 1 и х = 2 производная не существует, а в нуль обращается только в точке х = 4/3. Поэтому только эти точки и являются критическими для данной функции. Однако при переходе через точку х — \ производная не меняет знака, поэтому она не является точкой экстремума. При переходе через точку х = 4/3 производная меняет знак минус на плюс, поэтому в этой точке функция имеет минимум. При переходе через точку х = 2 производная меняет знак плюс на минус, поэтому в этой точке функция имеет максимум. Вычисляем минимум и максимум.

    Неберущиеся интегралы остаются без изменений



    Пример 4

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

    Integrate[Ехр[х^2], х] 1/2? Erfi [x]

    Определенные интегралы

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

    Вот еще несколько примеров выполнения



    Пример 4

    Вот еще несколько примеров выполнения
    Наконец, определяем дивергенцию. divergence[f_List,x_List]:=Inner[D,f ,x] Вот пример ее вычисления.

    divergence [ {f [x, у, z], g [x, у, z], h [x, y, z] }, {x, y, z} ] h(0,1,0)[x, y, z] + g(0,0,1)[x, y, z]+f(1,0,0)[x, y, z]

    Вот еще несколько примеров выполнения операций векторного анализа.

    f=x^2+x y^2+x y z^2;g=Exp[xyz];h=Sin[xyz]; gradient[f, {x,y, z}] {2x+y2+yz2, 2xy +xz2, 2xyz} jacobian[{f,g,h}, {x,y, z} ] //MatrixForm

    в данном случае существенно использованы



    Пример 4

    в данном случае существенно использованы
    Как видите, в данном случае существенно использованы функции Бесселя.

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

    Эта таблица, несомненно, более читабельна,



    Пример 4

    Эта таблица, несомненно, более читабельна,
    Конечно, это совершенно нечитаемо, и лучше превратить это в обычную таблицу.
    x
    y(x)
    z(х)
    1
    2.71828
    -4.67077
    1.2
    3.32012
    -7.70305
    1.4
    4.0552
    -12.3894
    1.6
    4.95303
    -19.5795
    1.8
    6.04965
    -30.5486
    2.
    7.38906
    -47.2091
    2.2
    9.02501
    -72.4259
    2.4
    11.0232
    -110.487
    2.6
    13.4637
    -167.808
    2.8
    16.4446
    -253.982
    3.
    20.0855
    -383.343
    3.2
    24.5325
    -577.312
    3.4
    29.9641
    -867.883
    3.6
    36.5982
    -1302.83
    3.8
    44.7012
    -1953.49
    4.
    54.5981
    -2926.36
    4.2
    66.6863
    -4380.38
    4.4
    81.4508
    -6552.79
    4.6
    99.4843
    -9797.64
    4.8
    121.51
    -14643.3
    5.
    148.413
    -21878.


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

    и Plus были заменены их



    Пример 4

    и Plus были заменены их
    13 данном случае выражения с заголовками integer, Rational и Plus были заменены их логарифмами. Вот еще пример этого типа. Все выражения с заголовками f или g заменим их квадратами.

    Список коэффициентов можно привести по



    Пример 4

    Список коэффициентов можно привести по
    Список коэффициентов можно привести по определенному модулю.

    Функцию Simplify можно применять также



    Пример 5

    Функцию Simplify можно применять также
    Функцию Simplify можно применять также для упрощения выражений при определенных условиях. Вот пример.

    Simplify[a^3+b^3+c^3-3*a*b*c,a+b+c==0]

    0

    это есть начальный отрезок ряда,



    Пример 5

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

    Так что локальный минимум



    Пример 5

    Так что локальный минимум
    Так что локальный минимум равен

    Чтобы приближенно вычислить определенный интеграл



    Пример 5

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

    Integrate[Exp[x]/x,{x,1,2}] -Gamma[0,-2]+Gamma[0,-1] Nlntegrate[Exp[x]/x,{x,l,2}] 3.05912

    Пример 10.1. Вычислим моменты инерции относительно осей координат 0х и 0у пластины с плотностью 1, ограниченной кривыми ху = 1, ху = 2, у = 2х, х = 2у и расположенной в I квадранте.

    Нарисуем пластину.

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



    Пример 5

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

    {CoordinateSystem,Coordinates[]} {Cartesian,{Xx,Yy,Zz}}

    Вот как вычислить градиент.

    Grad[Xx+Sin[YyZz]] {l,Zz Cos[YyZz],Yy Cos[YyZz]}

    Систему координат и название переменных можно изменить.

    SetCoordinates[Cartesian[х,у,z]] Cartesian[x,у,z]

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

    Div[{x y,x у z,Sin[x у z]}] у+х z+x у Cos[х у z]

    Установим теперь сферическую систему координат.

    SetCoordinates[Spherical[r,th,ph]] Spherical[r,th,ph]

    Узнаем промежутки изменения координат.

    CoordinateRanges[] (0
    Напишем формулы преобразования координат.

    CoordinatesToCartesian[[r,th,ph)]

    {r Cos[ph] Sin[th],r Sin[ph] Sin[th],r Cos[th]}

    Найдем якобиан.

    jdet=JacobianDeterminant[] r2 Sin [th]

    Шутки ради вычислим площадь поверхности сферы радиуса R

    Как видим, функция DSolve не



    Пример 5

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

    table BORDER



    Пример 5

    table BORDER

    Вот еще один способ сделать



    Пример 5

    Вот еще один способ сделать
    Вот еще один способ сделать то же самое.

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



    Пример 5

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

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

    Разложение на множители

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

    Точно так же вычисляется



    Пример 6

    Точно так же вычисляется

    Точно так же вычисляется и локальный максимум.

    y1/.x->2 0

    Вот график данной функции.

    Теперь нужно



    Пример 6

    Теперь нужно
    Теперь нужно вычислить

    и объем сферы радиуса R:



    Пример 6

    и объем сферы радиуса R:
    и объем сферы радиуса R:

    что фиктивные переменные, по которым



    Пример 6

    что фиктивные переменные, по которым
    Заметьте, что фиктивные переменные, по которым производится интегрирование, обозначены в решении через K$номер.

    Ниже приведен пример решения задачи Коши с помощью все той же функции

    А вот как все множители,



    Пример 6

    А вот как все множители,
    А вот как все множители, являющиеся вызовами функций, можно возвести в квадрат:

    Разложение на множители выполняет не



    Пример 6

    Разложение на множители выполняет не
    Разложение на множители выполняет не только функция Factor, но и функции FactorList и FactorTerms. В результате вычисления выражения FactorList [poly] получается список множителей полинома poly вместе с показателями степеней, с которыми множители входят в разложение poly на множители. Первый элемент списка есть общий численный множитель — так называемое содержание многочлена. Если содержание многочлена равно единице, то список начинается с {1,1}.

    Пример 6



    Пример 6

    Пример 6

    к полярным координатам. Тогда пластина



    Пример 7

    к полярным координатам. Тогда пластина где G — пластина. Чтобы свести эти интегралы к повторным, перейдем к полярным координатам. Тогда пластина будет ограничена лучами ?1 = arctg 0.5 и ?2 = arctg 2 и кривыми

    При решении многих задач весьма



    Пример 7

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

    Часто решение дифференциального уравнения имеет



    Пример 7

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

    Пример 10.7. Построение графика решения дифференциального уравнения. Решим дифференциальное уравнение

    эквивалентно выражению expression для сопоставления



    Пример 7

    эквивалентно выражению expression для сопоставления
    Заметьте, . что выражение HoldPattern [expression] эквивалентно выражению expression для сопоставления с образцом, но оставляет выражение expression в невычисленной форме.

    А вот как все вызовы функций, не содержащие степеней и произведений, возводятся в куб.

    Функция FactorTerms позволяет вынести общий



    Пример 7

    Функция FactorTerms позволяет вынести общий
    Функция FactorTerms позволяет вынести общий числовой множитель.

    что для построения графика знак



    Пример 7

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

    Нахождение наибольшего и наименьшего значений (глобальных экстремумов)

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

    Нахождение интервалов выпуклости и точек перегиба

    Найдем интервалы выпуклости и точек перегиба функции y2= х4-6х2—6х+1. Сначала введем функцию в систему Mathematica.

    y2=x^4-6x^2-6x+1 1-6х-6х2 + х4

    Теперь находим вторую производную.

    D[y2,{x,2}] -12 + 12 х2

    Так как вторая производная положительна при |x| >1, то (-?, -1) и (1, ?) — интервалы выпуклости вниз, а (-1, 1) — интервал выпуклости вверх. Поскольку в точках х = -1 и х = 1 функция меняет направление выпуклости, эти точки являются точками перегиба. Впрочем, в этом можно убедиться и иначе: третья производная

    0[у2,{х,3}]/.х->1 24 0[у2,{х,3}]/.х->-1 -24

    в этих точках отлична от 0.

    Вот график функции

    и градиент скалярного поля.



    Пример 8

    и градиент скалярного поля.
    Не сложнее нарисовать и градиент скалярного поля.

    и построим график его решения.



    Пример 8

    и построим график его решения. и построим график его решения.

    Сначала с помощью функции DSolve находим решение.

    с помощью PowerExpand, корректны, вообще



    Пример 8

    с помощью PowerExpand, корректны, вообще
    Действия со степенями

    Функция PowerExpand приводит (а*b) ^с к виду а^с * b^с. Преобразования, сделанные с помощью PowerExpand, корректны, вообще говоря, только если с целое, а а и b положительные.

    Кроме того, PowerExpand приводит Log[а^b] к виду b*Log [а].

    PowerExpand [Log [ (ab)n] ]

    n (Log[a]+Log[b])

    Квадратный корень тоже рассматривается как степень.

    позволяет вынести общий множитель, не



    Пример 8

    позволяет вынести общий множитель, не
    Вызов FactorTerms [poly, x] позволяет вынести общий множитель, не зависящий от х; FactorTerms [poly, {xl, x2, ...}] последовательно выделяет множители, не зависящие от x1, х2 и т.д. Вычисление выражения FactorTermsList [poly, (xl, x2, . . .}] дает список множителей poly. Первый элемент в списке есть общий числовой множитель, второй — множитель, не зависящий ни от одного из x1, х2, ... . Последующие элементы есть множители, не зависящие от как можно большего числа переменных x1, х2, ....

    Деление многочленов

    PolynomialQuotient [polyl, poly2] дает частное от деления многочлена poly1 на многочлен poly2, a PolynomialRemainder [poly1, poly2] — остаток.

    Наибольший общий делитель многочленов

    Важнейшими операциями при работе с полиномами являются нахождение наибольшего общего делителя и наименьшего общего кратного. Выражение PolynomialGCD [poly], poly2] представляет собой наибольший общий делитель многочленов polyl и poly2. При вычислении наибольшего общего делителя все символьные параметры в полиномах трактуются как переменные, и деление на них не допускается.

    PolynomialGCD[х^3000-1, х^1503-1]

    -1 + х3

    Наименьшее общее кратное многочленов

    Выражение PolynomialLCM[poly2, poly2] представляет собой наименьшее общее кратное многочленов poly1 и poly2.

    Результант

    Выражение Resultant [polyl, poly2, var] представляет собой результант многочленов poly1 и poly2, рассматриваемых как многочленов от переменной var.

    Resultant[а*х^2+b*х+с, 2а*х+b, х] -

    ab2 + 4 а2 с

    Пример 8



    Пример 8

    Пример 8

    р на гиперболе ху



    Пример 8

    р на гиперболе ху (значение р на гиперболе ху = 1) и

    и конечно же, PowerExpand также



    Пример 9

    и конечно же, PowerExpand также
    Ну и конечно же, PowerExpand также приводит (а^b) ^с к виду а^ (bc).

    Раскрытие скобок

    Раскрытие скобок выполняет функция Expand. Вот пример.

    Поэтому далее мы бы



    Пример 9

    Поэтому далее мы бы (значение р на гиперболе ху = 2). Поэтому далее мы бы написали

    и функции для вычерчивания полей,



    Пример 9

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

    Найдя решение, можем построить его



    Пример 9

    Найдя решение, можем построить его
    Найдя решение, можем построить его график. Для этого придется, конечно, задать значения произвольных постоянных. В данном случае это уравнение первого порядка, и потому у него только одна произвольная постоянная: с [ 1 ]. Ее значение удобнее всего задать подстановкой.

    В системе Mathematica предусмотрены все



    Резюме

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

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

    Что касается операций анализа, то и они, если не считать перехода к пределу, реализованы превосходно. Лишь при вычислении пределов нужно соблюдать осторожность: в случае несовпадения односторонних пределов любой из них система Mathematica может подсунуть в качестве двустороннего. Система Mathematica весьма успешно справляется с вычислением производных (в том числе и смешанных) и интегралов (определенных и неопределенных). После вычисления производных полученный результат иногда нуждается в упрощении. Зато разложение функций в ряд Тейлора, да и действия над рядами выполняются безукоризненно. Все это позволяет произвести довольно полное исследование функций (определить их интервалы монотонности, найти локальные и глобальные экстремумы, найти интервалы выпуклости и точки перегиба) и построить их графики. При необходимости исследовать скалярные или векторные поля, задаваемые функциями нескольких переменных, можно воспользоваться функциями Outer и Inner для определения операций векторного анализа. Легко определяются градиент, гессиан, лапласиан, якобиан и дивергенция. Впрочем, все нужные определения (причем в самых разнообразных системах координат) имеются в пакете Calculus`VectorAnalysis`. Функциями этого пакета можно воспользоваться и для решения других задач, например для исследования дифференциальных уравнений. Для нахождения решений дифференциальных уравнений и их систем используется функция DSolve. Она может не только находить общие решения, но и учитывает дополнительные условия (начальные, граничные) и потому может решать, например, задачу Коши. Если же функция DSolve не может найти решение в аналитическом виде, для численного решения можно воспользоваться функцией NDSolve

    Ряды



    Ряды



    Разложение в ряд Тейлора

    Вот как функция tg(x-x3)-sin(x+x3) разлагается в ряд Тейлора:



    Системы дифференциальных уравнений



    Системы дифференциальных уравнений



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

    Пример 10.9. Найдем решение системы дифференциальных уравнений х' = у, у' = -а2х, удовлетворяющее начальным условиям х = 1, у' = 0 при t = 0.



    Векторный анализ



    Векторный анализ



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

    Outer[List,{a,b,c}, {d, e, f} ] {{{a,d}, {a,e},{a,fn,{{b,d},{b,e}, {b,f}},{{c,cl},{c,e},{c,f}}}

    Вот пример, связанный с конкатенацией строк.



    Замена выражений в формулах



    Замена выражений в формулах



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

    Вычисление выражения Set [левая часть, правая часть], или левая часть = правая часть, выполняется следующим образом. Сначала вычисляется правая часть, а затем получившийся результат (вычисленное выражение) присваивается в качестве значения невычисленной левой части. Всюду в дальнейшем левая часть, в какие бы выражения она ни входила, будет заменяться выражением, полученным в результате вычисления правой части. Левая и правая части могут быть списками, и поэтому операцию замены (подстановки) Set можно записать в виде присваивания списков {левая часть,, левая часть2, ...} = {правая часть,, правая часть2, .. .}. В этом случае результат вычисления /-и правой части будет присвоен /-и левой части. В качестве примера присвоим символу х значение а и после этого вычислим выражение (х+1)^2.
    х=а а (х+1)^2 (1 + а)2
    Вот более сложный случай.
    {х,х}={а,b} {а,b} х^2 b^2
    Обратите внимание, что никакого предупреждения не было. Это подобно тому, как в языках программирования вполне допустим оператор х = х+1 потому, что действия выполняются не одновременно, а в определенном порядке.

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

    Evaluate[ff/@{a,b,с,d}]={1,23,45,678}; ff[b] 23

    Как видите, теперь везде ff [b] заменяется своим значением. Пусть теперь b = 1. Заменится ли ff [1] своим значением? Оказывается, нет.

    b=1

    1

    ff[l] ff[l]

    Более того, теперь даже ff [b] не заменяется своим значением.

    ff [b] ff1]

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

    Иногда глобальную! подстановку нужно отменить. Если левая часть есть переменная, это можно сделать с помощью функции Clear. Вызов clear [переменная], переменная2, .. .} отменяет все подстановки значений, присвоенных переменным переменная!, переменная!, ... . Для отмены подстановки значения одной переменной можно использовать присваивание вида переменная = . b=N[Pi,50]

    3.1415926535897932384626433832795028841971693993751

    b=.

    b

    b

    Присваивание вида переменная = . является синонимом выражения Unset [переменная].

    b=N[Pi,50]

    3.1415926535897932384626433832795028841971693993751

    Unset[b]

    b

    b

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

    Выражение Rule [левая часть, правая часть], записываемое также в виде левая часть->правая часть, задает правило, в соответствии с которым вместо левой части подставляется вычисленная правая часть. При этом правая часть вычисляется в момент

    вызова функции Rule. Если правую часть нужно вычислять в момент применения правила, то нужно вызвать не функцию Rule, а функцию RuleDelayed, вызов которой можно записать в виде левая часть :> правая часть.



    Клеточные автоматы



    Клеточные автоматы



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

    Чтобы увидеть все это на экране, нам понадобится предварительно познакомиться с несколькими функциями. Функция CellularAutomaton [правило, начальная конфигурация, число шагов] генерирует представление (список) конфигурации, в которую переходит начальная конфигурация после указанного числа шагов в соответствии с заданным правилом. Функция Raster [{{а11, а12, ... }, ... }] является двухмерным графическим примитивом, который представляет прямоугольный массив ячеек в градациях серого. (Состояние клетки удобно изображать определенным цветом или градацией серого.) Вот пример.



    Новый вид науки



    Новый вид науки



    Боюсь, я несколько превысил отведенный мне лимит времени, хотя и не успел полностью познакомить вас ни со всей Математикой, ни со всеми функциями системы Mathematica. Памятуя опыт Никола Бурбаки, я и не ставил перед собой такой задачи. Просто я хотел показать, что с помощью пятистрочечных программ, написанных на языке системы Mathematica, школьники, студенты, аспиранты, инженеры и научные сотрудники самых разных профилей могут успешно решать свои задачи. И если вы готовы идти дальше и применять систему Mathematica в своей работе, — я достиг цели, поставленной перед написанием этой книги. Жаль, конечно, что нет такой одной универсальной книги, в которой была бы изложена вся-вся Математика. Даже в этой тоненькой книжечке были затронуты вопросы, о которых пятитомная Математическая энциклопедия даже не упоминает. И уж тем более это справедливо для пятитомного (в семи книгах!) курса высшей математики, написанного В. И. Смирновым. Хотя многотомное собрание сочинений Бурбаки является, вероятно, одним из наиболее полных, и оно не может рассматриваться как абсолютно полное. Впрочем, в качестве одной из наиболее полных, если не самой полной, энциклопедий математики можно рассматривать, на мой взгляд, и систему Mathematica. (Конечно, она и неполна, и многотомна. Ведь ядро, хотя и расширяется от версии к версии, охватывает далеко не все разделы математики. Дополнительные сведения содержатся в пакетах.) Но это не простая, а активная энциклопедия: она не просто выдает информацию, а выполняет необходимые действия (вычисления, например). Как и при использовании любой другой, при применении этой энциклопедии требуется определенная подготовка, — из этой книги вы почерпнули необходимые начальные сведения. В отношении удобства пользования система Mathematica уникальна: ею систематически пользуется сам автор — Стив Вольфрам! Более того, именно с ее помощью Стив Вольфрам открыл новый вид науки! Как это случилось? Как и все сложное, очень просто. Стив начал искать ответ на вопрос: почему простые объекты могут образовывать сложную конструкцию и насколько сложным может быть поведение простых систем?



    и есть условие устойчивости точки



    Пример 10

    и есть условие устойчивости точки

    Это и есть условие устойчивости точки х*.

    Будем дальше увеличивать параметр r. Поведение системы снова изменится: в последовательности {хn}, начиная с достаточно больших и, будут чередоваться числа, близкие к некоторым двум числам я, и а2. (Точнее говоря, последовательность устроена так, что x2n+1->a1, х2n+1->n2 при n->?) Эти числа связаны соотношениями а1 = f(а2), а2 = f(а1). Иными словами, в этом случае отображение хn+1 = rхn(1—хn) имеет устойчивый цикл с периодом 2. Обозначим этот цикл 52. Наличие цикла S* в нашей модели означает, что численность популяции будет меняться с периодом в 2 года.

    Выясним, как выглядят циклы на графике. Для этого определим программу cobwebPlot.

    Сначала протестируем эту программу.



    Пример 11

    Сначала протестируем эту программу.
    Сначала протестируем эту программу.

    Теперь нарисуем картинку для случая



    Пример 12

    Теперь нарисуем картинку для случая
    Теперь нарисуем картинку для случая г = 1.

    Теперь нарисуем картинку для случая



    Пример 13

    Теперь нарисуем картинку для случая
    Теперь нарисуем картинку для случая г = 2.

    как выглядит двойной цикл



    Пример 14

    как выглядит двойной цикл
    Наконец, выясним, как выглядит двойной цикл (цикл с периодом 2).

    Переход от неподвижной точки, которую



    Пример 15

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

    опять изменяется. Возникает цикл S4:



    Пример 16

    опять изменяется. Возникает цикл S4: cтала больше 1.

    При дальнейшем увеличении г поведение последовательности {хn} опять изменяется. Возникает цикл S4: х4n->а1, x4n+1->a2, х4n+1->a3> x4n+3->а4 ПРИ n->?, причем а2 = f(a1), а3=f(a2), аn =f(an). Численность популяции начинает колебаться с периодом в 4 года.

    и это еще не все.



    Пример 17

    и это еще не все.
    Но и это еще не все. Приведем еще несколько примеров поведения наших последовательностей.

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



    Пример 18

    Последовательно увеличивая значение параметра, мы
    Последовательно увеличивая значение параметра, мы увидим циклы S8, S16, S32 и т.д. При этом каждый раз цикл S2 теряет устойчивость, и устойчивым становится цикл S2 . Наконец, при некотором значении г (его иногда обозначают г„) формула xn+1 = rхn(1-хn) дает уже непериодическую последовательность {xn}.

    Полученная нами картина оказалась очень интересной. Во-первых, в поразительно простой модели хn+1 = rхn(1-хn) заложено очень сложное поведение. Во-вторых, в ней удается проследить большое количество бифуркаций, приводящих к усложнению решения. Сделать это в более сложных моделях гораздо труднее. Как это ни удивительно, но пока встречались только циклы, период которых равен степени 2.

    Чтобы понять, чем это вызвано, и изучить поведение модели более подробно, наряду с функцией f(x) удобно рассмотреть отображение f(f(х)), обозначаемое далее через f2(х), и вообще положить fn+l(x) =f(fn(x)), считая, конечно, что f(n) =f(х).

    Построим график f(x).

    Вот нужные нам определения.

    f[х_,r_]:=г*х*(1-х); ff[x_,r_,n_]:=Module[{t=x},Do[{t=f[x,r],x=t},{n}];t]

    Сначала рассмотрим случай устойчивой неподвижной точки. Вот что получим для случая г = 3.

    Теперь рассмотрим случай устойчивого цикла



    Пример 19

    Теперь рассмотрим случай устойчивого цикла
    Теперь рассмотрим случай устойчивого цикла S2.

    Вот как все это выглядит



    Пример 1

    Вот как все это выглядит
    Вот как все это выглядит на графике.

    особенно при большом числе клеток,



    Пример 1

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

    х во всех неподвижных точках



    Пример 20

    х во всех неподвижных точках
    График функции f(x) пересекается с прямой у = х во всех неподвижных точках отображения / (ведь для любой неподвижной точки х отображения f имеем f2(х*) = f(f(x')) = f(x') = (х'), а также в точках, принадлежащих циклам 52 (потому что а2 = f(a1) = f(f(a2)) и а1 = f(a2) = f(f(f()))- Увеличивая параметр r, мы растягиваем функцию f(x) вдоль оси у. И если при некотором значении г линии у = х и у = fix) пересекаются в одной точке, то с увеличением г могут появиться еще две точки пересечения. Они-то и будут определять цикл S2.

    Таким образом, переход от 51 к 52 в отображении f(x) обусловлен тем, что в отображении f (х) одна из неподвижных точек теряет устойчивость и в ее окрестности появляются две новые устойчивые неподвижные точки. Здесь вновь происходит бифуркация. Рассматривая функции f4(х), fn(x) и так далее, можно посмотреть, как происходят следующие удвоения.

    Пример 21



    Пример 21

    Пример 21

    можно понять не только качественные,



    Пример 22

    можно понять не только качественные,

    На примере модели хn+1 = rхn(1- хn) можно понять не только качественные, но и удивительные количественные закономерности. Чтобы проследить за ними, построим график х(r): по оси х будем откладывать х1, х2, ..., лежащие на устойчивом цикле, по оси г — значения параметра. Циклу S* будут соответствовать две точки на одной вертикали, циклу S1 — четыре и т.д. Тогда получим ранее приведенный график, отражающий усложнение устойчивых циклов в отображении хn+1 = rхn(1-хn), происходящее в результате бифуркаций удвоения периода.

    Обозначим через R1, R2, R}, ... те значения параметра г, в которых происходили удвоения, а через r1, r2, г3, ... — значения параметра, при которых х= 1/2 является элементом цикла S2, S4, Ss и т. д. Введем также величины d1, d2, ..., dn, .., равные расстоянию между х = 1/2 и ближайшим к нему элементом цикла S2 при r = rn. Расчеты показали, что числа f(x) и rn при больших и ведут себя как геометрическая прогрессия со знаменателем a = 4,6692016... Другими словами,

    также имеет предел, равный



    Пример 23

    также имеет предел, равный и отношение

    dn/dn+ 1 также имеет предел, равный некоторому числу а, причем а = 2,5029078...

    Что будет, если вместо функции хn+1 = rхn(1—хn) взять любую другую симметричную функцию, которая имеет на отрезке [О, 1] один максимум и около вершины близка к квадратичной параболе. Пусть в ней также происходит бесконечная последовательность бифуркаций удвоения при изменении некоторого параметра. Оказалось, что в любой такой модели числа а и 5S будут одними и теми же! Более того, независимо от вида функции предел lim(-a)nf2n[(x-0,5)/(-a)n,rn] существует и будет одной и той же универсальной функцией, обозначаемой часто через g0(х).

    Эти удивительные закономерности были обнаружены и поняты американским математиком М. Фейгенбаумом в 1978 году. В силу универсальности чисел а и 5 и функции g0(x), a также других функций такого типа эту теорию называют теорией универсальности.

    Что же означают эти результаты?

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

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

    Теория Фейгенбаума приводит к парадоксальному выводу: между хаосом и порядком есть глубокая внутренняя связь. Непериодический, случайный процесс возникает как предел все более сложных структур (циклов S2n). Хаос возникает как сверхсложная организация (цикл S2 )! Этот вывод является очень общим: он может относиться к моделям экологии, гидродинамике — к любым системам, где есть последовательность бифуркаций удвоения периода.

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

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

    Вот теперь действительно есть чему



    Пример 2

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

    Конечно, здесь проведены вычисления только дляr = 3,83, а нам нужно провести вычисления для разных r. Давайте проведем их для 250 значений г, равномерно распределенных между r = 2,8 и r = 4,0.

    t1=Table[{r,x[r][n]},{r,2.8,4,1.2/249},{n,101,300}];

    Здесь для каждого из 250 значений г строится список хn для n- 101, ..., 300. Вот что получается (конец опущен).

    это уже нечто вроде приглашения



    Пример 2

    это уже нечто вроде приглашения
    - это уже нечто вроде приглашения в театр, где актерами будут клеточные автоматы. Но вначале увертюра. Нам понадобится еще одна функция.

    Чтобы построить график, этот список



    Пример 3

    Чтобы построить график, этот список
    Чтобы построить график, этот список нужно сделать плоским:

    toshow=Flatten[t1,1);

    Теперь список будет иметь вид (конец опущен)

    {{2.8,0.642857},{2.8,0.642857},{2.8,0.642857},{2.8,0.642857}, {2.8,0.64 2857},{2.8,0.642857},{2.8,0.642857},{2.8,0.642857},

    и мы можем построить график, наглядно демонстрирующий поведение последовательности {*„} при различных значениях параметра г в отображении хn+1= rхn(1-хn).

    Теперь используем правило 481,



    Пример 3

    Теперь используем правило 481,
    Теперь используем правило 481, и занавес поднят!

    Из графика видно, насколько сложно



    Пример 4

    Из графика видно, насколько сложно
    Из графика видно, насколько сложно зависит поведение популяции от r.

    Еще раз обратим внимание на простенькую формулу хn+1 = rхn(1-хn). При небольших г (0

    здесь мы видим только конечный



    Пример 4

    здесь мы видим только конечный
    Естественно, здесь мы видим только конечный результат. Давайте теперь посмотрим, как эволюционирует Вселенная с одним единственным атомом (число 1), окруженным пустотой (нулями) по правилу 30. Вот начальное состояние:

    Теперь рисуем график, чтобы представить



    Пример 5

    Теперь рисуем график, чтобы представить
    Теперь рисуем график, чтобы представить поведение последовательности хn при n->?.

    А вот та же Вселенная



    Пример 5

    А вот та же Вселенная
    А вот та же Вселенная через три секунды (секунда = 1 шаг):

    то все значения х„ лежат



    Пример 6

    то все значения х„ лежат
    Из рисунка видно, что хn->0 при n->?.

    Из формулы хn+1 = rхn(1-хn) следует, что функция f(x) переводит отрезок [0, 1] в отрезок [0, r/4]. Если r<4, то все значения х„ лежат на отрезке [0, 1] при условии, что 0<х<1. Так что формула хn+1 = rхn(1—хn) задает отображение отрезка [=, 1] в себя.

    Пусть теперь r немного больше 1, например r = 2.

    для удобства наблюдателей, приведен негатив



    Пример 6

    для удобства наблюдателей, приведен негатив
    Здесь, правда, для удобства наблюдателей, приведен негатив Вселенной, притом перевернутый!

    Отвечая на вопрос Наполеона о необходимости Создателя, можно сказать, что если у этой Вселенной и был Создатель, то им был Стив Вольфрам!

    Несомненно, самым известным двухмерным клеточным автоматом является игра "Жизнь", придуманная Джоном Конвеем в 1970 году. Именно она прославилась своими многочисленными узорами и способностью заставлять людей тратить уйму машинного времени на поиски еще более интересных узоров! В этой игре с очень простыми правилами есть все: катапульты, ружья, паровозы, планеры, циклы, пожиратели планеров, крокодилы, стационары, семафоры и аннигиляция. Крокодил, например, является пожирателем планеров, поскольку он проглатывает планер без всякого ущерба для себя. С помощью функции CellularAutomaton вы можете разыграть захватывающие сценки из этой Вселенной!

    А если клетки в придуманной вами Вселенной будут достаточно малыми, а процесс эволюции — достаточно длительный (например, 80 шагов), вы можете увидеть самоподобные конфигурации, и тогда вспомните о фракталах, множествах Мандельброта и Жулиа! Для обстоятельного разговора о них, конечно, нужна отдельная книга, и, возможно, не одна. Ну а мы, кратко обсудив в главе 1 применение системы Mathematica к изучению фракталов, теперь завершили своеобразный цикл 5" (очень редкий — с нечетным показателем!), ведь эта глава — одиннадцатая. И последняя — в этой книге. И если ваше знакомство с системой Mathematica продолжится, я считаю, вы прочли эту книгу недаром. Ну а сейчас пришло время сказать, как это знакомство продолжить. Иными словами, сейчас я собираюсь вкратце перечислить хотя бы некоторые ресурсы по системе Mathematica и по ходу дела указать на то, что осталось "за кадром".

    к постоянному, отличному от нуля,



    Пример 7

    к постоянному, отличному от нуля,
    Видим, что при этом значении г последовательность {хn} ведет себя по-другому: хn стремится к постоянному, отличному от нуля, значению хn при n—>?. В применении к исходной биологической задаче это означает, что численность такого вида по прошествии нескольких лет стабилизируется и перестанет меняться со временем.

    Значение х* может быть найдено из уравнения х* = f(x*).

    Все точки, удовлетворяющие этому уравнению, являются неподвижными точками функции f, так как если х, = х', то и х2 = х', хn = х' при любом n.

    При r<1 квадратное уравнение х=rх(1- х) имеет один неотрицательный корень х=*0. При t->1 неотрицательных корня два: х* = 0 nх* = (t-1)/r. При r= 1 происходит бифуркация: неподвижная точка х' = 0 теряет устойчивость, а вновь появившаяся точка становится устойчивой.

    Можно довольно просто определить, будет ли устойчивой неподвижная точка х отображения f[x]. Пусть х„ = х + ?хn, где ?хn — малое число. Если точка устойчива, то с ростом n величина |?хn| должна уменьшаться. Перепишем формулу хn+1 = f(xn, r) в виде

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



    Пример 8

    в последнем равенстве опустить член
    Если в последнем равенстве опустить член о(?хn), то полученное приближенное равенство будет выполняться тем точнее, чем меньше ?хn (мы пренебрегли членами, пропорциональными (?хn)2, (?хn)3 и т.д.). Поскольку x* = f(x), то

    И для того чтобы



    Пример 9

    И для того чтобы

    И для того чтобы ?хn+1->0 при n->?, должно выполняться неравенство

    Система Mathematica может помочь решать



    Резюме

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

    Теория универсальности или насколько сложным может быть поведение простой динамической системы



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



    Возможно, заголовок кажется вам заумным. Может быть, это просто оттого, что вы никогда не слышали о динамических системах. Не беспокойтесь, все очень просто: в данном случае под динамической системой понимается любая система, в которой некоторый параметр определяется рекуррентным уравнением хn+1 =f(xn, r). В частности, под динамической системой можно понимать числовую последовательность, определяемую таким уравнением. Где встречаются такие последовательности? Да почти повсюду. Вот простейший пример.

    Допустим, нас интересует изменение численности какого-либо вида животных в определенном районе. Один раз в год мы считаем их и получаем число х. По этим данным можно построить последовательность x1, х2 ..., хn, ... (n = 1 соответствует первому измерению). Логично предположить, что среди этих чисел есть какая-то закономерность. Естественно ожидать, что численность популяции в (n+1)-й год хn+1 зависит от того, сколько животных было год назад, т. е. от величины хn. Поэтому в простейшем случае хn+1 = f(xn, r).

    Здесь f— непрерывная функция; r— некий параметр, который зависит от биологических особенностей рассматриваемого вида. В популяционной генетике часто предполагается, что хn+1 = rxn(N-xn).

    Эта формула показывает, что численность вида быстро растет, пока она мала (xn
    Что же будет происходить с различными видами (т.е. с последовательностями хn+1 = rхn(1— хn) с различными r) по прошествии достаточно долгого времени? Чтобы ответить на этот вопрос для нашей простейшей модели, достаточно выяснить, как будет вести себя последовательность {хn} при различных значениях г. Давайте проведем численный эксперимент. Сначала дадим нужные нам определения.

    х[r_][0]=0.5; x[r_][n_]:=x[r1[n]=r х[r][n-1]<1-х[r][n-1])

    Таким образом, мы задали начальный член последовательности х0 = 0,5. Теперь положим, r = 3,83, и вычислим первые пятьдесят членов последовательности.



    

        Сайт: Аннимация - Видео - Графика