Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие
.pdf
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
При повторном использовании команд построения графиков
в активном графическом окне уже имеющиеся в нем графики
стираются.
Избежать этого позволяют команды управления графиче
-
ским окном:
• >>hold – фиксация построенного графика. Все последу
ющие построения накладываются на уже существующие, при
необходимости изменяется диапазон и масштаб по осям коор
динат:
>> x=1:5.
>> plot(x,x.^2)
>> hold
>> plot(x,x.^3)
• >>figure – создание графического окна. Это окно становит
ся активным, все последующие построения будут выполняться
в этом окне. figure(H) – делает активным окно с номером H.
Если окна с таким номером нет, то оно создается и делается
активным.
• >>clf – команда очистки активного окна. Перед очисткой
окна можно сохранить результаты построения, а позже сохра
ненный файл можно открыть для работы с ним.
• >>subplot(m,n,p) – разбивка графического окна на части, в
каждой из которых может быть построено отдельное изображе
ние. Графическое окно разбивается на m Ч n подокон, и активным становится окно с номером p:
>> subplot(2,2,1)
>> plot(x,x.^2)
>> subplot(2,2,2)
>> plot(x,x.^3)
>> subplot(2,2,3)
>> plot(x.^2,x.^3)
Команда fplot(f,[a,b]) изображает график функции с именем
f в интервале [a, b]. В отличие от команды plot здесь не требу
ется явного задания значений аргумента. Задание второго аргумента в виде четверки чисел [a b c d] позволяет задать пределы
функции по оси Y.
31

МОДУЛЬ 1
При построении графика элементарной функции функцию f
можно описать ее именем с префиксом @. Например:
x
>>fplot(@exp,[0,1]) – строит график функции f(x) = e
в интер-
вале от 0 до 1.
Если аргумент функции имеет более сложный вид, то функ
-
ция описывается символьным выражением:
>> fplot(‘exp(-x)/(1+x^2)*sin(x)’,[0,10])
Для одновременного построения графиков нескольких функ
ций их символьные выражения заключаются в квадратные
скобки:
>>fplot(‘[sin(x),cos(x)]’,[0,2*pi])
Если предполагается многократное обращение к функции в
течение текущего сеанса, то ее можно предварительно описать
как строковый объект с помощью функции inline:
>>f=inline(‘sin(x)*cos(x)’)
>> fplot(f,[0,1])
>>f1=inline(‘[sin(x)*cos(x),sin(x)]’)
>> fplot(f1,[0,2*pi])
Команда ezplot(f,[a,b]) строит график символьной функции в
заданном диапазоне a < x < b.
Команда может быть использована для построения графика
неявной функции f(x, y) = 0. Например, построим окружность
радиуса r = 5:
>>f=’x^2+y^2-25’
>>ezplot(f,[-5,5])
Команда ezplot(x,y) строит параметрически заданную линию
с координатами точек x = x(t), y = y(t):
>> x=’sin(t)’
>> y=’cos(t)’
>> ezplot(x,y,[0,2*pi])
Изображение элементов дискретной последовательности
Команда stem(y) изображает последовательность данных, за
данных вектором y в виде вертикальных прямых, высота которых равна значению y в функции от номера строк:
32
-

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
>>y=1:10
>>stem(y)
stem(Y) для матричного аргумента изображает несколько по
следовательностей, заданных столбцами матрицы:
>> Y=[y’,y’+5]
>> stem(Y)
stem(x,y), stem(x,Y), stem(X,Y) изображает последователь
ность данных, заданную вектором y или столбцами матрицы Y
в функции векторного аргумента x или матрицы X:
– в первом случае длины векторов x и y должны быть оди
наковы;
– во втором случае длина вектора x должна быть равна числу
строк матрицы Y;
– в третьем случае размеры матриц должны быть одинако
вы и каждому столбцу матрицы X соответствует столбец матрицы Y.
stem(…,’filled’) – то же самое, но с залитыми кружками.
stem(…,S) – задание вида маркеров, типа и цвета линий, как
в команде plot.
Команда bar – построение столбцевого графика.
bar(Y) изображает все элементы каждого столбца в виде
прямоугольников одинакового цвета. Число групп равно числу
столбцов:
>> bar(Y)
bar(Y,W) – задает относительную ширину прямоугольников.
По умолчанию W = 0.8.
>>bar(Y,0.1)
bar(Y,’grouped’) изображает столбцы групп расположенными
рядом по умолчанию.
bar(Y,’stacked’) – изображает элементы, соответствующие
одной строке, друг над другом.
Аналогично команде steam вместо номера строки можно
использовать дополнительный параметр команды – вектор х,
определяющий абсциссы графиков.
Команда barh осуществляет подобное построение с горизон
тальной разверткой столбцов.
-
-
-
-
-
33

