記号的テンソル
記号的テンソル
Wolframシステムはあらゆる深さおよび次元のリスト,行列,配列を効率的に操作する関数を多数提供している.その中には,総和,総積,内積,外積,転置等を行う関数がある.Wolframシステムはこれらの配列を表す式の代数的組合せを操作するパワフルなアルゴリズムも備えている.これらの式は記号配列あるいは記号テンソルと呼ばれる.これらの記号配列に関する特性(主に階数,次元,対称性)に関する指定された特性を考えることにより,これらの特性に従って,配列の大きな領域の任意メンバに有効な結果を構築し証明することができる.
行列は階数2の配列であり,対称,反対称,あるいは対称性が全くない場合がある.高階のテンソルは,完全に対称か完全に反対称という場合があるが,レベルやスロットの転置により多数の他のタイプの対称性を示すこともある.物理学や数学に関係するテンソルは通常対称である.対称の慣性テンソル,反対称の電磁場,弾性における階数4の剛性テンソル,多様体に対する階数4のリーマン曲率テンソル,完全に反対称の積形式等がそうである.ベクトルのように対称性のない初等オブジェクトを扱う場合でも,それを繰返し使うことで対称性が現れる.Wolframシステムは通常の配列でも記号配列でも,任意の深さや次元の配列の転置対称性を記述する汎用言語を導入している.対称性の言語の説明については,「テンソルの対称性」をご覧いただきたい.
与えられた記号式 expr は形式Element[expr,adom](adom はその領域のすべての配列が共有する特性を指定する)の仮定を使って,指定された配列の領域 adom に属することができるようにすることができる.
| Arrays[{d1,…,dr},dom,sym] | 与えられた次元,要素型,対称性の配列 |
| Matrices[{d1,d2},dom,sym] | 与えられた次元,要素型,対称性の行列 |
| Vectors[d1,dom] | 与えられた次元,要素型のベクトル |
$Assumptions = m∈Matrices[{4, 4}, Reals, Symmetric[{1, 2}]]TensorRank[m]TensorDimensions[m]TensorSymmetry[m]$Assumptions = {m∈Matrices[{4, 4}, Complexes, Symmetric[{1, 2}]],
v∈Vectors[4, Complexes]};TensorRank[mv]TensorDimensions[vmv]TensorSymmetry[vvv]m∈Matrices[{3, 4}, Reals, Antisymmetric[{1, 2}]]m∈Matrices[{3, 3}, Reals, Antisymmetric[{1, 2, 3}]]一般的な記号テンソル式は,テンソル積,転置,縮約の3つの基本操作を使って記号テンソルを組み合せることにより形成された項の線形結合として理解することができる.他の基本的代数操作はこれに関して分解することができる.
| TensorProduct[t1,t2,…] | テンソル ti のテンソル積 |
| TensorTranspose[t,perm] | 置換 perm によるテンソル t の転置 |
| TensorContract[t,pairs] | テンソル t のスロット対の縮約 |
$Assumptions = {a∈Arrays[{4, 4, 4}, Reals, Antisymmetric[{1, 2, 3}]],
b∈Arrays[{2, 3, 4}, Reals], v∈Vectors[4, Reals]};TensorTranspose[b, {2, 3, 1}]TensorDimensions[%]Transpose[Array[x, {2, 3, 4}], {2, 3, 1}]//DimensionsTensorContract[a, {{1, 3}}]%//TensorDimensionsTensorContract[b, {{1, 3}}]3a - 2vvv//TensorDimensions3a - 2b//TensorDimensions計算機代数では普通であるが,最も大切な計算ステップの一つは,可能な限り一般式を標準形に変換するというものである.転置対称だけが関与している場合は,特化された群論アルゴリズムを使って,記号テンソル多項式をそのような標準形に変換することが常に可能である.しかし高階数等が絡む複雑な場合は,時間もかかり必要なメモリも大きくなる.
| TensorExpand[texpr] | テンソルの総和と総積を展開する |
| TensorReduce[texpr] | 項を対称性について標準化する |
$Assumptions = {T∈Arrays[{3, 3, 4, 4}, Reals, Symmetric[{1, 2}]], A∈Matrices[{3, 3}, Reals, Antisymmetric[{1, 2}]], M∈Matrices[{4, 4}, Reals, Antisymmetric[{1, 2}]],
P∈Matrices[{4, 4}, Reals]};texpr = 2MP - P(M + P) + PTensorContract[TA, {{1, 5}, {2, 6}}]TensorExpandは総和や総積を展開し,基本恒等式を適用する:
TensorExpand[texpr]TensorReduceは同じ操作を適用し,テンソルを辞書順に並べ替え,対称性情報を使う.縮約項には対称テンソルと反対称テンソルの縮約がかかわっているため,次の例では縮約項がなくなる:
TensorReduce[texpr]TensorContract[T, {{1, 2}}]TensorContract[PM, {{1, 3}}]//TensorReduceTensorTranspose[AM, {2, 3, 1}]T//TensorReduceTensorContract[TensorTranspose[PP, {2, 3, 4, 1}], {{3, 4}}]//TensorReduceTensorContract[MPP, {{3, 4}}]//TensorReduce次の例題では,反対称行列のベキ乗のトレースを調べる.任意次元の行列Aでは,Tr[MatrixPower[A,n]]は奇数の n では消滅するが,偶数の n では消滅しない.これはTensorProductおよびTensorContractでベキ乗とトレースを構築し,TensorReduceを使ってその式を正規化することで例示される.
$Assumptions = A∈Matrices[{d, d}, Reals, Antisymmetric[{1, 2}]];contract[mat_, n_] := TensorContract[TensorProduct@@ConstantArray[mat, n], Partition[RotateLeft[Range[2n]], 2]]contract[A, 1]TensorReduce[%]contract[A, 2]TensorReduce[%]contract[A, 3]TensorReduce[%]Table[n -> TensorReduce[contract[A, n]] === 0, {n, 20}]Rsym = {{{2, 1, 3, 4}, -1}, {{3, 4, 1, 2}, 1}};$Assumptions = R∈Arrays[{d, d, d, d}, Reals, Rsym]TensorTranspose[R, #]& /@ Permutations[{1, 2, 3, 4}]TensorReduce /@ %//UnionrandomRprod[n_, m_] := TensorContract[TensorProduct@@ConstantArray[R, n], Partition[RandomSample[Range[4n]][[Range[2m]]], 2]] /; m ≤ 2nSeedRandom[17];
randomRprod[2, 3]%//TensorReduce//TimingrandomRprod[25, 40]%//TensorReduce//Timing関連するガイド
-
▪
- 記号的なテンソル