Основной графической функцией является функция plot:
plot(x) – зависимость элементов вектора от их порядковых номеров;
plot(x,y) – зависимость y(x);
plot(x,y1,x,y2) – зависимости y1(x) и y2(x) на одном графике;
plot(y1,y2) – параметрическая зависимость;
plot(x,y,S) – зависимость y(x), S – строковая переменная, которая определяет способы отображения линии графика и маркера, а также их цвет; она может включать до трех символов, например, ‘-*r’ – непрерывная линия с маркерами типа «звездочка», цвет красный; если цвет не назначен, то он выбирается по умолчанию: от синего до желтого.
Ниже приведен перечень следующих обозначений:
Тип линии:
Непрерывная –
Штриховая –
Двойной пунктир :
Штрихпунктирная -.
Тип маркера:
Точка .
Плюс +
Звездочка *
Кружок о
Крест х
Квадрат s
Ромб d
Пятигранник р
Шестигранник h
Стрелка вниз v
Стрелка вверх ^
Стрелка влево <
Стрелка вправо >
Цвет:
Синий b
Зеленый g
Красный r
Голубой с
Фиолетовый m
Желтый y
Белый w
Черный k
Зависимость элементов вектора от их номеров:
» x=pi*[0:0.01:2]; X=sin(x); plot(X), grid
где grid–координатная сетка на графике.
Формируем новый вектор Z, производя поэлементное умножение X (как массива) на Y:
» Y=cos(3*x); plot(x,X,x,Y), grid
Строим три графика в одной системе координат:
» Z=X.*Y; plot(x,X,x,Y,x,Z), grid
Строим параметрическую зависимость, исключая х. Получаем график фигуры Лиссажу, т.е. результат геометрического сложения гармонических колебаний, частоты которых находятся друг с другом в кратных соотношениях.
» plot(X,Y,’r’), title('Фигура Лиссажу'), grid
На этот график нанесено его название, цвет линии – красный.
Следующий вариант команды позволяет строить фигуры Лиссажу при произвольной кратности k, ввод значений которой организуется с помощью оператора input(приглашение имеет вид «к = > »).
Здесь графики отображаются в виде дискретных звездочек фиолетового цвета.
Используя операторы цикла, можно составить программу построения фигур Лиссажу при упорядоченном изменении кратности.
4.1.2. Функции fplot и ezplot
Функция fplotв наиболее общем случае имеет формат
fplot(‘<Имя функции>’,limits,tol,n,S),
где ‘<Имя функции>’ – имя m-файла или строка, вычисляемая функцией eval; – диапазоны изменения аргумента функции и ее значений; tol – допустимая относительная ошибка (по умолчанию 2e-3); n + 1 – число точек; S – строковая переменная, аналогичная применяемой в функции plot.
Примеры:
» fplot('sin(x)',pi*[0 2]), grid
» fplot('x.^3+3*x.^2-2',[-3 2]), grid
» fplot('x.^3+3*x.^2-2',[-3 2 -3 3]), grid
Особенностью функции ezplotявляется то, что интервал значений аргумента задан по умолчанию ( ), но может быть изменен; кроме того, на графике отображаются функциональная зависимость и независимая переменная по оси абсцисс. Диапазон изменения по оси ординат назначается автоматически. Сравните
» ezplot('sin(x)'), grid
» ezplot('sin(x)',pi*[0 4]), grid
и
» ezplot('x.^3+3*x.^2-2'), grid
» ezplot('x.^3+3*x.^2-2',[-3 2]), grid
4.1.3. Другие графические функции
Функция bar(столбцовая диаграмма):
bar(y,<ширина>,S)– вывод каждого элемента вектора Y в виде столбца; по умолчанию его ширина 0.8, но может быть изменена; S – строковый аргумент;
bar(x,y,<ширина>,S)–зависимость y(x);
barh– аналогичная функция, но столбцы выводит в горизонтальной ориентации.
В случае двухмерного массива может быть введен параметр <стиль> – ‘group’ или ‘stack’:
» x=-4:0.1:4; y=exp(-x.^2);
» bar(y)
» bar(y,0.4)
» bar(x,y,0.4)
» barh(x,y,0.4)
Пример построения двухмерной диаграммы:
» y=round(rand(5,4)*10);
» bar(y,'group')
» bar(y,'stack')
» barh(y,'group')
» barh(y,'stack')
Функция stem (дискретный график):
stem(y), stem(x,y)– элементы выводятся в виде вертикальных линий с маркером на конце (по умолчанию – кружок);
stem(…,<маркер>,S)– изменение типа маркера; S – строковый параметр (см. выше);
Здесь использован оператор pause (после вывода первого графика необходимо нажать клавишу Enter).
Функцияcomet («кометообразный» график). Система MATLAB дает возможность проследить процесс построения графика во времени, для чего используют функцию comet(<x>,y,<p>), которая отображает движение рисующей точки по траектории заданного графика; необязательный параметр р задает длину своеобразного «хвоста» графика (по умолчанию р = 0,10). Используем функцию, заданную в примере, приведенном выше:
» comet(phi,rho)
» comet(phi,rho,0.5)
Заметим, чем меньше шаг независимой переменной, тем медленнее (и нагляднее) происходит процесс построения графика. Введем новый шаг – 0,01 и сравним ход построения графика.
Весьма эффектно выглядит построение «кометообразного» пространственного графика, запускаемого с помощью демонстрационной программыlorenz.
Функцияpie–(«пирог») (круговая секторная диаграмма). Команда pie(y,v)отображает каждый элемент вектора в виде нормированного сектора диаграммы . В этой команде v – логический вектор, отделяющий ( ) или не отделяющий ( ) секторы, которым соответствуют ненулевые элементы.
Пример:
» y=5*rand(1,5);
» pie(y)
» v=[0 1 0 0 0]; pie(y,v)
При повторении команды генерируются разные диаграммы.
Если , то отображаются фактические значения элементов, и диаграмма получается незамкнутой. Это наглядно видно из следующего примера (выводятся как числовые значения элементов, так и соответствующие круговые диаграммы):
» for k=1:10, y=0.5*rand(1,4); pie(y), pause, end
Здесь использован цикл, тело которого заключено между служебными словами for и end; параметр цикла k задает число повторений вычислительной процедуры [2].
4.1.4. Дополнительные графические возможности
Для изменения масштаба по осям координат используют следующие функции: loglog(x,y) –логарифмический по обеим осям; semilogx(x,y) – полулогарифмический (логарифмический по оси абсцисси линейный – по оси ординат); semilogy(x,y)– логарифмический по оси ординат. Пример:
» x=pi*[0:0.05:6]; y=exp(-0.3*x).*abs(sin(x));
» plot(x,y), grid
» semilogx(x,y), grid
» semilogy(x,y), grid
» loglog(x,y), grid
Для изменения диапазонов значений x, y применяют функцию axis([xmin xmax ymin ymax]).
Продолжим предыдущий пример:
» plot(x,y), axis([0 2*pi 0 max(y)]), grid
» bar(x,y,0.1), axis([0 2*pi 0 max(y)]), grid
» bar(x,y,0.1), axis([0 2*pi 0 2*max(y)]), grid
Команда zoom on(отмена – zoom off) позволяет увеличивать отдельные участки графика с помощью мыши. Для этого участок выделяют прямоугольной рамкой при нажатой левой клавише мыши, а при отжатой участок отображается в графическом окне при соответствующих масштабах по осям. Однократный щелчок левой клавиши увеличивает масштаб всего графика, правой (или левой – при нажатой клавише Shift) – уменьшает его. Масштаб увеличения можно задать и более конкретно с помощью команды zoom(factor), например zoom(1.5). Возврат к исходному масштабу – двойным щелчком левой клавиши мыши или вводом команды zoom(1).
Упражнение.Построить график функции и провести масштабирование с помощью различных способов.
Многооконный режим вывода графических объектов на экран организуется с помощи процедуры subplot(m,n,p) (subplot(mnp), subplot mnp),которая разбивает графическое окно наподокон, где m – число подокон по вертикали (число строк), n – число подокон по горизонтали (число столбцов); p – номер текущего подокна. Для той же исходной зависимости можно организовать вывод графиков в четыре окна с соответствующими поясняющими надписями по осям:
» for k=1:4, y=rand*rand(1,6); subplot(2,2,k), pie(y), end
При повторном выполнении команды можно видеть, какую форму приобретает круговая диаграмма в зависимости от числовых значений элементов.
Упражнение. Вывести в несколько окон графики одной и той же функции в различном представлении (plot, bar, stem, polar) и варьировании масштабов по осям координат.
Команда gtext(‘text’) создает перекрестие, перемещаемое с помощью мыши. Если перекрестие расположено в нужной точке, щелчком левой клавиши вставляют заданный текст в это место (в том числе и на «поля» графического окна).
Построим семейство экспонент и пометим первую (k = 1) и последнюю (k = 6) из них, а также вставим название:
» x=0:0.1:6; for k=1:6, y=1-exp(-k*x); plot(x,y), hold on, end, grid
» gtext('k=1'), gtext('k=6'), gtext(‘Экспоненты: y=1-exp(-kx)’), hold off
Команда legend используется для расшифровки обозначений на графиках: отображаются типы линий (в соответствии с последовательностью построения) и маркера, а также пояснительный текст. Синтаксис команды:
legend(<text1>,<text2>,…,<pos>),
где <text…> – пояснения к отдельным графикам; pos – параметр, задающий местоположение легенды в соответствии с табл. 4.1.
Таблица 4.1
Значение pos
Положение легенды
-1
Вне графика справа
«Наилучшее» (легенда перекрывает наименьшее число точек графиков)
1, 2, 3, 4
В соответствующих углах графика: в правом верхнем (по умолчанию), в левом верхнем, в нижнем левом и правом
[x,y]
По координатам нижнего левого угла легенды
Положение легенды можно изменять, перемещая ее мышью при нажатой левой клавише. Легенду удаляют с помощью команды legend off.
Пример:
» x=pi*[0:0.05:4];
» y1=sin(x); y2=0.5*cos(x);
» plot(x,y1,x,y2), grid
» legend('y1=sin(x)','y2=0.5cos(x)')
» xlabel('x'), ylabel('y1, y2')
Для управления цветовой палитрой используется команда colormap(C)(или colormap C), где С – матрица-палитра, сформированная из трех чисел, характеризующих интенсивность основных цветов (красного, зеленого и синего).
Ниже приведен перечень имен матрицы.
hsv – насыщенность основных цветов палитры;
hot – палитра черного, красного, желтого, белого цветов;
gray–шкала оттенков серого цвета;
bone – серо-голубая палитра;
copper – линейная палитра с медными оттенками;
pink – пастельные оттенки розовой палитры;
white – палитра белого;
flag – палитра с чередованием красного, белого, синего и черного цветов;
prism – палитра цветов радуги (разложение белого цвета призмой);
cool – палитра с оттенками голубого и фиолетового цветов;
autumn – палитра с оттенками красного и желтого («осень»);
spring – палитра с оттенками желтого и фиолетового («весна»);
winter – палитра с оттенками голубого и зеленого («зима»);
summer – палитра с оттенками желтого и зеленого («лето»).
Например, команда colormap gray активизирует палитру оттенков серого цвета. По умолчанию используется палитра hsv.
4.1.5. Обработка данных
Экспериментально полученные зависимости, обладая определенной закономерностью, могут быть описаны аналитически – с помощью полиномов соответствующего порядка. Коэффициенты этих полиномов подбираются системой MATLAB методом наименьших квадратов. Аналитические зависимости удобно использовать для математического моделирования объектов.
Процедуру обработки данных средствами системы MATLAB проиллюстрируем следующим примером. Сначала сгенерируем последовательность случайных (равномерно распределенных) чисел, которую будем рассматривать как совокупность «экспериментально» полученных дискретных отсчетов некоторого процесса (их число определяется значением m):
» m=20; x=1:m; y=10*rand(1,m);
Таким образом, формируем некоторый вектор . Для аппроксимации этой зависимости воспользуемся функцией p=polyfit(x,y,k), где p– вектор коэффициентов аппроксимирующего полинома порядка k. Аналитическая зависимость, соответствующая этому полиному, получается в результате использования функции polyval(см. разд. 3):
Повторно вызывая эту командную строку, можно варьировать порядок аппроксимирующего полинома и наблюдать, как изменяется форма соответствующей кривой.
Для того, чтобы одновременно видеть эти кривые на графике и сравнить их, необходимо изменить командную строку:
» k=input('k ==> '); p=polyfit(x,y,k); z=polyval(p,x); plot(x,y,x,z), hold on
Команду hold on(отмена – hold off) используют для того чтобы зафиксировать окно графика и вывести в него несколько кривых. После получения семейства кривых вводят команду
» grid, hold off
В следующем примере используем символьные переменные, задающие различный цвет аппроксимирующих кривых (зеленый, красный, фиолетовый, черный), а также цикл for:
» color=['g' 'r' 'm' 'k'];
» for k=1:4, p=polyfit(x,y,k); z=polyval(p,x); plot(x,y,x,z,color(k)), hold on, end
»title('Аппроксимация данных полиномами'),xlabel('Номера отсчетов'),…
Ylabel('Отсчеты')
» grid, hold off
Функция titleпозволяет ввести заголовок, а функции xlabel и ylabel– надписи по осям координат.
В качестве интерполирующей функции чаще всего выбирают полиномы той или иной степени или сплайны. Физически сплайны – это тонкие рейки, закрепляя которые в определенных точках, проводят тонкие линии. В качестве исходной зависимости используем приближенное представление синусоиды в пределах одного периода (с шагом, равным четверти периода):
» x=pi*[0:0.5:2]; y=sin(x);
Интерполяцию проведем с помощью кубических сплайнов, задав большее число узловых точек:
Более общей является одномерная функция интерполяции interp1(x,y,x1,’метод’), которая позволяет выбрать один из четырех методов интерполяции: ‘nearest’ – ступенчатая, ‘linear’ – линейная, ‘cubic’ – кубическая, ‘spline’ – сплайны. Конструкция interp1(x,y,x1,’spline') равносильна spline(x,y,x1). Существуют также двухмерная (interp2) и трехмерная (interp3) интерполирующие функции.
Упражнение. Вывести в одно окно графики интерполирующих функций при использовании всех четырех методов для той же исходной зависимости и сравнить их.