Нейтральные
операторы, определяемые пользователем
Для создания нейтральных (задаваемых
пользователем и в момент задания неисполняемых) операторов, определяемых пользователем,
служит знак амперсанда — &. Синтаксис нейтрального
оператора следующий:
&name
Имя оператора строится по правилам
задания допустимых идентификаторов. Также в качестве имени может быть использована
последовательность (один и более) специальных символов. В последовательности
специальных символов не должно быть букв, цифр, подчеркивания, а также следующих
символов:
&
| () {} [] :: '' # <перевод строки> <пробел>
Максимальная длина имени — 495 символов.
Нейтральные операторы могут быть унарными и бинарными. Примеры задания бинарного
нейтрального оператора приведены ниже:
Определение
операторов с помощью оператора 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 с), поскольку каждое
новое число Фибоначчи вычисляется заново.
Математические
функции
Понятие о встроенных функциях
Maple 7 имеет полный набор элементарных
математических функций. Все они, кроме арктангенса двух аргументов, имеют один
аргумент х, например sin(x). Он
может быть целым, рациональным, дробно-рациональным, вещественным или комплексным
числом. В ответ на обращение к ним элементарные функции возвращают соответствующее
значение. Поэтому они могут быть включены в математические выражения. Все описанные
здесь функции называются встроенными, поскольку они реализованы в ядре системы.
Как правило, если аргументом функции
является фундаментальная константа, целое или рациональное число, то функция
выводится с таким аргументом без получения результата в форме действительного
числа с плавающей точкой. Например:
Нетрудно заметить, что есть и исключения
из этого правила — например, на экране монитора ехр(1)
будет выведено как константа е, а значение функции
arcsin( 2) все же вычислено и результат получен как 1/6 от константы
Pi. Вообще говоря, если результат выражается через фундаментальную
математическую константу, то он будет вычислен и представлен ею. В противном
случае функция с целочисленным и рациональным аргументом или с константой просто
повторяется в строке вывода в установленном для этой строки формате.
Для получения подробной информации
о некоторой произвольной функции <f> достаточно
задать команду:
?<f>
Ввиду общеизвестности элементарных
функций мы не будем обсуждать ни их свойства, ни допустимые для них пределы
изменения аргумента.
Некоторые
целочисленные функции и факториал
Ниже представлены наиболее распространенные
целочисленные функции Maple 7, используемые в теории чисел:
factorial
(n)
— функция вычисления факториала (альтернатива — оператор !);
iquo(a.b)
— целочисленное деление а на b;
irem(a,b)
— остаток от деления а на b;
igcd(a b)
— наибольший общий делитель;
lcm(a,b)
— наименьшее общее кратное.
Примеры применения:
В последних двух примерах применения
оператора факториала полезно обратить внимание, что запись n!!
означает лишь (n!)!, а не n!! = 2*4*6*...,
то есть произведение четных целых чисел. Действие других функций очевидно.
Тригонометрические
функции
В ядре Maple определены следующие
тригонометрические функции:
sin
— синус;
cos
— косинус;
tan
— тангенс;
sec
— секанс;
csc
— косеканс;
cot
— котангенс.
Все эти функции являются периодическими
(с периодом 2л, кроме тангенса и котангенса, у которых период равен л) и определены
для действительного и комплексного аргументов. Примеры вычислений:
Многие свойства тригонометрических
функций можно оценить, рассматривая их графики. Для построения таких графиков
можно использовать функцию pi ot. На рис. 6.1 сверху показаны графики ряда тригонометрических
функций.
Рис. 6.1.
Графики ряда тригонометрических и обратных тригонометрических функций
Из графиков тригонометрических функций
(рис. 6.1, сверху) хорошо видна их периодичность. Функция тангенса имеет разрывы,
и ее значение в этих точках в пределе равно бесконечности. Поэтому для наглядного
ее представления вместе с функциями синуса и косинуса (их экстремальные значения
по модулю равны 1) приходится вводить ограничения на масштаб графика по оси
у.
ПРИМЕЧАНИЕ
Обратите внимание на параметр
color=black в функции построения графиков plot. Он задает построение
всех графиков черным цветом, что сделано для более четкой печати их в книге.
Если убрать этот параметр, то графики разных функций будут строиться с использованием
разных цветов, что облегчит их различение. Другие способы выделения отдельных
кривых будут описаны в дальнейшем при описании графических возможностей системы
Maple 7.
Обратные
тригонометрические функции
К обратным тригонометрическим относятся
следующие функции:
arcsin
— арксинус;
arccos
— арккосинус;
arctan
— арктангенс;
arcsec
— арксеканс;
arccsc
— арккосеканс;
arccot
— арккотангенс.
Примеры вычислений:
К этому классу функций принадлежит
еще одна полезная функция: arctan(y.x) = argument(x+I*y)
Она возвращает угол радиус-вектора
в интервале от -Pi до Pi при координатах
конца радиус-вектора х и у (см.
пример ниже):
Графики ряда обратных тригонометрических
функций показаны на рис. 6.1.
Гиперболические
функции
Гиперболические функции представлены
следующим набором:
sinh
— гиперболический синус;
cosh
— гиперболический косинус;
tanh
— гиперболический тангенс;
sech
— гиперболический секанс;
csch
— гиперболический косеканс;
coth
— гиперболический котангенс.
Примеры применения гиперболических
функций представлены ниже:
На рис. 6.2 сверху представлены
графики гиперболического синуса, косинуса и тангенса. По ним можно судить о
поведении этих функций.
Рис. 6.2.
Графики основных гиперболических и обратных гиперболических функций
ПРИМЕЧАНИЕ
В отличие от тригонометрических
гиперболические функции не являются периодическими. Функция гиперболического
тангенса имеет симметричную кривую с характерными ограничениями. Поэтому она
широко используется для моделирования передаточных характеристик нелинейных
систем с ограничением выходного параметра при больших значениях входного параметра.
Обратные
гиперболические функции
Как и тригонометрические функции,
гиперболические имеют свои обратные функции:
arcsinh
— гиперболический арксинус;
arccosh
— гиперболический арккосинус;
arctanh
— гиперболический арктангенс;
arcsech
— гиперболический арксеканс:
arccsch
— гиперболический арккосеканс:
arccoth
— гиперболический арккотангенс.
Примеры применения:
Графики обратных гиперболических
синуса, косинуса и тангенса представлены на рис. 6.2 снизу.
Степенные
и логарифмические функции
К степенным и логарифмическим относятся
следующие функции системы Maple 7:
ехр
— экспоненциальная функция;
ilog10
— целочисленный логарифм по основанию 10 (возвращает целую часть от логарифма
по основанию 10);
ilog
— целочисленный логарифм (библиотечная функция, возвращающая
целую часть от натурального логарифма);
n — натуральный логарифм;
log
— логарифм по заданному основанию (библиотечная функция);
log10
— логарифм по основанию 10;
sqrt
— квадратный корень.
Примеры применения:
Графики ряда алгебраических функций
показаны на рис. 6.3.
Рис. 6.З.
Графики ряда алгебраических функций
На рис. 6.3 показаны также графики
синусоиды с экспоненциально падающей и нарастающей амплитудой. Читателю рекомендуется
попробовать свои силы в построении графиков комбинаций различных функций.
Функции
с элементами сравнения
В алгоритме вычисления ряда функций
заложено сравнение результата с некоторым опорным значением. К таким функциям
относятся:
abs
— абсолютное значение числа;
ceil
— наименьшее целое, большее или равное аргументу;
floor
— наибольшее целое, меньшее или равное аргументу;
frac
— дробная часть числа;
trunc
— целое, округленное в направлении нуля;
round
— округленное значение числа;
signum (х)
— знак х (-1 при х < 0, 0 при х = 0 и +1 при х > 0).
Для комплексного аргумента х эти
функции определяются следующим образом:
tranc(x)
= trunc(Re(*)) + I*trunc(IM(x));
round(x) = round(Re(.r))
+ I*round(Im(x));
frac(x) - frac(Re(*))
+ I*hac(Im(x)).
Для введения определения значения
floor(x) от комплексного аргумента прежде всего запишем
а = Re(x) - fооr(Re(x)) и b = Im(x) - floor(Im(x)). Тогда flооr(x)
= floor(Re(x)) + I*floor(Im(x)) + X, где
Наконец, функция
ceil для комплексного аргумента определяется следующим образом:
cell(x)
= -fооr(-х)
Примеры применения:
Функции
комплексного аргумента
Для комплексных чисел и данных,
помимо упомянутых в предшествующем разделе, определен следующий ряд базовых
функций:
argument
— аргумент комплексного числа; 1
conjugate
— комплексно-сопряженное число;
Im
— мнимая часть комплексного числа;
Re
— действительная часть комплексного числа;
роlаг
— полярное представление комплексного числа (библиотечная функция).
Примеры применения:
Специальные
математические функции
Специальные математические функции
обычно являются решениями линейных дифференциальных уравнений различного типа
и выражаются в виде интегралов, не представимых через элементарные функции.
Maple 7 имеет практически полный набор таких функций. Их представления можно
найти в справочной литературе, а также в справочной базе данных Maple. В связи
с этим ограничимся приведением названий наиболее важных специальных функций:
AiryAi (Bi)
— функции Эйри;
AngerJ
— функция Ангера;
bernoulli
— числа и полиномы Бернулли;
Bessel I (J, К,
Y) — функции Бесселя разного
рода;
Beta
— бета-функция;
binomial
— биноминальные коэффициенты;
Chi
— интегральный гиперболический косинус;
Ci
— интегральный косинус;
csgn
— комплексная сигнум-функция;
dilog
— дйлогарифм;
Dirac
— дельта-функция Дирака;
Ei
— экспоненциальный интеграл;
EllipticCE (CK,
CPi, E, F, К, Modulus, Nome, Pi)
— эллиптические интегралы;
erf
— функция ошибок;
erfc
— дополнительная функция ошибок;
euler
— числа и полиномы Эйлера;
FresnelC (f, g,
S) — интегралы Френеля;
GAMMA
— гамма-функция;
GaussAGM
— арифметико-геометрическое среднее Гаусса;
HankelHl (H2)
— функции Ганкеля;
harmonic
— частичная сумма серии гармоник;
Heaviside
— функция Хевисайда;
JacobiAM
(CN, CD, CS, ON, DC, DS, NC, NO, NS, SC, SO, SN) - эллиптические функции
Якоби;
JacobiThetal
(2, 3, 4) — дзета-функции Якоби;
JacobiZeta
— зет :функция Якоби;
KelvinBer
(Bei, Her, Hei, Ker, Kei) — функции Кельвина;
Li
— логарифмический интеграл;
1nGAMMA
— логарифмическая гамма-функция;
MeijerG
— G-функция Мейджера;
pochhammer — символ Похгамера;
polylog
— полилогарифмическая функция;
Psi
— дигамма-функция;
Shi
— интегральный гиперболический синус;
Si
— интегральный синус;
Ssi
— синусный интеграл смещения;
StruveH (L)
— функции Струве;
surd
— неглавная корневая функция;
LambertW
— W-функция Ламберта;
WeberE — Е-функция
Вебера;
WeierstrassP —
Р-функция Вейерштрасса;
WeierstrassPPrime
— производная Р-функции Вейерштрасса;
WeierstrassZeta
— зета-функция Вейерштрасса;
WeierstrassSigma
— сигма-функция Вейерштрасса;
Zeta
— зета-функция Римана и Гурвица.
Ввиду большого числа специальных
функций и наличия множества примеров их вычисления в справочной системе Maple
7 ограничимся несколькими примерами вычисления наиболее распространенных специальных
функций. По их подобию читатель может опробовать в работе и другие специальные
функции.
На рис. 6.4 даны примеры применения
ряда специальных функций. Обратите особое внимание на первый пример. Он показывает,
как средствами системы Maple 7 задается определение функций Бесселя. Показано,
что функции Бесселя являются решениями заданного на рис. 6.4 дифференциального
уравнения второго порядка. Maple 7 способна вычислять производные и интегралы
от специальных функций.
Рис. 6.4.
Примеры применения специальных функций
Еще несколько примеров работы со
специальными функциями представлены на рис.6.5. Как видно из приведенных примеров,
на экране монитора можно получить математически ориентированное представление
специальных функций, обычно более предпочтительное, чем представление на Maple-языке
или в текстовом формате. Записи функций при этом выглядят как в обычной математической
литературе.
Рис. 6.5.
Примеры работы со специальными математическими функциями
На рис. 6.5 показаны примеры разложения
специальных функций в ряды и применения функции convert для их преобразования.
Много информации о поведении специальных
функций дает построение их графиков. На рис. 6.6 показано построение семейства
графиков функций Бесселя BesselJ разного порядка и гамма-функции.
Эти функции относятся к числу наиболее известных. Если читателя интересуют те
или иные специальные функции, следует прежде всего построить и изучить их графики.
Подробное описание специальных функций
можно найти в справочниках [43-45] и в справочной базе данных Maple 7.
Рис. 6.6.
Графики функций Бесселя и гамма-функции
Функции
для работы с векторами и матрицами
Элементы векторов и матриц
Элементы векторов и матриц являются
индексированными переменными, то есть место каждого элемента вектора определяется
его индексом, а у матрицы — двумя индексами. Обычно их обобщенно обозначают
как i (номер строки матрицы или порядковый номер элемента
вектора) iij (номер столбца матрицы). Допустимы операции вызова нужного элемента
и присваивания ему нового значения:
V[1]
— вызов i-го элемента вектора V;
M[i, j]
— вызов элемента матрицы М, расположенного на г-н строке в j-ы столбце;
V[i]:=x
— присваивание нового значения х i-му элементу вектора
V;
M[i,j]:=x
— присваивание нового значения х элементу матрицы М.
Преобразование
списков в векторы и матрицы
Прежде всего надо обратить внимание
на то, что векторы и матрицы хотя и похожи на списки, но не полностью отождествляются
с ними. В этом можно убедиться с помощью следующих примеров, в которых функция
type используется для контроля типов множественных объектов
(векторов и матриц):
Однако, используя функцию преобразования
данных convert, можно преобразовывать одномерные списки
в векторы, а двумерные — в матрицы. Функция type используется
в следующих формах:
type(V, vector)
— тестирует аргумент
V и возвращает true, если V
— вектор, и false в ином случае;
type(M,matrix)
— тестирует аргумент М и возвращает true, если М —
матрица, и false в ином случае.
Здесь параметры
vector и matrix используются для указания того,
какой тип объекта проверяется.
ПРИМЕЧАНИЕ
Обратите внимание на то, что матрицы
отображаются иначе, чем двумерные списки, без двойных квадратных скобок.
Отображение вектора подобно отображению одномерного списка, поэтому здесь
особенно важен контроль типов данных.
Операции
с векторами
Важное достоинство систем компьютерной
алгебры, к которым относится и Maple 7, заключается в возможности выполнения
аналитических (символьных) операций над векторами и матрицами.
Приведем примеры операций над векторами:
В этих примерах используется функция
evalm(M), осуществляющая вычисление матрицы или вектора М.
ПРИМЕЧАНИЕ
Рекомендуется перед проведением
символьных операций с векторами и матрицами очистить память от предшествующих
определений с помощью команды restart. Если какие-то элементы векторов или
матриц были ранее определены, это может привести к очень сильным искажениям
вида конечных результатов. Очистка памяти устраняет возможность ошибок такого
рода.
Операции
над матрицами с численными элементами
Над матрицами с численными элементами
можно выполнять разнообразные операции. Ниже приведены основные из них:
ПРИМЕЧАНИЕ
Рекомендуется внимательно изучить
эти примеры и попробовать свои силы в реализации простых матричных операций.
Мы вернемся к гораздо более серьезному описанию матричных операций и функций
в дальнейшем.
Символьные
операции с матрицами
Ниже представлены примеры символьных
операций, осуществляемых над квадратными матрицами одного размера:
Приведем еще ряд примеров выполнения
символьных операций с одной матрицей:
Среди других функций для работы
с матрицами полезно обратить внимание на функцию mар,
которая применяет заданную операцию (например, функции дифференцирования
diff и интегрирования int) к каждому элементу
матрицы. Примеры такого рода даны ниже:
В результате возвращаются матрицы,
каждый элемент которых представлен производной или интегралом. Аналогично можно
выполнять над матрицами и другие достаточно сложные преобразования.
В дальнейшем мы продолжим изучение
матричных функций и операций, включенных в пакеты Maple 7.
Функции для работы со строковыми данными
Контроль типа строковых данных
Напоминаем, что строковые данные
представляются совокупностью любых символов в обратных апострофах, например
*Привет* или `2+2`. Для контроля объектов на принадлежность к строковым
данным служит функция type с параметром
string:
Из приведенных примеров видно, что
контроль строкового типа осуществляется не очень строго, — в частности, единичные
символы рассматриваются как строковые и без заключения их в апострофы. В строках
могут быть символы кириллицы, но гарантии в правильности обработки таких символов
нет — надо мириться с тем, что Maple — англоязычная программа и ее возможности
в поддержке других языков ограниченны.
Интерактивный
ввод строк
Для интерактивного ввода строк можно
использовать функцию readline(filename), задав в качестве
имени файла terminal или опустив имя файла. В этом случае
ввод строки осуществляется с клавиатуры компьютера:
>
s:=read1ine();
> Привет мой друг!
s:="Привет
мой друг!"
ПРИМЕЧАНИЕ
Полезно обратить внимание на то,
что запрос в ходе интерактивного ввода может быть сделан на русском языке
(если установленный для запросов шрифт имеет символы кириллицы). Нужно также,
чтобы и шрифт строки вывода содержал кириллицу, иначе в строке вывода будет
типичная «абракадабра» — смесь непонятных символов.
Обработка
строк
Имеется ряд функций для работы со
строками. Из них наиболее важны следующие:
lenght(str)
— возвращает число символов, содержащихся в строке str;
substring(str,a.
.b) — возвращает подстроку строки str от
а-го символа до b-го;
cat(strl,str2....)
— возвращает строку, полученную объединением строк strl, str2,... (альтернатива
— оператор конкатенации в виде точки .);
SearchText(s.str)
— производит поиск подстроки s в строке
str и при его успехе возвращает номер позиции s
в строке str (при отсутствии s в str
функция возвращает 0).
Примеры применения этих функций
(в виде продолжения ранее приведенных примеров) представлены ниже:
Эти функции дают достаточно средств
для обработки данных строкового типа, которые можно применять не только для
создания текстовых комментариев, но и для управления вычислительным процессом
в программах.
Преобразование
строки в математическое выражение
Часто возникает необходимость в
интерактивном вводе математических выражений. Для ввода с запросом выражения
используется функция readstat(promt),
где promt — строка с текстовым комментарием. Пример ее
применения дан ниже:
Альтернативой может стать ввод строкового
выражения с последующим преобразованием его в математическое выражение с помощью
функции parse:
Обратите внимание на то, что функция
evaln не смогла вычислить строковое выражение `2+3` поскольку
оно не является числовым типом данных. Однако функция parse
преобразовала это выражение в числовое, что и привело к его вычислению.
Что
нового мы узнали?
В этом уроке мы научились:
Использовать операторы и
операнды.
Применять различные математические
функции.
Использовать операторы и
функции для работы с векторами и матрицами.
Использовать функции для
работы со строковыми данными.
|