Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самоучитель по Maple.docx
Скачиваний:
258
Добавлен:
08.03.2016
Размер:
17.32 Mб
Скачать

8. Функциональные операторы Функциональные операторы

Функциональные операторы Maple-языка являются альтернативами функций и записываются в двух формах.

Нотация

Запись оператора

«arrow» (стрелочная)

vars -> result

«angle bracket» (в угловых скобках)

<result | vars>

Данные операторы могут использоваться для реализации подстановок. Например, запись х -> х^2 означает подстановку х*2 на место переменной х. Возможны и такие подстановки в множественной форме:

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

9. Нейтральные операторы, определяемые пользователем Нейтральные операторы, определяемые пользователем

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

&name

Имя оператора строится по правилам задания допустимых идентификаторов. Также в качестве имени может быть использована последовательность (один и более) специальных символов. В последовательности специальных символов не должно быть букв, цифр, подчеркивания, а также следующих символов:

& | () {} [] :: '' # <перевод строки> <пробел>

Максимальная длина имени — 495 символов. Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного нейтрального оператора приведены ниже:

13.gif

10. Определение операторов с помощью оператора define Определение операторов с помощью оператора 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 с), поскольку каждое новое число Фибоначчи вычисляется заново.

14.gif

15.gif