Maxima Manual: Введение в пакет atensor

Next: Функции и переменные пакета atensor, Previous: Пакет atensor, 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` не всегда может получить желаемое упрощение.

Категории:Тензоры ·Пакеты библиотеки share ·Пакет atensor ·

Next: Функции и переменные пакета atensor, Previous: Пакет atensor, Up: Пакет atensor [Contents][Index]