4 @c OriginalRevision=1.10
5 @c TranslatedBy: (c) 2005-12 Valery Pipin <pip@iszf.irk.ru>
8 * Введение в пакет atensor::
9 * Функции и переменные пакета atensor::
12 @node Введение в пакет atensor, Функции и переменные пакета atensor, Пакет atensor, Пакет atensor
13 @section Введение в пакет atensor
15 Пакет @code{atensor} предназначен для вычислений с тензорными алгебрами.
16 Для того, чтобы использовать @code{atensor}, надо ввести
17 @code{load("atensor")}, с последующим вызовом функции @code{init_atensor}.
19 Основой пакета @code{atensor} является набор правил упрощения для
20 оператора некоммутативного произведения ("@code{.}" -- dot product).
21 @code{atensor} знает несколько типов алгебр и соответствующий
22 набор правил активизируется при вызове функции @code{init_atensor}.
24 Возможности пакета @code{atensor} можно продемонстрировать определив
25 алгебру кватернионов как алгебру Клиффорда Cl(0,2) с двумя базисными
26 векторами. В этом случае три кватернионные мнимые единицы
27 представляются двумя базисными векторами и их произведением:
34 Хотя @code{atensor} имеет встроенное определение алгебры кватернионов,
35 оно не используется в данном примере, в котором мы построим
36 таблицу умножения кватернионов в виде матрицы:
40 (%i1) load("atensor");
41 (%o1) /share/tensor/atensor.mac
42 (%i2) init_atensor(clifford,0,0,2);
44 (%i3) atensimp(v[1].v[1]);
46 (%i4) atensimp((v[1].v[2]).(v[1].v[2]));
48 (%i5) q:zeromatrix(4,4);
58 (%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
60 (%i8) q[1,4]:q[4,1]:v[1].v[2];
63 (%i9) for i from 2 thru 4 do for j from 2 thru 4 do
64 q[i,j]:atensimp(q[i,1].q[1,j]);
80 В качестве базисных векторов @code{atensor} использует переменные с
81 индексом. Символ переменой хранится в @code{asymbol} а индекс
82 может принимать значения от 1 до @code{adim}.
83 Для переменных с индексом вычисляются билинейные формы
84 @code{sf}, @code{af} и @code{av}. Вычисление подставляет значение
85 @code{aform[i,j]} вместо @code{fun(v[i],v[j])},
86 где @code{v} есть значение @code{asymbol} и @code{fun} есть @code{af}
87 или @code{sf}; либо подставляет @code{v[aform[i,j]]} вместо
90 Функции @code{sf}, @code{af} и @code{av} могут быть переопределены
93 Когда пакет @code{atensor} загружен, устанавливаются следующие
94 значения переключателей:
102 Если вы хотите поэкспериментировать с неассоциативными алгебрами
103 надо присвоить @code{dotassoc} значение @code{false}. Однако, в
104 данном случае @code{atensimp} не всегда может получить желаемое
107 @opencatbox{Категории:}
109 @category{Пакеты библиотеки share}
110 @category{Пакет atensor}
114 @node Функции и переменные пакета atensor, , Введение в пакет atensor, Пакет atensor
116 @section Функции и переменные пакета atensor
118 @deffn {Функция} init_atensor (@var{alg_type}, @var{opt_dims})
119 @deffnx {Функция} init_atensor (@var{alg_type})
121 Инициализирует пакет @code{atensor} с указанием типа алгебры.
122 Здесь @var{alg_type} может принимать одно из следующих
125 @code{universal}: Универсальная алгебра без определенных правил
128 @code{grassmann}: Алгебра Грассмана, определяемая коммутационным правилом
131 @code{clifford}: Алгебра Клиффорда, определяемая коммутационным
132 правилом @code{u.v+v.u=-2*sf(u,v)}, где @code{sf} есть симметричная
133 скалярная функция. Для этой алгебры @var{opt_dims} может задавать до 3-х
134 неотрицательных целых чисел, которые представляют собой число
135 положительных, вырожденных и отрицательных размерностей алгебры.
136 Если @var{opt_dims} задано, то @code{atensor} автоматически
137 сконфигурирует значения @code{adim} и @code{aform}. В противном
138 случае @code{adim} принимает значение 0 а @code{aform}
139 остается неопределенным.
141 @code{symmetric}: Симметричная алгебра, определяемая коммутационным
142 правилом @code{u.v-v.u=0}.
144 @code{symplectic}: Симплектическая алгебра, определяемая
145 коммутационным правилом @code{u.v-v.u=2*af(u,v)}, гда @code{af} есть
146 антисимметричная скалярная функция. Для симплектической алгебры
147 @var{opt_dims} может задавать до двух неотрицательных целых чисел,
148 представляющих число невырожденных и вырожденных измерений соответственно.
149 Если @var{opt_dims} задано, то @code{atensor} автоматически
150 сконфигурирует значения @code{adim} и @code{aform}. В противном
151 случае @code{adim} принимает значение 0 а @code{aform}
152 остается неопределенным.
154 @code{lie_envelop}: Обертывающая алгебра Ли, определяемая
155 коммутационным правилом @code{u.v-v.u=2*av(u,v)}, где @code{av} есть
156 антисимметричная функция.
158 @code{init_atensor} также распознает несколько предопределенных
161 @code{complex} реализует алгебру комплексных чисел, как алгебру
162 Клиффорда Cl(0,1). Вызов @code{init_atensor(complex)} эквивалентен
163 @code{init_atensor(clifford,0,0,1)}.
165 @code{quaternion} реализует алгебру кватернионов. Вызов
166 @code{init_atensor(quaternion)} эквивалентен
167 @code{init_atensor(clifford,0,0,2)}.
169 @code{pauli} реализует алгебру спиноров Паули как алгебру Клиффорда
170 Cl(3,0). Вызов @code{init_atensor(pauli)} эквивалентен
171 @code{init_atensor(clifford,3)}.
173 @code{dirac} реализует алгебру спиноров Дирака как алгебру Клиффорда
174 Cl(3,1). Вызов @code{init_atensor(dirac)} эквивалентен
175 @code{init_atensor(clifford,3,0,1)}.
177 @opencatbox{Категории:}
178 @category{Пакет atensor}
184 @deffn {Функция} atensimp (@var{expr})
186 Упрощает алгебраическое выражение @var{expr} в соответствии с
187 правилами, определенными при вызове @code{init_atensor}.
188 Упрощение сводится к рекурсивному применению коммутационных правил
189 м вычислению, где возможно, значений @code{sf}, @code{af} и @code{av}.
190 При этом применяются предосторожности, обеспечивающие то,
191 что процесс упрощения завершится.
193 @opencatbox{Категории:}
194 @category{Пакет atensor}
195 @category{Упрощающие функции}
201 @deffn {Функция} alg_type
203 Тип алгебры. Допустимые значения: @code{universal}, @code{grassmann},
204 @code{clifford}, @code{symmetric}, @code{symplectic} или @code{lie_envelop}.
206 @opencatbox{Категории:}
207 @category{Пакет atensor}
212 @defvr {Переменная} adim
213 Значение по умолчанию: 0
215 Размерность алгебры. @code{atensor} использует @code{adim}
216 для того чтобы определить является ли индексированный объект
217 допустимым базисным вектором. См. @code{abasep}.
219 @opencatbox{Категории:}
220 @category{Пакет atensor}
221 @category{Глобальные переменные}
226 @defvr {Переменная} aform
227 Значение по умолчанию: @code{ident(3)}
229 Значение билинейных форм @code{sf}, @code{af} или
230 @code{av}. Значение по умолчанию -- единичная 3х3 матрица @code{ident(3)}.
232 @opencatbox{Категории:}
233 @category{Пакет atensor}
234 @category{Глобальные переменные}
239 @defvr {Переменная} asymbol
240 Значение по умолчанию: @code{v}
242 Символ, используемый для обозначения базисного вектора.
244 @opencatbox{Категории:}
245 @category{Пакет atensor}
246 @category{Глобальные переменные}
251 @deffn {Функция} sf (@var{u}, @var{v})
253 Симметричная скалярная функция, используемая в коммутационных
254 правилах. По умолчанию с помощью @code{abasep} проверяется, что
255 оба аргумента функции являются базисными векторами, и если это так,
256 подставляется соответствующее значение из матрицы @code{aform}.
258 @opencatbox{Категории:}
259 @category{Пакет atensor}
264 @deffn {Функция} af (@var{u}, @var{v})
266 Антисимметричная скалярная функция, используемая в коммутационных
267 правилах. По умолчанию с помощью @code{abasep} проверяется, что
268 оба аргумента функции являются базисными векторами, и если это так,
269 подставляется соответствующее значение из матрицы @code{aform}.
271 @opencatbox{Категории:}
272 @category{Пакет atensor}
277 @deffn {Функция} av (@var{u}, @var{v})
279 Антисимметричная скалярная функция, используемая в коммутационных
280 правилах. По умолчанию с помощью @code{abasep} проверяется, что
281 оба аргумента функции являются базисными векторами, и если это так,
282 подставляется соответствующее значение из матрицы @code{aform}.
287 (%i1) load("atensor");
288 (%o1) /share/tensor/atensor.mac
291 (%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
304 @opencatbox{Категории:}
305 @category{Пакет atensor}
311 @deffn {Функция} abasep (@var{v})
313 Проверяет является ли аргумент базисным вектором для @code{atensor}.
314 Т.е. проверяет, что: это индексированная переменная, символ этой
315 переменной совпадает с значением @code{asymbol}, индекс имеет
316 числовое значение в пределах от 1 до @code{adim}.
318 @opencatbox{Категории:}
319 @category{Пакет atensor}
320 @category{Функции предикаты}