Add symbol checks to translators for MCALL, MARRAYREF, and MARRAYSET
[maxima.git] / doc / info / ru / Ctensor.texi
blob3f5c9d2728db1e3659396defb2cb656c0d9b257e
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 @anchor{psi}
767 @deffn {Функция} psi (@var{dis})
768 Вычисляет пять коэффициентов Ньюмана-Пенроуза @code{psi[0]}...@code{psi[4]}.
769 Если @code{psi} равен @code{true}, эти коэффициенты печатаются на
770 экране, см пример в пункте @code{petrov}.
772 Коэффициенты вычисляются в координатном базисе из тензора Вейля.
773 Если при использовании тетрадного базиса, компоненты тензора Вейля предварительно
774 конвертируются в координатный базис. Эта процедура не оптимальна с
775 вычислительной точки зрения и поэтому перед вычислением тензора Вейля
776 предварительно рекомендуется задать координатный базис.
777 Заметим однако, что вычисления световой тетрады (@code{np})
778 Ньюмана-Пенроуза требует задания тетрадного базиса. Таким образом,
779 имеющая смысл схема вычислений в этом случае может состоять из следующих
780 этапов: вначале задается базис тетрады, который затем используется для
781 вычисления метрики @code{lg} (вычисляется автоматически при вызове @code{cmetric})
782 и обратной метрики @code{ug}; на этом этапе можно переключится обратно к
783 координатному базису установив ключ @code{cframe_flag} равным
784 @code{false} перед началом вычислений символов Кристоффеля.
785 Переход обратно к тетрадному базису на более поздних стадиях вычислений
786 может привести к несогласованным результатам, поскольку в выражении
787 перемешиваются результаты вычислений компонент тензоров выполненных в
788 различных базисах.
790 @opencatbox{Категории:}
791 @category{Пакет ctensor}
792 @closecatbox
793 @end deffn
795 @deffn {Функция} petrov ()
796 Вычисляет классификацию Петрова для данной метрики, определяя @code{psi[0]}...@code{psi[4]}.
798 Например, нижеследующее показывает, как получить классификацию Петрова
799 для метрики Керра:
801 @example
802 (%i1) load("ctensor");
803 (%o1)       /share/tensor/ctensor.mac
804 (%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
805 (%o2)                                true
806 (%i3) ct_coordsys(exteriorschwarzschild,all);
807 (%o3)                                done
808 (%i4) ug:invert(lg)$
809 (%i5) weyl(false);
810 (%o5)                                done
811 (%i6) nptetrad(true);
812 (%t6) np =
814 [ sqrt(r - 2 m)           sqrt(r)                                 ]
815 [---------------   ---------------------    0            0        ]
816 [sqrt(2) sqrt(r)   sqrt(2) sqrt(r - 2 m)                          ]
817 [                                                                 ]
818 [ sqrt(r - 2 m)            sqrt(r)                                ]
819 [---------------  - ---------------------   0            0        ]
820 [sqrt(2) sqrt(r)    sqrt(2) sqrt(r - 2 m)                         ]
821 [                                                                 ]
822 [                                          r      %i r sin(theta) ]
823 [       0                    0          -------   --------------- ]
824 [                                       sqrt(2)       sqrt(2)     ]
825 [                                                                 ]
826 [                                          r       %i r sin(theta)]
827 [       0                    0          -------  - ---------------]
828 [                                       sqrt(2)        sqrt(2)    ]
830                              sqrt(r)         sqrt(r - 2 m)
831 (%t7) npi = matrix([- ---------------------,---------------, 0, 0],
832                       sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)
834           sqrt(r)            sqrt(r - 2 m)
835 [- ---------------------, - ---------------, 0, 0],
836    sqrt(2) sqrt(r - 2 m)    sqrt(2) sqrt(r)
838            1               %i
839 [0, 0, ---------, --------------------],
840        sqrt(2) r  sqrt(2) r sin(theta)
842            1                 %i
843 [0, 0, ---------, - --------------------])
844        sqrt(2) r    sqrt(2) r sin(theta)
846 (%o7)                                done
847 (%i7) psi(true);
848 (%t8)                              psi  = 0
849                                       0
851 (%t9)                              psi  = 0
852                                       1
854                                           m
855 (%t10)                             psi  = --
856                                       2    3
857                                           r
859 (%t11)                             psi  = 0
860                                       3
862 (%t12)                             psi  = 0
863                                       4
864 (%o12)                               done
865 (%i12) petrov();
866 (%o12)                                 D
868 @end example
870 Вычисление классификации Петрова основано на алгоритме опубликованном в монографии
871 "Classifying geometries in general relativity: III Classification in practice"
872 by Pollney, Skea, and d'Inverno, Class. Quant. Grav. 17 2885-2902 (2000).
873 В текущем виде (по состоянию на 19 декабря 2004) код программы протестирован только для некоторых простых
874 случаев и может содержать ошибки.
876 @opencatbox{Категории:}
877 @category{Пакет ctensor}
878 @closecatbox
879 @end deffn
882 @subsection Кручение и неметричность
884 В пакете @code{ctensor} реализованы учета
885 неметричности и кручения в коэффициентах связности.
887 Коэффициенты кручения вычисляются при помощи определенного пользователем
888 тензора кручения ранга (2,1) @code{tr}. Используя его, коэффициенты
889 кручения, @code{kt}, вычисляются по формулам:
891 @example
893               m          m      m
894        - g  tr   - g   tr   - tr   g
895           im  kj    jm   ki     ij  km
896 kt   = -------------------------------
897   ijk                 2
900   k     km
901 kt   = g   kt
902   ij         ijm
904 @end example
906 Заметим, что массив @code{kt} содержит только смешанные компоненты.
908 Коэффициенты неметричности вычисляются из предварительно определенного
909 пользователем вектора неметричности @code{nm} по следующим формулам:
911 @example
913              k    k        km
914        -nm  D  - D  nm  + g   nm  g
915    k      i  j    i   j         m  ij
916 nmc  = ------------------------------
917    ij                2
919 @end example
921 где D обозначает дельта-символ Кронекера.
923 Если  ключ @code{ctorsion_flag} равен @code{true}, то коэффициенты @code{kt}
924 выделяются из смешанных компонент связности вычисляемых функцией 
925 @code{christof} и запоминаются в массиве @code{mcs}. Аналогичным образом
926 Maxima поступает, если флаг @code{cnonmet_flag} равен @code{true}, в
927 этом случае из смешанных компонент связности выделяется массив @code{nmc}.
929 Если необходимо, функция @code{christof} вызывает функции @code{contortion}
930 @code{nonmetricity} для вычисления массивов @code{kt}  @code{nm}.
932 @deffn {Функция} contortion (@var{tr})
934 Вычисляет коэффициенты кручения ранга (2,1) из тензора кручения @var{tr}.
936 @opencatbox{Категории:}
937 @category{Пакет ctensor}
938 @closecatbox
939 @end deffn
941 @deffn {Функция} nonmetricity (@var{nmс})
943 Вычисляет коэффициенты неметричности  ранга  (2,1) из вектора неметричности @var{nm}.
945 @opencatbox{Категории:}
946 @category{Пакет ctensor}
947 @closecatbox
948 @end deffn
952 @subsection Вспомогательные средства
954 @deffn {Функция} ctransform (@var{M})
955 Функция, выполняющая координатное преобразование произвольной
956 симметричной  матрицы @var{M}. Пользователь интерактивно запрашивается
957 системой о функциях осуществляющих преобразование (прошлое название @code{transform}).
959 @opencatbox{Категории:}
960 @category{Пакет ctensor}
961 @closecatbox
962 @end deffn
964 @deffn {Функция} findde (@var{A}, @var{n})
966 возвращает список дифференциальных уравнений, соответствующих элементам
967  @var{n} -ой квадратной матрицы @var{A}. В текущем виде @var{n} может
968  быть 2 или 3. @code{deindex} - список (определенный глобально) содержащий  индексы
969  матрицы @var{A} соответствующие этим дифференциальным уравнениям.
970 Для тензора Эйнштейна (@code{ein}), представленного в форме двухмерного
971  массива вычисленного по метрике данной ниже, функция @code{findde} дает
972  следующую систему уравнений:
975 @example
976 (%i1) load("ctensor");
977 (%o1)       /share/tensor/ctensor.mac
978 (%i2) derivabbrev:true;
979 (%o2)                                true
980 (%i3) dim:4;
981 (%o3)                                  4
982 (%i4) lg:matrix([a, 0, 0, 0], [ 0, x^2, 0, 0],
983                               [0, 0, x^2*sin(y)^2, 0], [0,0,0,-d]);
984                           [ a  0       0        0  ]
985                           [                        ]
986                           [     2                  ]
987                           [ 0  x       0        0  ]
988 (%o4)                     [                        ]
989                           [         2    2         ]
990                           [ 0  0   x  sin (y)   0  ]
991                           [                        ]
992                           [ 0  0       0       - d ]
993 (%i5) depends([a,d],x);
994 (%o5)                            [a(x), d(x)]
995 (%i6) ct_coords:[x,y,z,t];
996 (%o6)                            [x, y, z, t]
997 (%i7) cmetric();
998 (%o7)                                done
999 (%i8) einstein(false);
1000 (%o8)                                done
1001 (%i9) findde(ein,2);
1002                                             2
1003 (%o9) [d  x - a d + d, 2 a d d    x - a (d )  x - a  d d  x
1004         x                     x x         x        x    x
1006                                               2          2
1007                           + 2 a d d   - 2 a  d , a  x + a  - a]
1008                                    x       x      x
1009 (%i10) deindex;
1010 (%o10)                     [[1, 1], [2, 2], [4, 4]]
1012 @end example
1015 @opencatbox{Категории:}
1016 @category{Пакет ctensor}
1017 @closecatbox
1018 @end deffn
1020 @deffn {Функция} cograd ()
1021 Вычисляет ковариантный градиент скалярной функции. Пользователь может
1022 задать имя полученному вектору, согласно процедуре проиллюстрированной
1023 ниже в пункте @code{contragrad}.
1025 @opencatbox{Категории:}
1026 @category{Пакет ctensor}
1027 @closecatbox
1028 @end deffn
1030 @deffn {Функция} contragrad ()
1032 Вычисляет контравариантный градиент скалярной функции. Пользователь может
1033 задать имя полученному вектору, следуя примеру (вычисления используют
1034 метрику Шварцшильда):
1035 @c "vector^F2name^F*" LOOKS LIKE IT NEEDS TO BE FIXED UP, NOT SURE HOW THOUGH
1037 @example
1039 (%i1) load("ctensor");
1040 (%o1)       /share/tensor/ctensor.mac
1041 (%i2) derivabbrev:true;
1042 (%o2)                                true
1043 (%i3) ct_coordsys(exteriorschwarzschild,all);
1044 (%o3)                                done
1045 (%i4) depends(f,r);
1046 (%o4)                               [f(r)]
1047 (%i5) cograd(f,g1);
1048 (%o5)                                done
1049 (%i6) listarray(g1);
1050 (%o6)                            [0, f , 0, 0]
1051                                       r
1052 (%i7) contragrad(f,g2);
1053 (%o7)                                done
1054 (%i8) listarray(g2);
1055                                f  r - 2 f  m
1056                                 r        r
1057 (%o8)                      [0, -------------, 0, 0]
1058                                      r
1060 @end example
1062 @opencatbox{Категории:}
1063 @category{Пакет ctensor}
1064 @closecatbox
1065 @end deffn
1067 @deffn {Функция} dscalar ()
1068 вычисляет даламбертиан скалярной функции, (зависимость от переменных
1069 должна быть определена заранее), например:
1071 @example
1072 (%i1) load("ctensor");
1073 (%o1)       /share/tensor/ctensor.mac
1074 (%i2) derivabbrev:true;
1075 (%o2)                                true
1076 (%i3) ct_coordsys(exteriorschwarzschild,all);
1077 (%o3)                                done
1078 (%i4) depends(p,r);
1079 (%o4)                               [p(r)]
1080 (%i5) factor(dscalar(p));
1081                           2
1082                     p    r  - 2 m p    r + 2 p  r - 2 m p
1083                      r r           r r        r          r
1084 (%o5)               --------------------------------------
1085                                        2
1086                                       r
1087 @end example
1089 @opencatbox{Категории:}
1090 @category{Пакет ctensor}
1091 @closecatbox
1092 @end deffn
1094 @deffn {Функция} checkdiv ()
1096 вычисляет ковариантную дивергенцию смешанного тензора второго ранга
1097 (первый индекс должен быть ковариантным). На печать выводится
1098 n-соответствующих компонент полученного векторного поля, где 
1099 n = @code{dim}. Если аргументом функции является  @code{g} (метрический
1100 тензор), тогда для упрощения результата используется равенство нулю
1101 ковариантной дивергенции тензора Эйнштейна. Результат вычислений (вектор)
1102 запоминается в массиве с именем @code{div}.
1104 @opencatbox{Категории:}
1105 @category{Пакет ctensor}
1106 @closecatbox
1107 @end deffn
1109 @deffn {Функция} cgeodesic (@var{dis})
1110 Функция пакета @code{ctensor} вычисляющая уравнения геодезических для
1111 заданной метрики. Результат запоминается в массиве @code{geod[i]}. Если аргумент
1112  @var{dis} равен @code{true}, тогда на экране печатается результат вычислений.
1114 @opencatbox{Категории:}
1115 @category{Пакет ctensor}
1116 @closecatbox
1117 @end deffn
1120 @deffn {Функция} bdvac (@var{f})
1122 генерирует ковариантные компоненты вакуумных уравнений поля теории
1123  Бранса-Дикке. Скалярное поле определено аргументом @var{f}, который задается в виде
1124  взятого в кавычки имени функции вместе со своими функциональными
1125  аргументами, например, @code{bdvac('p(x))}. Результат вычислений
1126  (компоненты поля ковариантного тензора 2-го ранга) запоминается в @code{bd}.
1128 @opencatbox{Категории:}
1129 @category{Пакет ctensor}
1130 @closecatbox
1131 @end deffn
1133 @deffn {Функция} invariant1 ()
1135 генерирует полевые уравнения Эйлера-Лагранжа для инвариантной плотности
1136 R^2. Результат запоминается в массиве @code{inv1}.
1138 @opencatbox{Категории:}
1139 @category{Пакет ctensor}
1140 @closecatbox
1141 @end deffn
1143 @deffn {Функция} invariant2 ()
1145 *** ПОКА НЕ РЕАЛИЗОВАНО ***
1146 генерирует смешанные полевые уравнения Эйлера-Лагранжа для инвариантной плотности
1147 @code{ric[i,j]*uriem[i,j]}. Результат запоминается в массиве @code{inv2}.
1149 @opencatbox{Категории:}
1150 @category{Пакет ctensor}
1151 @closecatbox
1152 @end deffn
1154 @deffn {Функция} bimetric ()
1156 *** ПОКА НЕ РЕАЛИЗОВАНО ***
1157 генерирует полевые уравнения биметрической теории Розена.
1158  Результат запоминается в массиве @code{rosen}.
1160 @opencatbox{Категории:}
1161 @category{Пакет ctensor}
1162 @closecatbox
1163 @end deffn
1165 @subsection Утилиты
1167 @deffn {Функция} diagmatrixp (@var{M})
1169 Возвращает @code{true} если @var{M} - диагональная матрица (2-х мерный массив).
1171 @opencatbox{Категории:}
1172 @category{Пакет ctensor}
1173 @category{Функции предикаты}
1174 @closecatbox
1175 @end deffn
1177 @deffn {Функция} symmetricp (@var{M})
1179 Возвращает @code{true} если @var{M} - симметричная матрица (2-х мерный массив).
1181 @opencatbox{Категории:}
1182 @category{Пакет ctensor}
1183 @category{Функции предикаты}
1184 @closecatbox
1185 @end deffn
1187 @deffn {Функция} ntermst (@var{f})
1188 Дает пользователю возможность оценить размеры  массива компонент
1189  тензора @var{f}. В результате печатается список двух элементов, где
1190  первый элемент является списком индексов компоненты тензора, а
1191  второй элемент соответствует количеству слагаемых этой компоненты.
1192 Таким способом можно быстро выявить ненулевые компоненты и оценить
1193  стратегию упрощения  тензора.
1195 @opencatbox{Категории:}
1196 @category{Пакет ctensor}
1197 @closecatbox
1198 @end deffn
1200 @deffn {Функция} cdisplay (@var{ten})
1201 показывает все элементы тензора @var{ten}, в виде многомерного массива.
1202 Тензора ранга 0 и 1, также как и другие типы переменных показываются
1203 стандартной функцией Maxima - @code{ldisplay}. Тензоры ранга 2 печатаются в виде
1204 двухмерной матрицы, тензоры более высокого порядка выводятся на экран как
1205 список 2-мерных матриц. Например в следующем примере на экран выводится
1206 результаты вычисления тензора Римана для метрики Шварцшильда:
1208 @example
1209 (%i1) load("ctensor");
1210 (%o1)       /share/tensor/ctensor.mac
1211 (%i2) ratfac:true;
1212 (%o2)                                true
1213 (%i3) ct_coordsys(exteriorschwarzschild,all);
1214 (%o3)                                done
1215 (%i4) riemann(false);
1216 (%o4)                                done
1217 (%i5) cdisplay(riem);
1218           [ 0               0                   0           0     ]
1219           [                                                       ]
1220           [                              2                        ]
1221           [      3 m (r - 2 m)   m    2 m                         ]
1222           [ 0  - ------------- + -- - ----      0           0     ]
1223           [            4          3     4                         ]
1224           [           r          r     r                          ]
1225           [                                                       ]
1226 riem    = [                                m (r - 2 m)            ]
1227     1, 1  [ 0               0              -----------      0     ]
1228           [                                     4                 ]
1229           [                                    r                  ]
1230           [                                                       ]
1231           [                                           m (r - 2 m) ]
1232           [ 0               0                   0     ----------- ]
1233           [                                                4      ]
1234           [                                               r       ]
1236                                 [    2 m (r - 2 m)       ]
1237                                 [ 0  -------------  0  0 ]
1238                                 [          4             ]
1239                                 [         r              ]
1240                      riem     = [                        ]
1241                          1, 2   [ 0        0        0  0 ]
1242                                 [                        ]
1243                                 [ 0        0        0  0 ]
1244                                 [                        ]
1245                                 [ 0        0        0  0 ]
1247                                 [         m (r - 2 m)    ]
1248                                 [ 0  0  - -----------  0 ]
1249                                 [              4         ]
1250                                 [             r          ]
1251                      riem     = [                        ]
1252                          1, 3   [ 0  0        0        0 ]
1253                                 [                        ]
1254                                 [ 0  0        0        0 ]
1255                                 [                        ]
1256                                 [ 0  0        0        0 ]
1258                                 [            m (r - 2 m) ]
1259                                 [ 0  0  0  - ----------- ]
1260                                 [                 4      ]
1261                                 [                r       ]
1262                      riem     = [                        ]
1263                          1, 4   [ 0  0  0        0       ]
1264                                 [                        ]
1265                                 [ 0  0  0        0       ]
1266                                 [                        ]
1267                                 [ 0  0  0        0       ]
1269                                [       0         0  0  0 ]
1270                                [                         ]
1271                                [       2 m               ]
1272                                [ - ------------  0  0  0 ]
1273                     riem     = [    2                    ]
1274                         2, 1   [   r  (r - 2 m)          ]
1275                                [                         ]
1276                                [       0         0  0  0 ]
1277                                [                         ]
1278                                [       0         0  0  0 ]
1280              [     2 m                                         ]
1281              [ ------------  0        0               0        ]
1282              [  2                                              ]
1283              [ r  (r - 2 m)                                    ]
1284              [                                                 ]
1285              [      0        0        0               0        ]
1286              [                                                 ]
1287   riem     = [                         m                       ]
1288       2, 2   [      0        0  - ------------        0        ]
1289              [                     2                           ]
1290              [                    r  (r - 2 m)                 ]
1291              [                                                 ]
1292              [                                         m       ]
1293              [      0        0        0         - ------------ ]
1294              [                                     2           ]
1295              [                                    r  (r - 2 m) ]
1297                                 [ 0  0       0        0 ]
1298                                 [                       ]
1299                                 [            m          ]
1300                                 [ 0  0  ------------  0 ]
1301                      riem     = [        2              ]
1302                          2, 3   [       r  (r - 2 m)    ]
1303                                 [                       ]
1304                                 [ 0  0       0        0 ]
1305                                 [                       ]
1306                                 [ 0  0       0        0 ]
1308                                 [ 0  0  0       0       ]
1309                                 [                       ]
1310                                 [               m       ]
1311                                 [ 0  0  0  ------------ ]
1312                      riem     = [           2           ]
1313                          2, 4   [          r  (r - 2 m) ]
1314                                 [                       ]
1315                                 [ 0  0  0       0       ]
1316                                 [                       ]
1317                                 [ 0  0  0       0       ]
1319                                       [ 0  0  0  0 ]
1320                                       [            ]
1321                                       [ 0  0  0  0 ]
1322                                       [            ]
1323                            riem     = [ m          ]
1324                                3, 1   [ -  0  0  0 ]
1325                                       [ r          ]
1326                                       [            ]
1327                                       [ 0  0  0  0 ]
1329                                       [ 0  0  0  0 ]
1330                                       [            ]
1331                                       [ 0  0  0  0 ]
1332                                       [            ]
1333                            riem     = [    m       ]
1334                                3, 2   [ 0  -  0  0 ]
1335                                       [    r       ]
1336                                       [            ]
1337                                       [ 0  0  0  0 ]
1339                                [   m                      ]
1340                                [ - -   0   0       0      ]
1341                                [   r                      ]
1342                                [                          ]
1343                                [        m                 ]
1344                                [  0   - -  0       0      ]
1345                     riem     = [        r                 ]
1346                         3, 3   [                          ]
1347                                [  0    0   0       0      ]
1348                                [                          ]
1349                                [              2 m - r     ]
1350                                [  0    0   0  ------- + 1 ]
1351                                [                 r        ]
1353                                     [ 0  0  0    0   ]
1354                                     [                ]
1355                                     [ 0  0  0    0   ]
1356                                     [                ]
1357                          riem     = [            2 m ]
1358                              3, 4   [ 0  0  0  - --- ]
1359                                     [             r  ]
1360                                     [                ]
1361                                     [ 0  0  0    0   ]
1363                                 [       0        0  0  0 ]
1364                                 [                        ]
1365                                 [       0        0  0  0 ]
1366                                 [                        ]
1367                      riem     = [       0        0  0  0 ]
1368                          4, 1   [                        ]
1369                                 [      2                 ]
1370                                 [ m sin (theta)          ]
1371                                 [ -------------  0  0  0 ]
1372                                 [       r                ]
1374                                 [ 0        0        0  0 ]
1375                                 [                        ]
1376                                 [ 0        0        0  0 ]
1377                                 [                        ]
1378                      riem     = [ 0        0        0  0 ]
1379                          4, 2   [                        ]
1380                                 [         2              ]
1381                                 [    m sin (theta)       ]
1382                                 [ 0  -------------  0  0 ]
1383                                 [          r             ]
1385                               [ 0  0          0          0 ]
1386                               [                            ]
1387                               [ 0  0          0          0 ]
1388                               [                            ]
1389                    riem     = [ 0  0          0          0 ]
1390                        4, 3   [                            ]
1391                               [                2           ]
1392                               [         2 m sin (theta)    ]
1393                               [ 0  0  - ---------------  0 ]
1394                               [                r           ]
1396            [        2                                             ]
1397            [   m sin (theta)                                      ]
1398            [ - -------------         0                0         0 ]
1399            [         r                                            ]
1400            [                                                      ]
1401            [                         2                            ]
1402            [                    m sin (theta)                     ]
1403 riem     = [        0         - -------------         0         0 ]
1404     4, 4   [                          r                           ]
1405            [                                                      ]
1406            [                                          2           ]
1407            [                                   2 m sin (theta)    ]
1408            [        0                0         ---------------  0 ]
1409            [                                          r           ]
1410            [                                                      ]
1411            [        0                0                0         0 ]
1413 (%o5)                                done
1415 @end example
1417 @opencatbox{Категории:}
1418 @category{Пакет ctensor}
1419 @closecatbox
1420 @end deffn
1422 @deffn {Функция} deleten (@var{L}, @var{n})
1423 Возвращает новый список состоящий из элементов списка @var{L} с
1424 удаленным @var{n}-ым элементом.
1426 @opencatbox{Категории:}
1427 @category{Пакет ctensor}
1428 @closecatbox
1429 @end deffn
1431 @subsection Переменные пакета ctensor
1433 @defvr {Управляющая переменная} dim
1434 Значение по умолчанию: 4
1436 Опция пакета @code{ctensor} (компонентные вычисления).
1437 Размерность многообразия, по умолчанию: 4
1438 Команда  @code{dim: n} переопределяет размерность величине равной @code{n}.
1440 @opencatbox{Категории:}
1441 @category{Пакет ctensor}
1442 @closecatbox
1443 @end defvr
1445 @defvr {Управляющая переменная} diagmetric
1446 Значение по умолчанию: @code{false}
1448 Опция пакета @code{ctensor} (компонентные вычисления).
1449 Если @code{diagmetric} равен @code{true}, тогда вычисления
1450 всех геометрических объектов проводятся по упрощенной схеме: с учетом
1451 диагональности метрики. Это позволяет уменьшить время счета. Данная опция
1452 устанавливается автоматически если при вызове  @code{csetup} была задана
1453 диагональная метрика.
1455 @opencatbox{Категории:}
1456 @category{Пакет ctensor}
1457 @closecatbox
1458 @end defvr
1460 @defvr {Управляющая переменная} ctrgsimp
1462 Включает использование тригонометрических преобразований при упрощении
1463 тензора. В настоящее время, @code{ctrgsimp} влияет только на результаты
1464 вычислений, выполненные  в  тетрадном базисе.
1466 @opencatbox{Категории:}
1467 @category{Пакет ctensor}
1468 @category{Флаги и переменные упрощения}
1469 @closecatbox
1470 @end defvr
1472 @defvr {Управляющая переменная} cframe_flag
1474 Если ключ @code{cframe_flag}  равен @code{true}, тогда вычисления проводятся
1475 в тетрадном базисе (в общем случае с не голономной метрикой). 
1476 Базис определяется массивом дуального фрейма  @code{fri} и метрикой базиса
1477  @code{lfg}. При вычислениях в декартовой тетраде  массив,
1478 @code{lfg} должен быть единичной матрицей соответствующего размера; при
1479 вычислениях с Лоренцевой тетрадой,  массив @code{lfg} должен иметь
1480 соответствующую сигнатуру.
1482 @opencatbox{Категории:}
1483 @category{Пакет ctensor}
1484 @closecatbox
1485 @end defvr
1487 @defvr {Управляющая переменная} ctorsion_flag
1489 Если @code{ctorsion_flag} равен @code{true}, тогда при вычислении
1490 связности учитываются коэффициенты кручения @code{contortion}.
1491 В свою очередь, коэффициенты кручения, @code{contortion}, вычисляются из
1492 заданного пользователем тензора кручения @code{tr}.
1494 @opencatbox{Категории:}
1495 @category{Пакет ctensor}
1496 @closecatbox
1497 @end defvr
1499 @defvr {Управляющая переменная} cnonmet_flag
1501 Если @code{cnonmet_flag} равен @code{true}, тогда при вычислении
1502 связности учитывается неметричность @code{nonmetricity}, которая, сама
1503 по себе,  вычисляется из заданного пользователем вектора неметричности @code{nm}.
1505 @opencatbox{Категории:}
1506 @category{Пакет ctensor}
1507 @closecatbox
1508 @end defvr
1510 @defvr {Управляющая переменная} ctayswitch
1512 Если  ключ равен @code{true}, то при вычислениях  используются ряды Тейлора. 
1513 В текущем состоянии  пакета, эти ряды влияют на вычисление
1514 следующих тензоров: @code{christof}, @code{ricci},
1515 @code{uricci}, @code{einstein}, и @code{weyl}.
1517 @opencatbox{Категории:}
1518 @category{Пакет ctensor}
1519 @closecatbox
1520 @end defvr
1522 @defvr {Управляющая переменная} ctayvar
1524 Переменная ряда Тейлора. Она активируется при @code{ctayswitch} равном
1525 @code{true}.
1527 @opencatbox{Категории:}
1528 @category{Пакет ctensor}
1529 @closecatbox
1530 @end defvr
1532 @defvr {Управляющая переменная} ctaypov
1534 Максимальная ряда Тэйлора. Ее определение влияет на
1535 вычисления только если @code{ctayswitch} равен @code{true}.
1537 @opencatbox{Категории:}
1538 @category{Пакет ctensor}
1539 @closecatbox
1540 @end defvr
1542 @defvr {Управляющая переменная} ctaypt
1544 Центральная точка ряда Тэйлора. Ее определение влияет на
1545 вычисления только если @code{ctayswitch} равен @code{true}.
1547 @opencatbox{Категории:}
1548 @category{Пакет ctensor}
1549 @closecatbox
1550 @end defvr
1552 @defvr {Системная переменная} gdet
1554 Детерминант метрического тензора @code{lg}. Вычисляется функцией
1555 @code{cmetric}, когда флаг @code{cframe_flag} равен @code{false}.
1557 @opencatbox{Категории:}
1558 @category{Пакет ctensor}
1559 @closecatbox
1560 @end defvr
1562 @defvr {Управляющая переменная} ratchristof
1564 Включает рациональное упрощение коэффициентов связности @code{christof}.
1566 @opencatbox{Категории:}
1567 @category{Пакет ctensor}
1568 @closecatbox
1569 @end defvr
1571 @defvr {Управляющая переменная} rateinstein
1572 Значение по умолчанию: @code{true}
1574 Если равен @code{true} тогда проводится рациональное упрощение компонент
1575 тензора Эйнштейна; если @code{ratfac} равен @code{true}, тогда
1576 компоненты тензора автоматически факторизуются.
1578 @opencatbox{Категории:}
1579 @category{Пакет ctensor}
1580 @closecatbox
1581 @end defvr
1583 @defvr {Управляющая переменная} ratriemann
1584 Значение по умолчанию: @code{true}
1586 Один из ключей, контролирующих упрощение тензора Римана;
1587 Если равен @code{true} тогда применяется рациональное упрощение;
1588 если @code{ratfac} равен @code{true}, тогда
1589 компоненты тензора автоматически факторизуются.
1591 @opencatbox{Категории:}
1592 @category{Пакет ctensor}
1593 @closecatbox
1594 @end defvr
1596 @defvr {Управляющая переменная} ratweyl
1597 Значение по умолчанию: @code{true}
1599 Если равен @code{true} тогда применяется рациональное упрощение тензора Вейля;
1600 если @code{ratfac} равен @code{true}, тогда
1601 компоненты тензора автоматически факторизуются.
1603 @opencatbox{Категории:}
1604 @category{Пакет ctensor}
1605 @closecatbox
1606 @end defvr
1608 @defvr {Переменная} lfg
1609 Имя ковариантной метрики тетрады. По умолчанию совпадает с Лоренцевой
1610 метрикой,  имеет сигнатуру (+,+,+,-). Используется когда @code{cframe_flag} равен @code{true}.
1612 @opencatbox{Категории:}
1613 @category{Пакет ctensor}
1614 @closecatbox
1615 @end defvr
1617 @defvr {Переменная} ufg
1618 Имя контравариантной метрики тетрады. Вычисляется из @code{lfg}, если
1619 вызывается функция @code{cmetric} и флаг @code{cframe_flag} равен @code{true}.
1621 @opencatbox{Категории:}
1622 @category{Пакет ctensor}
1623 @closecatbox
1624 @end defvr
1626 @defvr {Переменная} riem
1627 Тензор Римана ранга (3,1). Вычисляется вызовом функции
1628 @code{riemann}. Для информации о порядке следования индексов см. описание @code{riemann}.
1630 Если @code{cframe_flag} равен @code{true}, @code{riem} вычисляется по
1631 ковариантным компонентам тензора Римана @code{lriem}.
1633 @opencatbox{Категории:}
1634 @category{Пакет ctensor}
1635 @closecatbox
1636 @end defvr
1638 @defvr {Переменная} lriem
1640 Ковариантная версия тензора Римана. Вычисляется вызовом функции @code{lriemann}.
1642 @opencatbox{Категории:}
1643 @category{Пакет ctensor}
1644 @closecatbox
1645 @end defvr
1647 @defvr {Переменная} uriem
1649 Контравариантная версия тензора Римана. Вычисляется вызовом функции @code{uriemann}.
1651 @opencatbox{Категории:}
1652 @category{Пакет ctensor}
1653 @closecatbox
1654 @end defvr
1656 @defvr {Переменная} ric
1658 Смешанный тензор Риччи. Вычисляется функцией @code{ricci}.
1660 @opencatbox{Категории:}
1661 @category{Пакет ctensor}
1662 @closecatbox
1663 @end defvr
1665 @defvr {Переменная} uric
1667 Контравариантный тензор Риччи. Вычисляется функцией @code{uricci}.
1669 @opencatbox{Категории:}
1670 @category{Пакет ctensor}
1671 @closecatbox
1672 @end defvr
1674 @defvr {Переменная} lg
1676 Метрический тензор. Данный тензор должен (наравне с переменной
1677 @code{dim}) определен до начала других вычислений.
1679 @opencatbox{Категории:}
1680 @category{Пакет ctensor}
1681 @closecatbox
1682 @end defvr
1684 @defvr {Переменная} ug
1686 Обратный метрический тензор. Вычисляется функцией @code{cmetric}.
1688 @opencatbox{Категории:}
1689 @category{Пакет ctensor}
1690 @closecatbox
1691 @end defvr
1693 @defvr {Переменная} weyl
1695 Тензор Вейля. Вычисляется функцией @code{weyl}.
1697 @opencatbox{Категории:}
1698 @category{Пакет ctensor}
1699 @closecatbox
1700 @end defvr
1702 @defvr {Переменная} fb
1704 Коммутатор (скобка) тетрады, вычисляется функцией @code{frame_bracket}.
1706 @opencatbox{Категории:}
1707 @category{Пакет ctensor}
1708 @closecatbox
1709 @end defvr
1711 @defvr {Переменная} kinvariant
1713 Инвариант Кретчмана. Вычисляется функцией @code{rinvariant}.
1715 @opencatbox{Категории:}
1716 @category{Пакет ctensor}
1717 @closecatbox
1718 @end defvr
1720 @defvr {Переменная} np
1722 Нуль-тетрада Ньюмана-Пенроуза. Вычисляется функцией @code{nptetrad}.
1724 @opencatbox{Категории:}
1725 @category{Пакет ctensor}
1726 @closecatbox
1727 @end defvr
1729 @defvr {Переменная} npi
1731 Нуль-тетрада Ньюмана-Пенроуза с поднятыми индексами; вычисляется процедурой @code{nptetrad}.
1732 Определена посредством @code{ug.np}. Произведение
1733 @code{np.transpose(npi)} является константой:
1735 @example
1736 (%i39) trigsimp(np.transpose(npi));
1737                               [  0   - 1  0  0 ]
1738                               [                ]
1739                               [ - 1   0   0  0 ]
1740 (%o39)                        [                ]
1741                               [  0    0   0  1 ]
1742                               [                ]
1743                               [  0    0   1  0 ]
1744 @end example
1746 @opencatbox{Категории:}
1747 @category{Пакет ctensor}
1748 @closecatbox
1749 @end defvr
1751 @defvr {Переменная} tr
1753 Определенный пользователем тензор 3-го ранга, задающий
1754 кручение. Используется процедурой @code{contortion}.
1756 @opencatbox{Категории:}
1757 @category{Пакет ctensor}
1758 @closecatbox
1759 @end defvr
1761 @defvr {Переменная} kt
1763 Вклад кручения в коэффициенты связности, вычисляется из тензора кручения @code{tr} функцией @code{contortion}.
1765 @opencatbox{Категории:}
1766 @category{Пакет ctensor}
1767 @closecatbox
1768 @end defvr
1770 @defvr {Переменная} nm
1772 Определенный пользователем  вектор неметричности. Используется функцией @code{nonmetricity}.
1774 @opencatbox{Категории:}
1775 @category{Пакет ctensor}
1776 @closecatbox
1777 @end defvr
1779 @defvr {Переменная} nmc
1781 Вклад неметричности в связность; вычисляется из @code{nm} функцией @code{nonmetricity}.
1783 @opencatbox{Категории:}
1784 @category{Пакет ctensor}
1785 @closecatbox
1786 @end defvr
1788 @defvr {Системная переменная} tensorkill
1790 Переменная показывающая, что пакет @code{ctensor} инициализирован. Эти
1791 установки используются процедурой @code{csetup}, и переопределяются процедурой @code{init_ctensor}.
1793 @opencatbox{Категории:}
1794 @category{Пакет ctensor}
1795 @closecatbox
1796 @end defvr
1798 @defvr {Управляющая переменная} ct_coords
1799 Значение по умолчанию: @code{[]}
1801 Опция пакета @code{ctensor} (компонентные вычисления тензоров).
1802 @code{ct_coords} содержит список имен координат. Обычно он определяется
1803 при вызове процедуры  @code{csetup}. Список может быть переопределен
1804 назначением нового списка
1805 @code{ct_coords: [j1, j2, ..., jn]},  j's имена новых координат. Смотри также @code{csetup}.
1807 @opencatbox{Категории:}
1808 @category{Пакет ctensor}
1809 @closecatbox
1810 @end defvr
1812 @subsection Зарезервированные имена
1814 Следующие имена используются функциями и процедурами пакета
1815 @code{ctensor} (не следует их переопределять):
1817 @example
1818   Наименование Описание
1819   ----------------------------------------------------------------
1820   _lg()        Присваивается массиву lfg если используется 
1821                тетрадная метрика; по умолчанию присваивается  
1822                массиву lg
1823   _ug()        Присваивается массиву ufg если используется 
1824                тетрадная метрика; по умолчанию присваивается 
1825                массиву ug
1826   cleanup()    Удаляет элементы drom списка deindex 
1827   contract4()  используется функцией psi()
1828   filemet()    используется функцией csetup() при чтении метрики 
1829                из файла
1830   findde1()    используется функцией findde()
1831   findde2()    используется функцией findde()
1832   findde3()    используется функцией findde()
1833   kdelt()      дельта-символ Кронекера (необобщенный)
1834   newmet()     используется функцией csetup() для интерактивного
1835                определения метрики
1836   setflags()   используется функцией init_ctensor()
1837   readvalue()
1838   resimp()
1839   sermet()     используется функцией csetup() для ввода метрики 
1840                в виде разложения в ряд Тэйлора
1841   txyzsum()
1842   tmetric()    Метрика тетрады, используется функцией cmetric(), 
1843                если cframe_flag:true
1844   triemann()   Тензор Римана в тетрадном представлении, 
1845                используется если cframe_flag:true
1846   tricci()     Тензор Риччи в тетрадном представлении, 
1847                используется если cframe_flag:true
1848   trrc()       Коэффициенты вращения Риччи, используется  
1849                функцией christof()
1850   yesp()
1851 @end example
1854 @subsection Изменения
1856 В ноябре 2004 пакет @code{ctensor} был существенно переписан. Многие
1857 функции и переменные были переименованы для  того чтобы сделать данный
1858 пакет совместимым с коммерческой версией  Macsyma.
1861 @example
1862   Новое имя    Статое имя      Описание
1863   -----------------------------------------------------------------
1864   ctaylor()    DLGTAYLOR()     Разложение выражения в ряд
1865                                Тэйлора
1866   lgeod[]      EM              Уравнения геодезических
1867   ein[]        G[]             Смешанный тензор Эйнштейна
1868   ric[]        LR[]            Смешанный тензор Риччи
1869   ricci()      LRICCICOM()     Вычисляет смешанный тензор Риччи
1870   ctaypov      MINP            Максимальная степень ряда Тэйлора
1871   cgeodesic()  MOTION          Вычисляет уравнения геодезических
1872   ct_coords    OMEGA           метрические координаты
1873   ctayvar      PARAM           Переменная ряда Тэйлора
1874   lriem[]      R[]             
1875   uriemann()   RAISERIEMANN()  Вычисляет контравариантный тензор 
1876                                Римана 
1877   ratriemann   RATRIEMAN       Рациональное упрощение тензора 
1878                                Римана
1879   uric[]       RICCI[]         Контравариантный тензор Риччи
1880   uricci()     RICCICOM()      Вычисляет контравариантный тензор 
1881                                Риччи
1882   cmetric()    SETMETRIC()     Определяет метрику
1883   ctaypt       TAYPT           Центральная точка окрестности ряда 
1884                                Тэйлора
1885   ctayswitch   TAYSWITCH       Ключ, устанавливающий использовать 
1886                                ли ряды Тэйлора в метрике
1887   csetup()     TSETUP()        Вызывает начало интерактивного 
1888                                режима задания метрики и пр.       
1889   ctransform() TTRANSFORM()    Интерактивное преобразование 
1890                                координат
1891   uriem[]      UR[]            Контравариантный тензор Римана
1892   weyl[]       W[]             Тензор Вейля ранга (3,1)
1894 @end example