atensor (Maxima 5.50.0 Manual)

## 27 atensor ¶

### 27.1 Introduction to atensor ¶

`atensor`は、代数テンソル操作パッケージです。 `atensor`を使うには、`load("atensor")`をタイプしてください。 続いて、`init_atensor`関数コールしてください。

`atensor`の本質は非可換(ドット)積演算子 ("`.`")の整理ルール一式です `atensor`はいくつかの代数型を認識します; `init_atensor`関数がコールされた時、 対応する整理ルールが有効になります。

`atensor`の能力は、 四元数代数を2つの基底ベクトルを持つClifford代数 Cl(0,2)として 定義することで実演することができます。 3つの四元数虚数単位は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`が評価されます。 評価は `fun(v[i],v[j])`に `aform[i,j]`の値を代入します ここで、`v`は `asymbol`の値を表し、 `fun`は `af`か `sf`を示します; あるいは、 `av(v[i],v[j])`に `v[aform[i,j]]`を代入します。

言うまでもなく、関数 `sf`, `af`, `av`は再定義するこができます。

`atensor`パッケージがロードされる時、以下のフラグが設定されます:

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

もし非結合代数で実験したいなら、 `dotassoc`を `false`に設定することも考えるかもしれません。 しかし、この場合、 `atensimp`はいつも 望みの整理を得ることができるわけではありません。

Tensors · Share packages · Package atensor ·

### 27.2 Functions and Variables for atensor ¶

関数: init_atensor (alg_type, opt_dims) ¶
関数: init_atensor (alg_type) ¶

  特定の代数型で `atensor`パッケージを初期化します。 alg_typeは以下のいずれかであり得ます:

  `universal`: 普遍代数は交換規則を持ちません。

  `grassmann`: Grassman代数は交換関係 `u.v+v.u=0`で定義されます。

  `clifford`: 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は 非縮退次元数、縮退次元数をそれぞれ表す2つの非負整数までありえます。 もしいずれかの opt_dims値が供給されたら、 `atensor`は `adim`と `aform`の値を適切に構成します。 そうでなければ、 `adim`はデフォルトが0で、 `aform`は未定義です。

  `lie_envelop`: Lie包絡代数は交換関係 `u.v-v.u=2*av(u,v)`で定義されます。 ここで、 `av`は反対称函数です。

  `init_atensor`関数はいくつかの予め定義された代数型も認識します:

  `complex`は複素数代数をClifford代数 Cl(0,1)として実装します。 `init_atensor(complex)`をコールすることは `init_atensor(clifford,0,0,1)`と同値です。

  `quaternion`は四元数代数を実装します。 `init_atensor (quaternion)`をコールすることは `init_atensor (clifford,0,0,2)`と同値です。

  `pauli`はPauliスピノール代数をClifford代数 Cl(3,0)として実装します。 `init_atensor(pauli)`をコールすることは `init_atensor(clifford,3)`と同値です。

  `dirac`はDiracスピノール代数をClifford代数 Cl(3,1)として実装します。 `init_atensor(dirac)`をコールすることは `init_atensor(clifford,3,0,1)`と同値です。

  Package atensor ·

関数: atensimp (expr) ¶

  `init_atensor`のコールで構成された規則に従って、 代数テンソル式 exprを整理します。 整理は、 適用可能な場所への 交換関係の再帰的な適用と`sf`, `af`, `av`のコールの決定を含みます。 複雑な式に関してさえ、 関数がいつでも終了することを確実にするために 保護手段が使われます。

  Package atensor · Simplification functions ·

変数: adim ¶

  デフォルト値: 0

  代数の次元。 `atensor`は 添字付きオブジェクトが有効な基底ベクトルか決定するのに `adim`の値を使います。 `abasep`を参照してください。

  Package atensor · Global variables ·

変数: aform ¶

  デフォルト値: `ident(3)`

  双一次形式`sf`, `af`, `av`のデフォルト値。 デフォルトは、単位行列 `ident(3)`です。

  Package atensor · Global variables ·

変数: asymbol ¶

  デフォルト値: `v`

  基底ベクトルのシンボル。

  Package atensor · Global variables ·

関数: sf (u, v) ¶

  交換関係で使われる対称スカラ関数。 デフォルトの実装は 両方の引数が`abasep`を使った基底ベクトルかチェックし、 もしそうなら、行列 `aform`から対応する値を代入します。

  Package atensor ·

関数: af (u, v) ¶

  交換関係で使われる反対称スカラ関数。 デフォルトの実装は 両方の引数が`abasep`を使った基底ベクトルかチェックし、 もしそうなら、行列 `aform`から対応する値を代入します。

  Package atensor ·

関数: 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

  Package atensor ·

関数: abasep (v) ¶

  引数が `atensor`基底ベクトルかチェックします。 すなわち、`asymbol`の値と同じシンボルと 1と `adim`の間の数値の添字を持つ添字付きシンボルかどうか、チェックします。

  Package atensor · Predicate functions ·