МОДУЛЬ 1
Для большей наглядности столбцовых диаграмм их можно
изображать в трехмерном пространстве с помощью функции
bar3:
>>a=[1,5,2;2,4,3;3,5,4]
>>bar3(a)
Помимо столбцовых диаграмм, в MATLAB можно строить
круговые диаграммы, которые в наглядной форме показыва
ют, какой процент от суммы всех элементов массива составляет
каждый его элемент. Например:
>>x=[3,7,1,2]
>> pie(x)
Для того чтобы наглядно изобразить, к какому элементу от
носится сектор диаграммы, можно использовать модификацию
команды с надписями:
>>pie(x,{‘I’,’II’,’III’,’IV’})
Модификация этой команды – pie3 – позволяет получить
диаграмму в виде разрезанного «пирога»:
>>pie3(x,{‘I’,’II’,’III’,’IV’})
Еще один векторный параметр позволяет «раздвинуть» ку
ски пирога.
>>pie3(x,[1,2,3,4],{‘I’,’II’,’III’,’IV’})
Другой способ визуализации большого объема эксперимен
тальных данных – это построение гистограмм. Данные группируются по значениям в рамках некоторых подынтервалов, и на
график выводится число данных, попавших в каждый подын
тервал значений:
>>x=rand(1,5000)
>> hist(x)
Трехмерные графики
Команда plot3 является трехмерным аналогом команды plot.
Основная модификация команды plot3(x,y,z) строит в трех
мерном пространстве линию, проходящую через точки, координаты которых заданы соответствующими компонентами векторов x, y, z. Векторы должны иметь одинаковый размер.
34
-

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
Построим, например, винтовую линию. Винтовая линия –
это траектория точки, которая равномерно вращается вокруг
оси Z с постоянной угловой скоростью и перемещается вдоль
оси Z с постоянной линейной скоростью.
Зададимся зависимостью координат точки от времени:
>>t=linspace(0,3*2*pi)
>>x=cos(t)
>>y=sin(t)
>>z=t
>>plot3(x,y,z,’r’)
Команда mesh(X,Y,Z) строит трехмерное изображение по
-
верхности z = f(x, y) в виде окрашенной сетки образующих ее
линий. Аргументы X, Y, Z должны быть матрицами одинако
-
вого размера.
2
Построим, например, часть параболоида вращения z = x
+ y2.
Аргументы X и Y удобно задавать с помощью команды
meshgrid:
>> x=-1:0.1:1
>> y=-1:0.1:1
>>[X,Y]=meshgrid(x,y)
Сформированная матрица X имеет одинаковые строки, со
-
держащие значение вектора x, а число строк равно длине вектора y.
Матрица Y, наоборот, имеет одинаковые столбцы, содержа
-
щие значения вектора y, а число их равно длине вектора x.
Затем вычисляем матрицу Z:
>> Z=X.^2+Y.^2
и строим поверхность
>>mesh(X,Y,Z)
Цвет точек сетки выбирается исходя из значения z в точке.
Для наглядности можно вывести это соответствие значения и
цвета с помощью команды colorbar.
Команда mesh – это фактически изображение поверхности с
помощью линий, которые являются сначала сечением поверх
-
ности вертикальными плоскостями x = x1, x = x2, …, x = xn, а
затем – плоскостями y = y
, y = y2, …, y = yn.
1
35

