Next: Sums Products and Series, Previous: Пакет ctensor, Up: Top [Contents][Index]
| • Введение в пакет atensor: | ||
| • Функции и переменные пакета atensor: |
Next: Функции и переменные пакета atensor, Previous: Пакет atensor, Up: Пакет atensor [Contents][Index]
Пакет 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: Введение в пакет atensor, Up: Пакет atensor [Contents][Index]
Инициализирует пакет 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).
Упрощает алгебраическое выражение expr в соответствии с
правилами, определенными при вызове init_atensor.
Упрощение сводится к рекурсивному применению коммутационных правил
м вычислению, где возможно, значений sf, af и av.
При этом применяются предосторожности, обеспечивающие то,
что процесс упрощения завершится.
Тип алгебры. Допустимые значения: universal, grassmann,
clifford, symmetric, symplectic или lie_envelop.
Значение по умолчанию: 0
Размерность алгебры. atensor использует adim
для того чтобы определить является ли индексированный объект
допустимым базисным вектором. См. abasep.
Значение по умолчанию: ident(3)
Значение билинейных форм sf, af или
av. Значение по умолчанию – единичная 3х3 матрица ident(3).
Значение по умолчанию: v
Символ, используемый для обозначения базисного вектора.
Симметричная скалярная функция, используемая в коммутационных
правилах. По умолчанию с помощью abasep проверяется, что
оба аргумента функции являются базисными векторами, и если это так,
подставляется соответствующее значение из матрицы aform.
Антисимметричная скалярная функция, используемая в коммутационных
правилах. По умолчанию с помощью abasep проверяется, что
оба аргумента функции являются базисными векторами, и если это так,
подставляется соответствующее значение из матрицы aform.
Антисимметричная скалярная функция, используемая в коммутационных
правилах. По умолчанию с помощью 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
Проверяет является ли аргумент базисным вектором для atensor.
Т.е. проверяет, что: это индексированная переменная, символ этой
переменной совпадает с значением asymbol, индекс имеет
числовое значение в пределах от 1 до adim.
Previous: Введение в пакет atensor, Up: Пакет atensor [Contents][Index]