* Данный текст распознан в автоматическом режиме, поэтому может содержать ошибки
186
Работа с математическими выражениями и функциями
Здесь oper – имя определяемого оператора, property1, property2 и т. д. – наименования свойств. В принципе, оператор define позволяет создавать опера торы с новыми свойствами, которые отсутствуют у операторов и функций, встро енных в систему. Могут быть указаны следующие свойства операторов: • unary – унарный оператор; • binary – бинарный оператор; • diff – дифференциальный оператор; • linear – линейный оператор; • multilinear – множественный линейный оператор; • flat – ассоциативный оператор, для которого f(x,f(y,z)) = f(f(x,y),z) = = f(x,y,z); • orderless – коммутативный симметричный оператор, такой что f(x,y) = f(y,x); • antisymmetric – асимметричный оператор, такой что f(x,y) = –f(y,x); • zero – нулевой оператор (например, V:=Vector(5,shape=zero) задает вектор с 5 нулевыми элементами); • identity – единичный оператор (например, M:=Matrix(3,3,shape= identity) задает единичную матрицу). Следующий пример задает линейный оператор L:
> define(L,linear); > L(a*x+b*x^2+c*x^3);
L(ax) + L(bx2) + L(cx3) Для задания некоторых свойств операторов можно использовать уравнения и соотношения вида f(x)=value. Чтобы свойство выполнялось для всех аргумен тов (или некоторого класса аргументов), используется описание forall. Так, приведенный ниже пример задает оператор F, который вычисляет n e число Фи боначчи (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 Обратите внимание на то, что команда restart снимает все определения пе ременных, а соотношения fib(0)=1 и fib(1)=1 задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обыч ного итерационного алгоритма их нахождения, – напоминаем, что очередное чис ло Фибоначчи равно сумме двух предшествующих чисел Фибоначчи.