Графики и анимация в Maple

Графики и анимация в Maple 
 

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

Программа имеет  большое количество функций и  опций настроек для построения как  двух- так и трехмерных графических объектов. Помимо команд plot и plot3d основной библиотеки имеется несколько специализированных пакетов для этих целей: 

это прежде всего  пакет plots , содержащий около пятидесяти команд для построения различного рода графиков и анимации ; 

вспомогательный пакет  plottools , позволяющий создавать различные (около тридцати) дву- и трехмерные графические примитивы, которые могут быть применены в других графиках; 

пакет stats[statplot] содержащий команды для построения специализированных статистических графиков; пакет DEtools , содержащий команды построения графиков решения дифференциальных уравнений как обыкновенных так и в частных производных, фазовых портретов, полей направлений; 

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

Версия 4 программы  Maple поддерживает 45 систем координат (в предыдущей версии всего 4), появились также команды changecoords и addcoords, позволяющие пользователю переходить от одной системы координат к другой, а также вводить свои системы координат. 

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

Двумерные графики. Графики, построенные при помощи команды plot 
 

График явно заданной функции (рис. 11). 

> plot(x*sin(x),x=-3*Pi..3*Pi); 
 

рис. 11 

График функции, заданной в параметрической форме (рис. 12) 

> plot([sin(2*t),cos(3*t),t=0..2*Pi], color=BLUE, title= `МОЙ СИНИЙ ГРАФИК`); 

 

рис. 12 

Графики функций, заданных в виде процедур или операторов (рис. 13) 

> F:=proc(x) sin(exp(x))+sqrt(abs(x)) end; 
 
 

> plot(F, -Pi..Pi); 
 

рис. 13 

для выражений, имеющих  бесконечные разрывы можно добавить опцию discont=true (рис. 14). 

> plot(ln(1+tan(x)),x=-2*Pi..2*Pi,discont=true); 

 

рис. 14 

Несколько графиков объединяются в набор или список (рис. 15). 

> plot([sin(x), convert(series(sin(x),x),polynom)], x=0..Pi, color=[red,blue], style=[line,point]); 
 

рис. 15 

Бесконечно протяженный  график (рис. 16). 

> plot(ln(1+sin(x)), x=0..infinity,-3..3); 
 

рис. 16 

График, построенный  по заданным точкам (рис. 17). 

> l := [[ n, abs(sin(n/10))^cos(n/5)] $n=0..63]:

### WARNING: the definition of the type `symbol` has changed'; see help page for details

plot(l, x=0..63, style=point,symbol=cross); 

 

рис. 17 

  

Полярные координаты с заданной толщиной линии (рис. 18). 

> plot([sin(3*x),x,x=0..2*Pi],coords=polar,thickness=4); 

 

рис. 18 
 

Двумерные графики. Графики, построенные при помощи команд пакета plots 
 

Команды пакета plots расширяют количество типов двумерных графиков. 

Так строится график конформного отображения (рис. 19): 

> with(plots):

conformal((z-1)^(1/2)*(z+1)^(1/2),z=-1-I..1+I); 

 

рис. 19 

Контурный график, отображающий линии пересечения поверхности  с плоскостями, задаваемыми опцией contours ( рис. 20). 

> contourplot(sin(x*y),x=-Pi..Pi,y=-Pi..Pi,grid=[15,15],contours=[-0.9,-1/2,0,1/2,0.9]); 

 

рис. 20 

На следующем рисунке  для той же функции представлен  график плотности линий уровня (более  темные участки соответствуют большей  плотности (рис. 21). 

> densityplot(sin(x*y),x=-Pi..Pi,y=-Pi..Pi,axes=boxed); 

 

рис. 21 

График векторного поля градиентов той же функции (рис. 22) 

> plots[gradplot](sin(x*y),x=-Pi..Pi,y=-Pi..Pi,arrows=SLIM); 

 

рис. 22 

График двумерного векторного поля (рич. 23): 

> plots[fieldplot] ( [cos(x)*sin(y),cos(y)*sin(x)], x=-Pi ..Pi, y=-Pi ..Pi, arrows=SLIM); 
 

рис. 23 

На следующем рисунке  представлен график неявно заданной функции (рис. 24): 

> plots[implicitplot]((x^2/25)+(y^2/9)=1, x=-6 ..6, y=-6 ..6,scaling=CONSTRAINED); 
 
 

рис. 24 

График области, удовлетворяющей  неравенствам, задаются цвета открытых и закрытых границ, внешней и внутренней областей, а также толщина линий  границ (рис. 25). 

> plots[inequal]( {a+b>3, 2*b-a<6, 3*a+2*b>5, -b+a<=8, 3*a+2*b>0},

a=-10..30, b=-10..15, optionsfeasible=(color=red),

optionsopen=(color=blue,thickness=2),

optionsclosed=(color=green, thickness=3),

optionsexcluded=(color=yellow) );

 
 

рис. 25 

В следующей командой строится график списка точек, прочитанный из первого столбца файла Data.txt (рис. 26). 

> plots[listplot](readdata(`e:\\MapleV5\\data2.txt`,float,2), color=black); 

Error, (in readline) file or directory does not exist 

рис. 26 

Возможно построение графиков в логарифмической и двойной логарифмической шкалах (рис. 27). 

> plots[loglogplot]({ x->exp(sin(x)), x->exp(cos(x))},1..10); 

 

рис. 27 

В пакете имеется  команда odeplot для построения графика решения дифференциального уравнения. 

> restart;with(plots);f1:=diff(y(x),x,x,x)+x*sqrt(abs(diff(y(x),x)))+x^2*y(x); 
 
 
 
 
 
 
 
 
 

> ### WARNING: `dsolve` has been extensively rewritten, many new result forms can occur and options are slightly different, see help page for details

F1:=dsolve({f1,y(0)=0,D(y)(0)=1,D(D(y))(0)=1},y(x),numeric); 
 
 

> p:=odeplot(F1,[x,y(x)],-4..5): 

К графику можно  добавить надписи при помощи команды  textplot 

> t1 := textplot([2,3,`Local Maxima (2, 3)`],align=ABOVE):

t2 := textplot([3.9,-14,

`Local Minima(3.9,-14)`],align=BELOW): 

Теперь при помощи команды display отобразим все построенные графические объекты на одном графике (рис. 28). 

> display({p,t1,t2}); 

 

рис. 28 

Мультфильмы на плоскости  строятся при помощи команды animate пакета plots (рис. 29). 

> plots[animate]([sin(t*(2+u)),cos(t*(3+u)),t=0..2*Pi],

u=0..10,colour=red); 

 

рис. 29. 

Пакет содержит также  команду coordplots, позволяющую строить различные системы координат, что позволяет на одном графике представить вид системы координат и сам графический объект, построенный в этой системе координат. На плоскости имеются следующие виды систем координат: биполярная ( bipolar ), кардиоидная ( cardiod ), прямоугольная ( cartesian ), Кассини ( cassinian) , эллиптическая ( elliptic ), гиперболическая ( hyperbolic ), инверсная Кассини ( invcassinian ), инверсная эллиптическая ( invelliptic ), логарифмическая (logarithmic) , Максквелла ( maxwell) , параболическая ( parabolic ), полярная ( polar ), роза ( rose) , и тангенциальная ( tangent ). Приведем примеры (рис. 30, рис. 31). 

> a:=plot(sin(x)^2-cos(x)^2,x=0..2*Pi,coords=polar,thickness=0): 

> b := plots[coordplot](polar,[0..1.5,0..2*Pi]):

plots[display]([a,b]); 

 

рис. 30 

> r1 := plot(sin(cos(x)),x=-2*Pi..2*Pi,coords=bipolar,thickness=3):

r2 := plots[coordplot](bipolar):

plots[display]([r1,r2]); 

 

рис. 31 

Двумерные графики. Графика пакета plottools 
 

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

> with(plottools):

c := circle([1,1], 0.5, color=red):

l := polygon([[0,0], [3,4], [3,1],[2,2],[0,5]], color=yellow, linestyle=3, thickness=2):

r1:=seq(rotate(c, Pi*i/3),i=1..6):

r2:=seq(rotate(l,Pi*2*i/3),i=1..3):

plots[display](r1,r2); 
 
 

рис. 32 

Двумерные графики. Графика статистического пакета 
 

Пакет stats[statplots] содержит следующие команды, позволяющие строить различные статистические графики на плоскости: 

boxplot histogram notchedbox

quantile quantile2 scatter1d

scatter2d symmetry . 

Пусть, например, имеются  две серии статистических данных, независимая Xdata и зависимая Ydata 

with(stats):

### WARNING: the statplots sub-package has been completely rewritten; see the help pages for details

with(stats[statplots]):

Xdata := [4.535, 4.029, 5.407, 1.605, 5.757, 3.527, 7.890, 8.159, 6.092,

13.442, 2.845, 5.172, 3.277, 8.810, 3.657, 7.226, 3.851, 2.162,

2.668, 4.692]:

Ydata:= [7.454, 4.476, 2.873, 5.476, 9.975,-1.476, 1.033, 1.140, 4.813,

.450, -.788, 9.389, 4.811,-3.107, 4.407, 5.534, 1.691, -.789,

1.684, 1.605]: 

Warning, new definition for transform 

Построим статистический график рассеяния с прямоугольными диаграммами (рис. 33). 

> with(stats[statplots]):stats[statplots,scatterplot](Xdata, Ydata,view =[0..17,-4..14], axes=FRAME); 

 

 
 

рис. 33 

На следующем графике  построены гистограмма по данным Xdata и кривая нормального распределения со средним и дисперсией  полученным из Xdata (рис. 34). 

> mu:=sum(Xdata[i],i=1..nops(Xdata))/(nops(Xdata)-1);

sigma:=sqrt(sum((Xdata[i]-mu)^2,i=1..nops(Xdata))/(nops(Xdata)-1)); 
 
 
 
 

> histogram(Xdata, colour=yellow):

plot(stats[statevalf,pdf,normald[mu,sigma]], -3..15, color=red):

plots[display]({%,%%});

 
 

рис. 34 

Двумерные графики. Графка пакета DEtools 
 

Команда DEtools[DEplot] (deqns, vars, trange, inits, xrange, yrange, eqns) - строит решение обыкновенных дифференциальных уравнений и систем, она аналогична команде odeplo t пакета plots, но гораздо более функциональна. 

Параметры аргумента  имеют следующее значение 

deqns - список или набор обыкновенных дифференциальных уравнений любого порядка

vars - список зависимых переменных

trange - диапазон независимой переменной

inits - начальные условия, если они не указаны, то строится только поле направлений

yrange - диапазон первой зависимой переменной

xrange - диапазон второй зависимой переменной

eqns - равенства ключевое слово=величина, задающие дополнительные опции 

  

По заданному набору или списку начальных условий  и системы дифференциальных уравнений  первого порядка или одного дифференциального  уравнения более высокого порядка, DEplot строит кривые решения численными методами. Для двух элемента системы первого порядка будет также строиться график поля направлений, при условии, что система автономна. Для неавтономных систем, поле направлений не будет производится (в этом случае возможны только кривые решения). В любом случае должна быть только одна независимая переменная. 

Метод интегрирования по умолчанию - классический Рунге-Кутта . Другие методы должны быть указаны явно в опциях команды. Заметим, что поскольку для создания кривых используются численные методы, вид графика может зависеть от метода интегрирования, особенно когда имеются асимптоты. 

Представляемое поле направлений состоит из сетки  стрелок, касательных кривым решения. Для каждой точки сетки, стрелка  с центром в (x,y) будет иметь наклон dy/dx. Этот наклон вычисляется по формуле (dy/dt)/(dx/dt), причем обе производные заданы первым аргументом DEplot . Система автономна, когда все члены и множители, кроме производных не содержат в явном виде аргументов, содержащих независимую переменную. 

Для одного дифференциального  уравнения более высокого порядка  могут быть построены только кривые решения. 

По умолчанию, две  зависимые переменные будут построены, если не указано иное в опции scene . 

Ключевые слова  опций могут быть следующими: 

'arrows' = тип стрелки ( 'SMALL', 'MEDIUM', 'LARGE', 'LINE', or 'NONE' )

'colour' = цвет стрелки, который может быть задан различными способами

'dirgrid' = массив, устанавливающий число точек сетки, по умолчанию [20,20]

'iterations' = число итераций (натуральное число)

'linecolour' = цвет линии, задаваемый различными способами

'obsrange' = TRUE,FALSE , устанавливает, прерывать ли вычисление, если кривая выходит из обзора

'scene' = [имя, имя], определяет какие зависимые переменные и в каком порядке должны 

быть выведены в график

'stepsize' = определяет расстояние между точками, которое используется при вычислении 

точек графика, для  trange=a..b, по умолчанию h = abs((b-a))/20. 

Приведем примеры. Следующий график (рис.35) в точности повторяет график, построенный при  помощи команды odeplot пакета plots (смотрите выше) 

> with(DEtools):

DEplot(diff(y(x),x,x,x)+x*sqrt(abs(diff(y(x),x)))+x^2*y(x),

{y(x)},x=-4..5,[[y(0)=0,D(y)(0)=1,(D@@2)(y)(0)=1]],stepsize=.1,linecolour=red); 

Warning, new definition for translate 

 

рис. 35 

Следующий пример системы  из трех уравнений первого порядка, строится фазовая кривая для переменных z и y, w цвет кривой задан функцией от независимой переменной, задан также метод решения системы (рис. 36). 

> DEplot({D(x)(t)=y(t)-z(t),D(y)(t)=z(t)-x(t),D(z)(t)=x(t)-y(t)*2},

{x(t),y(t),z(t)},t=-2..2,[[x(0)=1,y(0)=0,z(0)=2]],

stepsize=.05,scene=[z(t),x(t)],linecolour=sin(t*Pi/2),

method=classical[foreuler]); 

 

рис. 36 

Для следующей автономной системы из двух уравнений строятся две кривые, соответствующие двум начальным условиям, а также поле направлений (рис. 37), 

> DEplot({diff(x(t),t)=x(t)*(1-y(t)),diff(y(t),t)=.3*y(t)*(x(t)-1)},

[x(t),y(t)],t=-7..7,[[x(0)=1.2,y(0)=1.2],[x(0)=1,y(0)=.7]],

stepsize=.2,title=`Lotka-Volterra model`,

color=[.3*y(t)*(x(t)-1),x(t)*(1-y(t)),.1],

linecolor=t/2,arrows=MEDIUM,method=rkf45); 
 

рис. 37 

В пакете DEtools имеется также команда dfieldplot непосредственно предназначенная для построения поля направлений системы из двух уравнений первого порядка, а также команда phaseportrait, непосредственно предназначенная для построения решений и фазовых портретов систем первого порядка и дифференциальных уравнений более высокого порядка. Впрочем, функции этих команд охватываются командой DEplot .

Двумерные графики. Графика геометрического пакета 
 

В геометрическом пакете построение графических объектов осуществляется при помощи команды 

draw( объект1, объект2, ...), где объект - геометрический объект. Приведем примеры 

> with(geometry): 

Определяем треугольник Т 

Warning, new definition for circle 

Warning, new definition for ellipse 

Warning, new definition for homothety 

Warning, new definition for hyperbola 

Warning, new definition for line 

Warning, new definition for point 

> triangle(T,[point(A2,0,0),point(A1,2,4),point(A3,7,0)]): 

Находим, описанную  вокруг треугольника Т окружность 

> circumcircle(C,T,'centername'=OO): 

находим высоты T (altitudes) 

> altitude(A2A22,A2,T,A22):

altitude(A3A33,A3,T,A33):

altitude(A1A11,A1,T,A11): 

Находим центр вписанной  окружности (orthocenter) и центр тяжести (centroid) треугольника T 

> orthocenter(H,T): centroid(G,T): 

Находим медианы T 

> median(A1M1,A1,T,M1):

median(A2M2,A2,T,M2):

median(A3M3,A3,T,M3): 

> dsegment(dsg1,OO,H): dsegment(dsg2,H,G):

dsegment(OM1,OO,M1): dsegment(OM2,OO,M2):

dsegment(OM3,OO,M3):

triangle(T1,[M1,M2,M3]): 

Проверяем, лежат  ли на одной прямой H, OO, G. 

> AreCollinear(OO,H,G); 
 
 

Выводим на дисплей  построенные геометрические объекты (рис. 38) 

> draw([C(color='COLOR'(RGB,1.0,1.0,.8),filled=true),T(color=blue),T1,A3M3,A2M2,A1M1,A2A22,A3A33,A1A11,

dsg1(style=LINE,color=green,thickness=3),dsg2(thickness=3,color=green),

OM1,OM2,OM3],axes=NONE); 
 

рис. 38 

Трехмерные графики  и трехмерная анимация 
 

Для построения поверхностей в трехмерном пространстве используется команда рlot3d а также команды пакетов plots, plottools, DEtools . 

Необязательные дополнительные опции позволяют изменять вид  трехмерных графиков. Опция grid позволяет определять размер прямоугольной сетки для меток ( значение по умолчанию - 25 x 25. ) При помощи опции style можно определять стиль представления поверхности (например РАTCH, WIREFRAME, РOINT) . Опциями color и shаding задаются различные схемы окраски. Опции ambientlight и light позволяют применить освещение рассеянным или направленным светом соответственно. Опция orientation позволит определить точку наблюдаения поверхности. График можно снабдить заголовком, метками и задать количество делений на осях при помощи опций title, labels, tuckmarks соответственно. 

Графики команды plot3d 

Построение трехмерных графиков с помощью команд пакета plots  

Графика пакета DEtools 

Графика пакета plottools 

Трехмерная анимация

Трехмерные графики  и трехмерная анимация. Графики команды plot3d 
 

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

График явно заданной функции (рис. 39). 

> plot3d(sin( x * y), x=-1.5 ..1.5, y=-1.5 ..1.5, style=PATCH, light=[45,45,1,1,1.4],title=`СЕДЛО`); 

Рис. 39

 
 

Можно задавать различные  координатные системы (сферическая, тороидальная и так далее, всего тридцать) (рис. 40); 

> plot3d([x^(1/4)+y^(-1/4),x,y],x=0..2*Pi,y=0..2*Pi,coords=toroidal(10)); 

 

Рис. 40 

в некоторых случаях - устанавливать переменные границы  диапазона (рис. 41); 

> plot3d(sin(y*sin(x)),x=-Pi..Pi,y=-x..x); 

 

Рис. 41 

задать функцию (или  процедуру) цвета (рис. 42). 

> plot3d(x*exp(-x^2-y^2),x=-2..2,y=-2..2,color=x*y); 

 

Рис. 42 

График поверхности, заданной тремя функциями-операторами  параметров u и v (рис. 43) 

> Kx:= (u,v) -> 2*(cos(u) + u*sin(u))*sin(v)/(1 + (u*sin(v))^2): 

> Ky:= (u,v) -> 2*(sin(u) - u*cos(u))*sin(v)/(1 + (u*sin(v))^2): 

> Kz:= (u,v) -> log(tan(v/2)) + 2*cos(v)/(1 + (u*sin(v))^2): 

> plot3d([Kx,Ky,Kz], -4..4, .01..Pi-.01,grid=[35,35]); 

 

Рис. 43 

Другой способ построения поверхности, заданной тремя функциями  параметров u и t (рис. 44). 

> plot3d([cos(t)*(1+.2*sin(u)),sin(t)*(1+.2*sin(u)),.2*sin(t)*cos(u)],t=0..2*Pi,u=-Pi..Pi);

 
 

Рис. 44 

Несколько поверхностей на одном графике (рис. 45) 

> plot3d ( { x*sin(y^2), 1-y*cos(x^2) }, x=-1 ..1, y=-1 ..1 ); 

 

Рис. 45 
 

Трехмерные графики  и трехмерная анимация. Построение трехмерных графиков с помощью команд пакета plots  
 

Пакет Plots содержит функцию coordplots предназначенную для построения координатных плоскостей различных систем координат в пространстве. Полное количество систем координат - тридцать, среди них имеются как часто используемые - прямоугольная, сферическая, цилиндрическая, тороидальная,- так и экзотические, - шестисферная (sixspherical), конфокальная параболическая ( сonfocalparab)

и другие. Перечислим английские наименования всех систем координат:

bipolarcylindrical, bispherical, cardiodal, cardiodcylindrical, casscylindrical, confocalellip, confocalparab, conical, cylindrical, ellcylindrical, ellipsoidal, hypercylindrical, invcasscylindrical, invellcylindrical, invoblspheroidal, invprospheroidal, logcoshcylindrical, logcylindrical, maxwellcylindrical, oblatespheroidal, paraboloidal, paraboloidal2, paracylindrical, prolatespheroidal, rosecylindrical, sixsphere, spherical, tangentcylindrical, tangentsphere, and toroidal. Приведем примеры (рис. 46-48): 

> with(plots):

Digits := 10:

coordplot3d(spherical); 

 

Рис. 46 

> infolevel[coordplot3d]:=2:

coordplot3d(rosecylindrical); 

 

Рис. 47 

> coordplot3d(sixsphere); 

 

Рис. 48 

Команда cylinderplot пакета позволяет строить графики в цилиндрических координатах (рис. 49) 

  

  

> f := (5*cos(y)^2 -1)/3;

plots[cylinderplot](f, x=0..2*Pi,y=-Pi..Pi); 
 

 
 

Рис. 49 

  

Команда complexplot3d позволяет  строить графики комплексных  функций в трехмерном пространстве, причем возможны два варианта записи, в виде 

> complexplot3d( f(z) , z = z1 .. z2 ); 

где f - функция комплексного аргумента z, в этом случае координата z поверхности определяется абсолютной величиной функции, в то время как цвет поверхности определяется аргументом.

В записи 

> complexplot3d( [f1(x,y), f2(x,y)], x = x1..x2, y = y1..y2); 

координата z определяется функцией f1, а цвет функцией f2.

Приведем примеры (рис. 50, рис. 51). 

> complexplot3d( sec(z) , z = -3 - 3*I .. 3 + 3*I ); 
 
 

  

Рис. 50 

график выражения  из R2 в R2: 

> with(plots):complexplot3d( [x^2 - y^2, 2*x*y], x = -2..2, y= -2..2); 

 

Рис. 51 

При помощи команды fieldplot3d пакета возможно построение трехмерных векторных полей (рис. 52). 

> fieldplot3d([2*z*y,2*x*z,2*x*y],x=-1..1,y=-1..1,z=0-1..1,grid=[5,5,5]);

 
 

Команда gradplot3d предназначена  для построения поля градиентов функции (рис. 53). 

> gradplot3d( (x^2+y^2+z^2+1)^(1/2),x=-2..2,y=-2..2,z=-2..2); 
 

При помощи команды implicitplot3d строятся поверхности, заданные неявно (рис. 54). 

> implicitplot3d( x^3 + y^3 + z^3 + 1 = (x + y + z + 1)^3,x=-2..2,y=-2..2,

z=-2..2,grid=[13,13,13]); 

 

Команда listplot3d предназначена  для построения поверхности по точкам, заданным списком списков (матрицей) (рис. 55).. 

> listplot3d([seq([seq(sin((i-15)*(j-10)/Pi/20),i=1..30)],j=1..20)]); 

 

Рис. 55 

Графики и анимация в Maple