3.1.10. Применение функциональных операторов

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

Нотация Запись оператора
«arrow» (стрелочная) vars -> result
«angle bracket» (в угловых скобках) <result | vars>

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

(х,у) -> x^2 + у^2

х -> (2*х, 3*х^4)

(х,у,z) -> (х*у, y*z)

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

3.1.11. Определение нейтральных операторов

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

&name

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

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

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

> х&/у;

x&/y

> z+x&/y;

z+(x&/y)

> &/(х, у);

x &/ у

> х&/у-&/(х,у);

0

3.1.12. Определение операторов с помощью оператора define

Большие возможности для создания операторов с заданными свойствами предоставляет специальный оператор define. Он записывается в следующей форме:

define(oper, property1, property2, ...)

Здесь oper — имя определяемого оператора, property1, property2 и т.д. — наименования свойств. В принципе оператор define позволяет создавать операторы с новыми свойствами, которые отсутствуют у операторов и функций, встроенных в систему. Могут быть указаны следующие свойства операторов:

unary — унарный оператор;

binary — бинарный оператор;

diff — дифференциальный оператор;

linear — линейный оператор;

multilinear — множественный линейный оператор;

flat — ассоциативный оператор, для которого f(х,f(y,z)) = f(f(х, y), z) =f (х, у, z);

orderless — коммутативный симметричный оператор, такой что f(х, y) = f(y, х); antisymmetric — асимметричный оператор, такой что f(х, y) = -f(у, х); zero — нулевой оператор (например, V:=Vector(5,shape=zero) задает вектор с 5 нулевыми элементами);

identity — единичный оператор (например, M:=Matrix(3,3,shape=identity) задает единичную матрицу).

Следующий пример задает линейный оператор L:

> define(L,linear);

> L(а*х+b*х^2+с*х^3);

L(ax) + L(bx²) + L(cz³)

Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f (x)=value. Чтобы свойство выполнялось для всех аргументов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет n-е число Фибоначчи (n>2):

> restart;

> define(fib,fib(0)=1,fib(1)=1,fib(n::posint)=fib(n-1)+fib(n-2));

> fib(6);

13

> fib(10);

89

> fib(20);

10946

Обратите внимание на то, что соотношения fib(0)=1 и fib(1)=1 задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующий чисел Фибоначчи.

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату