Двумерная графика
Концептуально графики в системе Mathematica являются графическими объектами, которые создаются (возвращаются) соответствующими графическими функциями. Их немного, около десятка, и они охватывают построение практически всех типов математических графиков. Как уже отмечалось, достигается это за счет применения опций и директив.
Поскольку графики являются объектами, то они могут быть значениями переменных. Поэтому Mathematica допускает следующие конструкции:
Начнем рассмотрение графических возможностей системы с построения простейших графиков функций одной переменной вида у =f(x) или просто f(x). График таких функций строится на плоскости, то есть в двумерном пространстве. При этом используется прямоугольная (декартова) система координат. График представляет собой геометрическое положение точек (х, у) при изменении независимой переменной (абсциссы) в заданных пределах, например от минимального значения xmin до максимального хтах с шагом dx. По умолчанию строятся и линии координатной системы.
Для построения двумерных графиков функций вида f(x) используется встроенная в ядро функция Plot:
Функция Plot используется для построения одной или нескольких линий, дающих графическое представление для указанных функций f, f1, f2 и т. д. На рис. 8.1 показано построение графика функции sin(x)/x без использования каких-либо опций (точнее, с набором опций по умолчанию).
Рис. 8.1. Построение двумерного графика
Тут виден как раз тот случай, когда масштаб графика по вертикали выбран системой неудачно — часть графика сверху просто отсекается. В большинстве же случаев применение функции Plot позволяет получить вполне «удобоваримый» график.
По мере усложнения задач, решаемых пользователем, его рано или поздно перестанут устраивать графики, получаемые при автоматическом выборе их стиля и иных параметров. Для точной настройки графиков Mathematica использует специальные опции графических функций Для вывода их списка надо использовать команду Options [Plot]. Полный список опций дан в приложении.
Опции внутри.графических функций задаются своим именем name и значением value в виде
name -> value
Наиболее распространённые символьные значения опций:
Многие опции могут иметь числовые значения. В сомнительных случаях рекомендуется уточнять форму записи опций и их значений по оперативной справочной смстеме. Рассмотрим примеры применения опций двумерной графики.
Мы уже отметили неудачный выбор масштаба в случае, представленном на рис. 8.1. Очевидно, этот недостаток графика легко исправить, введя коррекцию масштаба по оси у. Это и сделано в примере, показанном на рис. 8.2. Для изменения масштаба использована опция PlotRange->{ -.25,1.2}. Нетрудно догадаться, что эта опция задает пределы отображения графика по вертикали от -0.25 до 1.2.
Рис. 8.2. График функции sin(x)/x с масштабом, дающим его отображение в полном виде
По умолчанию система строит графики, не указывая надписей ни по осям координат (кроме букв х и г/), ни в верхней части графика. Такая надпись на графике по центру сверху называется титульной. Рисунок 8.3 показывает построение графика с надписями у координатных осей. Для создания таких надписей используется опция Axes Label. После нее указывается список, содержащий две надписи — одну для оси х, вторую — для оси у. Надписи указываются в кавычках. Таким образом, задание опции выглядит следующим образом: AxesLabel-> {"X value","f(x)}.
Рис. 8.3. График с надписями по координатным осям
С помощью опции Axes со значением None можно убрать с графика отображение осей. Вид получающегося при этом графика показан на рис. 8.4. При его построении, кроме удаления осей, использована опция PlotLabel для вывода указанной в качестве ее значения титульной надписи.
Рис. 8.4. График без координатных осей, но с титульной надписью
Часто возникает необходимость построения на одном рисунке нескольких графиков одной и той же функции, но при разных значениях какого-либо параметра — например, порядка специальных математических функций. В этом случае они могут быть заданы в табличной форме. Рисунок 8.5 дает пример построения пяти графиков функций Бесссля.
Рисунок 8.5 иллюстрирует недостаток одновременного представления нескольких графиков, создаваемого по умолчанию, — все графики построены одинаковыми линиями, и не сразу ясно, какой график к какой функции относится. Рисунок 8.6 показывает возможности управления стилем линий (густотой черного цвета) графиков с помощью опции PlotStyle. Если желательно выделение линий разными цветами, удобно использовать в качестве значения опции PlotStyle список вида {Hue [cl] , Hue [с2] ,...}, где параметры c1, с2, ... выбираются от 0 до 1 и задают цвет соответствующей кривой.
Рис. 8.5. Семейство функций Бесселя на одном графике
Риc. 8.6. Построение графиков линиями разного стиля
Применение других опций позволяет задавать массу свойств графиков, например цвет линий и фона, вывод различных надписей и т. д. Помимо представленных примеров, полезно просмотреть и множество примеров построения двумерных графиков, приведенных в справочной системе Mathematica.
Еще одним важным средством настройки графиков являются графические директивы. Синтаксис их подобен синтаксису функций. Однако директивы не возвращают объектов, а лишь влияют на их характеристики. Используются следующие основные директивы двумерной графики:
Рисунок 8.7 показывает построение графика функции Бесселя в виде пунктирной линии. Она задается с помощью графической директивы Dashing.
Риc. 8.7. Построение графика функции Бесселя с применением графической директивы Dashing
Применение графических директив совместно с опциями позволяет создавать графики самого различного вида, вполне удовлетворяющие как строгим требованиям, так и различным «извращениям» в их оформлении.
Построение графика по точкам — функция List Plot
Часто возникает необходимость построения графика по точкам. Это обеспечивает встроенная в ядро графическая функция ListPlot:
В простейшем случае (рис. 8.8) эта функция сама задает значения координаты х= 0, 1, 2, 3, ... и строит на графике точки с координатами (х, у), выбирая у последовательно из списка координат.
Рис. 8.8. Построение графика по точкам
Можно заметить характерный недостаток построений — точки (особенно при небольшом размере) имеют вид, заметно отличающийся от идеального круга. Функция ListPlot, особенно в ее второй форме (с заданными координатами х и г/), удобна для вывода на график экспериментальных точек.
Получение информации о графических объектах
Порой некоторые детали построения графиков оказываются для пользователя неожиданными и не вполне понятными. Причина этого кроется во множестве опций, которые могут использоваться в графиках, причем в самых различных сочетаниях. Поэтому полезно знать, как можно получить информацию о свойствах графических объектов. Порой небольшая модификация опций (например, замена цвета линий или фона) делает график полностью удовлетворяющим требованиям пользователя. Информацию об опциях графического объекта g дают следующие функции:
Пусть задан графический объект g: g:=Plot[Sin[x],{х,-10,10}]
Ниже представлено получение упрощенного списка опций этого графического объекта:
Options[g]
{PlotRange -> Automatic, AspectRatio ->1/GoldenRatio,
DisplayFunction :> $DisplayFunction, ColorOutput -> Automatic, Axes -> Automatic, AxesOrigin -> Automatic, PlotLabel -> None, AxesLabel -> None, Ticks -> Automatic, GridLines -> None, Prolog -> {}, Epilog -> {}, AxesStyle -> Automatic, Background -> Automatic, DefaultColor -> Automatic, DefaultFont :> $DefaultFont, RotateLabel -> True, Frame -> False, FrameStyle -> Automatic, FrameTicks -> Automatic!, FrameLabel -> None, PlotRegion -> Automatic, ImageSize -> Automatic, TextStyle :> $TextStyle, FormatType :> $FormatType}
Для получения полного списка опций вместе с их значениями можно использовать функцию FullOptions. Аналогично можно получить и иные данные — они не приводятся ввиду громоздкости выводимой информации. Анализ графиков с применением этих функций может оказаться весьма полезным при построении и редактировании сложных графиков.
Функции FullOptions и Options можно также использовать в следующем виде:
В этом случае можно получить информацию по отдельной опции.
Перестроение и комбинирование графиков
При построении графиков часто требуется изменение их вида и тех или иных параметров и опций. Этого можно достичь повторением вычислений, но при этом скорость работы с системой заметно снижается. Для ее повышения удобно использовать специальные функции перестроения и вывода графиков, учитывающие, что узловые точки уже рассчитаны и большая часть опций уже задана. В этом случае удобно использовать следующую функцию-директиву:
Директива Show полезна также и в том случае, когда желательно, не трогая исходные графики, просмотреть их при иных параметрах. Соответствующие опции, меняющие параметры графиков, можно включить в состав директивы Show. Другое полезное применение директивы — объединение на одном графике нескольких графиков различных функций или объединение экспериментальных точек и графика теоретической зависимости. Для этого также удобна функция Display-Together, которая будет описана при описании пакета расширения Graphics в уроке 14. В отличие от функции Show, она позволяет объединять графики без предварительного построения каждого из них.
Рисунок 8.9 показывает создание двух графических объектов g1 и g2 с отложенным выводом, а затем построение графиков функций и применение директивы Show для создания объединенного графика. В этом случае директива Show вначале строит исходные графики отдельно, а затем создает объединенный график. В приведенных ниже примерах оставлен только объединенный график, другие удалены командой меню Edit > Clear.
Рис. 8.9. Построение двух графических объектов и их объединение
Разумеется, при использовании директивы Show надо побеспокоиться о выравнивании масштабов графиков, налагаемых друг на друга. Полезно особо обратить внимание на возможность присваивания графиков функций переменным (в нашем примере — g1 и g2) в качестве значений. Такие переменные становятся графическими объектами, используемыми директивой Show для вывода на экран дисплея.
Директива Show часто применяется, когда надо построить на одном графике кривую некоторой функции и представляющие ее узловые точки (например, при построении кривых регрессии в облаке точек исходных данных).
Примитивами двумерной графики называют дополнительные указания, вводимые в функцию Graphics [primitives, options], которая позволяет выводить различные примитивные фигуры без задания математических выражений, описывающих эти фигуры. Примитивы могут выполнять и иные действия. Они заметно увеличивают число типов графиков, которые способна строить система Mathematica. Имеются примитивы для построения окружностей, эллипсов, кругов, овалов, линий и полигонов, прямоугольников и текстов. Полное описание примитивов дано в разделе приложения, посвященном данному уроку. Примитивы задаются подобно графическим функциям, например, Circle[{x, у}, r] строит окружность с радиусом г и центром в точке {х, у}.
Рисунок 8.10 показывает применение функции Graphics для построения одновременно трех графических объектов: отрезка прямой, заданного координатами его концевых точек, окружности с центром (0, 0) и радиусом 0.8 и текстовой надписи «Привет!». Каждый объект задан своим примитивом. Из-за искажения масштаба дисплеем компьютера окружность выглядит как эллипс.
Рис. 8.10. Построение трех графических объектов с помощью примитивов двумерной графики
На другом рисунке (рис. 8.11) представлено построение пятиугольника, заданного координатами его вершин.
Приведенные примеры поясняют технику применения графических примитивов. Но они, разумеется, не исчерпывают всех возможностей этого метода построения геометрических фигур и объектов. Все указанные примитивы используются при построении как двумерных, так и трехмерных графиков.
Рис. 8.11. Построение пятиугольника
Графики функций, заданных в параметрической форме
Построение графиков в полярной системе координат возможно двумя способами. Первый способ основан на использовании обычной декартовой системы координат. Координаты каждой точки при этом задаются в параметрическом виде: x = f x (t) и у = f y (t), где независимая переменная t меняется от минимального значения £ min до максимального t mах с шагом dt. Особенно удобно применение таких функций для построения замкнутых линий, таких как окружности, эллипсы, циклоиды и т. д. Например, окружность радиусом R может быть задана в следующей параметрической форме: х = R cos(t) и у = R sin(t), если t меняется от 0 до 2п. В общем случае радиус также может быть функцией параметра t.
Для построения параметрически заданных функций используются следующие графические средства:
Функции f x, f у и т. д. могут быть как непосредственно вписаны в список параметров, так и определены как функции пользователя.
Рисунок 8.12 показывает построение параметрически заданной фигуры Лиссажу. Она задается функциями синуса и косинуса с постоянным параметром R и аргументами, кратными t. Эти фигуры наблюдаются на экране электронного осциллографа, когда на его входы X и Y подаются синусоидальные сигналы с кратными частотами.
Рис. 8.12. Построение фигуры Лиссажу
На одном графике можно строить две и более фигур с заданными параметрически уравнениями. На рис. 8.13 показан пример такого построения — строятся две фигуры Лиссажу, причем одна из них является окружностью. Больше двух фигур строить нерационально, так как на черно-белом графике их трудно различить.
Теперь рассмотрим второй способ построения графиков в полярной системе координат (рис. 8.14). Здесь каждая точка является концом радиус-вектора R(t), причем угол t меняется от 0 до 2я. На рис. 8.14 функция R(t) задана как функция пользователя R[t_] с использованием образца t_ для задания локальной переменной t в теле функции.
Изменение параметра R позволяет заметно увеличить число отображаемых функций — фактически, их бесконечно много. Помимо описанной фигуры на рис. 8.14 дополнительно построена линия окружности единичного радиуса. Чтобы она имела правильные пропорции на экране, задана опция AspectRatio->l.
Рис. 8.13. Построение на одном графике двух фигур Лиссажу
Рис. 8.14. Построение графика функции в полярной системе координат