Print a warning when translating subscripted functions
[maxima.git] / doc / info / ru / Ctensor.texi
blobc9c7829f899e218275a35c78247388c49b2f9d30
1 @c Language=Russian
2 @c Encoding=UTF-8
3 @c File=Ctensor.texi 
4 @c OriginalRevision=1.35
5 @c TranslatedBy: (c) 2006-03 Valery Pipin <pip@iszf.irk.ru>
8 @menu
9 * Введение в пакет ctensor::
10 * Функции и переменные пакета ctensor::
11 @end menu
13 @node Введение в пакет ctensor, Функции и переменные пакета ctensor, Пакет ctensor, Пакет ctensor
14 @section Введение в пакет ctensor
16 Пакет @code{ctensor} предназначен для операций с компонентами тензоров.
17 Для загрузки @code{ctensor} необходимо ввести команду
18 @code{load("ctensor")}.  Стандартная интерактивная
19 сессия в @code{ctensor} начинается с команды @code{csetup()}.  После этого
20 пользователь запрашивается о размерности многообразия.  Если размерность
21 равна 2, 3 или 4, тогда список координат по умолчанию устанавливается
22 равным @code{[x,y]}, @code{[x,y,z]} или @code{[x,y,z,t]} соответственно.
23 Имена координат могут быть изменены присваиванием нового
24 списка координат переменной @code{ct_coords} (см. ниже), пользователь
25 также запрашивается о необходимости переопределения списка координат.
26 Следует внимательно выбирать имена координат таким образом, чтобы
27 избежать конфликтов с другими объектами.
29 После этого пользователь задает метрику непосредственно, либо
30 указывая файл в котром она находится.
31 @c NO SUCH FILE !
32 Файл @code{share/tensor/metrics.mac} содержит определения некоторых
33 стандартных метрик. Метрика хранится в матрице @code{lg}.
34 Обратная метрика вычисляется и помещается в матрицу @code{ug}.
35 При определении метрики существует возможность использования степенных рядов.
37 Ниже приведено начало протокола определения статической,
38 сферически-симметричной метрики (стандартные координаты)
39 с целью вычисления вакуумных уравнений Эйнштейна,
40 приводящих к решению Шварцшильда.  Многие функции пакета
41 @code{ctensor} будут продемонстрированы на примере этой метрики.
43 @example
44 (%i1) load("ctensor");
45 (%o1)      /usr/local/lib/maxima/share/tensor/ctensor.mac
46 (%i2) csetup();
47 Enter the dimension of the coordinate system:
49 Do you wish to change the coordinate names?
51 Do you want to
52 1. Enter a new metric?
54 2. Enter a metric from a file?
56 3. Approximate a metric with a Taylor series?
59 Is the matrix  1. Diagonal  2. Symmetric  3. Antisymmetric  4. General
60 Answer 1, 2, 3 or 4
62 Row 1 Column 1:
64 Row 2 Column 2:
65 x^2;
66 Row 3 Column 3:
67 x^2*sin(y)^2;
68 Row 4 Column 4:
69 -d;
71 Matrix entered.
72 Enter functional dependencies with the DEPENDS function or 'N' if none
73 depends([a,d],x);
74 Do you wish to see the metric?
76                           [ a  0       0        0  ]
77                           [                        ]
78                           [     2                  ]
79                           [ 0  x       0        0  ]
80                           [                        ]
81                           [         2    2         ]
82                           [ 0  0   x  sin (y)   0  ]
83                           [                        ]
84                           [ 0  0       0       - d ]
85 (%o2)                                done
86 (%i3) christof(mcs);
87                                             a
88                                              x
89 (%t3)                          mcs        = ---
90                                   1, 1, 1   2 a
92                                              1
93 (%t4)                           mcs        = -
94                                    1, 2, 2   x
96                                              1
97 (%t5)                           mcs        = -
98                                    1, 3, 3   x
100                                             d
101                                              x
102 (%t6)                          mcs        = ---
103                                   1, 4, 4   2 d
105                                               x
106 (%t7)                          mcs        = - -
107                                   2, 2, 1     a
109                                            cos(y)
110 (%t8)                         mcs        = ------
111                                  2, 3, 3   sin(y)
113                                                2
114                                           x sin (y)
115 (%t9)                      mcs        = - ---------
116                               3, 3, 1         a
118 (%t10)                   mcs        = - cos(y) sin(y)
119                             3, 3, 2
121                                             d
122                                              x
123 (%t11)                         mcs        = ---
124                                   4, 4, 1   2 a
125 (%o11)                               done
127 @end example
129 @opencatbox{Категории:}
130 @category{Тензоры}
131 @category{Пакеты библиотеки share}
132 @category{Пакет ctensor}
133 @closecatbox
135 @node Функции и переменные пакета ctensor,  , Введение в пакет ctensor, Пакет ctensor
137 @section Функции и переменные пакета ctensor
139 @subsection Начальные установки
141 @deffn {Функция} csetup ()
142 Эта функция производит начальные установки пакета @code{ctensor}
143 и позволяет пользователю ввести метрику интерактивно.
144 См. @code{ctensor} для более подробного описания.
146 @opencatbox{Категории:}
147 @category{Пакет ctensor}
148 @closecatbox
149 @end deffn
151 @deffn {Функция} cmetric (@var{dis})
152 @deffnx {Функция} cmetric ()
153 Функция пакета @code{ctensor}, которая вычисляет обратную
154 метрику и готовит пакет к проведению дальнейших вычислений.
156 Если переключатель @code{cframe_flag} равен @code{false}, то функция
157 вычисляет обратную метрику @code{ug} исходя из заданной пользователем
158 матрицы @code{lg}.  Определитель метрики тоже вычисляется и
159 сохраняется в переменной @code{gdet}.  Боле того, программа определяет
160 является ли метрика диагональной и соответственным образом
161 устанавливает значение ключа @code{diagmetric}.  Если задан необязательный
162 ключ @var{dis} и его значение не равно @code{false}, то в ходе сессии
163 пользователь запрашивается требуется ли распечатать компоненты обратной
164 метрики на экран.
166 Если ключ @code{cframe_flag} равен @code{true}, тогда ожидается, что
167 заданы значения @code{fri} (матрица обратного базиса) и массив @code{lfg}
168 (метрика относительно данного базиса).  Исходя из этих данных
169 вычисляются матрица @code{fr} и обратная метрика @code{ufg}
170 относительно заданного базиса.
172 @opencatbox{Категории:}
173 @category{Пакет ctensor}
174 @closecatbox
175 @end deffn
177 @deffn {Функция} ct_coordsys (@var{coordinate_system}, @var{extra_arg})
178 @deffnx {Функция} ct_coordsys (@var{coordinate_system})
179 Задает одну из предопределенных координатных систем и метрик.
180 Аргумент @var{coordinate_system} может принимать одно из следующих
181 значений:
183 @example
185  Символ               Dim Координаты        Описание/комментарии
186  ------------------------------------------------------------------
187  cartesian2d           2  [x,y]             Декартовы 2D координаты
188  polar                 2  [r,phi]           Полярные координаты
189  elliptic              2  [u,v]             Эллиптические 
190                                             координаты
191  confocalelliptic      2  [u,v]             Конфокальные 
192                                             эллиптические
193  bipolar               2  [u,v]             Биполярные координаты
194  parabolic             2  [u,v]             Параболические 
195                                             координаты
196  cartesian3d           3  [x,y,z]           Декартова 3D система 
197                                             координат
198  polarcylindrical      3  [r,theta,z]       Цилиндрические 
199                                             координаты
200  ellipticcylindrical   3  [u,v,z]           Эллиптические 2D 
201                                             с цилинром z
202  confocalellipsoidal   3  [u,v,w]           Конфокальные 
203                                             эллипсоидальные
204  bipolarcylindrical    3  [u,v,z]           Биполярные 2D 
205                                             с цилиндром z
206  paraboliccylindrical  3  [u,v,z]           Параболические 2D 
207                                             с цилиндром z
208  paraboloidal          3  [u,v,phi]         Параболоидные 
209                                             координаты
210  conical               3  [u,v,w]           Конические координаты
211  toroidal              3  [u,v,phi]         Тороидальные координаты
212  spherical             3  [r,theta,phi]     Сферические координаты
213  oblatespheroidal      3  [u,v,phi]         Сжатые сфероидальные
214  oblatespheroidalsqrt  3  [u,v,phi]
215  prolatespheroidal     3  [u,v,phi]         Вытянутые сфероидальные
216  prolatespheroidalsqrt 3  [u,v,phi]
217  ellipsoidal           3  [r,theta,phi]     Эллипсоидальные 
218                                             координаты
219  cartesian4d           4  [x,y,z,t]         Декартовы 4D координаты
220  spherical4d           4  [r,theta,eta,phi] Сферические 4D 
221                                             координаты
222  exteriorschwarzschild 4  [t,r,theta,phi]   Метрика Шварцшильда
223  interiorschwarzschild 4  [t,z,u,v]         Внутреняя метрика 
224                                             Шрарцшильда
225  kerr_newman           4  [t,r,theta,phi]   Метрика Керра-Ньюмана
227 @end example
229 @code{coordinate_system} может быть списком функций преобразования,
230 за которым следует список координат.  Например,
231 можно задать метрику следующим образом:
233 @example
235 (%i1) load("ctensor");
236 (%o1)       /share/tensor/ctensor.mac
237 (%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
238       r*sin(theta),[r,theta,phi]]);
239 (%o2)                                done
240 (%i3) lg:trigsimp(lg);
241                            [ 1  0         0        ]
242                            [                       ]
243                            [     2                 ]
244 (%o3)                      [ 0  r         0        ]
245                            [                       ]
246                            [         2    2        ]
247                            [ 0  0   r  cos (theta) ]
248 (%i4) ct_coords;
249 (%o4)                           [r, theta, phi]
250 (%i5) dim;
251 (%o5)                                  3
253 @end example
255 Функции преобразования могут также использоваться и в случае,
256 когда @code{cframe_flag} равно @code{true}:
258 @example
260 (%i1) load("ctensor");
261 (%o1)       /share/tensor/ctensor.mac
262 (%i2) cframe_flag:true;
263 (%o2)                                true
264 (%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
265       r*sin(theta),[r,theta,phi]]);
266 (%o3)                                done
267 (%i4) fri;
268 (%o4)
269  [cos(phi)cos(theta) -cos(phi) r sin(theta) -sin(phi) r cos(theta)]
270  [                                                                ]
271  [sin(phi)cos(theta) -sin(phi) r sin(theta)  cos(phi) r cos(theta)]
272  [                                                                ]
273  [    sin(theta)           r cos(theta)                0          ]
275 (%i5) cmetric();
276 (%o5)                                false
277 (%i6) lg:trigsimp(lg);
278                            [ 1  0         0        ]
279                            [                       ]
280                            [     2                 ]
281 (%o6)                      [ 0  r         0        ]
282                            [                       ]
283                            [         2    2        ]
284                            [ 0  0   r  cos (theta) ]
286 @end example
288 Необязательный аргумент @var{extra_arg} может принимать одно из
289 следующих значений:
290 @c LOOKING AT share/tensor/ctensor.mac CIRCA LINE 837, misner IS RECOGNIZED ALSO; WHAT EFFECT DOES IT HAVE ??
292 @code{cylindrical} указывает @code{ct_coordsys} добавить одну
293 дополнительную цилиндрическую координату.
295 @code{minkowski} указывает @code{ct_coordsys} добавить дополнительную
296 декартову координату с отрицательной сигнатурой.
298 @code{all} указывает @code{ct_coordsys}, что после определения метрики
299 необходимо вызвать @code{cmetric} и @code{christof(false)}.
301 @c GLOBAL VARIABLE verbose IS USED IN ctensor.mac IN JUST THIS ONE CONTEXT
302 Если глобальная переменная @code{verbose} равна @code{true},
303 то @code{ct_coordsys} выводит значения @code{dim}, @code{ct_coords}, и
304 или @code{lg} или @code{lfg} и @code{fri}, в зависимости от значения
305 @code{cframe_flag}.
307 @opencatbox{Категории:}
308 @category{Пакет ctensor}
309 @closecatbox
310 @end deffn
312 @deffn {Функция} init_ctensor ()
313 Инициализирует пакет @code{ctensor}.
315 Функция @code{init_ctensor} ре-инициализирует пакет
316 @code{ctensor}, при этом из памяти удаляются все использованные ранее пакетом @code{ctensor}
317 массивы и матрицы и восстанавливаются стандартные значения всех
318 ключей, в том числе: размерность многообразия, @code{dim},
319 устанавливается равной 4, а метрика устанавливается равной метрике Лоренца.
321 @opencatbox{Категории:}
322 @category{Пакет ctensor}
323 @closecatbox
324 @end deffn
327 @subsection Тензоры искривленного пространства
329 Основное назначение пакета @code{ctensor} -- вычисление различных
330 тензоров для искривленного пространства-времени, в основном
331 тензоров, использующихся в общей теории относительности.
333 При использовании голономного (координатного) базиса @code{ctensor} может вычислить
334 следующие объекты:
336 @example
338  lg  -- ug
339    \      \
340     lcs -- mcs -- ric -- uric
341               \      \       \
342                \      tracer - ein -- lein
343                 \
344                  riem -- lriem -- weyl
345                      \
346                       uriem
349 @end example
351 @code{ctensor} может также работать при неголономном базисе (тетрадный формализм).
352 Когда @code{cframe_flag} равно @code{true}, следующие
353 объекты могут быть вычислены:
355 @example
357  lfg -- ufg
358      \
359  fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
360       \                       |  \      \       \
361        lg -- ug               |   weyl   tracer - ein -- lein
362                               |\
363                               | riem
364                               |
365                               \uriem
367 @end example
369 @deffn {Функция} christof (@var{dis})
370 Функция пакета @code{ctensor}, вычисляющая символы Кристоффеля
371 первого и второго родов.   Аргумент @var{dis} определяет какой
372 результат должен быть отображен.
373 Символы Кристоффеля первого и второго рода хранятся в массивах
374 @code{lcs[i,j,k]} и @code{mcs[i,j,k]} соответственно и считается
375 симметричным по первой паре индексов.  Если аргумент
376 @code{christof} есть @code{lcs} или @code{mcs} то будут выведены
377 все уникальные (симметрия) ненулевые значения @code{lcs[i,j,k]}
378 или @code{mcs[i,j,k]}, соответственно.  Если аргумент равен
379 @code{all}, тогда печатаются уникальные ненулевые значения
380 как @code{lcs[i,j,k]} и @code{mcs[i,j,k]}.
381 Если аргумент равен @code{false}, то ни какие значения не
382 отображаются.  Массив @code{mcs[i,j,k]} определен таким образом,
383 что последний индекс является контравариантным.
385 @opencatbox{Категории:}
386 @category{Пакет ctensor}
387 @closecatbox
388 @end deffn
390 @deffn {Функция} ricci (@var{dis})
391 Функция пакета @code{ctensor}, вычисляющая ковариантные
392 (симметричные) компоненты тензора Риччи @code{ric[i,j]}.
393 Если аргумент @var{dis} равен @code{true}, то на экран выводится печать
394 результатов вычисления ненулевых компонент тензора.
396 @opencatbox{Категории:}
397 @category{Пакет ctensor}
398 @closecatbox
399 @end deffn
401 @deffn {Функция} uricci (@var{dis})
402 Эта функция сначала вычисляет ковариантные
403 компоненты тензора Риччи @code{ric[i,j]}.
404 Затем с помощью контравариантной метрики
405 вычисляется тензор Риччи со смешанными компонентами.
406 Если аргумент @var{dis} равен @code{true}, тогда смешанные
407 компоненты @code{uric[i,j]} (индекс @code{i} ковариантный,
408 а индекс @code{j} контравариантный), будут распечатаны.
409 При @code{ricci(false)} просто вычисляется массив @code{uric[i,j]}
410 без печати на экран.
412 @opencatbox{Категории:}
413 @category{Пакет ctensor}
414 @closecatbox
415 @end deffn
417 @deffn {Функция} scurvature ()
418 Возвращает значение скалярной кривизны, получаемое
419 сверткой тензора кривизны Риччи.
421 @opencatbox{Категории:}
422 @category{Пакет ctensor}
423 @closecatbox
424 @end deffn
426 @deffn {Функция} einstein (@var{dis})
427 Функция @code{einstein} вычисляет смешанный тензор Эйнштейна
428 после того как вычислены символы Кристоффеля и тензор Риччи
429 пи помощи функций @code{christof} и @code{ricci}.
430 Если аргумент @var{dis} равен @code{true}, тогда ненулевые компоненты
431 тензора Эйнштейна @code{ein[i,j]} будут напечатаны, где
432 индекс @code{j} является ковариантным.
433 Переключатель @code{rateinstein} вызывает рациональное упрощение
434 результирующих компонент.  Если @code{ratfac} равен @code{true}
435 тогда компоненты будут автоматически факторизованы.
437 @opencatbox{Категории:}
438 @category{Пакет ctensor}
439 @closecatbox
440 @end deffn
442 @deffn {Функция} leinstein (@var{dis})
443 Вычисляет ковариантный тензор Эйнштейна. @code{leinstein} записывает
444 компоненты ковариантного тензора Эйнштейна в массив @code{lein}.
445 Контравариантные компоненты тензора Эйнштейна вычисляются исходя из
446 смешанного тензора Эйнштейна @code{ein}.  Если аргумент @var{dis}
447 равен  @code{true}, тогда ненулевые компоненты ковариантного тензора
448 Эйнштейна распечатываются на экране.
450 @opencatbox{Категории:}
451 @category{Пакет ctensor}
452 @closecatbox
453 @end deffn
455 @deffn {Функция} riemann (@var{dis})
456 Функция @code{riemann} вычисляет тензор кривизны Римана используя
457 метрику и символы Кристоффеля.  При этом используются следующие
458 соглашения:
460 @example
461                 l      _l       _l       _l   _m    _l   _m
462  R[i,j,k,l] =  R    = |      - |      + |    |   - |    |
463                 ijk     ij,k     ik,j     mk   ij    mj   ik
464 @end example
466 Эти обозначения совместимы с используемыми в пакете @code{itensor}
467 и его функцией @code{icurvature}.  Если необязательный
468 аргумент @var{dis} равен @code{true}, тогда
469 ненулевые компоненты тензора @code{riem[i,j,k,l]} печатаются на экране.
470 Как и для тензора Эйнштейна, управление процессом упрощения компонент тензора Римана
471 осуществляется при помощи различные переключателей(флагов).
472 Если @code{ratriemann} равен @code{true}, тогда
473 будет применено рациональное упрощение.
474 Если @code{ratfac} равен @code{true}, тогда каждая компонента
475 факторизуется.
477 Если @code{cframe_flag} равен @code{false}, тогда тензор Римана
478 вычисляется непосредственно исходя из символов Кристоффеля.
479 Если @code{cframe_flag} равен @code{true}, тогда сначала
480 вычисляется ковариантный тензор Римана исходя из компонент
481 неголономного базиса.
483 @opencatbox{Категории:}
484 @category{Пакет ctensor}
485 @closecatbox
486 @end deffn
488 @deffn {Функция} lriemann (@var{dis})
489 Ковариантный тензор Римана (@code{lriem[]}).
490 Функция вычисляет ковариантный тензор Римана и заносит результаты в
491 массив @code{lriem}. Если флаг @var{dis} равен @code{true}, то
492 результаты вычислений уникальных ненулевых компонент тензора выводятся
493 на экран.
495 Если флаг @code{cframe_flag} равен @code{true}, то ковариантный тензор
496 Римана вычисляется напрямую по компонентам тетрады, если иначе, то
497 вначале вычисляется тензор Римана ранга (3,1).
499 Информация о порядке следования индексов подробнее освящена в пункте @code{riemann}.
501 @opencatbox{Категории:}
502 @category{Пакет ctensor}
503 @closecatbox
504 @end deffn
506 @deffn {Функция} uriemann (@var{dis})
507 Вычисляет контравариантные компоненты тензора Римана и заносит их в
508 матрицу @code{uriem[i,j,k,l]}. Результаты вычислений печатаются на
509 экране если флаг @var{dis} равен @code{true}.
511 @opencatbox{Категории:}
512 @category{Пакет ctensor}
513 @closecatbox
514 @end deffn
516 @deffn {Функция} rinvariant ()
517 Вычисляет инвариант Кречмана (Kretchmann) (@code{kinvariant}),
518 используя свертку тензоров. Например,
520 @example
521 lriem[i,j,k,l]*uriem[i,j,k,l].
522 @end example
524 Поскольку выражение может быть громоздким, то по умолчанию отключено
525 автоматическое упрощение результата вычисления инварианта.
527 @opencatbox{Категории:}
528 @category{Пакет ctensor}
529 @closecatbox
530 @end deffn
532 @deffn {Функция} weyl (@var{dis})
533 Вычисляет конформный тензор Вейля.  Если флаг @var{dis} равен
534 @code{true} - на экране печатаются не нулевые компоненты
535 @code{weyl[i,j,k,l]}, если иначе, то результаты вычислений просто
536 заносятся в матрицу. Если ключ @code{ratweyl} равен @code{true}, тогда
537 производится автоматическое упрощение результата с использованием
538 алгебры рациональных чисел; при  @code{ratfac} равном @code{true}
539 результат вычислений автоматически факторизуется.
541 @opencatbox{Категории:}
542 @category{Пакет ctensor}
543 @closecatbox
544 @end deffn
546 @subsection Разложение в ряды Тейлора
548 В пакете @code{ctensor} реализованы возможности упрощения результатов
549 вычислений если метрика апроксимирована рядом Тейлора. Для учета метрики
550 такого типа необходимо установить ключ @code{ctayswitch} равным
551 @code{true}. Данный ключ заставляет использовать при пакетных вычислениях
552 функцию @code{ctaylor} для упрощения результатов.
554 Функция @code{ctaylor} вызывается в следующих пакетных функциях @code{ctensor}:
556 @example
558     Функция      Комментарий
559     ---------------------------------
560     christof()   Только для mcs
561     ricci()
562     uricci()
563     einstein()
564     riemann()
565     weyl()
566     checkdiv()
568 @end example
570 @deffn {Функция} ctaylor ()
572 Функция @code{ctaylor} преобразует выражения заданных аргументов конвертируя их в
573 Тейлоровские ряды, используя функцию @code{taylor}, и затем вызывая 
574 @code{ratdisrep}. Это приводит к отбрасыванию слагаемых высокого
575 порядка по переменной разложения @code{ctayvar}. Порядок отбрасываемых
576 членов определен переменной @code{ctaypov}; центральная точка окрестности
577 разложения определяется переменной @code{ctaypt}.
579 В качестве примера рассмотрим простую метрику , полученную в результате
580 возмущений метрики Минковского. Если не наложить ограничений, то даже
581 диагональная метрика в этом случае приводит к достаточно громоздким
582 выражениям тензора Эйнштейна:
584 @example
586 (%i1) load("ctensor");
587 (%o1)       /share/tensor/ctensor.mac
588 (%i2) ratfac:true;
589 (%o2)                                true
590 (%i3) derivabbrev:true;
591 (%o3)                                true
592 (%i4) ct_coords:[t,r,theta,phi];
593 (%o4)                         [t, r, theta, phi]
594 (%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],
595                 [0,0,0,r^2*sin(theta)^2]);
596                         [ - 1  0  0         0        ]
597                         [                            ]
598                         [  0   1  0         0        ]
599                         [                            ]
600 (%o5)                   [          2                 ]
601                         [  0   0  r         0        ]
602                         [                            ]
603                         [              2    2        ]
604                         [  0   0  0   r  sin (theta) ]
605 (%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
606                             [ h11   0    0    0  ]
607                             [                    ]
608                             [  0   h22   0    0  ]
609 (%o6)                       [                    ]
610                             [  0    0   h33   0  ]
611                             [                    ]
612                             [  0    0    0   h44 ]
613 (%i7) depends(l,r);
614 (%o7)                               [l(r)]
615 (%i8) lg:lg+l*h;
616       [ h11 l - 1      0          0                 0            ]
617       [                                                          ]
618       [     0      h22 l + 1      0                 0            ]
619       [                                                          ]
620 (%o8) [                        2                                 ]
621       [     0          0      r  + h33 l            0            ]
622       [                                                          ]
623       [                                    2    2                ]
624       [     0          0          0       r  sin (theta) + h44 l ]
625 (%i9) cmetric(false);
626 (%o9)                                done
627 (%i10) einstein(false);
628 (%o10)                               done
629 (%i11) ntermst(ein);
630 [[1, 1], 62]
631 [[1, 2], 0]
632 [[1, 3], 0]
633 [[1, 4], 0]
634 [[2, 1], 0]
635 [[2, 2], 24]
636 [[2, 3], 0]
637 [[2, 4], 0]
638 [[3, 1], 0]
639 [[3, 2], 0]
640 [[3, 3], 46]
641 [[3, 4], 0]
642 [[4, 1], 0]
643 [[4, 2], 0]
644 [[4, 3], 0]
645 [[4, 4], 46]
646 (%o12)                               done
648 @end example
650 Однако если считать что @code{l} мало и оставить только линейные члены
651 по  @code{l}, тогда получим намного более простое выражение для тензора Эйнштейна:
653 @example
655 (%i14) ctayswitch:true;
656 (%o14)                               true
657 (%i15) ctayvar:l;
658 (%o15)                                 l
659 (%i16) ctaypov:1;
660 (%o16)                                 1
661 (%i17) ctaypt:0;
662 (%o17)                                 0
663 (%i18) christof(false);
664 (%o18)                               done
665 (%i19) ricci(false);
666 (%o19)                               done
667 (%i20) einstein(false);
668 (%o20)                               done
669 (%i21) ntermst(ein);
670 [[1, 1], 6]
671 [[1, 2], 0]
672 [[1, 3], 0]
673 [[1, 4], 0]
674 [[2, 1], 0]
675 [[2, 2], 13]
676 [[2, 3], 2]
677 [[2, 4], 0]
678 [[3, 1], 0]
679 [[3, 2], 2]
680 [[3, 3], 9]
681 [[3, 4], 0]
682 [[4, 1], 0]
683 [[4, 2], 0]
684 [[4, 3], 0]
685 [[4, 4], 9]
686 (%o21)                               done
687 (%i22) ratsimp(ein[1,1]);
688                          2      2  4               2     2
689 (%o22) - (((h11 h22 - h11 ) (l )  r  - 2 h33 l    r ) sin (theta)
690                               r               r r
692                             2               2      4    2
693               - 2 h44 l    r  - h33 h44 (l ) )/(4 r  sin (theta))
694                        r r                r
696 @end example
698 Данное приближение полезно в пределе слабого поля, вдали от
699 гравитационных источников.
701 @opencatbox{Категории:}
702 @category{Пакет ctensor}
703 @closecatbox
704 @end deffn
707 @subsection Неголономный базис
709 Если ключ @code{cframe_flag} равен @code{true}, то пакетные
710 вычисления выполняются с использованием тетрадного (неголономного в общем
711 случае) базиса.
713 @deffn {Функция} frame_bracket (@var{fr}, @var{fri}, @var{diagframe})
714 Скобка тетрады (@code{fb[]}).
716 Вычисляет скобку тетрады, следуя определению:
718 @example
719    c          c         c        d     e
720 ifb   = ( ifri    - ifri    ) ifr   ifr
721    ab         d,e       e,d      a     b
722 @end example
724 @opencatbox{Категории:}
725 @category{Пакет ctensor}
726 @closecatbox
727 @end deffn
729 @subsection Алгебраическая классификация
731 Новой особенностью пакета @code{ctensor} (начиная с ноября 2004)
732 является возможность вычисления классификации Петрова 4-мерного
733 пространственно-временного многообразия.
734 Демонстрационные вычисления по данной теме представлены в  файле
735 @code{share/tensor/petrov.dem}.
737 @deffn {Функция} nptetrad ()
738 Вычисляет световую тетраду (@code{np}) Ньюмана-Пенроуза и связанную с ней
739 дуальную часть (@code{npi}), см. @code{petrov} для примера.
741 Световая тетрада конструируется с использованием 4-х мерного ортонормального
742 базиса метрики, обладающей сигнатурой  (-,+,+,+). Компоненты
743 световой тетрады связаны с обратной матрицей метрики следующими соотношениями:
745 @example
747 np  = (fri  + fri ) / sqrt(2)
748   1       1      2
750 np  = (fri  - fri ) / sqrt(2)
751   2       1      2
753 np  = (fri  + %i fri ) / sqrt(2)
754   3       3         4
756 np  = (fri  - %i fri ) / sqrt(2)
757   4       3         4
759 @end example
761 @opencatbox{Категории:}
762 @category{Пакет ctensor}
763 @closecatbox
764 @end deffn
766 @deffn {Функция} psi (@var{dis})
767 Вычисляет пять коэффициентов Ньюмана-Пенроуза @code{psi[0]}...@code{psi[4]}.
768 Если @code{psi} равен @code{true}, эти коэффициенты печатаются на
769 экране, см пример в пункте @code{petrov}.
771 Коэффициенты вычисляются в координатном базисе из тензора Вейля.
772 Если при использовании тетрадного базиса, компоненты тензора Вейля предварительно
773 конвертируются в координатный базис. Эта процедура не оптимальна с
774 вычислительной точки зрения и поэтому перед вычислением тензора Вейля
775 предварительно рекомендуется задать координатный базис.
776 Заметим однако, что вычисления световой тетрады (@code{np})
777 Ньюмана-Пенроуза требует задания тетрадного базиса. Таким образом,
778 имеющая смысл схема вычислений в этом случае может состоять из следующих
779 этапов: вначале задается базис тетрады, который затем используется для
780 вычисления метрики @code{lg} (вычисляется автоматически при вызове @code{cmetric})
781 и обратной метрики @code{ug}; на этом этапе можно переключится обратно к
782 координатному базису установив ключ @code{cframe_flag} равным
783 @code{false} перед началом вычислений символов Кристоффеля.
784 Переход обратно к тетрадному базису на более поздних стадиях вычислений
785 может привести к несогласованным результатам, поскольку в выражении
786 перемешиваются результаты вычислений компонент тензоров выполненных в
787 различных базисах.
789 @opencatbox{Категории:}
790 @category{Пакет ctensor}
791 @closecatbox
792 @end deffn
794 @deffn {Функция} petrov ()
795 Вычисляет классификацию Петрова для данной метрики, определяя @code{psi[0]}...@code{psi[4]}.
797 Например, нижеследующее показывает, как получить классификацию Петрова
798 для метрики Керра:
800 @example
801 (%i1) load("ctensor");
802 (%o1)       /share/tensor/ctensor.mac
803 (%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
804 (%o2)                                true
805 (%i3) ct_coordsys(exteriorschwarzschild,all);
806 (%o3)                                done
807 (%i4) ug:invert(lg)$
808 (%i5) weyl(false);
809 (%o5)                                done
810 (%i6) nptetrad(true);
811 (%t6) np =
813 [ sqrt(r - 2 m)           sqrt(r)                                 ]
814 [---------------   ---------------------    0            0        ]
815 [sqrt(2) sqrt(r)   sqrt(2) sqrt(r - 2 m)                          ]
816 [                                                                 ]
817 [ sqrt(r - 2 m)            sqrt(r)                                ]
818 [---------------  - ---------------------   0            0        ]
819 [sqrt(2) sqrt(r)    sqrt(2) sqrt(r - 2 m)                         ]
820 [                                                                 ]
821 [                                          r      %i r sin(theta) ]
822 [       0                    0          -------   --------------- ]
823 [                                       sqrt(2)       sqrt(2)     ]
824 [                                                                 ]
825 [                                          r       %i r sin(theta)]
826 [       0                    0          -------  - ---------------]
827 [                                       sqrt(2)        sqrt(2)    ]
829                              sqrt(r)         sqrt(r - 2 m)
830 (%t7) npi = matrix([- ---------------------,---------------, 0, 0],
831                       sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)
833           sqrt(r)            sqrt(r - 2 m)
834 [- ---------------------, - ---------------, 0, 0],
835    sqrt(2) sqrt(r - 2 m)    sqrt(2) sqrt(r)
837            1               %i
838 [0, 0, ---------, --------------------],
839        sqrt(2) r  sqrt(2) r sin(theta)
841            1                 %i
842 [0, 0, ---------, - --------------------])
843        sqrt(2) r    sqrt(2) r sin(theta)
845 (%o7)                                done
846 (%i7) psi(true);
847 (%t8)                              psi  = 0
848                                       0
850 (%t9)                              psi  = 0
851                                       1
853                                           m
854 (%t10)                             psi  = --
855                                       2    3
856                                           r
858 (%t11)                             psi  = 0
859                                       3
861 (%t12)                             psi  = 0
862                                       4
863 (%o12)                               done
864 (%i12) petrov();
865 (%o12)                                 D
867 @end example
869 Вычисление классификации Петрова основано на алгоритме опубликованном в монографии
870 "Classifying geometries in general relativity: III Classification in practice"
871 by Pollney, Skea, and d'Inverno, Class. Quant. Grav. 17 2885-2902 (2000).
872 В текущем виде (по состоянию на 19 декабря 2004) код программы протестирован только для некоторых простых
873 случаев и может содержать ошибки.
875 @opencatbox{Категории:}
876 @category{Пакет ctensor}
877 @closecatbox
878 @end deffn
881 @subsection Кручение и неметричность
883 В пакете @code{ctensor} реализованы учета
884 неметричности и кручения в коэффициентах связности.
886 Коэффициенты кручения вычисляются при помощи определенного пользователем
887 тензора кручения ранга (2,1) @code{tr}. Используя его, коэффициенты
888 кручения, @code{kt}, вычисляются по формулам:
890 @example
892               m          m      m
893        - g  tr   - g   tr   - tr   g
894           im  kj    jm   ki     ij  km
895 kt   = -------------------------------
896   ijk                 2
899   k     km
900 kt   = g   kt
901   ij         ijm
903 @end example
905 Заметим, что массив @code{kt} содержит только смешанные компоненты.
907 Коэффициенты неметричности вычисляются из предварительно определенного
908 пользователем вектора неметричности @code{nm} по следующим формулам:
910 @example
912              k    k        km
913        -nm  D  - D  nm  + g   nm  g
914    k      i  j    i   j         m  ij
915 nmc  = ------------------------------
916    ij                2
918 @end example
920 где D обозначает дельта-символ Кронекера.
922 Если  ключ @code{ctorsion_flag} равен @code{true}, то коэффициенты @code{kt}
923 выделяются из смешанных компонент связности вычисляемых функцией 
924 @code{christof} и запоминаются в массиве @code{mcs}. Аналогичным образом
925 Maxima поступает, если флаг @code{cnonmet_flag} равен @code{true}, в
926 этом случае из смешанных компонент связности выделяется массив @code{nmc}.
928 Если необходимо, функция @code{christof} вызывает функции @code{contortion}
929 @code{nonmetricity} для вычисления массивов @code{kt}  @code{nm}.
931 @deffn {Функция} contortion (@var{tr})
933 Вычисляет коэффициенты кручения ранга (2,1) из тензора кручения @var{tr}.
935 @opencatbox{Категории:}
936 @category{Пакет ctensor}
937 @closecatbox
938 @end deffn
940 @deffn {Функция} nonmetricity (@var{nmс})
942 Вычисляет коэффициенты неметричности  ранга  (2,1) из вектора неметричности @var{nm}.
944 @opencatbox{Категории:}
945 @category{Пакет ctensor}
946 @closecatbox
947 @end deffn
951 @subsection Вспомогательные средства
953 @deffn {Функция} ctransform (@var{M})
954 Функция, выполняющая координатное преобразование произвольной
955 симметричной  матрицы @var{M}. Пользователь интерактивно запрашивается
956 системой о функциях осуществляющих преобразование (прошлое название @code{transform}).
958 @opencatbox{Категории:}
959 @category{Пакет ctensor}
960 @closecatbox
961 @end deffn
963 @deffn {Функция} findde (@var{A}, @var{n})
965 возвращает список дифференциальных уравнений, соответствующих элементам
966  @var{n} -ой квадратной матрицы @var{A}. В текущем виде @var{n} может
967  быть 2 или 3. @code{deindex} - список (определенный глобально) содержащий  индексы
968  матрицы @var{A} соответствующие этим дифференциальным уравнениям.
969 Для тензора Эйнштейна (@code{ein}), представленного в форме двухмерного
970  массива вычисленного по метрике данной ниже, функция @code{findde} дает
971  следующую систему уравнений:
974 @example
975 (%i1) load("ctensor");
976 (%o1)       /share/tensor/ctensor.mac
977 (%i2) derivabbrev:true;
978 (%o2)                                true
979 (%i3) dim:4;
980 (%o3)                                  4
981 (%i4) lg:matrix([a, 0, 0, 0], [ 0, x^2, 0, 0],
982                               [0, 0, x^2*sin(y)^2, 0], [0,0,0,-d]);
983                           [ a  0       0        0  ]
984                           [                        ]
985                           [     2                  ]
986                           [ 0  x       0        0  ]
987 (%o4)                     [                        ]
988                           [         2    2         ]
989                           [ 0  0   x  sin (y)   0  ]
990                           [                        ]
991                           [ 0  0       0       - d ]
992 (%i5) depends([a,d],x);
993 (%o5)                            [a(x), d(x)]
994 (%i6) ct_coords:[x,y,z,t];
995 (%o6)                            [x, y, z, t]
996 (%i7) cmetric();
997 (%o7)                                done
998 (%i8) einstein(false);
999 (%o8)                                done
1000 (%i9) findde(ein,2);
1001                                             2
1002 (%o9) [d  x - a d + d, 2 a d d    x - a (d )  x - a  d d  x
1003         x                     x x         x        x    x
1005                                               2          2
1006                           + 2 a d d   - 2 a  d , a  x + a  - a]
1007                                    x       x      x
1008 (%i10) deindex;
1009 (%o10)                     [[1, 1], [2, 2], [4, 4]]
1011 @end example
1014 @opencatbox{Категории:}
1015 @category{Пакет ctensor}
1016 @closecatbox
1017 @end deffn
1019 @deffn {Функция} cograd ()
1020 Вычисляет ковариантный градиент скалярной функции. Пользователь может
1021 задать имя полученному вектору, согласно процедуре проиллюстрированной
1022 ниже в пункте @code{contragrad}.
1024 @opencatbox{Категории:}
1025 @category{Пакет ctensor}
1026 @closecatbox
1027 @end deffn
1029 @deffn {Функция} contragrad ()
1031 Вычисляет контравариантный градиент скалярной функции. Пользователь может
1032 задать имя полученному вектору, следуя примеру (вычисления используют
1033 метрику Шварцшильда):
1034 @c "vector^F2name^F*" LOOKS LIKE IT NEEDS TO BE FIXED UP, NOT SURE HOW THOUGH
1036 @example
1038 (%i1) load("ctensor");
1039 (%o1)       /share/tensor/ctensor.mac
1040 (%i2) derivabbrev:true;
1041 (%o2)                                true
1042 (%i3) ct_coordsys(exteriorschwarzschild,all);
1043 (%o3)                                done
1044 (%i4) depends(f,r);
1045 (%o4)                               [f(r)]
1046 (%i5) cograd(f,g1);
1047 (%o5)                                done
1048 (%i6) listarray(g1);
1049 (%o6)                            [0, f , 0, 0]
1050                                       r
1051 (%i7) contragrad(f,g2);
1052 (%o7)                                done
1053 (%i8) listarray(g2);
1054                                f  r - 2 f  m
1055                                 r        r
1056 (%o8)                      [0, -------------, 0, 0]
1057                                      r
1059 @end example
1061 @opencatbox{Категории:}
1062 @category{Пакет ctensor}
1063 @closecatbox
1064 @end deffn
1066 @deffn {Функция} dscalar ()
1067 вычисляет даламбертиан скалярной функции, (зависимость от переменных
1068 должна быть определена заранее), например:
1070 @example
1071 (%i1) load("ctensor");
1072 (%o1)       /share/tensor/ctensor.mac
1073 (%i2) derivabbrev:true;
1074 (%o2)                                true
1075 (%i3) ct_coordsys(exteriorschwarzschild,all);
1076 (%o3)                                done
1077 (%i4) depends(p,r);
1078 (%o4)                               [p(r)]
1079 (%i5) factor(dscalar(p));
1080                           2
1081                     p    r  - 2 m p    r + 2 p  r - 2 m p
1082                      r r           r r        r          r
1083 (%o5)               --------------------------------------
1084                                        2
1085                                       r
1086 @end example
1088 @opencatbox{Категории:}
1089 @category{Пакет ctensor}
1090 @closecatbox
1091 @end deffn
1093 @deffn {Функция} checkdiv ()
1095 вычисляет ковариантную дивергенцию смешанного тензора второго ранга
1096 (первый индекс должен быть ковариантным). На печать выводится
1097 n-соответствующих компонент полученного векторного поля, где 
1098 n = @code{dim}. Если аргументом функции является  @code{g} (метрический
1099 тензор), тогда для упрощения результата используется равенство нулю
1100 ковариантной дивергенции тензора Эйнштейна. Результат вычислений (вектор)
1101 запоминается в массиве с именем @code{div}.
1103 @opencatbox{Категории:}
1104 @category{Пакет ctensor}
1105 @closecatbox
1106 @end deffn
1108 @deffn {Функция} cgeodesic (@var{dis})
1109 Функция пакета @code{ctensor} вычисляющая уравнения геодезических для
1110 заданной метрики. Результат запоминается в массиве @code{geod[i]}. Если аргумент
1111  @var{dis} равен @code{true}, тогда на экране печатается результат вычислений.
1113 @opencatbox{Категории:}
1114 @category{Пакет ctensor}
1115 @closecatbox
1116 @end deffn
1119 @deffn {Функция} bdvac (@var{f})
1121 генерирует ковариантные компоненты вакуумных уравнений поля теории
1122  Бранса-Дикке. Скалярное поле определено аргументом @var{f}, который задается в виде
1123  взятого в кавычки имени функции вместе со своими функциональными
1124  аргументами, например, @code{bdvac('p(x))}. Результат вычислений
1125  (компоненты поля ковариантного тензора 2-го ранга) запоминается в @code{bd}.
1127 @opencatbox{Категории:}
1128 @category{Пакет ctensor}
1129 @closecatbox
1130 @end deffn
1132 @deffn {Функция} invariant1 ()
1134 генерирует полевые уравнения Эйлера-Лагранжа для инвариантной плотности
1135 R^2. Результат запоминается в массиве @code{inv1}.
1137 @opencatbox{Категории:}
1138 @category{Пакет ctensor}
1139 @closecatbox
1140 @end deffn
1142 @deffn {Функция} invariant2 ()
1144 *** ПОКА НЕ РЕАЛИЗОВАНО ***
1145 генерирует смешанные полевые уравнения Эйлера-Лагранжа для инвариантной плотности
1146 @code{ric[i,j]*uriem[i,j]}. Результат запоминается в массиве @code{inv2}.
1148 @opencatbox{Категории:}
1149 @category{Пакет ctensor}
1150 @closecatbox
1151 @end deffn
1153 @deffn {Функция} bimetric ()
1155 *** ПОКА НЕ РЕАЛИЗОВАНО ***
1156 генерирует полевые уравнения биметрической теории Розена.
1157  Результат запоминается в массиве @code{rosen}.
1159 @opencatbox{Категории:}
1160 @category{Пакет ctensor}
1161 @closecatbox
1162 @end deffn
1164 @subsection Утилиты
1166 @deffn {Функция} diagmatrixp (@var{M})
1168 Возвращает @code{true} если @var{M} - диагональная матрица (2-х мерный массив).
1170 @opencatbox{Категории:}
1171 @category{Пакет ctensor}
1172 @category{Функции предикаты}
1173 @closecatbox
1174 @end deffn
1176 @deffn {Функция} symmetricp (@var{M})
1178 Возвращает @code{true} если @var{M} - симметричная матрица (2-х мерный массив).
1180 @opencatbox{Категории:}
1181 @category{Пакет ctensor}
1182 @category{Функции предикаты}
1183 @closecatbox
1184 @end deffn
1186 @deffn {Функция} ntermst (@var{f})
1187 Дает пользователю возможность оценить размеры  массива компонент
1188  тензора @var{f}. В результате печатается список двух элементов, где
1189  первый элемент является списком индексов компоненты тензора, а
1190  второй элемент соответствует количеству слагаемых этой компоненты.
1191 Таким способом можно быстро выявить ненулевые компоненты и оценить
1192  стратегию упрощения  тензора.
1194 @opencatbox{Категории:}
1195 @category{Пакет ctensor}
1196 @closecatbox
1197 @end deffn
1199 @deffn {Функция} cdisplay (@var{ten})
1200 показывает все элементы тензора @var{ten}, в виде многомерного массива.
1201 Тензора ранга 0 и 1, также как и другие типы переменных показываются
1202 стандартной функцией Maxima - @code{ldisplay}. Тензоры ранга 2 печатаются в виде
1203 двухмерной матрицы, тензоры более высокого порядка выводятся на экран как
1204 список 2-мерных матриц. Например в следующем примере на экран выводится
1205 результаты вычисления тензора Римана для метрики Шварцшильда:
1207 @example
1208 (%i1) load("ctensor");
1209 (%o1)       /share/tensor/ctensor.mac
1210 (%i2) ratfac:true;
1211 (%o2)                                true
1212 (%i3) ct_coordsys(exteriorschwarzschild,all);
1213 (%o3)                                done
1214 (%i4) riemann(false);
1215 (%o4)                                done
1216 (%i5) cdisplay(riem);
1217           [ 0               0                   0           0     ]
1218           [                                                       ]
1219           [                              2                        ]
1220           [      3 m (r - 2 m)   m    2 m                         ]
1221           [ 0  - ------------- + -- - ----      0           0     ]
1222           [            4          3     4                         ]
1223           [           r          r     r                          ]
1224           [                                                       ]
1225 riem    = [                                m (r - 2 m)            ]
1226     1, 1  [ 0               0              -----------      0     ]
1227           [                                     4                 ]
1228           [                                    r                  ]
1229           [                                                       ]
1230           [                                           m (r - 2 m) ]
1231           [ 0               0                   0     ----------- ]
1232           [                                                4      ]
1233           [                                               r       ]
1235                                 [    2 m (r - 2 m)       ]
1236                                 [ 0  -------------  0  0 ]
1237                                 [          4             ]
1238                                 [         r              ]
1239                      riem     = [                        ]
1240                          1, 2   [ 0        0        0  0 ]
1241                                 [                        ]
1242                                 [ 0        0        0  0 ]
1243                                 [                        ]
1244                                 [ 0        0        0  0 ]
1246                                 [         m (r - 2 m)    ]
1247                                 [ 0  0  - -----------  0 ]
1248                                 [              4         ]
1249                                 [             r          ]
1250                      riem     = [                        ]
1251                          1, 3   [ 0  0        0        0 ]
1252                                 [                        ]
1253                                 [ 0  0        0        0 ]
1254                                 [                        ]
1255                                 [ 0  0        0        0 ]
1257                                 [            m (r - 2 m) ]
1258                                 [ 0  0  0  - ----------- ]
1259                                 [                 4      ]
1260                                 [                r       ]
1261                      riem     = [                        ]
1262                          1, 4   [ 0  0  0        0       ]
1263                                 [                        ]
1264                                 [ 0  0  0        0       ]
1265                                 [                        ]
1266                                 [ 0  0  0        0       ]
1268                                [       0         0  0  0 ]
1269                                [                         ]
1270                                [       2 m               ]
1271                                [ - ------------  0  0  0 ]
1272                     riem     = [    2                    ]
1273                         2, 1   [   r  (r - 2 m)          ]
1274                                [                         ]
1275                                [       0         0  0  0 ]
1276                                [                         ]
1277                                [       0         0  0  0 ]
1279              [     2 m                                         ]
1280              [ ------------  0        0               0        ]
1281              [  2                                              ]
1282              [ r  (r - 2 m)                                    ]
1283              [                                                 ]
1284              [      0        0        0               0        ]
1285              [                                                 ]
1286   riem     = [                         m                       ]
1287       2, 2   [      0        0  - ------------        0        ]
1288              [                     2                           ]
1289              [                    r  (r - 2 m)                 ]
1290              [                                                 ]
1291              [                                         m       ]
1292              [      0        0        0         - ------------ ]
1293              [                                     2           ]
1294              [                                    r  (r - 2 m) ]
1296                                 [ 0  0       0        0 ]
1297                                 [                       ]
1298                                 [            m          ]
1299                                 [ 0  0  ------------  0 ]
1300                      riem     = [        2              ]
1301                          2, 3   [       r  (r - 2 m)    ]
1302                                 [                       ]
1303                                 [ 0  0       0        0 ]
1304                                 [                       ]
1305                                 [ 0  0       0        0 ]
1307                                 [ 0  0  0       0       ]
1308                                 [                       ]
1309                                 [               m       ]
1310                                 [ 0  0  0  ------------ ]
1311                      riem     = [           2           ]
1312                          2, 4   [          r  (r - 2 m) ]
1313                                 [                       ]
1314                                 [ 0  0  0       0       ]
1315                                 [                       ]
1316                                 [ 0  0  0       0       ]
1318                                       [ 0  0  0  0 ]
1319                                       [            ]
1320                                       [ 0  0  0  0 ]
1321                                       [            ]
1322                            riem     = [ m          ]
1323                                3, 1   [ -  0  0  0 ]
1324                                       [ r          ]
1325                                       [            ]
1326                                       [ 0  0  0  0 ]
1328                                       [ 0  0  0  0 ]
1329                                       [            ]
1330                                       [ 0  0  0  0 ]
1331                                       [            ]
1332                            riem     = [    m       ]
1333                                3, 2   [ 0  -  0  0 ]
1334                                       [    r       ]
1335                                       [            ]
1336                                       [ 0  0  0  0 ]
1338                                [   m                      ]
1339                                [ - -   0   0       0      ]
1340                                [   r                      ]
1341                                [                          ]
1342                                [        m                 ]
1343                                [  0   - -  0       0      ]
1344                     riem     = [        r                 ]
1345                         3, 3   [                          ]
1346                                [  0    0   0       0      ]
1347                                [                          ]
1348                                [              2 m - r     ]
1349                                [  0    0   0  ------- + 1 ]
1350                                [                 r        ]
1352                                     [ 0  0  0    0   ]
1353                                     [                ]
1354                                     [ 0  0  0    0   ]
1355                                     [                ]
1356                          riem     = [            2 m ]
1357                              3, 4   [ 0  0  0  - --- ]
1358                                     [             r  ]
1359                                     [                ]
1360                                     [ 0  0  0    0   ]
1362                                 [       0        0  0  0 ]
1363                                 [                        ]
1364                                 [       0        0  0  0 ]
1365                                 [                        ]
1366                      riem     = [       0        0  0  0 ]
1367                          4, 1   [                        ]
1368                                 [      2                 ]
1369                                 [ m sin (theta)          ]
1370                                 [ -------------  0  0  0 ]
1371                                 [       r                ]
1373                                 [ 0        0        0  0 ]
1374                                 [                        ]
1375                                 [ 0        0        0  0 ]
1376                                 [                        ]
1377                      riem     = [ 0        0        0  0 ]
1378                          4, 2   [                        ]
1379                                 [         2              ]
1380                                 [    m sin (theta)       ]
1381                                 [ 0  -------------  0  0 ]
1382                                 [          r             ]
1384                               [ 0  0          0          0 ]
1385                               [                            ]
1386                               [ 0  0          0          0 ]
1387                               [                            ]
1388                    riem     = [ 0  0          0          0 ]
1389                        4, 3   [                            ]
1390                               [                2           ]
1391                               [         2 m sin (theta)    ]
1392                               [ 0  0  - ---------------  0 ]
1393                               [                r           ]
1395            [        2                                             ]
1396            [   m sin (theta)                                      ]
1397            [ - -------------         0                0         0 ]
1398            [         r                                            ]
1399            [                                                      ]
1400            [                         2                            ]
1401            [                    m sin (theta)                     ]
1402 riem     = [        0         - -------------         0         0 ]
1403     4, 4   [                          r                           ]
1404            [                                                      ]
1405            [                                          2           ]
1406            [                                   2 m sin (theta)    ]
1407            [        0                0         ---------------  0 ]
1408            [                                          r           ]
1409            [                                                      ]
1410            [        0                0                0         0 ]
1412 (%o5)                                done
1414 @end example
1416 @opencatbox{Категории:}
1417 @category{Пакет ctensor}
1418 @closecatbox
1419 @end deffn
1421 @deffn {Функция} deleten (@var{L}, @var{n})
1422 Возвращает новый список состоящий из элементов списка @var{L} с
1423 удаленным @var{n}-ым элементом.
1425 @opencatbox{Категории:}
1426 @category{Пакет ctensor}
1427 @closecatbox
1428 @end deffn
1430 @subsection Переменные пакета ctensor
1432 @defvr {Управляющая переменная} dim
1433 Значение по умолчанию: 4
1435 Опция пакета @code{ctensor} (компонентные вычисления).
1436 Размерность многообразия, по умолчанию: 4
1437 Команда  @code{dim: n} переопределяет размерность величине равной @code{n}.
1439 @opencatbox{Категории:}
1440 @category{Пакет ctensor}
1441 @closecatbox
1442 @end defvr
1444 @defvr {Управляющая переменная} diagmetric
1445 Значение по умолчанию: @code{false}
1447 Опция пакета @code{ctensor} (компонентные вычисления).
1448 Если @code{diagmetric} равен @code{true}, тогда вычисления
1449 всех геометрических объектов проводятся по упрощенной схеме: с учетом
1450 диагональности метрики. Это позволяет уменьшить время счета. Данная опция
1451 устанавливается автоматически если при вызове  @code{csetup} была задана
1452 диагональная метрика.
1454 @opencatbox{Категории:}
1455 @category{Пакет ctensor}
1456 @closecatbox
1457 @end defvr
1459 @defvr {Управляющая переменная} ctrgsimp
1461 Включает использование тригонометрических преобразований при упрощении
1462 тензора. В настоящее время, @code{ctrgsimp} влияет только на результаты
1463 вычислений, выполненные  в  тетрадном базисе.
1465 @opencatbox{Категории:}
1466 @category{Пакет ctensor}
1467 @category{Флаги и переменные упрощения}
1468 @closecatbox
1469 @end defvr
1471 @defvr {Управляющая переменная} cframe_flag
1473 Если ключ @code{cframe_flag}  равен @code{true}, тогда вычисления проводятся
1474 в тетрадном базисе (в общем случае с не голономной метрикой). 
1475 Базис определяется массивом дуального фрейма  @code{fri} и метрикой базиса
1476  @code{lfg}. При вычислениях в декартовой тетраде  массив,
1477 @code{lfg} должен быть единичной матрицей соответствующего размера; при
1478 вычислениях с Лоренцевой тетрадой,  массив @code{lfg} должен иметь
1479 соответствующую сигнатуру.
1481 @opencatbox{Категории:}
1482 @category{Пакет ctensor}
1483 @closecatbox
1484 @end defvr
1486 @defvr {Управляющая переменная} ctorsion_flag
1488 Если @code{ctorsion_flag} равен @code{true}, тогда при вычислении
1489 связности учитываются коэффициенты кручения @code{contortion}.
1490 В свою очередь, коэффициенты кручения, @code{contortion}, вычисляются из
1491 заданного пользователем тензора кручения @code{tr}.
1493 @opencatbox{Категории:}
1494 @category{Пакет ctensor}
1495 @closecatbox
1496 @end defvr
1498 @defvr {Управляющая переменная} cnonmet_flag
1500 Если @code{cnonmet_flag} равен @code{true}, тогда при вычислении
1501 связности учитывается неметричность @code{nonmetricity}, которая, сама
1502 по себе,  вычисляется из заданного пользователем вектора неметричности @code{nm}.
1504 @opencatbox{Категории:}
1505 @category{Пакет ctensor}
1506 @closecatbox
1507 @end defvr
1509 @defvr {Управляющая переменная} ctayswitch
1511 Если  ключ равен @code{true}, то при вычислениях  используются ряды Тейлора. 
1512 В текущем состоянии  пакета, эти ряды влияют на вычисление
1513 следующих тензоров: @code{christof}, @code{ricci},
1514 @code{uricci}, @code{einstein}, и @code{weyl}.
1516 @opencatbox{Категории:}
1517 @category{Пакет ctensor}
1518 @closecatbox
1519 @end defvr
1521 @defvr {Управляющая переменная} ctayvar
1523 Переменная ряда Тейлора. Она активируется при @code{ctayswitch} равном
1524 @code{true}.
1526 @opencatbox{Категории:}
1527 @category{Пакет ctensor}
1528 @closecatbox
1529 @end defvr
1531 @defvr {Управляющая переменная} ctaypov
1533 Максимальная ряда Тэйлора. Ее определение влияет на
1534 вычисления только если @code{ctayswitch} равен @code{true}.
1536 @opencatbox{Категории:}
1537 @category{Пакет ctensor}
1538 @closecatbox
1539 @end defvr
1541 @defvr {Управляющая переменная} ctaypt
1543 Центральная точка ряда Тэйлора. Ее определение влияет на
1544 вычисления только если @code{ctayswitch} равен @code{true}.
1546 @opencatbox{Категории:}
1547 @category{Пакет ctensor}
1548 @closecatbox
1549 @end defvr
1551 @defvr {Системная переменная} gdet
1553 Детерминант метрического тензора @code{lg}. Вычисляется функцией
1554 @code{cmetric}, когда флаг @code{cframe_flag} равен @code{false}.
1556 @opencatbox{Категории:}
1557 @category{Пакет ctensor}
1558 @closecatbox
1559 @end defvr
1561 @defvr {Управляющая переменная} ratchristof
1563 Включает рациональное упрощение коэффициентов связности @code{christof}.
1565 @opencatbox{Категории:}
1566 @category{Пакет ctensor}
1567 @closecatbox
1568 @end defvr
1570 @defvr {Управляющая переменная} rateinstein
1571 Значение по умолчанию: @code{true}
1573 Если равен @code{true} тогда проводится рациональное упрощение компонент
1574 тензора Эйнштейна; если @code{ratfac} равен @code{true}, тогда
1575 компоненты тензора автоматически факторизуются.
1577 @opencatbox{Категории:}
1578 @category{Пакет ctensor}
1579 @closecatbox
1580 @end defvr
1582 @defvr {Управляющая переменная} ratriemann
1583 Значение по умолчанию: @code{true}
1585 Один из ключей, контролирующих упрощение тензора Римана;
1586 Если равен @code{true} тогда применяется рациональное упрощение;
1587 если @code{ratfac} равен @code{true}, тогда
1588 компоненты тензора автоматически факторизуются.
1590 @opencatbox{Категории:}
1591 @category{Пакет ctensor}
1592 @closecatbox
1593 @end defvr
1595 @defvr {Управляющая переменная} ratweyl
1596 Значение по умолчанию: @code{true}
1598 Если равен @code{true} тогда применяется рациональное упрощение тензора Вейля;
1599 если @code{ratfac} равен @code{true}, тогда
1600 компоненты тензора автоматически факторизуются.
1602 @opencatbox{Категории:}
1603 @category{Пакет ctensor}
1604 @closecatbox
1605 @end defvr
1607 @defvr {Переменная} lfg
1608 Имя ковариантной метрики тетрады. По умолчанию совпадает с Лоренцевой
1609 метрикой,  имеет сигнатуру (+,+,+,-). Используется когда @code{cframe_flag} равен @code{true}.
1611 @opencatbox{Категории:}
1612 @category{Пакет ctensor}
1613 @closecatbox
1614 @end defvr
1616 @defvr {Переменная} ufg
1617 Имя контравариантной метрики тетрады. Вычисляется из @code{lfg}, если
1618 вызывается функция @code{cmetric} и флаг @code{cframe_flag} равен @code{true}.
1620 @opencatbox{Категории:}
1621 @category{Пакет ctensor}
1622 @closecatbox
1623 @end defvr
1625 @defvr {Переменная} riem
1626 Тензор Римана ранга (3,1). Вычисляется вызовом функции
1627 @code{riemann}. Для информации о порядке следования индексов см. описание @code{riemann}.
1629 Если @code{cframe_flag} равен @code{true}, @code{riem} вычисляется по
1630 ковариантным компонентам тензора Римана @code{lriem}.
1632 @opencatbox{Категории:}
1633 @category{Пакет ctensor}
1634 @closecatbox
1635 @end defvr
1637 @defvr {Переменная} lriem
1639 Ковариантная версия тензора Римана. Вычисляется вызовом функции @code{lriemann}.
1641 @opencatbox{Категории:}
1642 @category{Пакет ctensor}
1643 @closecatbox
1644 @end defvr
1646 @defvr {Переменная} uriem
1648 Контравариантная версия тензора Римана. Вычисляется вызовом функции @code{uriemann}.
1650 @opencatbox{Категории:}
1651 @category{Пакет ctensor}
1652 @closecatbox
1653 @end defvr
1655 @defvr {Переменная} ric
1657 Смешанный тензор Риччи. Вычисляется функцией @code{ricci}.
1659 @opencatbox{Категории:}
1660 @category{Пакет ctensor}
1661 @closecatbox
1662 @end defvr
1664 @defvr {Переменная} uric
1666 Контравариантный тензор Риччи. Вычисляется функцией @code{uricci}.
1668 @opencatbox{Категории:}
1669 @category{Пакет ctensor}
1670 @closecatbox
1671 @end defvr
1673 @defvr {Переменная} lg
1675 Метрический тензор. Данный тензор должен (наравне с переменной
1676 @code{dim}) определен до начала других вычислений.
1678 @opencatbox{Категории:}
1679 @category{Пакет ctensor}
1680 @closecatbox
1681 @end defvr
1683 @defvr {Переменная} ug
1685 Обратный метрический тензор. Вычисляется функцией @code{cmetric}.
1687 @opencatbox{Категории:}
1688 @category{Пакет ctensor}
1689 @closecatbox
1690 @end defvr
1692 @defvr {Переменная} weyl
1694 Тензор Вейля. Вычисляется функцией @code{weyl}.
1696 @opencatbox{Категории:}
1697 @category{Пакет ctensor}
1698 @closecatbox
1699 @end defvr
1701 @defvr {Переменная} fb
1703 Коммутатор (скобка) тетрады, вычисляется функцией @code{frame_bracket}.
1705 @opencatbox{Категории:}
1706 @category{Пакет ctensor}
1707 @closecatbox
1708 @end defvr
1710 @defvr {Переменная} kinvariant
1712 Инвариант Кретчмана. Вычисляется функцией @code{rinvariant}.
1714 @opencatbox{Категории:}
1715 @category{Пакет ctensor}
1716 @closecatbox
1717 @end defvr
1719 @defvr {Переменная} np
1721 Нуль-тетрада Ньюмана-Пенроуза. Вычисляется функцией @code{nptetrad}.
1723 @opencatbox{Категории:}
1724 @category{Пакет ctensor}
1725 @closecatbox
1726 @end defvr
1728 @defvr {Переменная} npi
1730 Нуль-тетрада Ньюмана-Пенроуза с поднятыми индексами; вычисляется процедурой @code{nptetrad}.
1731 Определена посредством @code{ug.np}. Произведение
1732 @code{np.transpose(npi)} является константой:
1734 @example
1735 (%i39) trigsimp(np.transpose(npi));
1736                               [  0   - 1  0  0 ]
1737                               [                ]
1738                               [ - 1   0   0  0 ]
1739 (%o39)                        [                ]
1740                               [  0    0   0  1 ]
1741                               [                ]
1742                               [  0    0   1  0 ]
1743 @end example
1745 @opencatbox{Категории:}
1746 @category{Пакет ctensor}
1747 @closecatbox
1748 @end defvr
1750 @defvr {Переменная} tr
1752 Определенный пользователем тензор 3-го ранга, задающий
1753 кручение. Используется процедурой @code{contortion}.
1755 @opencatbox{Категории:}
1756 @category{Пакет ctensor}
1757 @closecatbox
1758 @end defvr
1760 @defvr {Переменная} kt
1762 Вклад кручения в коэффициенты связности, вычисляется из тензора кручения @code{tr} функцией @code{contortion}.
1764 @opencatbox{Категории:}
1765 @category{Пакет ctensor}
1766 @closecatbox
1767 @end defvr
1769 @defvr {Переменная} nm
1771 Определенный пользователем  вектор неметричности. Используется функцией @code{nonmetricity}.
1773 @opencatbox{Категории:}
1774 @category{Пакет ctensor}
1775 @closecatbox
1776 @end defvr
1778 @defvr {Переменная} nmc
1780 Вклад неметричности в связность; вычисляется из @code{nm} функцией @code{nonmetricity}.
1782 @opencatbox{Категории:}
1783 @category{Пакет ctensor}
1784 @closecatbox
1785 @end defvr
1787 @defvr {Системная переменная} tensorkill
1789 Переменная показывающая, что пакет @code{ctensor} инициализирован. Эти
1790 установки используются процедурой @code{csetup}, и переопределяются процедурой @code{init_ctensor}.
1792 @opencatbox{Категории:}
1793 @category{Пакет ctensor}
1794 @closecatbox
1795 @end defvr
1797 @defvr {Управляющая переменная} ct_coords
1798 Значение по умолчанию: @code{[]}
1800 Опция пакета @code{ctensor} (компонентные вычисления тензоров).
1801 @code{ct_coords} содержит список имен координат. Обычно он определяется
1802 при вызове процедуры  @code{csetup}. Список может быть переопределен
1803 назначением нового списка
1804 @code{ct_coords: [j1, j2, ..., jn]},  j's имена новых координат. Смотри также @code{csetup}.
1806 @opencatbox{Категории:}
1807 @category{Пакет ctensor}
1808 @closecatbox
1809 @end defvr
1811 @subsection Зарезервированные имена
1813 Следующие имена используются функциями и процедурами пакета
1814 @code{ctensor} (не следует их переопределять):
1816 @example
1817   Наименование Описание
1818   ----------------------------------------------------------------
1819   _lg()        Присваивается массиву lfg если используется 
1820                тетрадная метрика; по умолчанию присваивается  
1821                массиву lg
1822   _ug()        Присваивается массиву ufg если используется 
1823                тетрадная метрика; по умолчанию присваивается 
1824                массиву ug
1825   cleanup()    Удаляет элементы drom списка deindex 
1826   contract4()  используется функцией psi()
1827   filemet()    используется функцией csetup() при чтении метрики 
1828                из файла
1829   findde1()    используется функцией findde()
1830   findde2()    используется функцией findde()
1831   findde3()    используется функцией findde()
1832   kdelt()      дельта-символ Кронекера (необобщенный)
1833   newmet()     используется функцией csetup() для интерактивного
1834                определения метрики
1835   setflags()   используется функцией init_ctensor()
1836   readvalue()
1837   resimp()
1838   sermet()     используется функцией csetup() для ввода метрики 
1839                в виде разложения в ряд Тэйлора
1840   txyzsum()
1841   tmetric()    Метрика тетрады, используется функцией cmetric(), 
1842                если cframe_flag:true
1843   triemann()   Тензор Римана в тетрадном представлении, 
1844                используется если cframe_flag:true
1845   tricci()     Тензор Риччи в тетрадном представлении, 
1846                используется если cframe_flag:true
1847   trrc()       Коэффициенты вращения Риччи, используется  
1848                функцией christof()
1849   yesp()
1850 @end example
1853 @subsection Изменения
1855 В ноябре 2004 пакет @code{ctensor} был существенно переписан. Многие
1856 функции и переменные были переименованы для  того чтобы сделать данный
1857 пакет совместимым с коммерческой версией  Macsyma.
1860 @example
1861   Новое имя    Статое имя      Описание
1862   -----------------------------------------------------------------
1863   ctaylor()    DLGTAYLOR()     Разложение выражения в ряд
1864                                Тэйлора
1865   lgeod[]      EM              Уравнения геодезических
1866   ein[]        G[]             Смешанный тензор Эйнштейна
1867   ric[]        LR[]            Смешанный тензор Риччи
1868   ricci()      LRICCICOM()     Вычисляет смешанный тензор Риччи
1869   ctaypov      MINP            Максимальная степень ряда Тэйлора
1870   cgeodesic()  MOTION          Вычисляет уравнения геодезических
1871   ct_coords    OMEGA           метрические координаты
1872   ctayvar      PARAM           Переменная ряда Тэйлора
1873   lriem[]      R[]             
1874   uriemann()   RAISERIEMANN()  Вычисляет контравариантный тензор 
1875                                Римана 
1876   ratriemann   RATRIEMAN       Рациональное упрощение тензора 
1877                                Римана
1878   uric[]       RICCI[]         Контравариантный тензор Риччи
1879   uricci()     RICCICOM()      Вычисляет контравариантный тензор 
1880                                Риччи
1881   cmetric()    SETMETRIC()     Определяет метрику
1882   ctaypt       TAYPT           Центральная точка окрестности ряда 
1883                                Тэйлора
1884   ctayswitch   TAYSWITCH       Ключ, устанавливающий использовать 
1885                                ли ряды Тэйлора в метрике
1886   csetup()     TSETUP()        Вызывает начало интерактивного 
1887                                режима задания метрики и пр.       
1888   ctransform() TTRANSFORM()    Интерактивное преобразование 
1889                                координат
1890   uriem[]      UR[]            Контравариантный тензор Римана
1891   weyl[]       W[]             Тензор Вейля ранга (3,1)
1893 @end example