МОДУЛЬ 1
Соответственно, команду можно представить совокупностью
команд:
>>plot3(X,Y,Z)
>>hold on
>>plot3(Y,X,Z)
Команда surf аналогична команде mesh, но с той разницей,
что окрашивается цветами поверхность, а линии сетки изобра
жаются черным цветом.
Команды surfc и meshc в дополнение к изображению трех
мерной поверхности изображают еще и проекции линий уровня
z = const на плоскость (x, y).
Кроме того, для изображения графиков символьных функ
ций в трехмерном случае существуют соответствующие функции: ezmesh, ezplot3, ezsurf. Например:
>>ezmesh(‘x^2+y^2)
Контурные графики
-
-
-
Построение графиков, изображающих линии уровня z =
= const функции двух переменных z(x, y) осуществляется командой contour(x,y,Z).
Длина вектора x должна быть равна числу столбцов матрицы
Z, а длина вектора y – числу строк матрицы Z.
Для формирования матрицы Z можно использовать те же
операции, что и при построении трехмерной поверхности. По
умолчанию число линий уровня равно 10 и они проводятся че
-
рез равные интервалы в диапазоне изменения величины Z.
Построим линии уровня рассмотренной выше функции
z = x2 + y2.
Для построения создадим m-файл. Для создания m-файла
нажмем соответствующую кнопку на панели инструментов и в
открывшемся окне редактора наберем текст:
% Построение линий уровня параболоида
x=linspace(-1,1)
y=linspace(-1,1)
n=length(x)
36

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
q
r
for i=1:n,
z(:,i)=(x(i)^2+y.^2)’
end
contour(x,y,z)
Сохраним файл как a.m.
В первой строке файла приведен комментарий, который мо
жет быть выведен в командном окне при вызове команды
>>help a
В шестой строке файла формируются столбцы матрицы Z.
Выполним файл командой
>>a
Команда contour(x,y,z,n) строит n линий уровня, а коман
да contour(x,y,z,v) изображает линии уровня со значениями
z = const, равными элементам вектора v, например:
>> v=0:0.2:2
Команда contour(x,y,z,[w w]) строит линию уровня, соответ
ствующую одному значению w:
>> contour(x,y,z,[0.5 0.5])
Команда contourf закрашивает промежутки между линия
ми уровня в различные цвета. Для вывода соответствия между
значением функции z и цветом используется команда colorbar.
При обращении к команде [C,h]=contout(x,y,z) с двумя вы
ходными аргументами, кроме построения графиков, вычисляется контурная матрица C и вектор h, которые затем можно
использовать для оцифровки графиков с помощью команды
clabel(C,h).
Рассмотрим построение силовых линий электрического поля
для двух разноименных зарядов величиной 1 Кл, расположен
ных на расстоянии 1 м.
Напряженность электрического поля заряда q на расстоянии
r от него равна:
E
Вектор напряженности направлен вдоль
ных зарядов и в противоположном направлении – для отрицательных зарядов. Напряженность результирующего поля равна
r
.
3
r
для положитель-
-
-
-
-
-
-
37

МОДУЛЬ 1
векторной сумме полей, создаваемых каждым зарядом. Силовые линии – это линии, направление касательной к которым в
каждой точке линии совпадает с направлением напряженности
поля в этой точке.
Создадим m-файл для построения одной силовой линии.
Алгоритм вычисления следующий: в фиксированной точке вычисляем компоненты результирующего поля, а отсюда – тангенс
угла наклона касательной к линии в этой точке. Шаг по коорди
-
нате x фиксируем, а шаг по координате y вычисляем в каждой
точке исходя из вычисленного значения тангенса угла наклона
касательной. Соответствующий фрагмент m-файла имеет вид:
% Построение силовых линий для двух зарядов разных знаков
dx=0.05
x=dx:dx:0.99
dy=dx/2
h=0
for i=1:19,
y(i)=h+dy
h=y(i)
r1=(sqrt(x(i)^2+y(i)^2))^3
r2=(sqrt((1-x(i))^2+y(i)^2))^3
ex(i)=x(i)/r1+(1-x(i))/r2
ey(i)=y(i)*(1/r1-1/r2)
dy=dx*ey(i)/ex(i)
end
Для точек линий, расположенных близко к зарядам, вели
чина напряженности неограниченно возрастает, поэтому перед
построением графика произведем нормировку вектора напря
женности в каждой точке линии:
for i=1:19,
e=sqrt(ex(i)^2+ey(i)^2)
ex(i)=ex(i)/e
ey(i)=ey(i)/e
end
Построение графика осуществляется командой
quiver(x,y,ex,ey,0.1,’r’)
38

