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

книги / Mathematica 5. ╨б╨░╨╝╨╛╤Г╤З╨╕╤В╨╡╨╗╤М

.pdf
Скачиваний:
1
Добавлен:
19.11.2023
Размер:
33.75 Mб
Скачать

Кривые в полярных координатах

Пример 9.9. Гиперболы в полярных координатах. Введенную нами функцию

PolarXY [r_, phi_] :={r*Cos [phi],r*sin [phi]} удобно использовать также в оп­ ределении функции PolarXYAB для многих функций, заданных в полярных координа­ тах. Посмотрим, как это делается на примере вычерчивания полярных гипербол.

Вы знаете, как выглядит полярная гипербола г= а+ ? Если нет, вас ждет сюрприз!

Ф

Сначала дадим определение функции PolarXYAB для полярных гипербол.

PolarXYAB [t_, а_, b_] :=

PolarXY[r=a+ b / t , t ]

Вот как теперь рисуется полярная гипербола.

Р114 = P a r a m e tr ic P lo t [ PolarXYAB[t,a=l,b=2],

{t,-20Pi,20Pi}, PlotLabel -> "Кривые в полярных координатах",

AspectRatio->l,PlotDivision->100];

Мультимедиа: геометрия, графика, кино, звук

271

Кривые в полярных координатах

Позвольте вас спросить, а сколько асимптот у полярной гиперболы?!

Пример 9.10. Параболы в полярных координатах. Применим теперь введенную нами функцию PolarXY[r_, phi_] :={r*Cos [phi],r*Sin [phi] } для вычерчивания по­

лярных парабол г = дф2+6ф+с. Сначала дадим определение функции PolarXYAB для полярных парабол.

PolarXYAB [t_, а_, b_, с_] :=

PolarXY[r=a*tA2+b*t+cft]

Вот как теперь рисуется полярная парабола.

Р115 = P a r a m e t r ic P lo t [

PolarXYAB [t,а==0.001, b=0.2, с=1 ],

{t,-20Pif20Pi}, PlotLabel -> "Кривые в полярных координатах",

AspectRatio->l,PlotDivision->100];

272

Гпава 9

Кривые в полярных координатах

Пример 9.11. Кривые второго порядка в полярных координатах. Ну а сложно ли вы­ чертить в полярных координатах обычную кривую второго порядка? Нисколько. Сна­ чала дадим определение функции PolarXYAB для обычных кривых второго порядка.

PolarXYAB [t_, а_, b_] :=

PolarXY [г=1/ (a+b*C os [t]) , t]

В зависимости от параметров у нас получится обычная кривая второго порядка, причем фокус будет находиться в начале координат. Вот как рисуется обычная гипер­ бола.

Р116 = P a r a m e tr ic P lo t [

PolarXYAB[t,a=l,b=2],

{t,0,2Pi}, PlotLabel -> "Кривые в полярных координатах",

AspectRatio->l,PlotDivision->100];

Мультимедиа: геометрия, графика, кино, звук

273

Кривые в полярных координатах

Пример 9.12. Спираль Корню. Предположим, нужно начертить кривую, которая имеет сложные параметрические уравнения х = x(t) и у = y(t). Тогда лучше всего предварительно определить функции х = x{t) и у = y(t) и именно их использовать в функции ParametricPlot. Покажем, как это делается на примере спирали Корню. В соответствии с рекомендацией сначала определяем x(t) и y(f) для спирали Корню.

