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

1-2 Моделирование / Matlab. Практический подход. Самоучитель

.pdf
Скачиваний:
765
Добавлен:
31.01.2021
Размер:
12.72 Mб
Скачать

Глава 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