Автор: Пользователь скрыл имя, 17 Марта 2011 в 11:57, реферат
Пожалуй, одно из наиболее впечатляющих свойств программы Maple - превосходная графика. Команды построения графиков и анимации Maple позволяют удовлетворить большинство научных и инженерных потребностей, могут служить прекрасной иллюстрацией в учебном процессе.
Команда пакета matrixplot
строит поверхность, z-координата которой
задается матрицей (рис. 56).
> with(linalg):
A:= hilbert(8): B:= toeplitz([1,2,3,4,-4,-3,-2,-1]
matrixplot(A+B,heights=
Warning, new definition for norm
Warning, new definition for trace
Рис. 56
Команда odeplot , входящая
в пакет позволяет строить графики решения
дифференциальных уравнений и систем.
Рассмотрим систему.
> sys := diff(y(x),x)=z(x),diff(z(x),x)
p:= dsolve({sys,y(0)=0,z(0)=1},
Трехмерная кривая решения
(рис. 57).
> odeplot(p, [x,y(x),z(x)],-4..4,numpoints=
Рис. 57
Команда polygonplot3d используется
для создания трехмерного графика
из многоугольников. Многоугольник
задается списком точек, определяющих
вершины многоугольника.
Приведем пример
(рис. 58).
> list_polys := [seq([seq([T/10,S/20,sin(T*S/
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],[
Рис. 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*
> 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=
рис. 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,
control character unexpected
Она начинается с
имени, которому присваивается ключевое
слово proc (сокращенное от procedure) за которым
в скобках перечисляются формальные параметры
процедуры с необязательным указанием
их типа - через дважды записанное двоеточие).
Далее может идти необязательное перечисление
локальных и глобальных переменных, используемых
в теле процедуры, заканчиваемое знаком
; .Вслед за этим, если необходимо, идет
перечисление опции процедуры, заканчиваемое
знаком ;. Далее идет тело процедуры - алгоритм
выполнения процедуры. Процедура обязательно
заканчивается словом end и следующим за
ним знаком конца команды (двоеточие или
точка с запятой). Результатом выполнения
процедуры, является результат последней
выполненной операции, если не применены
одна из команд возврата RETURN или ERROR (смотрите
ниже).
В следующем примере
очень простая процедура
> restart;plotdiff:=proc(y,x,a,
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 присваивает переменной
" значение последнего выражения, вычисленного
до последнего уровня присвоения: