Print a warning when translating subscripted functions
[maxima.git] / doc / info / ru / Atensor.texi
blobb5ddf65359880ba684808a53e2fd480cb4204555
1 @c Language=Russian
2 @c Encoding=UTF-8
3 @c File=Atensor.texi
4 @c OriginalRevision=1.10
5 @c TranslatedBy: (c) 2005-12 Valery Pipin <pip@iszf.irk.ru>
7 @menu
8 * Введение в пакет atensor::
9 * Функции и переменные пакета atensor::
10 @end menu
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 представляются двумя базисными векторами и их произведением:
29 @example
30     i = v     j = v     k = v  . v
31          1         2         1    2
32 @end example
34 Хотя @code{atensor} имеет встроенное определение алгебры кватернионов,
35 оно не используется в данном примере, в котором мы построим
36 таблицу умножения кватернионов в виде матрицы:
38 @example
40 (%i1) load("atensor");
41 (%o1)       /share/tensor/atensor.mac
42 (%i2) init_atensor(clifford,0,0,2);
43 (%o2)                                done
44 (%i3) atensimp(v[1].v[1]);
45 (%o3)                                 - 1
46 (%i4) atensimp((v[1].v[2]).(v[1].v[2]));
47 (%o4)                                 - 1
48 (%i5) q:zeromatrix(4,4);
49                                 [ 0  0  0  0 ]
50                                 [            ]
51                                 [ 0  0  0  0 ]
52 (%o5)                           [            ]
53                                 [ 0  0  0  0 ]
54                                 [            ]
55                                 [ 0  0  0  0 ]
56 (%i6) q[1,1]:1;
57 (%o6)                                  1
58 (%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
59 (%o7)                                done
60 (%i8) q[1,4]:q[4,1]:v[1].v[2];
61 (%o8)                               v  . v
62                                      1    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]);
65 (%o9)                                done
66 (%i10) q;
67                    [    1        v         v      v  . v  ]
68                    [              1         2      1    2 ]
69                    [                                      ]
70                    [   v         - 1     v  . v    - v    ]
71                    [    1                 1    2      2   ]
72 (%o10)             [                                      ]
73                    [   v      - v  . v     - 1      v     ]
74                    [    2        1    2              1    ]
75                    [                                      ]
76                    [ v  . v      v        - v       - 1   ]
77                    [  1    2      2          1            ]
78 @end example
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]]} вместо
88 @code{av(v[i],v[j])}.
90 Функции @code{sf}, @code{af} и @code{av} могут быть переопределены
91 пользователем.
93 Когда пакет @code{atensor} загружен, устанавливаются следующие
94 значения переключателей:
96 @example
97 dotscrules:true;
98 dotdistrib:true;
99 dotexptsimp:false;
100 @end example
102 Если вы хотите поэкспериментировать с неассоциативными алгебрами
103 надо присвоить @code{dotassoc} значение @code{false}.  Однако, в
104 данном случае @code{atensimp} не всегда может получить желаемое
105 упрощение.
107 @opencatbox{Категории:}
108 @category{Тензоры}
109 @category{Пакеты библиотеки share}
110 @category{Пакет atensor}
111 @closecatbox
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} может принимать одно из следующих
123 значений:
125 @code{universal}: Универсальная алгебра без определенных правил
126 коммутации.
128 @code{grassmann}: Алгебра Грассмана, определяемая коммутационным правилом
129 @code{u.v+v.u=0}.
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} также распознает несколько предопределенных
159 типов алгебр:
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}
179 @closecatbox
181 @end deffn
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{Упрощающие функции}
196 @closecatbox
198 @end deffn
201 @deffn {Функция} alg_type
203 Тип алгебры.  Допустимые значения:  @code{universal}, @code{grassmann},
204 @code{clifford}, @code{symmetric}, @code{symplectic} или @code{lie_envelop}.
206 @opencatbox{Категории:}
207 @category{Пакет atensor}
208 @closecatbox
210 @end deffn
212 @defvr {Переменная} adim
213 Значение по умолчанию: 0
215 Размерность алгебры.  @code{atensor} использует @code{adim}
216 для того чтобы определить является ли индексированный объект
217 допустимым базисным вектором.  См. @code{abasep}.
219 @opencatbox{Категории:}
220 @category{Пакет atensor}
221 @category{Глобальные переменные}
222 @closecatbox
224 @end defvr
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{Глобальные переменные}
235 @closecatbox
237 @end defvr
239 @defvr {Переменная} asymbol
240 Значение по умолчанию: @code{v}
242 Символ, используемый для обозначения базисного вектора.
244 @opencatbox{Категории:}
245 @category{Пакет atensor}
246 @category{Глобальные переменные}
247 @closecatbox
249 @end defvr
251 @deffn {Функция} sf (@var{u}, @var{v})
253 Симметричная скалярная функция, используемая в коммутационных
254 правилах.  По умолчанию с помощью @code{abasep} проверяется, что
255 оба аргумента функции являются базисными векторами, и если это так,
256 подставляется соответствующее значение из матрицы @code{aform}.
258 @opencatbox{Категории:}
259 @category{Пакет atensor}
260 @closecatbox
262 @end deffn
264 @deffn {Функция} af (@var{u}, @var{v})
266 Антисимметричная скалярная функция, используемая в коммутационных
267 правилах.  По умолчанию с помощью @code{abasep} проверяется, что
268 оба аргумента функции являются базисными векторами, и если это так,
269 подставляется соответствующее значение из матрицы @code{aform}.
271 @opencatbox{Категории:}
272 @category{Пакет atensor}
273 @closecatbox
275 @end deffn
277 @deffn {Функция} av (@var{u}, @var{v})
279 Антисимметричная скалярная функция, используемая в коммутационных
280 правилах.  По умолчанию с помощью @code{abasep} проверяется, что
281 оба аргумента функции являются базисными векторами, и если это так,
282 подставляется соответствующее значение из матрицы @code{aform}.
284 Например:
286 @example
287 (%i1) load("atensor");
288 (%o1)       /share/tensor/atensor.mac
289 (%i2) adim:3;
290 (%o2)                                  3
291 (%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
292                                [  0    3   - 2 ]
293                                [               ]
294 (%o3)                          [ - 3   0    1  ]
295                                [               ]
296                                [  2   - 1   0  ]
297 (%i4) asymbol:x;
298 (%o4)                                  x
299 (%i5) av(x[1],x[2]);
300 (%o5)                                 x
301                                        3
302 @end example
304 @opencatbox{Категории:}
305 @category{Пакет atensor}
306 @closecatbox
308 @end deffn
311 @deffn {Функция} abasep (@var{v})
313 Проверяет является ли аргумент базисным вектором для @code{atensor}.
314 Т.е. проверяет, что: это индексированная переменная, символ этой
315 переменной совпадает с значением @code{asymbol}, индекс имеет
316 числовое значение в пределах от 1 до @code{adim}.
318 @opencatbox{Категории:}
319 @category{Пакет atensor}
320 @category{Функции предикаты}
321 @closecatbox
323 @end deffn