Прежде чем будет задан любой математический объект, число, функция или символ, должно быть ясно определено <<окружение>> — пространство, в котором будут определяться объекты. В этой главе описываются способы задания окружения. Перемещение из некоторого окружения в текущее, как правило, должно выполнятся явно, с помощью функции toNewRing. В некоторых случаях такое преобразование к текущему окружению происходит автоматически.
Для выбора окружения задается алгебраическое пространство переменных. Оно определяется именами переменных и числовыми пространствами, в которых эти переменные принимают значения. Порядок переменных в списке переменных задает линейный порядок на этих переменных. Слева направо располагаются переменные, упорядоченные по старшинству от младших к старшим.
По умолчанию определено пространство $\mathbb{R}64[x,y,z,t]$ четырех переменных, самая младшая — $x$, самая старшая — $t$.
В любой момент пользователь может сменить окружение, задав новое алгебраическое пространство переменных с помощью команды установки <<SPACE=>>. Например, для задач вычислительной математики может быть достаточно пространства типа $\mathbb{R}64[x]$ или $\mathbb{Q}[x]$. Команда установки: <<SPACE=R64[x];>> или <<SPACE=Q[x];>>, соответственно.
Если имя переменной начинается с символа $\backslash$ и заглавной буквы (верхний регистр), то такая переменная обозначает элемент алгебры, у которой операция умножения некоммутативная, для всех остальных переменных операция умножения коммутативная.
Определены следующие числовые множества:
Z — множество целых чисел ${\mathbb Z}$,
Zp — конечное поле из p=MOD элементов ${\mathbb Z}/p{\mathbb Z}$, MOD — постоянная,
Zp32 — конечное поле из p=MOD32 элементов ${\mathbb Z}/p{\mathbb Z}$, MOD32 меньше $2^{31}$,
Z64 — кольцо целых чисел $z$ таких, что $-2^{63} \leqslant z < 2^{63}$,
Q — множество рациональных чисел, R — множество чисел с плавающей точкой для хранения приближенных действительных чисел с произвольной мантиссой,
R64 — множество чисел с плавающей точкой для хранения приближенных действительных чисел с двойной точностью (со стандартной 52-разрядной мантиссой и отдельным 11-разрядным полем для хранения порядка), R128 — стандартные 64-битные числа с плавающей точкой для хранения приближенных действительных чисел со стандартной 52-разрядной мантиссой и отдельным 64-разрядным полем для хранения порядка,
C — комплексный класс, образованный из класса R,
C64 — комплексный класс, образованный из класса R64,
C128 — комплексный класс, образованный из класса R128,
CZ — комплексный класс, образованный из класса Z,
CZp — комплексный класс, образованный из класса Zp,
CZp32 — комплексный класс, образованный из класса Zp32,
CZ64 — комплексный класс, образованный из класса Z64,
CQ — комплексный класс, образованный из класса Q.
Примеры простых полиномиальных колец:
SPACE = Z [x, y, z];
SPACE = R64 [u, v];
SPACE = C [x].
Разрешается устанавливать алгебраические пространства из нескольких числовых множеств, например, пространство <<C[z]R[x, y]Z[n, m]>> позволяет работать с пятью именами переменных, определенных в множествах $\mathbb{C}$, $\mathbb{R}$ и $\mathbb{Z}$, соответственно. Первое множество считается основным и к нему будут приводится, при необходимости, все остальные переменные. В данном случае это $\mathbb{C}$.
Его можно рассматривать как кольцо полиномов пяти переменных над $\mathbb{C}$, при этом оно обладает дополнительными свойствами. Если полином не содержит переменной $z$, то это полином с коэффициентами из $\mathbb{R}$. Если полином не содержит переменных $z$, $x$, $y$, то это полином с коэффициентами из $\mathbb{Z}$.
Примеры:
SPACE=Z[x, y]Z[u];
SPACE=R64[u, v]Z[a, b];
SPACE=C[x]R[y, z];
Кольцо <<Z[x, y, z]Z[u, v, w]>>, в котором шесть переменных разделены на две группы, можно использовать для задач в которых строятся полиномы, у которых коэффициенты являются полиномами или функциями других переменных. Например, характеристический полином для матрицы над кольцом $\mathbb{Z}[x, y, z]$ будет получен как полином с неизвестной $u$, коэффициенты которого лежат в кольце $\mathbb{Z}[x, y, z]$.
%
%Групповую алгебру обозначает символ $G$. После него стоит список образующих, а перед ним — %% пространство, в котором действует группа. Образующие группы некоммутативны.
%Примеры свободных групповых алгебр:
%SPACE=Z[x, y]G[U, V]; (образующие U, V),
%SPACE=R64[u, v]G[A, B]; (образующие A, B),
%SPACE=C[]G[X, Y, Z, T]; (образующие X, Y, Z, T).
%Каждый элемент алгебры является суммой термов с коэффициентами, которые являются функциями. %Например, <<R64[x, y]G[X, Y, Z]>> — это свободная групповая алгебра с тремя некоммутативными %образующими X, Y, Z над функциями %в $\mathbb{R}64[x, y] $. Тогда, например, % $A=(t^2+1)X + \sin(t)Y + 3X^2y^3 +(t^2+1)XY^3X^2Y^{-2}x^2$ — элемент такой алгебры.
Кроме классических числовых алгебр с операциями <<+,~-,~*>> и операцией <</>> для полей, будут доступны пользователю и идемпотентные алгебры. Для числового множества $\mathbb{R}64$, можно будет использовать алгебры $R64MaxPlus$, $R64MinPlus$, $R64MaxMin$, $R64MinMax$, $R64MaxMult$, $R64MinMult$. Для числового множества $\mathbb{R}$, можно будет использовать алгебры $RMaxPlus$, $RMinPlus$, $RMaxMin$, $R64MinMax$, $RMaxMult$, $RMinMult$. Для числового множества $\mathbb{Z}$, можно будет использовать алгебры $ZMaxPlus$, $ZMinPlus$, $ZMaxMin$, $ZMinMax$, $ZMaxMult$, $ZMinMult$.
Можно установить или заменить следующие постоянные.
FLOATPOS — число десятичных знаков после запятой, которые выводятся на печать. По умолчанию принимается значение 2.
MachineEpsilonR — машинное эпсилон для чисел типа R. По умолчанию принимается значение $10^{-29}$. Число, модуль которого меньше $10^{-29}$, считаестя машинным нулем. Для установки нового значения $10^{-30}$ нужно ввести команду <<MachineEpsilonR64=30>>.
MachineEpsilonR64 — машинное эпсилон для чисел типа R64. По умолчанию принимается значение $2^{-36}$. Число, модуль которого меньше $2^{-36}$, считается машинным нулем. Отметим, что числа R64 имеет 52 разряда в мантиссе, Для установки нового значения $2^{-48}$ нужно ввести команду <<MachineEpsilonR64=48>>.
Постоянная MachineEpsilonR (и MachineEpsilonR64) используется при факторизации полиномов с коеффициентами типа R (или R64). Каждый коэффициент такого полинома будет предварительно делиться на число $MachineEpsilonR$ (или $MachineEpsilonR64$) и округляется до целого значения.
ACCURACY определяет число точных десятичных позиций после запятой для чисел типа $R$ и $C$ в операциях умножения и деления. По умолчанию ACCURACY имеет значение $MachineEpsilonR * 10^{-5}$. Если n<m, то команда <<MachineEpsilonR=n/m>> установит одновременно MachineEpsilonR=$10^{-n}$ и ACCURACY=$10^{-m}$.
MOD32 — модуль для простого поля, не превосходящий $2^{31}$ (по умолчанию принимается значение 268435399). Простое число MOD32 — характеристика конечного поля. Константа MOD32 используется в том случае, когда вычисления происходят в конечном поле Zp32 и она должна быть меньше числа $2^{31}$.
MOD — модуль типа Z для простого поля (по умолчанию принимается значение 268435399). Простое число MOD — это характеристика конечного поля, но в отличие от MOD32 у него нет ограничения на абсолютное значение. Константа MOD используется в том случае, когда вычисления происходят в конечном поле Zp.
RADIAN может принимать значения 1 или 0. Если RADIAN = 1, то углы измеряются в радианах, иначе — в градусах. По умолчанию RADIAN=1.
STEPBYSTEP может принимать значения 1 или 0. Если STEPBYSTEP = 1, то будут выводиться промежуточные результаты вычислений. По умолчанию STEPBYSTEP = 0.
EXPAND может принимать значения 1 или 0. Если EXPAND = 1, то во входном выражении будут раскрываться все скобки. По умолчанию EXPAND = 1.
SUBSTITUTION может принимать значения 1 или 0. Если SUBSTITUTION = 1, то во входном выражении будут подставляться вместо имен выражений их значения, если они были определены раньше. По умолчанию SUBSTITUTION = 1.