x [t_ J ^Integrate [Sin [uA2],{u, 0, t}]

FresnelS

у [t _ ] integrate [Cos [uA2],{u, 0, t} ]

FresnelC

Как видите, система Mathematica заметила, что x(t) и y(t) являются интегралами Френеля. Теперь, определив *(/) и у(г), можем построить график.

Р117 = P a r a m e tr ic P lo t[

{ x [ t ] , y [ t ] } ,

{t,-10,10),

PlotLabel -> "Кривые в полярных координатах — Спираль Корню",

AspectRatio->l,PlotDivision->200];

274

Гпава 9

Специальные типы графиков

Как мы видели, функция ParametricPlot практически универсальна. Однако часто приходится строить графики специального вида. Тогда можно воспользоваться более специализированными функциями.

Графики в полярной системе координат

Построение графиков в полярной системе координат зачастую упрощается, если воспользоваться функцией PolarPlot из пакета Graphics'Graphics' Пакет этот загружается как обычно.

«Graphics'Graphics'

Ниже показано, как нарисовать эллипс и улитку на одном графике.

PolarPlot [ { 4 / (2 + C o s [ t ] ) , 4 Cos [ t ] - 2 } , { t , 0 , 2 P i } ] ;

Мультимедиа: геометрия, графика, кино, звук

275

Пример 9.13. Несколько графиков в разных системах координат на одном чертеже. Иногда на одном листе (чертеже) нужно начертить несколько графиков, притом в разных системах координат. Предположим, на одном листе нужно начертить четыре графика, расположив их в два ряда по два графика, т.е. два графика в верхнем ряду и два — в нижнем. Два графика создадим с помощью функции ParametricPlot, а два — с помощью функции PolarPlot. Сначала загружаем нужный графический пакет.

«Graphics4Graphics4

А теперь задаем радиус-вектор как функцию угла

Clear[г]

г [theta_J = S in [8 t h e t a / 7 ] ;

и определяем первый график.

p p l= P a r a m e tr ic P lo t[{г [theta]Cos[theta],г [theta]Sin[theta]}, {theta,0,14Pi],AspectRatio->Automatic,DisplayFunction->Identity] ;

После этого точно так же готовим второй график.

Clear[г]

г [theta_]= th e ta * C o s [ t h e t a ] ;

p p 2 = P a r a m e tr ic P lo t[{r[theta]Cos[theta],r[theta]Sin[theta]},

 

{theta,-19Pi/2,19Pi/2},AspectRatio->Automatic,PlotPoints->200,

j

DisplayFunction->Identity];

Аналогично строим третий график, но в полярных координатах с помощью функ-j

ции PolarPlot.

j

Clear[г]

 

r [ t h e ta _ ] = E ^ [ C o s [

t h e ta ] ] - 2 C o s [ 4 t h e t a ] + S in [ t h e t a /1 2 ] A5;

p p 3 = P o la r P lo t[ r [ th e t a ] ,{theta,0,24Pi},AspectRatio->Automatic, PlotPoints->200,PlotRange->{{-4,5}, {-4.5, 4.5}}, DisplayFunction->Identity];

Последний, четвертый, график тоже строим в полярных координатах с помощью функции PolarPlot.

Clear[г]

pp4=PolarPlot[{Sqrt[1/theta],-Sqrt[1/theta]}, {theta,0.1,lOPi}, AspectRatio->Autofoatic,PlotPoints->200, PlotRange->All,DisplayFunction->Identity];

Наконец, группируем четыре графика в двухмерный массив с помощью функции GraphicsArray и отображаем все четыре графика (полученный массив из двух строк по два графика в строке) с помощью функции Show.

Show[G rap h icsA rray [ {{ p p l , p p 2 }, { р р З , р р 4 ) } ] ] ;

276

Гпава 9

-4

Как видите, все очень просто! Зато сейчас вам предстоит ответить на очень труд­ ный вопрос: какая из функций PolarPlot и ParametricPlot лучше подходит для создания графика функции, заданной в полярных координатах? По собственному опыту могу сказать, что часто ответ очевиден, но иногда легче начертить по сотне графиков с помощью обеих функций, чем обосновать без ссылок на личные предпоч­ тения выбор конкретной функции!

Графикфункции, заданной на дискретном множестве точек, — функция ListPlot

Функция ListPlot предназначена для построения графика функции, заданной на дискретном множестве точек. Поэтому ее первый аргумент является либо спи­ ском значений функции (в этом случае считается, что эти значения функция при­

нимает в точках 1, 2, 3, ...), либо списком пар вида

{абсцисса,

ордината}. Конечно,

этот список можно создать и какой-либо

функцией,

например Table.

Уэтой функции есть одна отличительная особенность: размером точек управляет графическая директива PointSize, а не Thickness, потому что в данном случае мы имеем точки, а не линии. Впрочем, иногда точки на графике нужно соединить от­ резками прямых. Для этого в функции ListPlot нужно установить дополнительную опцию PlotJoined->True. К другим часто используемым опциям относятся AxesOrigin, GridLines И PlotStyle.

Плоские графики функций двух переменных

Казалось бы, плоскость двухмерна, и потому на ней можно рисовать графики только одной переменной. Но, оказывается, что на самом деле, хотя плоскость и пло­ ская, ее можно раскрасить и с помощью цвета отобразить значение функции от двух независимых переменных! До этого давно додумались картографы. Система Mathemaйсатоже умеет использовать эту возможность. Функции ContourPlot и DensityPlot позволяют графически изображать функции двух независимых переменных. Функция ContourPlot, например, строит линии уровня. Первым аргументом рассматриваемых

Мультимедиа: геометрия, графика, кино, звук

277

функций является выражение, задающее функцию двух переменных. Независимые переменные и области их изменения определяются с помощью двух списков вида

{переменная, минимальное^значение, максимальное^значение), следующих за первым аргументом.

Линии уровня

Вы наверняка видели топографические карты какой-нибудь местности и физиче­ ские карты материков, океанов и островов. И, несомненно, вы не могли не заметить на них линии уровня. Вдоль таких линий высота над уровнем моря постоянна. Если двигаться по таким линиям, высота над уровнем моря не будет изменяться. Но высоту над уровнем моря можно рассматривать как функцию точки. Линии (трчнее, множе­ ства) точек, на которых функция постоянна, называются линиями уровня, или изоли­ ниями (данной функции). В системе Mathematica есть две функции, предназначенные для вычерчивания графиков с линиями уровня: ContourPlot и ListContourPlot.

Ф у н к ц и я C o n to u r P lo t

Эта функция вычерчивает графики функций, заданных аналитически. Вот как, на­ пример, можно вычертить график функции z = sin ху с линиями уровня.

ContourPlot [Sin [х у] ,{х, -5,5},{У/-5, 5}];

4

2

О

-2

-4

Как видите, это подобно раскраске физической карты. Иногда нужно оставить то­ лько линии уровня, а сам график не раскрашивать. Тогда нужно воспользоваться оп­ цией ContourShading->False.

ContourPlot[ S i n [хл2 Exp[ S in [у]]],

{x,-5,5},{у,-5,5},ContourShading->False];

278

Глава 9

-

4

-

2

0

2

4

Иногда, наоборот, нужно оставить только раскраску, а изолинии сделать невиди­ мыми. Тогда нужно воспользоваться опцией ContourLines->False.

ContourPlot [S in [x ] E x p [ S i n [ y ] ] ,

{ x , - 3 P i , 3 P i }, {y , - 3 P i , 3 P i } , C o n to u r L in e s -> F a ls e ];

Мультимедиа: геометрия, графика, кино, звук

279

Контурный график можно раскрасить. Для этого нужно воспользоваться опцией

ColorFunction->Hue. (По умолчанию установлено ColorFunction->Automatic, что

приводит к раскраске оттенками серого.) В случае опции ColorFunction->Automatic области с меньшими значениями функции имеют более темные оттенки серого цвета, чем области с большими значениями функции. Иногда нужно подобрать цвета. Тогда придется поэкспериментировать с этой опцией. Можно, например, установить

ColorFunction->(Hue[1-#]&), ColorFunction->(Hue[Abs[0.5-#]]& ) или ColorFunction-> (Hue [1-Sin [Pi (1-#) ]]&). По возможности можете руководствова­ ться правилами цветового дизайна, я же советов давать не буду, поскольку, как из­ вестно, на вкус и на цвет товарища нет...

Как быть, если нужно отображать только изолинии, соответствующие заранее задан­ ному количеству уровней, или только изолинии заданных уровней? Нет проблем! Для этого есть опция Contours. По умолчанию число линий уровня на рисунке равно десяти, но если установить Contours-»;, то будут отображаться только изолинии п уровней, равномерно распределенных между максимальным и минимальным значе­ ниями функции. На следующем графике отображаются только изолинии 30 уровней.

ContourPlot[ S i n [ x / y ] ,{х,-Pi,Pi},{у,-Pi,Pi},

C o n to u r s -> 3 0 ,ContourShading->False];

- 3

- 2 - 1 0

1

2

3

Если же нужно отображать только изолинии заданных уровней, то опцию Contours нужно установить равной списку этих уровней.

C o n tourP lot[ S i n [ x / y ] , {х,- P i,P i} ,{у,- P i,P i},

C o n to u rs->Т аЫ е [x A0 . 4 /3 0 A0 . 3 , ( x , 0 , 3 0 } ] , C o n to u r S h a d in g -> F a lse] ;

280

Глава 9;