Next: , Previous: , Up: Top   [Contents][Index]

27 Пакет atensor


Next: , Previous: , Up: Пакет atensor   [Contents][Index]

27.1 Введение в пакет atensor

Пакет atensor предназначен для вычислений с тензорными алгебрами. Для того, чтобы использовать atensor, надо ввести load("atensor"), с последующим вызовом функции init_atensor.

Основой пакета atensor является набор правил упрощения для оператора некоммутативного произведения ("." – dot product). atensor знает несколько типов алгебр и соответствующий набор правил активизируется при вызове функции init_atensor.

Возможности пакета atensor можно продемонстрировать определив алгебру кватернионов как алгебру Клиффорда Cl(0,2) с двумя базисными векторами. В этом случае три кватернионные мнимые единицы представляются двумя базисными векторами и их произведением:

    i = v     j = v     k = v  . v
         1         2         1    2

Хотя atensor имеет встроенное определение алгебры кватернионов, оно не используется в данном примере, в котором мы построим таблицу умножения кватернионов в виде матрицы:


(%i1) load("atensor");
(%o1)       /share/tensor/atensor.mac
(%i2) init_atensor(clifford,0,0,2);
(%o2)                                done
(%i3) atensimp(v[1].v[1]);
(%o3)                                 - 1
(%i4) atensimp((v[1].v[2]).(v[1].v[2]));
(%o4)                                 - 1
(%i5) q:zeromatrix(4,4);
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%o5)                           [            ]
                                [ 0  0  0  0 ]
                                [            ]
                                [ 0  0  0  0 ]
(%i6) q[1,1]:1;
(%o6)                                  1
(%i7) for i thru adim do q[1,i+1]:q[i+1,1]:v[i];
(%o7)                                done
(%i8) q[1,4]:q[4,1]:v[1].v[2];
(%o8)                               v  . v
                                     1    2
(%i9) for i from 2 thru 4 do for j from 2 thru 4 do
      q[i,j]:atensimp(q[i,1].q[1,j]);
(%o9)                                done
(%i10) q;
                   [    1        v         v      v  . v  ]
                   [              1         2      1    2 ]
                   [                                      ]
                   [   v         - 1     v  . v    - v    ]
                   [    1                 1    2      2   ]
(%o10)             [                                      ]
                   [   v      - v  . v     - 1      v     ]
                   [    2        1    2              1    ]
                   [                                      ]
                   [ v  . v      v        - v       - 1   ]
                   [  1    2      2          1            ]

В качестве базисных векторов atensor использует переменные с индексом. Символ переменой хранится в asymbol а индекс может принимать значения от 1 до adim. Для переменных с индексом вычисляются билинейные формы sf, af и av. Вычисление подставляет значение aform[i,j] вместо fun(v[i],v[j]), где v есть значение asymbol и fun есть af или sf; либо подставляет v[aform[i,j]] вместо av(v[i],v[j]).

Функции sf, af и av могут быть переопределены пользователем.

Когда пакет atensor загружен, устанавливаются следующие значения переключателей:

dotscrules:true;
dotdistrib:true;
dotexptsimp:false;

Если вы хотите поэкспериментировать с неассоциативными алгебрами надо присвоить dotassoc значение false. Однако, в данном случае atensimp не всегда может получить желаемое упрощение.


Previous: , Up: Пакет atensor   [Contents][Index]

27.2 Функции и переменные пакета atensor

Функция: init_atensor (alg_type, opt_dims)
Функция: init_atensor (alg_type)

Инициализирует пакет atensor с указанием типа алгебры. Здесь alg_type может принимать одно из следующих значений:

universal: Универсальная алгебра без определенных правил коммутации.

grassmann: Алгебра Грассмана, определяемая коммутационным правилом u.v+v.u=0.

clifford: Алгебра Клиффорда, определяемая коммутационным правилом u.v+v.u=-2*sf(u,v), где sf есть симметричная скалярная функция. Для этой алгебры opt_dims может задавать до 3-х неотрицательных целых чисел, которые представляют собой число положительных, вырожденных и отрицательных размерностей алгебры. Если opt_dims задано, то atensor автоматически сконфигурирует значения adim и aform. В противном случае adim принимает значение 0 а aform остается неопределенным.

