Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов 17 стр.


3.1.8. Работа с логическими операторами

Логические операторы, именуемые также булевыми, указывают на логическую связь величин (или выражений). Они представлены рядом бинарных операторов, приведенных в табл. 6.3 и реализованы во всех СКМ.

Таблица 3.3. Бинарные логические операторы

Обозначение Оператор
< Меньше
<= Меньше или равно
> Больше
>= Большее или равно
= Равно
о Не равно
And Логическое "и"
Or Логическое "или"

Конструкции с этими операторами, такие как х=у, возвращают логическое значение - константу 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 &/ у

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

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 задают начальные значения целочисленного массива чисел Фибоначчи, которые нужны для реализации обычного итерационного алгоритма их нахождения - напоминаем, что очередное число Фибоначчи равно сумме двух предшествующий чисел Фибоначчи.

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);

• функции, заданные в виде программного модуля.

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

В математических системах Maple функции могут применяться со специальными директивами и опциями. Они могут задаваться как дополнительный параметр функции.

3.2.2. Математические выражения

Математические выражения это сложные (комбинированные) объекты, которые состоят из операторов, операндов и функций со списками их параметров. Например, в выражении (2+3)*sin(x) скобки ( ) и знаки + и * являются операторами, константы 2 и 3 - операндами, sin(x) - встроенной функцией, а х - входным параметром функции. Для оператора умножения выражение (2+3) и функция sin(x), т.е. по существу тоже выражение, являются операторами. Приоритет функций более высокий, чем у операторов.

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

Иное дела системы символьной математики. У них в ходе вычислений выражения эволюционируют , то есть видоизменяются по мере выполнения расчетов. Это может приводить к весьма неожиданным последствиям, например, когда сложнейшее выражение упрощается к 0 или 1, а внешне совсем не страшное выражение разворачивается так, что не помещается в десятке страниц экрана. Набор средств по разбору структуры и преобразованиям математических выражений в таких системах настолько велик, что всерьез разобраться с ними под силу математику-аналитику или достаточно опытному пользователю. Поэтому мы оставим рассмотрение функций анализа выражений на потом - оно будет дано при описании средств символьной математики.

3.2.3. Работа с элементарными функциями в системе Maple

Maple имеет полный набор элементарных математических функций [38–41]. Все они, кроме арктангенса двух аргументов, имеют один аргумент х, например sin(x). Он может быть целым, рациональным, дробно-рациональным, вещественным или комплексным числом. В ответ на обращение к ним элементарные функции возвращают соответствующее значение. Поэтому они могут быть включены в математические выражения. Все описанные здесь функции называются встроенными, поскольку они реализованы в ядре системы.

Как правило, если аргументом функции является фундаментальная константа, целое или рациональное число, то функция выводится с таким аргументом без получения результата в форме действительного числа с плавающей точкой. Например (файл calcfun):

> sin(Pi);

> sin(1);

sin(1)

> exp(1);

e

> ln(2);

ln(2)

> ln(Pi);

ln(π)

> arcsin(1/2);

Maple 9.5/10 в математике, физике и...

> arcsin(1/3);

arcsin(⅓)

Нетрудно заметить, что есть и исключения из этого правила - например, на экране монитора ехр(1) будет выведено как константа е, а значение функции arcsin(1/2) все же вычислено и результат получен как 1/6 от константы Pi. Вообще говоря, если результат выражается через фундаментальную математическую константу, то он будет вычислен и представлен ею. В противном случае функция с целочисленным и рациональным аргументом или с константой просто повторяется в строке вывода в установленном для этой строки формате.

Для получения подробной информации о некоторой произвольной функции <f> достаточно задать команду

> ? <f>

Например, команда

> ? sin

открывает окно справки по тригонометрическим функциям, включая функцию синуса.

Ввиду общеизвестности элементарных функций мы не будем обсуждать ни их свойства, ни допустимые для них пределы изменения аргумента. Эти вопросы отражаются в любом учебнике по элементарной математике.

3.2.4. Некоторые целочисленные функции и факториал

Ниже представлены наиболее распространенные целочисленные функции Maple, используемые в теории чисел:

• factorial(n) - функция вычисления факториала (альтернатива - оператор !);

• iquo(a,b) - целочисленное деление а на b;

• irem(a,b) - остаток от деления а на b;

• igcd(a,b) - наибольший общий делитель;

• lcm(a,b) - наименьшее общее кратное.

Факториал целого числа N задается как N= 1*2*3*...*N при особых случаях 0!=1 и 1!=1. Примеры применения функций, отмеченных выше (файл calcfun):

> [factorial(10),10!];

[3628800, 3628800]

> iquo(234,5);

46

> irem(234,5);

4

> lcm(124,3);

372

> [3!!, (3!)!];

[720, 720]

В последних двух примерах применения оператора факториала полезно обратить внимание, что запись n!! означает лишь (n!)!, а не n!! = 2*4*6*…, то есть произведение четных целых чисел. Действие других функций очевидно. Целочисленные функции, хотя и не все, не могут использоваться для символьных операций, например интегрирования или дифференцирования.

Полезность возможности Maple вычислять факториалы больших чисел демонстрирует следующий пример. Пусть в группе студентов 25 человек, а в году 365 дней. Тогда вероятность того, что ни у кого из студентов дни рождения не совпадают, составит:

Назад Дальше