Самоучитель 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