ТЕОРЕТИЧЕСКИЕ ОСНОВЫ MATLAB + SIMULINK
Запишем созданный файл как sil.m и запустим его на выпол-
нение командой
>>sil
Рассмотрим теперь некоторые общие функции оформления
графиков.
Команда title(‘text’) наносит текст на верхнее поле графи
ка, аналогично команда xlabel(‘text’) наносит текст на нижнее
поле графика, а команда ylabel(‘text’) – на левое поле графика.
Команда text(x,y,‘text’) позволяет нанести текст в точку с коор
динатами (x, y).
Очень удобная команда gtext(‘text’). После набора этой ко
манды место вставки набранного текста определяется мышью.
Команда legend(‘s1’,’s2’,…) в прямоугольнике отображает
типы использованных линий и соответствующие поясняющие
надписи к ним, например:
>>hold on
>>plot(x,cos(x),’b’)
>>legend(‘sin’,cos’)
Прямоугольник можно перетаскивать мышью в нужное место.
Команда grid on(off) включает или выключает изображение
координатной сетки.
Можно также изменять пределы изменения переменных по
осям координат:
>>axis([xmin, xmax, ymin, ymax])
После выполнения команды график сразу перестраивает
ся, что может быть удобно, например, при вычислении нулей
функции.
Кроме того, большие возможности по работе с графическим
окном MATLAB представляет с помощью средств самого графи
ческого окна. Здесь можно осуществить практически все операции, рассмотренные выше, с помощью команд.
Низкоуровневая графика
Часто возникает необходимость управлять видом графиков
при написании программ. Это возможно с помощью так назы
-
39

МОДУЛЬ 1
ваемой дескрипторной графики, основанной на низкоуровневых
графических функциях. MATLAB является объектно-ориенти
рованной системой. Все графические элементы являются объектами, каждый из которых имеет свои свойства. Встроенные
функции MATLAB позволяют получить и изменить значения
любого свойства любого графического объекта.
Построим, например, график функции y=sin(x): plot([0:0.1:
10],sin([0:0.1:10])). Результатом работы функции plot является
создание трех графических объектов: графического окна, осей
координат и линий.
Манипулирование свойствами объектов производится с помо
щью функций get (получение значений свойств) и set (установка новых значений свойств). Этим функциям следует указать
в качестве параметра указатель на объект, с которым ведет
ся работа. Имеются три стандартные функции, возвращающие
указатели на объекты:
– gcf – указатель на текущее графическое окно;
– gca – указатель на текущие оси координат;
– gco – указатель на текущий графический объект.
Объект можно сделать текущим, если щелкнуть по нему
мышкой.
Рассмотрим свойства осей. Получить список доступных
свойств можно, используя команду get(gca). На экране выводит
ся таблица свойств объекта и их значений. Это очень большой
список. Некоторые из свойств интуитивно понятны, со смыс
лом других свойств нужно разбираться. Значение какого-либо
определенного свойства можно получить, используя второй ар
гумент команды get. Например, fn=get(gca,’FontName’) выдает
название используемого по умолчанию шрифта – Helvetica.
Команда set позволяет установить для свойства любое из до
пустимых значений. Рассмотрим примеры:
– set(gca,’Box’,’on’) – заключает оси в рамку;
– set(gca,’LineWidth’,2) – задает толщину линий осей;
– set(gca,’YTick’,[-1 0 1]) – задает координаты меток на оси Y;
– set(gca,’YTickLabel’,{‘y=-1’;’y=0’;’y=1’}) – символьные
метки на оси Y;
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
