Одно из достоинств системы MatLab – обилие средств графики, начиная от команд построения простых графиков функций одной переменной в декартовой системе координат и кончая комбинированными и презентационными графиками с элементами анимации, а также средствами проектирования графического пользовательского интерфейса (GUI).
Для отображения функций одной переменной у(х) используются графики в декартовой (прямоугольной) системе координат. При этом обычно строятся две оси – горизонтальная X и вертикальная Y, и задаются координаты х и у, определяющие узловые точки функции у(х). Поскольку MatLab – матричная система, совокупность точек у(х) задается векторами X и Y одинакового размера.
Команда plot (X, Y) служит для построения графиков функций в декартовой системе координат, координаты точек (х, у) берутся из векторов одинакового размера Y и X. Если X или Y – матрица, то строится семейство графиков по данным, содержащимся в колонках матрицы.
Функция plot имеет различные формы, связанные с входными параметрами, например plot(y) создает кусочно-линейный график зависимости элементов y от их индексов. Если в качестве аргументов заданы два вектора, то plot(x,y) создаст график зависимости y от x. Например, для построения графика функции sin в интервале от 0 до 2π, сделаем следующее
Программа построила график зависимости, который отображается в окне Figure 1 (рис. 2.1).
Рисунок 2.1 – График зависимости y=f(x) построенный функцией plot(x,y)
Приведеный ниже пример иллюстрирует построение графиков двух функций – sin(x) и cos(x), значения которых содержатся в матрице Y, а значения аргумента xсохраняются в векторе Х:
» х = [0 1 2 3 4 5];
» Y = [sin(x) cos(x)];
» plot(x, Y)
На рис. 2.2 приведен график функци для этого примера. На нем четко видно,что графики складываются из отрезков.
Рисунок 2.2 − Графики двух функций в декартовой системе координат
Для того, чтобы функция была непрерывной линей, следует увеличить количество узловых точек, например задать x = 0 : 0.01 : 5 (рис. 2.3).
Рисунок 2.3 − График непрерывной функции
Командаplot(y) – строит график y(n), где значения аргумента n это индексы элементов вектора y, a ось абсцисс представляет собой соответсвующий элемент. Если yсодержит комплексные элементы,то выполняется команда plot(real(y), imag(y)). Пример использования команды plot(y):
» х = 2*pi : 0.02*pi : 2*pi;
» y = sin(x) + i*cos(3*x);
» plot(y)
Соответствующий график приведен на рис. 2. 4.
Рисунок 2.4 − График функции, который изображает вектор y с комплексними элементами
Для этого создадим М-файл, который вычисляет значения этих функций:
function y = myfun(x)
% Вычисление двух функций
% y(1) = 200 sin(x)/x, y(2) = x2.
y(:,1) = 200*sin(x) . / x;
y(:,2) = x . 2;
Теперь построим графики этих функций в интервале [-20 20] с разбиением интервала минимум на 50 частей и так, чтобы <приращение угла> не превышало 2. Результат изображен на рис. 2.5.
» fplot('myfun', [-20 20], 50, 2), grid
» set(gcf,'color','white'); title('Графік функции "MYFUN"')
Команда plot(X, Y, S) аналогична команде plot(X, Y), но тип линии графика можно задавать с помощью строковой константы S.
Значениями константы S могут быть следующие символы, которые приведены в табл. 2.1.
Таблица 2.1 – Задание типа линии
Маркер типа линии
Маркер
Тип линии
-
Непрерывная
--
Штриховая
:
Пурктирная (точками)
-.
Штрих-пунктирная
Маркер цвета графика
Маркер
Цвет графика
c
Голубой
m
Фиолетовый
y
Желтый
r
Красный
g
Зеленый
b
Синий
w
Белый
k
Черный
Тип проставляемой точки
Маркер
Тип точки
.
Точка
+
Плюс
*
Звездочкой
о
Кружком (указывается латинская буква о)
х
Крестиком (указывается латинская буква x)
Таким образом, с помощью строковой константы S можно изменять цвет линии, представлять узловые точки различными отметками (точка, окружность, крест, треугольник с разной ориентацией вершины и т. д.) и менять тип линии графика.
Команда рlot(X1, Y1, S1, Х2, Y2, S2, ХЗ, Y3, S3,...) строит на одном графике ряд линий, представленных данными вида (X, Y, S), где X и Y – векторы или матрицы, a S — строки. С помощью такой конструкции возможно построение, например, графика функции линией, цвет которой отличается от цвета узловых точек. При отсутствии указания на цвет линий и точек он выбирается автоматически из таблицы цветов (белый исключается). Если линий больше шести, то выбор цветов повторяется.
Рассмотрим пример построения графиков трех функций с разными стилями представления каждого из них (рис. 2.6):
Из рисунка видно, что график функции y1 строится сплошной линией, график у2 строится пунктирной линей с маркерами в виде знака “плюс”, а график у3 строится штриховой линией с кружочками.
Рисунок 2.6 − Вид трех функций на одном графике с разными стилями линий
Для построения графика в полярной системе координат используется функция polar.
Рассмотрим пример построения графиков в полярной системе координат (рис. 2.7):
phi=0:0.001:2*pi;
>> z=sin(3*phi);
>> polar(phi,z)
Рисунок 2.7 − Вид функции в полярной системе координат
Трехмерные поверхности обычно описываются функцией двух переменных z(x, у). Специфика построения трехмерных графиков требует не просто задания ряда значений х и у, т. е. векторов х и у. Она требует определения для X и Y двумерных массивов – матриц.
Для создания таких массивов служит функция meshgrid. В основном она используется совместно с функциями построения графиков трехмерных поверхностей. Функция meshgrid записывается в следующих формах:
– [X,Y,Z] = meshgrid(x, y, z) – возвращает трехмерные массивы, используемые для вычисления функций трех переменных и построения трехмерных графиков;
– [X,Y] = meshgrid(x, y) — преобразует область, заданную векторами х и у, в массивы X и Y, которые могут быть использованы для вычисления функции двух переменных и построения трехмерных графиков. Строки выходного массива X являются копиями вектора х, а столбцы Y — копиями вектора у.
Команда plot3(...) является аналогом команды plot(...), но относится к функции двух переменных z(x, у). Она строит аксонометрическое изображение трехмерных поверхностей и представлена следующими формами:
– plot3(x, y, z) — строит массив точек, представленных векторами х, у и z, соединяя их отрезками прямых. Эта команда имеет ограниченное применение;
– plot3(X, Y, Z, S) – обеспечивает построения со спецификацией стиля линий и точек;
– plot3(x1, y1, z1, s1, х2, у2, z2, s2,...) – строит на одном рисунке графики нескольких функций z1(x1,y1), z2(x2,y2) и т. д. со спецификацией линий и маркеров каждой из них.
Наиболее наглядными являются сетчатые графики поверхностей с заданной или функциональной окраской. В названии их команд присутствует слово mesh. Имеются три группы таких команд:
– mesh(X, Y, Z, C) – выводит в графическое окно сетчатую поверхность Z(X,Y) с цветами узлов поверхности, заданными массивом С;
– mesh(X, Y, Z) – аналог предшествующей команды при C = Z.
Ниже приводится пример применения команды mesh:
>> [X, Y]=meshgrid([-3:0.15:3]);
>> Z=X.^2+Y.^2;
>> mesh(X, Y, Z)
Рисунок 2.8 – График поверхности, созданный командой mesh(X,Y,Z)
После того как график уже построен, MatLab позволяет выполнить его форматирование или оформление в нужном виде. Для установки над графиком титульной надписи используется следующая команда title('string') – установка на двумерных и трехмерных графиках титульной надписи, заданной строковой константой 'string'.
Для установки надписей возле осей х, у и z используются следующие команды: xlabel('String'), ylabel('String'), zlabel('String').
Рисунок 2.9 – Установка надписей с использованием команды:
Часто возникает необходимость добавления текста в определенное место графика, например для обозначения той или иной кривой графика. Для этого используется команда text:
– text(X,Y, 'string') – добавляет в двумерный график текст, заданный строковой константой 'string', так что начало текста расположено в точке с координатами (X, Y). Если X и Y заданы как одномерные массивы, то надпись помещается во все позиции [x(i), y(i)];
– text(X,Y, Z, 'string') – добавляет в трехмерный график текст, заданный строковой константой 'string', так что начало текста расположено в позиции, заданной координатами X, Y и Z.
Очень удобный способ ввода текста предоставляет команда gtext:
– gtext('string') – задает выводимый на график текст в виде строковой константы 'string' и выводит на график перемещаемый мышью маркер в виде крестика. Установив маркер в нужное место, достаточно щелкнуть любой кнопкой мыши для вывода текста.
Пояснение в виде отрезков линий со справочными надписями, размещаемое внутри графика или около него, называется легендой. Для создания легенды используются различные варианты команды legend:
legend(stringl, string2,…, strings) – добавляет к текущему графику легенду в виде строк, указанных в списке параметров (рис. 2.10);
>> legend('график')
Рисунок 2.10 – График с пояснениями
legend (Pos) — помещает легенду в точно определенное место, специфицированное параметром Pos:
Pos = 0 – лучшее место, выбираемое автоматически;
Pos = l – верхний правый угол;
Pos = 2 – верхний левый угол;
Pos = 3 – нижний левый угол;
Pos = 4 – нижний правый угол;
Pos = -l – справа от графика.
При добавлении легенды следует учесть, что порядок и количество аргументов командыlegend должны соответствовать порядку вывода графиков и их количеству.
Обычно графики выводятся в режиме автоматического масштабирования. Следующие команды класса axis меняют эту ситуацию:
–axis([XMIN XMAX YMIN YMAX]) – установка диапазонов координат по осям х и у для текущего двумерного графика;
–axis([XMIN XMAX YMIN YMAX ZMIN ZMAX]) – установка диапазонов координат по осям х, у и z текущего трехмерного графика;
– axis auto – установка параметров осей по умолчанию.
При построении графиков в дополнение к разметке осей часто используют масштабную сетку. Команды grid позволяют задавать построение сетки или отменять это построение:
–gridon – добавляет сетку к текущему графику;
–grid off – отключает сетку.
Во многих случаях желательно построение многих наложенных друг на друга графиков в одном и том же окне. Для этого служит команда продолжения графических построений hold. Она используется в следующих формах:
–hold on – обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже существующим;
–hold off – отменяет режим продолжения графических построений.
Бывает, что в одном окне надо расположить несколько координатных осей с различными графиками без наложения их друг на друга. Для этого используются команды subplot, применяемые перед построением графиков:
–subplot(m, n, p) – разбивает графическое окно на m×n подокон, при этом m – число подокон по горизонтали; n – число подокон по вертикали, а р – номер подокна, в которое будет выводиться текущий график (подокна отсчитываются последовательно по строкам).
Проиллюстрируем работу функции subplot (см рис. 2.11):
>> subplot(3, 2, 1); plot (x,y);
>> subplot(3, 2, 4); plot (x,y);
>> subplot(3, 2, 5); plot (x,y);
Рисунок 2.11 – Работа функции subplot
Было сформировано три строки и два столбца полей для вывода графиков. Обращение к каждому конкретному полю происходит с указанием его номера. Нумерация происходит слева направо и снизу вверх.