Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Моделирование измерительных задач в среде MATLAB + Simulink. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
ТЕОРЕТИЧЕСКИЕ ОСНОВЫ 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]