Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МетодичкаИПлб.doc
Скачиваний:
39
Добавлен:
08.05.2019
Размер:
6.96 Mб
Скачать

3.3. Построение графиков

Matlab позволяет строить графики функций в линейном, логарифмическом и полулогарифмическом масштабах. В одном графическом окне можно построить графики нескольких функций, с разным шагом и даже определенных на разных отрезках. В последнем случае при построении графиков Matlab выбирает максимальный отрезок, содержащий все остальные. Дополнительные параметры графических функций позволяют управлять основными свойствами линий на графиках. Для того чтобы построить график функции, нужно сформировать два вектора x (абсцисс) и y (ординат) одинакового размера и обратиться к соответствующей функции рисования. Таким образом, фактически строится график таблично заданной функции, т.е. зависимость одного вектора от другого. Поведение функции между узлами таблицы определяется линейной интерполяцией, т.е. соседние точки соединяются прямой линией. Наиболее часто используемые функции Matlab, предназначенные для построения двумерных графиков, приведены в табл. 4.2.

Таблица 4.2

Функция

Формат использования

Назначение

plot

plot(x,y)

График в линейном масштабе

plotyy

plotyy(x,y)

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

loglog

loglog(x,y)

График в логарифмическом масштабе по обеим осям

semilogx

semilogx (x,y)

График в логарифмическом масштабе по оси абсцисс и линейном по оси ординат

semilogy

semilogx (x,y)

График в линейном масштабе по оси абсцисс и логарифмическом по оси ординат

fplot

fplot('функция',[d1 d2], tol, n)

График на заданном интервале с автоматическим выбором шага. Эта функция будет рассмотрена позднее в работе ИП5

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

plot(y)

Здесь y – вектор или матрица значений функции. В качестве значений аргумента в этом случае будут служить индексы элементов вектора или столбцов матрицы.

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

plot(x,y)

или тремя аргументами

plot(x,y,options)

Здесь x и y – векторы, элементами которых являются значения аргумента и функции соответственно; options – список опций управления свойствами линии графика, заключенный в апострофы. Список опций может содержать до трех специальных символов, определяющих тип линии, тип маркера и цвет линии графика (табл. 4.3).

Таблица 4.3

Тип линии

Тип маркера

Цвет линии (маркера)

- непрерывная

. точка

b синий

-- штриховая

+ плюс

g зеленый

: пунктир

* звездочка

r красный

-. штрих-пунктир

о кружок

с голубой

х крестик

m фиолетовый

s квадрат

у желтый

d ромб

k черный

v треугольник вниз

< треугольник влево

> треугольник вправо

p пентаграмма

h шестиугольник

За одно обращение к plot можно нарисовать и несколько графиков в одних осях. Например, три графика можно нарисовать следующим образом:

plot(x1,y1,x2,y2,x3,y3)

или

plot(x1,y1,'--og' ,x2,y2,'k-.+',x3,y3,'*:k')

или

plot(x1,y1,x1,y2,'-r',x3,y3,'om')

Из примеров видно, что в одних осях можно рисовать графики, как для одинаковых, так и для разных значений аргументов; некоторым кривым можно задавать опции рисования, а некоторым – нет; можно задавать как полный список опций, так и частичный; перечислять опции можно в любом порядке. По умолчанию (список options не указан) график строится непрерывной линией, тип маркера – точка (пиксель), цвет – в зависимости от того, какая по порядку кривая отображается при обращении к данной функции. Порядок автоматического перебора цветов соответствует их перечислению в табл. 4.3. Если одним plot рисуется больше восьми графиков, то цвета начинают циклически повторяться.

Рекомендации: 1) если в графическом окне необходимо показать, что один график совпадает с другим, то первый из них следует рисовать сплошной линией одного цвета, а второй – прерывистой линией другого цвета. Иначе на экране будет виден только график, нарисованный последним!

2) Если расчетных точек много, то не стоит прорисовывать маркеры. Иначе на экране будет изображена "гусеница" – сплошной поток маркеров. Если маркеры все же необходимы, то следует нарисовать не все, а только некоторые из них. Например, каждый десятый или каждый сотый маркер. Для этого отдельно с более крупным шагом формируются векторы значений функции и аргумента

markx=x(1:100:end); marky=y(1:100:end);

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

plot(x,y,markx,marky,'o')

Выше говорилось о том, что при рисовании графиков plot автоматически выполняет линейную интерполяцию между соседними точками. Об этом необходимо помнить, задавая количество точек при изображении кривых. Иначе можно получить "фантастический" результат! Например, пусть требуется построить график функции на отрезке [0; 0,2]. Напишем программу, не забывая, что табулирование функции выполняется поэлементными операциями над векторами. Сохраним программу в m-файле (впрочем, эта программа хороша и для выполнения в режиме прямых вычислений).

x1=0:1e-2:0.2;

y1=exp(-x1).*(sin(x1)+0.1*sin(100*pi*x1));

x2=0:0.7e-2:0.2;

y2=exp(-x2).*(sin(x2)+0.1*sin(100*pi*x2));

x3=0:0.1e-2:0.2;

y3=exp(-x3).*(sin(x3)+0.1*sin(100*pi*x3));

plot(x1,y1,'r--',x2,y2,'b',x3,y3,'k-.'), grid

title('y=e^-^x(sin(x)+0,1sin(100pi*x)')

xlabel('x'), ylabel('f(x)')

legend('not correct curve1','not correct curve2','correct curve3')

Выполним программу. Откроем графическое окно (рис. 4.4). Видим, что графики y1(x1), построенный пунктиром с шагом 0,01, и y2(x2), построенный сплошной линией с шагом 0,07, просто неверные! А вот третий график y3(x3), нарисованный с шагом 0,001 штрих-пунктиром, соответствует действительности. В чем же дело? Почему одна и та же функция нарисована до неузнаваемости по-разному? Ответ прост – в первых двух случаях вычисления со слишком большим шагом привели к тому, что расчетные точки, верные сами по себе, легли на синусоидоподобной кривой функции неудачно и, соединенные между собой отрезками прямой, исказили ее изображение.

Рис. 4.4. Графики функции

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

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

>> x=-pi:pi/10:pi;

>> y1=250*sin(x);

>> y2=0.5*sin(x-pi/3);

>> plotyy(x,y1,x,y2), grid

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

plot(x,100*y1,x2,0.01*y2,x,y3)

Факт принудительного масштабирования кривых обязательно следует отразить в легенде

legend('100у1(х)','0,01у2(х)','y3(x)')

Функции plot и plotyy используют при построениях линейный масштаб по обеим осям. Для построения графиков в логарифмическом и полулогарифмическом масштабах служат функции loglog, semilogx и semilogy (см. табл. 3.3). Аргументы и правила использования этих функций такие же, как и для функции plot.

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

linspace(d1,d2,n) – задание диапазона по оси абсцисс в линейном масштабе. Здесь d1, d2 – начальное и конечное значения диапазона; n – количество равноотстоящих точек (по умолчанию 50);

logspace(d1,d2,n) – задание диапазона по оси абсцисс в логарифмическом масштабе. Здесь d1, d2 – начальное 10d1 и конечное 10d2 значения диапазона; n – количество точек в логарифмическом масштабе (по умолчанию 50).