symmetric: Симметричная алгебра, определяемая коммутационным правилом u.v-v.u=0.

symplectic: Симплектическая алгебра, определяемая коммутационным правилом u.v-v.u=2*af(u,v), гда af есть антисимметричная скалярная функция. Для симплектической алгебры opt_dims может задавать до двух неотрицательных целых чисел, представляющих число невырожденных и вырожденных измерений соответственно. Если opt_dims задано, то atensor автоматически сконфигурирует значения adim и aform. В противном случае adim принимает значение 0 а aform остается неопределенным.

lie_envelop: Обертывающая алгебра Ли, определяемая коммутационным правилом u.v-v.u=2*av(u,v), где av есть антисимметричная функция.

init_atensor также распознает несколько предопределенных типов алгебр:

complex реализует алгебру комплексных чисел, как алгебру Клиффорда Cl(0,1). Вызов init_atensor(complex) эквивалентен init_atensor(clifford,0,0,1).

quaternion реализует алгебру кватернионов. Вызов init_atensor(quaternion) эквивалентен init_atensor(clifford,0,0,2).

pauli реализует алгебру спиноров Паули как алгебру Клиффорда Cl(3,0). Вызов init_atensor(pauli) эквивалентен init_atensor(clifford,3).

dirac реализует алгебру спиноров Дирака как алгебру Клиффорда Cl(3,1). Вызов init_atensor(dirac) эквивалентен init_atensor(clifford,3,0,1).

Функция: atensimp (expr)

Упрощает алгебраическое выражение expr в соответствии с правилами, определенными при вызове init_atensor. Упрощение сводится к рекурсивному применению коммутационных правил м вычислению, где возможно, значений sf, af и av. При этом применяются предосторожности, обеспечивающие то, что процесс упрощения завершится.

Функция: alg_type

Тип алгебры. Допустимые значения: universal, grassmann, clifford, symmetric, symplectic или lie_envelop.

Переменная: adim

Значение по умолчанию: 0

Размерность алгебры. atensor использует adim для того чтобы определить является ли индексированный объект допустимым базисным вектором. См. abasep.

Переменная: aform

Значение по умолчанию: ident(3)

Значение билинейных форм sf, af или av. Значение по умолчанию – единичная 3х3 матрица ident(3).

Переменная: asymbol

Значение по умолчанию: v

Символ, используемый для обозначения базисного вектора.

Функция: sf (u, v)

Симметричная скалярная функция, используемая в коммутационных правилах. По умолчанию с помощью abasep проверяется, что оба аргумента функции являются базисными векторами, и если это так, подставляется соответствующее значение из матрицы aform.

Функция: af (u, v)

Антисимметричная скалярная функция, используемая в коммутационных правилах. По умолчанию с помощью abasep проверяется, что оба аргумента функции являются базисными векторами, и если это так, подставляется соответствующее значение из матрицы aform.

Функция: av (u, v)

Антисимметричная скалярная функция, используемая в коммутационных правилах. По умолчанию с помощью abasep проверяется, что оба аргумента функции являются базисными векторами, и если это так, подставляется соответствующее значение из матрицы aform.

Например:

(%i1) load("atensor");
(%o1)       /share/tensor/atensor.mac
(%i2) adim:3;
(%o2)                                  3
(%i3) aform:matrix([0,3,-2],[-3,0,1],[2,-1,0]);
                               [  0    3   - 2 ]
                               [               ]
(%o3)                          [ - 3   0    1  ]
                               [               ]
                               [  2   - 1   0  ]
(%i4) asymbol:x;
(%o4)                                  x
(%i5) av(x[1],x[2]);
(%o5)                                 x
                                       3
Функция: abasep (v)

Проверяет является ли аргумент базисным вектором для atensor. Т.е. проверяет, что: это индексированная переменная, символ этой переменной совпадает с значением asymbol, индекс имеет числовое значение в пределах от 1 до adim.


Previous: , Up: Пакет atensor   [Contents][Index]