Иллюстрированный самоучитель по Maple 7
Определение
операторов с помощью оператора define
Большие возможности для создания
операторов с заданными свойствами предоставляет специальный оператор define.
Он записывается в следующей форме:
define(oper,
property1, property2. ._)
Здесь ореr
— имя определяемого оператора, property!, property2 и
т. д. — наименования свойств. В принципе, оператор define
позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов
и функций, встроенных в систему.
Могут быть указаны следующие свойства
операторов:
- unary
— унарный оператор;
- binary
— бинарный оператор;
- diff
— дифференциальный оператор;
- linear
— линейный оператор;
- multilinear
— множественный линейный оператор;
- flat
— ассоциативный оператор, для которого f(x/(y,z)) = f(f(x,y),z)
= f(x,y,z);
- orderless
— коммутативный симметричный оператор, такой что f(x,y) = f(y,x),
- antisymmetric
— асимметричный оператор, такой что f(x,y) = -f(y,xc);
- zero
— нулевой оператор (например, V:=Vector(5,shape=zero)
задает вектор с 5 нулевыми элементами);
- identity
— единичный оператор (например, M:=Matrix(3,3,shape=identity)
задает единичную матрицу).
Следующий пример задает линейный
оператор L:
Для задания некоторых свойств операторов
можно использовать уравнения и соотношения вида f(x)=value.
Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов),
используется описание forall. Так, приведенный ниже пример
задает оператор F, который вычисляет n-е
число Фибоначчи (n > 2):
Обратите внимание на то, что соотношения
fib(0)=l и fib(l)=l задают начальные значения целочисленного
массива чисел Фибоначчи, которые нужны для реализации обычного итерационного
алгоритма их нахождения, — напоминаем, что очередное число Фибоначчи равно сумме
двух предшествующих чисел Фибоначчи.
Последний пример иллюстрирует применение
системной функции time для определения времени, затраченного
на вычисление значения функции fib(20). Это время задается
в секундах. Нетрудно заметить, что даже для ПК с процессором Pentium II 350
МГц это время оказалось довольно значительным (более 3 с), поскольку каждое
новое число Фибоначчи вычисляется заново.