1-2 Моделирование / Matlab. Практический подход. Самоучитель
.pdfГлава 2. Графика в Matlab
Рис. 2.15. В одном графическом окне несколько подокон
Работа с графическими подокнами осуществляется, в общем, так же, как и с одним окном. Следует только помнить, какое подокно на данный момент активно.
С помощью функции subplot() не обязательно создавать подокна одинакового размера. Например, после выполнения приведенных выше команд выполнить еще две:
>>subplot(2,1,2)
>>plot(x,y4)
В этом случае получим результат, как на рис. 2.16.
Произошло следующее: в верхнем ряду графического окна-контейнера отображено три подокна одинакового размера, а в нижнем ряду – одно подокно, которое занимает всю нижнюю область графического окна. Дело в том, что командой subplot(2,1,2) область графического окна условно разбивается на две части (два подокна одинакового размера), но реально создается только нижнее подокно – в соответствии с третьим аргументом функции subplot(). При этом три уже существующие подокна в нижней части, которые полностью перекрываются вновь созданным подокном, исчезают. Более того, даже если существующее подокно перекрывается новым подокном только частично, оно тоже удаляется. Например, рассмотрим команды:
61
Самоучитель Matlab
Рис. 2.16. Подокна разного размера
Рис. 2.17. Подокна совершенно разного размера
62
Глава 2. Графика в Matlab
>>subplot(2,2,1)
>>plot(x,y2)
С их помощью в левой верхней четверти графического окна создается новое подокно, которое полностью перекрывает одно подокно в первом ряду и еще одно, следующее, подокно – частично. В результате удаляются оба подокна (рис. 2.17).
Работа с графиками в подокнах осуществляется, в общем-то, так же, как и с обычными графическими окнами, просто предварительно необходимо с помощью функции subplot() выделить нужное подокно. На рис. 2.18 показан результат отображения в подокне, активированном командой subplot(2,2,1) координатной сетки.
Рис. 2.18. В один из графиков добавлена координатная сетка
Сетка, как и в предыдущих случаях, добавляется командой grid on. После выполнения команд subplot(2,1,2) и legend('my function',4) в график в нижней части графического подокна будет добавлена легенда (рис. 2.19).
На заметку
Чтобы убрать легенду из графика, достаточно выполнить команду legend off. Так же поступаем, чтобы убрать координатную сетку – полезной окажется команда grid off. Еще раз напомним, что предварительно нужно будет активировать соответствующее подокно.
63
Самоучитель Matlab
Рис. 2.19. В один из графиков добавлена легенда
Нередко возникает необходимость работать сразу с несколькими графическими окнами. Такой режим работы также возможен. В этом случае полезной окажется инструкция figure, с помощью которой создается новое графическое окно, которое становится активным. Следующий создаваемый график будет отображен в этом окне. Окна нумеруются подряд, то есть Figure 1, Figure 2 и так далее. При желании активным можно сделать любое из существующих окон, для чего достаточно вызвать функцию figure(), указав ее аргументом номер окна, которое необходимо активировать.
График в полярных координатах
Вы - умный человек. Вы, очевидно, точно рассчитали, что в моих силах, а что выше моих сил.
К/ф "Семнадцать мгновений весны"
Для создания графика в полярной системе координат используют встроенную функцию Matlab polar(). Напомним, что положение точки на плоскости в полярных координатах задается расстоянием r до точки от начала координат и углом ϕ направления на точку. Между полярными координатами (r,ϕ) и декартовыми (x,y) существует связь: x = r cos(ϕ)
и y = r sin(ϕ).
64
Глава 2. Графика в Matlab
При создании графика в полярных координатах первым аргументом функции polar() передается вектор со значениями ϕ -координат, а второй аргумент – вектор со значениями r -координат. Например, для того, чтобы построить график функции, заданной в полярных координатах соотношением r = sin(3ϕ), используем следующие команды:
>>phi=0:0.01:2*pi;
>>r=sin(3*phi);
>>polar(phi,r)
Результат представлен на рис. 2.20.
Рис. 2.20. График в полярных координатах
Фактически тот же график в декартовых координатах можно построить с помощью функции plot(), если воспользоваться такой последовательностью команд:
>>x=r.*cos(phi);
>>y=r.*sin(phi);
>>plot(x,y)
Здесь на основе полярных координат создаются векторы с декартовыми координатами, на основе которых затем строится график функции. Результат для этого случая представлен на рис. 2.21.
65
Самоучитель Matlab
Рис. 2.21. График создан в декартовых координатах
Несмотря на такую простоту и эффективность, пользоваться функцией polar() следует достаточно осторожно. Дело в том, что по определению, в полярных координатах полагают r ≥ 0 . Поэтому если формально функциональная зависимость такая, что r -координата должна быть отрицательной, то обычно это означает, что r = 0 (или что для этого углового сегмента функциональная зависимость не определена). Несколько иначе дела обстоят в Matlab. При построении графика в полярных координатах точки с отрицательными r -координатами тоже отображаются на графике. В этом случае выполняется инверсия направления на точку. Другими словами, если точка для отображения на графике имеет координаты (ϕ,r), причем r < 0 , то отображается точка с координатами (ϕ + π,−r) .
В рассмотренном выше примере при создании векторов значений координат точек графика вектор для r -координат содержит отрицательные значения (желающие могут в этом убедиться, для чего достаточно ввести в командную строку имя переменной r и нажать клавишу <Enter>).
На заметку
Это, кстати, вполне логично и правильно – вектор координат создается, в соответствии с уравнением кривой, по тем же правилам, что и обычные векторы. Было бы странным, если бы отрицательные значения почему-то игнорировались или обрабатывались по-особенному.
66
Глава 2. Графика в Matlab
Почему же график, приведенный выше, был простроен правильно? Причина проста: часть графика, построенная по точкам с отрицательными r -координатами, дублирует ту часть графика, что построена по положительным r -координатам. Действительно, для зависимости, определяющей кривую в полярных координатах, имеет место соотношение r = sin(3(ϕ + π)) = sin(3ϕ + 3π) = −sin(3ϕ) . Другими словами, симметрия графика такова, что даже по "неправильному" набору точек получается "правильный" график. Такая ситуация имеет место для зависимостей r(ϕ), для которых r(ϕ + π) = −r(ϕ) . Однако далеко не все кривые обладают указанной симметрией. В качестве примера рассмотрим кривую, заданную соотношением r = 1 −2 sin(ϕ). Результат создания графика для этой зависимости в Matlab представлен на рис. 2.22.
Рис. 2.22. На графике отображена "лишняя" ветка
График построен последовательностью команд:
>> phi=0:0.01:2*pi; |
|
|
|
|
|
>> r=1-2*sin(phi); |
|
|
|
|
|
>> polar(phi,r) |
1 |
|
5 |
|
|
В принципе, диапазон значений |
π < ϕ < |
π |
полярного угла определяет |
||
|
6 |
|
6 |
|
|
зону, в которой графика быть не должно (здесь 2 sin(ϕ) > 1) – его там и нет.
Зато есть дополнительная, меньшая, ветка графика. Эта ветка строится по точкам с отрицательными полярными координатами для значений полярного
67
Самоучитель Matlab
угла |
1 |
π < ϕ < |
5 |
π . В последнем убедиться достаточно легко – стоит лишь |
||||
6 |
6 |
|||||||
|
|
|
|
=| 1 −2 sin(ϕ) |. Результат показан на рис. 2.23. |
||||
построить график функции r |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 2.23. График построен по "правильному" набору точек
На заметку
Для создания графика вектор полярных координат вычисляется с помощью команды r=abs(1-2*sin(phi)), в которой использована встроенная функция вычисления модуля abs().
Принципиальное различие между графиками, представленными на рис. 2.22 и рис. 2.23, состоит в способе отображения "маленькой" ветки. На рис. 2.23 она отображена "правильно", в соответствии со способом определения функции. На рис. 2.22 наличие "маленькой" ветки – целиком "заслуга" Matlab. С математической точки зрения ее вообще не должно быть.
Несмотря на сделанное замечание, описанная особенность, связанная со способом отображения графиков в полярных координатах в Matlab, может быть достаточно полезной, и ею не следует пренебрегать. Если все же нужно, чтобы точки с отрицательными значениями для радиальных координат не отображались, необходимо предпринять некоторые специальные меры. Например, чтобы построить в полярных координатах "правильный" график для зависимости r(ϕ) = 1 −2 sin(ϕ), можно воспользоваться при создании вектора значений радиальной координаты вместо команды r=1-2*sin(phi)
68
Глава 2. Графика в Matlab
командой r=max(0,1-2*sin(phi)). В этом случае с помощью встроенной функции max() определения максимального значения из списка аргументов функции добиваемся того эффекта, что вместо отрицательных значений радиальных координат в вектор значений заносятся нулевые значения, как и должно быть. Результат желающие могут проверить самостоятельно.
Цвет и тип линий для графиков в полярных координатах определяются так же, как и для обычных графиков. В известном смысле это относится и к способу создания сразу нескольких графиков в одном графическом окне. Правда, функция polar() не воспринимает второй набор аргументов для отображения двух графиков – для этого нужно воспользоваться командой hold on и перейти в режим отображения графиков в одном окне без удаления уже существующих. На рис. 2.24 приведен пример создания нескольких графиков в полярных координатах.
Рис. 2.24. В одном графическом окне отображены два полярных графика
Для создания графиков в одном окне использовались следующие команды:
>>phi=-pi:0.01:pi;
>>r=cos(3*phi).^2;
>>Phi=0:0.01:10*pi;
>>R=Phi./(10*pi);
>>polar(phi,r,'--r')
>>hold on
>>polar(Phi,R,'-b')
69
Самоучитель Matlab
В результате в одном окне отображается сразу два графика: один красной штрихованной линией, другой – синей сплошной.
Графики в полярных координатах можно отображать в подокнах графического окна одновременно с обычными графиками (то есть графиками в декартовых координатах). Например, можно воспользоваться такой последовательностью команд:
>>y=sin(phi)./phi;
>>subplot(2,1,1)
>>plot(phi,y)
>>subplot(2,2,3)
>>polar(phi,r)
>>subplot(2,2,4)
>>polar(Phi,R)
>>subplot(2,1,1)
>>grid on
В результате получаем графическое окно с тремя подокнами: в верхнем подокне отображен график в декартовых координатах, а в двух нижних подокнах – графики в полярных координатах (рис. 2.25).
Рис. 2.25. Графики отображаются в подокнах графического окна
Такой подход является общим для работы с графиками разного типа, если они отображаются в подокнах одного графического окна.
70