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

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

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

опция PlotStyle -> {{dirl), { d i r

2 } где dirl — совокупность графических

директив, относящихся к 1-му графику,

dir2 — совокупность графических директив,

относящихся к 2-му графику, и т.д. Ниже вычерчено два графика: парабола — жирной линией и прямая — потоньше. Кроме того, эти графики различаются цветом (на эк­ ране, конечно).

р12 = Plot [{-40хЛ2 + 800х + 30, Ю О х +

3000}, {х, 6,12},

Hue[0.]} } ];

P lo t S t y le -> { {Thickness[0.01] } ,

{Thickness[0.005],

Заметьте, что координатные оси пересекаются на этом рисунке не в начале коорди­ нат (не в точке с координатами (0, 0)). Однако если установить опцию A x e s O r ig in - > [xorigin, yorigin}, то оси будут пересекаться в точке с координатами (xorigin, yorigin).

Рассмотрим пример построения графиков нескольких функций. Пусть функции, графики которых мы хотим построить, получаются с помощью функции T a b le или NDSolve. Для определенности пусть это будут полиномы Чебышева. Следующая стро­ ка ошибочна.

Plot [ T a b le [ C h e b y s h e v T [ n ,x ] ,{ n ,1 , 4 } ] , { x , - 1 , 1 } ]

Дело в том, что здесь система Mathematica не сможет вычислить функции. Поче­ му? Давайте разберемся. Начнем сначала. Вот график, который строится без проблем.

Plot [ {C h e b y sh ev T [ 0 , х ] , C h e b y sh e v T [ 1 , х ] ,

C h eb y sh ev T [ 2 , х ] , C h e b y sh e v T [ 3 , х ] } , { х , - 1 , 1 } ,

P l o t S t y l e - > T a b l e [ { T h ic k n e s s [ ( 3 + 2 i ) / 1 0 0 0 ] } , { i , 0 , 3 } ] ] ;

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

261

Здесь построены

графики первых четырех полиномов Чебы ш ева первого рода:

C h e b y sh ev T [0 , х)

полином

нулевого

порядка, равный тож дественно единице,

C hebysh evT [ 1 , х ] =

дс,

а также

полиномы

C hebysh evT [2 , z] и C hebysh evT [3 , х].

Н о вот так график построить не удастся.

I is t0 1 = { C h e b y s h e v T [ О ,х ] , C h eb ysh evT [ 1 , х ] , C h eb y sh ev T [ 2 , х ] , C h eb y sh ev T [ 3 , х ] }

{1 , х , - 1 + 2 х 2, - З х + 4 х 3 }

 

P lo t [ l i s t O l , { x , - l f i n

;

 

P l o t : : p l n r

l i s t O l

i s n o t a

 

m a c h in e - s iz e r e a l num ber a t x

- 1 . . More...

Оказывается, систем а M athem atica не может вычислить значения l i s t O l ! Почему? П отому что функция P lo t имеет атрибут H o ld A ll.

A t t r i b u t e s [ P l o t ]

{ H o ld A ll,P r o t e c t e d )

Этот атрибут указывает, что аргументы функций вычисляться не должны . Обычно аргументы функций вычисляются.

h h [1 + 2 ,2 + 3 ,3 + 4 ] h h [ 3 ,5 , 7 ]

Н о если ф ункции приписать атрибут H o ld A ll, вычисления аргументов выполнять­

ся не будут.

S e t A t t r ib u t e s [ h h ,H o ld A ll] h h [ 1 + 2 ,2 + 3 ,3+4]

h h [1 + 2 ,2 + 3 ,3 + 4 ]

Чтобы

в таких случаях выполнить вычисления, м ож но использовать функцию

E v a lu a te .

Выражение P lo t [E v a lu a te [ l i s t O l ] , {х , - 1 ,1 } ] ; строит предыдущий

график без проблем. Н иже построены графики 8 полиномов Чебышева.

P lo t [ E v a lu a t e [ T a b le [ C h e b y s h e v T [ n ,x ] , {n , 1 , 8 } ] ] , { x , - 1 , 1 } , P lo t S t y le - > T a b le [ { T h ic k n e s s [ ( 3 + 2 i ) / 1 0 0 0 ] ) , { i , 0 , 3 } ] ] ;

И ногда на рисунке через точки координатных осей с координатными отметками нуж но провести сетку вертикальных и горизонтальных прямых. Для этого достаточно установить опцию GridLines равной Automatic.

plot02=Plot[Sin[хЛ2],(х,-Pi,Pi), PlotStyle -> Thickness[0.005],

262

Г л ав а 9

AxesStyle-> {Thickness[0.004]},

G r± d L ± n es-> A u tom atic,

PlotLabel->"Plot of y=Sin[xA2)",

DefaultFont->{"Arial",14} ];

В данном случае сетка видна на графике функции у = sin х2, приведенном выше. Опция PlotStyle задается так же, как и опции AxesStyle и FrameStyle, но оп­

ределяет графический стиль линий.

При построении графиков система Mathematica использует адаптивный алгоритм, который предусматривает получение достаточно гладких кривых. Одним из крите­ риев гладкости является величина угла между последовательными отрезками, аппроксимирующими график функции между соседними точками, в которых вы­ числяются ее значения. Величина этого угла устанавливается опцией MaxBend, по

умолчанию он равен 10е. Вот график функции у = е~*

P lo t[e‘x2, {х , - 5 , 5}] ;

Как видите, график построен не полностью. Причина заключается в том, что ввер­ хумы имеем слишком острый пик. Но если увеличить опцию MaxBend, например, до 15, пик будет нарисован полностью.

P lo t[e’x2, { х , - 5 , 5 } , M axBend-> 15] ;

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

263

Иногда значение этой опции приходится уменьшать.

Plot [хА1 Sin [100/х],{х, -5, 5} ,MaxBend->10];

Слева хорошо заметен излом. Этот недостаток легко исправить.

Plot[ х А1 Sin[ 1 0 0 / х ] , { х , -5,5} , M axB en d->l] ;

Как видите, несколько изъянов исчезло.

264

Глава 9

Количество точек, в которых производятся вычисления, регулируется опцией plotPoints, которая по умолчанию равна 25. Если угол между последовательными сегментами превосходит значение опции MaxBend, то производится дробление интер­ вала между соседними точками, но таких шагов дробления не может быть больше, чем значение опции PlotDivision. Если это значение мало, график получится угло­ ватым.

plot[Sin[10х], {х,0,2 PI} / P l o t D i v i s i o n - > l ] ;

Если же использовать значение по умолчанию (оно больше 1), график будет более гладким.

Plot[Sin[10х] ,{х,0/2Pi}];

Для уменьшения времени вычисления функций в выбранных по адаптивному алгоритму точках производится их компилирование, заключающееся в создании не­ которого псевдокода. Однако это может привести к уменьшению точности вы­ числений. Чтобы избежать подобной потери точности, нужно применить опцию Compiled->False. Давайте посмотрим, для каких функций по умолчанию установле­

на опция Compiled->True.

Block [{$Messages= {}},

Select[Names["*"],

Options[ToExpression[#],Compiled]=={Compiled->True}&]] (ContourPlot,DensityPlot,FindMaximum,FindMinimum,FindRoot, NDSolve, NIntegrate,NProduct,NSum,ParametricPlot, ParametricPlot3D, Play,Plot,Plot3D}

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

265

Построение графиков функций, заданных параметрически, — функция ParametricPIot

Функция ParametricPIot позволяет рисовать кривые и семейства кривых, задан­ ных параметрически. Эта функция имеет те же опции, что и функция Plot. В некото­ ром смысле эта функция универсальна. Если не учитывать неявно заданных функций, то именно функция ParametricPIot позволяет построить графики всех мыслимых функций, включая и многозначные. Без проблем строятся и графики, заданные в по­ лярной системе координат. Фигуры Лиссажу, кривые Уатта, овалы Кассини, Декарта, Мюнгера, улитки Паскаля, однолистники, листы Декарта, всевозможные розы и ро­ зетки, рулеты, годографы, эволюты и эвольвенты всех мыслимых и немыслимых кри­ вых, циклоиды, всевозможные спирали, циссоиды, конхоиды, строфоиды, астроиды, кардиоиды, неоиды, лемнискаты, узлы, квадратрисы, клотоиды, кохлеоиды, трохоиды, элипсиды, катакаустики, всевозможные параболы, локсодромы и лоциклики, трезуб­ цы, трисектрисы, трилистники, верзиеры, брахистохроны, подэры, кривые с именами древнегреческих и средневековых ученых — вот далеко не полный перечень всевоз­ можного зверья, которое может быть нарисовано функцией ParametricPIot.

Пример 9.3. Фтуры Лиссажу. Это классический пример применения функции ParametricPIot. Рисуются эти фигуры совсем просто, и потомумы нарисуем сразу несколько.

р104 = P a r a m e t r ic P I o t [Evaluate[ Table[{C o s[t ] , S i n [ i * t ] },{i,2,7}]],

{t,0,2Pi}, PlotLabel -> "Lissajou figures'1]; Lissajou figures

Пример 9.4. Розы и розетки. Эти цветы весьма многочисленны, выглядят, как пра­ вило, очень мило и легко рисуются. Процесс вычерчивания совсем прост, если пред­ варительно определить следующую функцию.

P o la rR [ a l _ , а 2 _ , om ega_, p h i_ ] : =M odule [ {r= al+a2*C os [om ega*phi] }, { r * C o s [ p h i] , r * S i n [ p h i ] }]

Вот как, например, с помощью этой функции рисуется многолепестковая роза.

р Ю 5 = P a ra m etricP Io t [P o la rR [ 0 ,1 , 8, t ] ,

{ t , 0 , 2 P i } # P lo tL a b e l -> "Розы и р озетк и " ];

266

Глава 9

Розы и розетки

А вот еще один милый цветок.

рЮб = P a r a m e t r ic P lo t [PolarR[l,4,12,t],

{ t , 0 , 2 P i } , P lo t L a b e l -> "Розы

и

р о зет к и " ];

Розы

и

р озетк и

Цветы эти столь разнообразны, что согласия относительно количества их видов нет. Одни насчитывают более полтора десятка видов, другие — не менее сотни.

Пример 9.5. Кривые в полярных координатах. Построение кривых в полярных коор­ динатах значительно упрощается, если предварительно определить функцию P olarX Y .

PolarXY [r _ , p h i_ J : =

{ r * C o s [ p h i] , r * S i n [ p h i ] }

Вот как, например, с помощью этой функции рисуется улитка Паскаля.

р107 = P a r a m e tr ic P lo t [P o la rX Y [ l+ 2 C o s [ t ] , t ] ,

{ t , 0 , 2 P i } , P lo t L a b e l -> "Кривые в полярных к оординатах"];

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

267

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

Пример 9.6. Полярные зверинцы. Иногда приходится подбирать параметры в семей­ стве кривых, заданных в полярных координатах. Этот процесс значительно упрощает­ ся, если предварительно в определение функции PolarX Y ввести параметры, которые определяют кривую семейства.

PolarXYAB [ г_, p h i_ , а _ , Ь_] : =

{ r * C o s [ a * p h i] , r * S in [ b * p h i] }

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

р 108 = P a r a m e tr ic P lo t[P o la r X Y A B [S in [5 t ] , t , 5 , 1 9 ] ,

{ t , 0 , 2 P i } , P lo t L a b e l ->

"Кривые в

полярных к оорди н атах"];

Кривые

в полярных

координатах

Как вам эта зверушка? Понравилась? Если да, вы подобрали параметры! Если нет, пробуйте другие параметры.

рЮ 9 « P a r * » * t r ic P lo t [PolarXYAB [S in [ 8 t ] , t , 5 , 1 9 ] ,

{ t , 0 , 2 P i } # P lo tL a b e l -> "Кривые в полярных координатах"];

268

Г пава 9

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

Ну а эта зверушка? Неужели не нравится? Тогда продолжайте перебирать параметры...

Пример 9.7. Годографы1. И ногда приходится вычерчивать годографы семейства век­ тор-функций, заданны х в полярных координатах. В определении такой ф ункции часто участвует некий вектор (очень часто единичны й), который с течением времени вра­ щается вокруг начала координат. Пусть, например, нуж но вычертить годограф векторфункции r(t) = ate + R,+a(e) + A R ^ i e ) , где ё — единичны й вектор, /?ф — поворот на

угол ф вокруг начала координат, а а , а, А, со, р — заданны е параметры. Тогда, чтобы упростить определение ф ункции PolarXYAB, м ож но поступить так. Сначала опреде­ лим следую щ ую ф ункцию .

R p h i[ p h i_ ] : = { C o s [ p h i] , S i n [ p h i ] }

С ее помощ ью значительно упрощ ается определение ф ункции PolarXYAB, которое упрощает задание кривой семейства.

PolarXYAB [ t _ , а__, a lp h a _ , аа__, om ega _ , b e ta _ J : =

{О ,a * t } + R p h i[ t+ a lp h a ]+ a a * R p h i[o m e g a * t+ b e ta ]

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

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

P o la r X Y A B [t,а = 2 ,a lp h a = P i/2 f а а = 1 , o m e g a = - 2 ,b e ta = 0 ] ,

{ t , 0 , 4 P i } , P lo t L a b e l ->

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

Кривые

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

Как вам эта зверушка? Если думаете, что они все такие, вы ош ибаетесь.

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

269

p i l l =

P a r a m e t r lc P lo t [ PolarX Y A B [t , a = 0 ,a lp h a = 0 ,a a = 3 ,o m e g a = l/3 ,b e t a = 0 ] , { t , 0 , 6 P i ) , P lo t L a b e l -> "Кривые в полярных к оординатах"];

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

Пример 9.8. Циклоиды.

Циклоиды (высших порядков) описываются уравнением

Z =

• Вот как, например,

выглядит определение функции

PolarXYAB для циклоид некоторого определенного

типа.

PolarXYAB [ t _ , r l _ , r 2 _ , а _ , om ega_] : = r l+ r 2 * R p h i[t]+ a * R p h i[o m e g a * t]

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

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

P o la r X Y A B [t,r l= l, r 2 = - 2 ,a = 2 , om ega= 3] ,

{ t , 0 , 2 P i } , P lo t L a b e l ->"Кривые в полярных к оорди н атах" A s p e c t R a t i o - > l] ;

270

Гпава 9