Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Графические объекты на плоскости



4.1.1. Функция plot

Основной графической функцией является функция 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(приглашение имеет вид «к = > »).

» k=input('k => '); Y=cos(k*x); plot(X,Y), title('Фигуры Лиссажу'), grid

Для ввода нового значения k вся командная строка должна вызываться с помощью стрелочных клавиш: [­] или [¯].

» k=input('k => '); Y=cos(k*x); plot(X,Y,'*m'); title('Фигуры Лиссажу'); grid

Здесь графики отображаются в виде дискретных звездочек фиолетового цвета.

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

 

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 – строковый параметр (см. выше);

stem(…,’fill’)– закрашивание маркера (цвет назначается обычным способом).

» x=pi*[-2:0.05:2]; y=sin(x);

» stem(y), grid

» stem(x,y), grid

» stem(x,y,'fill'), grid

» stem(x,y,'*r'), grid

Функцияpolar (диаграмма в полярных координатах):

polar(phi,rho,S)– зависимость радиуса-вектора (rho) от полярного угла (phi).

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

» phi=pi*[0:0.02:6]; rho=exp(-0.2*phi).*sin(3*phi); plot(phi,rho), grid, pause,

Polar(phi,rho)

Здесь использован оператор 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 – номер текущего подокна. Для той же исходной зависимости можно организовать вывод графиков в четыре окна с соответ­ствующими поясняющими надписями по осям:

» subplot(221), plot(x,y), grid, xlabel('x'), ylabel('y')

» subplot(222), semilogx(x,y), grid, xlabel('logx'), ylabel('y')

» subplot(223), semilogy(x,y), grid, xlabel('x'), ylabel('logy')

» subplot(224), loglog(x,y), grid, xlabel('logx'), ylabel('logy')

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

» 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 – палитра с чередованием красного, белого, синего и черного цветов;

lines – палитра, определяемая свойством ColorOrder;

colorcube – RGB-палитра с оттенками серого;

jet – вариант hsv-палитры;

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), grid

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

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

» 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);

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

» x1=pi*[0:0.1:2]; z=spline(x,y,x1); plot(x,y,x1,z), grid

Более общей является одномерная функция интерполяции interp1(x,y,x1,’метод’), которая позволяет выбрать один из четырех методов интерполяции: ‘nearest’ – ступенчатая, ‘linear’ – линейная, ‘cubic’ – кубическая, ‘spline’ – сплайны. Конструкция interp1(x,y,x1,’spline') равносильна spline(x,y,x1). Существуют также двухмерная (interp2) и трехмерная (interp3) интерполирующие функции.

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

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.