Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
Конструкции с этими операторами, такие как х=у, возвращают логическое значение — константу true, если условие выполняется, и false, если оно не выполняется. Кроме того, к логическим операторам относится унарный оператор not — он представляет логическое «нет». Для возврата логических значений выражений с этими операторами в Maple 9.5 используется функция evalb(условие), например (файл evalb):
> 5<2 ;
5 < 2> evalb(%);
false> evalb(4=2+2);
true> evalb(3<>3);
false> evalb(not(%));
true> evalb(3=3 and 4>2);
true> evalb(3=3 or 2<0);
true> evalb(x*y=y*x);
trueЛогические операторы часто используются в управляющих структурах программ, составленных на языке программирования Maple. Такое их применение мы рассмотрим позже.
3.1.9. Применение операторов специальных типов
Операторы в Maple описывают операции по преобразованию данных, в частности, выражений. Последние, в свою очередь, можно отнести к данным абстрактного типа. Могут быть описаны следующие типы операторов:
• неопределенные (f);
• нейтральные (&);
• процедурные;
• функциональные;
• композиционные (@).
Оператор относится к неопределенным, если он не был заранее определен. Такой оператор не выполняет никаких действий и просто повторяется в строке вывода:
> restart:f(1,2,а);
f(1, 2, а)Композиционные операторы (на базе знака @) мы уже применяли. Другие типы операторов рассмотрены ниже.
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 &/ у> х&/у-&/(х,у);
03.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 задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения — напоминаем, что очередное число Фибоначчи равно сумме двух предшествующий чисел Фибоначчи.
3.2. Работа с математическими функциями
3.2.1. Понятие о функциях
Более двух сотен лет тому назад в обиход математиков пришло понятие функции, как некоторой зависимости одной величины, например f или у, от другой величины — независимой переменной х или t. Функции стали обозначать как f(x), f(t), y(x) и т.д. Могут быть и функции ряда переменных, например вида f(х, у, z, …). Хотя эти понятия не являются полными, мы ограничимся ими, помня, однако, что функции могут быть определены в различных интервалах изменения их аргументов.
В Maple функция это имеющий уникальное имя (идентификатор) объект математического выражения, выполняющий некоторое преобразование своих входных данных, представленных списком входных параметров. Суть этого преобразования соответствует некоторой функциональной зависимости возвращаемого функцией значения от входных параметров функции. Например, функция sin(x) возвращает значение, которое является синусом входного параметра х. Таким образом, признаком функции является возврат ею некоторого значения.
Входные параметры изначально являются формальными и представляются именами некоторых переменных. Особенностью функции является возврат ее значения в ответ на обращение к функции по имени с указанием фактических параметров в списке параметров функций. Фактические параметры могут быть различными константами, определенными переменными и даже вычисляемыми математическими выражениями.
К примеру, sin(x) является синтаксической формой записи математической функции синуса — sin(x). При этом х — формальный параметр. А уже в выражении sin(1.0) числовая константа 1.0 является фактическим параметром в виде вещественного числа, причем sin(1.0) возвращает численное значение синуса угла в 1 радиан. Функция atan2(x, y) является примером функции, имеющей список из двух формальных параметров — х и у.
Как правило, в системах символьной математики принципиально важно, как записан фактический параметр. Например, число 1. или 1.0 является вещественным, на что указывает разделительная точка. Если число представлено в виде 1, то оно рассматривается как целое и константа. Большинство систем символьной математики не вычисляет выражения вида sin(1) или sin(π/2), а выводит их в исходном виде. Это связано с тем, что такой вид дает о значении функции гораздо больше информации, чем просто ее вычисленное значение.
Благодаря свойству возврата значений функции применяются для построения математических выражений наряду с операторами. Например, математическое выражение 2*sin(x) содержит функцию sin(x) и оператор умножения *. Математические выражения могут быть как очень простыми (наподобие приведенного), так и очень сложными, включающими в себя операторы интегрирования, дифференцирования и иные специальные операторы и функции, а также сложную многоуровневую систему скобок.
Функции обычно подразделяются на четыре типа:
• встроенные в ядро системы предопределенные функции или внутренние функции;
• функции пользователя;
• библиотечные функции, вызываемые из пакетов или библиотек расширения системы, например sin(x) или ln(x);