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

Автор: Пользователь скрыл имя, 17 Марта 2011 в 11:57, реферат

Краткое описание

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

Файлы: 1 файл

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

— 782.63 Кб (Скачать)

Команда пакета matrixplot строит поверхность, z-координата которой задается матрицей (рис. 56). 

> with(linalg):

A:= hilbert(8): B:= toeplitz([1,2,3,4,-4,-3,-2,-1]):

matrixplot(A+B,heights=histogram,axes=frame,gap=0.25,style=patch); 

Warning, new definition for norm 

Warning, new definition for trace 
 
 

Рис. 56 

Команда odeplot , входящая в пакет позволяет строить графики решения дифференциальных уравнений и систем. Рассмотрим систему. 

> sys := diff(y(x),x)=z(x),diff(z(x),x)=y(x): fcns := {y(x), z(x)}:

p:= dsolve({sys,y(0)=0,z(0)=1},fcns,type=numeric): 

Трехмерная кривая решения (рис. 57). 

> odeplot(p, [x,y(x),z(x)],-4..4,numpoints=25, color=orange); 

 

Рис. 57 

  

Команда polygonplot3d используется для создания трехмерного графика  из многоугольников. Многоугольник  задается списком точек, определяющих вершины многоугольника. 

Приведем пример (рис. 58). 

> list_polys := [seq([seq([T/10,S/20,sin(T*S/20)],T=0..20)],S=0..10)]:

polygonplot3d(list_polys); 

 

Рис. 58 

Команда spacecurve предназначена для построения параметрически заданных кривых в пространстве (рис. 59) 

> knot:= [-10*cos(t) - 2*cos(5*t) + 15*sin(2*t),-15*cos(2*t) + 10*sin(t) - 2*sin(5*t), 10*cos(3*t)];

spacecurve(knot,t= 0..2*Pi); 

  

 

Рис. 59 

При помощи команды  surfdata строится поверхность по заданным точкам (рис. 60). 

> with(plots):

data := [seq([ seq([i,j,evalf(cos((i+j)/5))], i=-5..5)], j=-5..5)]:

F := (x,y) -> x^2 + y^2:

surfdata( data, axes=frame, labels=[x,y,z],color=F ); 

  

 

Рис. 60 

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

  

> textplot3d([[1,2,3,`The first point`],[2,2,3,`Second point`]],color=green);

Рис. 61 
 
 

И, наконец, командой tubeplot можно создавать трубчатые графические объекты (рис. 62) 

> F := (x,y) ->sin(x):

tubeplot({[cos(t),sin(t),0],[0,sin(t)-1,cos(t)]},t=0..2*Pi,radius=t^(1/2)/8,style=patch); 

 

Рис. 62 

рехмерные графики и трехмерная анимация. Графика пакета plottools 
 

Пакет plottools содержит следующие команды, позволяющие создавать трехмерные графические примитивы, чтобы использовать их в других графиках 

cone cuboid cutin cylinder

dodecahedron hemisphere hexahedron icosahedron

octahedron semitorus sphere tetrahedron torus 

Приведем примеры (рис. 65) 

> with(plottools):

f := octahedron([0,0,0],0.8), octahedron([1,1,1],0.5):

plots[display](f,style=patch); 
 

Warning, new definition for curve 

Warning, new definition for translate 

 

Рис. 65 

На следующем примере  показано, как можно построить  поверхность, состоящую из правильных многогранников, в данном случае - додекаэдров (рис. 66) 

> data := seq( seq(dodecahedron([i,j,evalf(4*cos((i+j)/5))],0.5), i=-5..5), j=-5..5): 

> plots[display]( data, axes=frame, labels=[x,y,z]); 
 

Рис. 66 

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

Трехмерная анимация выполняться командой аnimаte3d из пакета plots . 

Для осуществления  анимации в аргумент команды аnimаte3d добавлен параметр - переменная анимации и опция frames . Диапазон изменения переменной анимации определяет степень деформации графика, а опция frames - число кадров анимации. 

Далее пример трехмерной анимации (рис. 67) 

> with(plots):

animate3d(cos(t*x)*sin(t*y),x=-Pi..Pi, y=-Pi..Pi,t=1..2); 
 
 

рис. 67 

> 

  

На этом рисунке  вид интерфейса программы Maple , когда анимационная картинка активизирована. 

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

рограммирование в среде Maple 
 

Хотя, как уже было показано в предыдущих главах, много  полезных и удивительных результатов  можно получить, используя интерактивный  режим вычислений, по мере освоения программы Maple вы все больше будете ощущать необходимость создания программ. Как упоминалось во введении к этому руководству, более чем 90 % встроенных в систему команд запрограммированы на собственном, подобном Фортрану , языке программирования Maple V , позволяющем создавать программы как символьных так и численных расчетов. В некоторых случаях обойтись без программирования трудно или вообще невозможно, например при выполнении громоздких повторных вычислений, а также для создания расширений, пополняющих существующую библиотеку.

Процедурное программирование 

Базисные конструкции  языка

1. If/then/else/fi

2. If/then/elif/then/.../else/fi

3. for/from/by/to/do/od

4. While/do/od

Процедуры

1. Параметры процедуры

2. Переменные операционной  среды

3. Команда прерывания ERROR

4. Реккурсивные процедуры, команда RETURN, опция rembler

5. Вложенные процедуры

6. Ньютоновская итерация

7. Оператор афинного преобразования

Методы отладки  программ

1. Трассировка

2. Отладчик

3. Чтение кодов  библиотечных процедур

Сохранение процедур и чтение их в сеансе Maple

Создание собственной  библиотеки и оформление справки  по ее командам

Чтение и запись данных в файлы

1. Запись данных  в файл

2. Чтение данных  из файла

Перекодировка процедур на языки Си и Фортран 

 

Процедурное программирование. Базисные конструкции языка 
 

Базисные конструкции  языка программирования Maple аналогичны соответствующим конструкциям языков высокого уровня. Перечислим наиболее полезные из них. 

  

If/then/else/fi 

  

При помощи этой конструкции  обеспечиваются условные переходы. 

Приведем пример . 

  

> x:=11;if x < 10 then x^2 else x^3 fi; 
 
 
 
 

Обратите Внимание на "fi" (if в обратном направлении) в конце выражения - это признак конца конструкции. После каждой из лексем then и else не обязательно стоит один оператор как в приведенном примере, можно вставлять любое количество программных кодов. Обратите внимание также, что команда условного перехода заканчивается знаком конца команды - точкой с запятой ";" . Это не простое совпадение if/then/else/fi - такая же команда Maple как и любая другая команда и должна заканчиваться точкой с запятой. 

К конструкции условного  перехода может также добавляться  элемент elif : 

  

If/then/elif/then/ .../else/fi 

  

Это команда условного  перехода с введением дополнительных условий elif/then. 

Причем можно устанавливать  любое число таких дополнительных условий 

> if 0<x and x<10 then x^2 elif x<0 then x else x^3 fi; 
 
 

  

Maple обрабатывает циклы при помощи двух различных конструкций, в одной из которых 

  

for/from/by/to/do/od 

  

для задания цикла  используются верхняя и нижняя границы  и величина шага для переменной, меняющейся в диапазоне от нижнего  к верхнему значению границы. Цикл выполняет команды между do и od соответствующее число раз. Переменная диапазона может быть также включена в вычисления. Причем, между лексемами " do " и " od " может быть включено любое число команд Maple . В следующем примере переменная диапазона i меняется от нижней границы 0 до верхней границы 30 с шагом 10 и на каждом шагу выполняется оператор print(i^2) : 

> for i from 0 by 10 to 30 do print(i^2) od; 
 
 
 
 
 
 
 
 

  

Еще одна конструкция  для задания цикла 

While/do/od 

Maple будет повторять оператор, заключенный между do и od пока логическое соотношение, записанное между лексемами while и do не станет истиной. 

> n:= 1; 
 
 

> while n < 10 do n:= n^2+1; od; 
 

Процедурное программирование. Процедуры 
 

Для того чтобы создать  процедуру (подпрограмму), которую вы могли бы использовать неоднократно, в программе Maple используется конструкция proc/end . Процедура записывается следующим образом 

> 

> Имя:=proc(параметр1::type1,параметр2::type2,...) local l1,l2...; global g1,g2...; options op1, op2, ...; тело процедуры; end; 

control character unexpected 

Она начинается с  имени, которому присваивается ключевое слово proc (сокращенное от procedure) за которым в скобках перечисляются формальные параметры процедуры с необязательным указанием их типа - через дважды записанное двоеточие). Далее может идти необязательное перечисление локальных и глобальных переменных, используемых в теле процедуры, заканчиваемое знаком ; .Вслед за этим, если необходимо, идет перечисление опции процедуры, заканчиваемое знаком ;. Далее идет тело процедуры - алгоритм выполнения процедуры. Процедура обязательно заканчивается словом end и следующим за ним знаком конца команды (двоеточие или точка с запятой). Результатом выполнения процедуры, является результат последней выполненной операции, если не применены одна из команд возврата RETURN или ERROR (смотрите ниже). 

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

> restart;plotdiff:=proc(y,x,a,b) local yp;

yp:=diff(y,x);

plot([y,yp],x=a..b);

end; 
 
 

> plotdiff(x^3-2*x+1,x,-1,1); 

 

В этой процедуре  локальной переменной присваивается  значение производной выражения. 

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

Введем команду  присваивания некоторой переменной а значения b 

> a:=b; 
 
 

после этого присвоим переменной b значение с 

> b:=c; 
 
 

А теперь введем 

> a+1; 
 
 

Таким образом, в  интерактивном режиме Maple вычисляет все произведенные присвоения переменной а до конца и выводит последнее присвоенное значение. Используя команду eval можно вызвать первое присвоенное значение 

> eval(a,1); 
 
 

второе присвоенное  значение 

> eval(a,2); 
 
 

а также любой  другой уровень присвоения. Команда  eval без указания уровня вычисляет до последнего уровня. 

> eval(a); 
 
 

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

> f:=proc()

local a,b;

a:=b;

b:=c;

a+1;

end; 
 
 

> f(); 
 
 

Такой результат  связан с тем, что при вызове процедуры  Maple вычисляет только первое присвоенное значение локальных переменных. Функция eval позволяет вычислить последнее присвоенное значение. 

> eval(f()); 
 
 

Исключение - Ditto -оператор ( " ). Он является одной из переменных операционной среды (смотрите ниже), локальным для процедур. При вызове процедуры Maple назначает переменной " значение NULL (пустое выражение). В процессе выполнения процедуры Maple присваивает переменной " значение последнего выражения, вычисленного до последнего уровня присвоения: 

Информация о работе Графики и анимация в Maple