1 @c RECOMMEND REVISE TEXT THROUGHOUT TO LOSE NOTION OF TIME RELATIVE TO PRESENT
2 @c LOOK FOR "NOW", "OLD", "NEW", "RECENT", "EARLIER", DATES
4 @c RERUN EXAMPLES WITH ADDT'L WHITESPACE IN INPUT TO AID LEGIBILITY
7 * Introduction to itensor::
8 * Functions and Variables for itensor::
11 @c -----------------------------------------------------------------------------
12 @node Introduction to itensor, Functions and Variables for itensor, itensor, itensor
13 @section Introduction to itensor
14 @c -----------------------------------------------------------------------------
16 Maximaは、記号的なテンソル操作を2つの異なったタイプで実装しています:
17 成分テンソル操作(@code{ctensor}パッケージ)と添字テンソル操作(@code{itensor}パッケージ)。
19 注意せよ: 以下の'新しいテンソル表記'に関するノートを参照してください。
22 幾何学的テンソルオブジェクトが配列または行列で表現されることを意味します。
23 縮約や共変微分のようなテンソル演算は実際に、
24 @code{do}文を伴う繰り返し用(ダミー)添字上の和によって実行されます。
25 すなわち、配列や行列に記憶された適切なテンソル成分上で陽に演算を実行します。
28 共変、反変、そして微分添字の関数としてテンソルを表現することで実装されています。
30 対応する成分よりむしろ添字それ自身を操作することで実行されます。
32 Riemann幾何の文脈での微分的、代数的、解析的処理へのこれらの2つのアプローチは、
33 ユーザーの問題の個々の性質と難しさを通してだけ明らかにされる様々な利点と欠点を持ちます。
34 しかしながら、2つの実装の以下の特性を心にとどめて置くべきです:
36 成分を陽に使ったテンソルとテンソル演算の表現は、
37 @code{ctensor}を使いやすくします。
38 軽量の指定と、帰納されたテンソルと不変量の計算は容易です。
39 Maximaの強力な整理能力すべてはいつでも使えますが、
40 入り組んだ関数的、座標依存性を持つ複雑な計量は、簡単に、サイズが極端で、構造が隠された式に
42 さらに、たくさんの計算は、増大する中間式を含み、プログラムが完了前に終了する原因となります。
43 経験を通して、ユーザーはこれらの難しさの多くを避けることができます。
45 テンソルとテンソル演算が添字上の記号演算を使って表される特別な方法のために、
47 @code{itensor}の中の対称オブジェクトに関する特別なルーチンを使うことで、
49 この方法で、大きな式の構造がもっと明白になるかもしれません。
51 @code{itensor}の中の特別な添字表現のために、
53 ユーザーは、計量の指定や関数の定義、微分された「添字付き」オブジェクトの評価に
56 @code{itensor}パッケージは、添字付き変数に関する微分を実行できます。
57 それは、ラグランジアンとハミルトニアン形式を扱う時にパッケージを使うことができます。
58 (添字付き)場の変数に関する場のラグランジアンを微分することが可能なので、
59 Maximaを、対応するEuler-Lagrange方程式を添字形式で得るのに使うことができます。
61 @code{ic_convert}関数を使って、成分テンソル(@code{ctensor})プログラムに翻訳することができ、
62 それは場の方程式を個別の座標表現で解くことや、
63 ハミルトニアン形式の運動方程式を計算し直すことを可能にします。
64 2つの包括的な例として、@code{einhil.dem}と@code{bradic.dem}を参照してください。
65 最初の@code{einhil.dem}は、
66 斉次で等方的な場合(Friedmann方程式)と
67 球対称で静的な場合(Schwarzschild解)に
69 Einstein-Hilbert作用を使います。
70 二番目の@code{bradic.dem}は、
71 Brans-Dicke重力理論の作用からFriedmann方程式を計算する方法を示し、
72 理論のスカラー場に関連したハミルトニアンも演繹します。
76 @category{Share packages}
77 @category{Package itensor}
80 @c -----------------------------------------------------------------------------
81 @subsection New tensor notation
82 @c -----------------------------------------------------------------------------
84 Maximaの@code{itensor}パッケージの初期のバージョンは、
85 時々、間違った添字順序に至る表記を使いました。
91 (%i3) ishow(g([],[j,k])*g([],[i,l])*a([i,j],[]))$
95 (%i4) ishow(contract(%))$
100 @code{a}が偶然対称テンソルでなければ、
103 @code{itensor}は正しく共変添字と反変添字の集合の中の順序を保つけれども、
104 一旦、添字が上がったり、下がったりすると、
105 添字の他の集合に関する位置が失われるからです。
108 存在する表記と完全に互換性を残し、相互に使うことが可能な新しい表記が開発されました。
109 この表記では、反変添字は、共変添字リストの中の適切な位置に挿入されますが、
111 現在、@code{contract}や@code{ishow}のような関数は、
115 この新しい表記では、以前の例は正しい結果をもたらします:
118 (%i5) ishow(g([-j,-k],[])*g([-i,-l],[])*a([i,j],[]))$
122 (%i6) ishow(contract(%))$
128 この表記を使う唯一のコードは、@code{lc2kdt}関数です。
129 数値添字に頼らずLevi-Civita記号を決定するために計量テンソルを用いる時、
130 この表記を通じて、一貫した結果を達成します。
132 このコードはできたばかりなので、おそらくバグを含みます。
133 「古い」テンソル表記を使った何かを壊さないことを確認するためにテストされている一方、
135 特定の関数や特徴と相互運営するのに失敗する相当な可能性があります。
136 これらのバグは、出会った時修正されるでしょう。それまでは、利用者責任!
139 @c -----------------------------------------------------------------------------
140 @subsection Indicial tensor manipulation
141 @c -----------------------------------------------------------------------------
143 添字テンソル操作パッケージは@code{load("itensor")}でロードできます。
144 デモも利用可能です: @code{demo(tensor)}を試してください。
147 テンソルは「添字付きオブジェクト」として表されます。
149 共変、反変、微分添字を表す添字の3つのグループの関数です。
150 共変添字は添字付きオブジェクトの最初の引数としてリストで指定され、
151 半変添字は二番目の引数としてリストで指定されます。
152 もし添字付きオブジェクトが添字のグループのいずれかを欠いているなら、
153 空のリスト@code{[]}が対応する引数として与えられます。
154 例えば、@code{g([a,b],[c])}は、
155 2つの共変添字@code{(a,b)}と1つの反変添字(@code{c})を持ち、微分添字を持たない
156 @code{g}と呼ばれる添字付きオブジェクトを表します。
158 もし存在するなら、微分添字は、テンソルを表すシンボル関数の追加の引数として添えられます。
159 それらは、ユーザーによって陽に指定されたり、ある座標変数に関する微分の処理の中で生成されたりします。
161 フレーム計量が使われることを示す@code{iframe_flag}が@code{true}に設定されない限り、
162 微分添字はアルファベット順に並び替えられます。
163 この標準オーダーは、Maximaが、例えば、@code{t([a],[b],i,j)}が@code{t([a],[b],j,i)}と同じだと認識することを可能にします。
164 添字付きオブジェクトの引数として現れない添字の座標に関する
165 添字付きオブジェクトの微分は、通常ゼロをもたらします。
166 これは、Maximaが添字付きオブジェクトで表されたテンソルが対応する座標に陰に依存するかもしれないことを知らないためです。
167 @code{itensor}現在のMaxima関数@code{diff}を修正したことで、
168 そうでなければ記述されない限り、Maximaは、添字付きオブジェクトすべてが微分の任意の変数に依存することを現在仮定します。
169 これは、和の慣例が微分添字に拡張されることを可能にします。
170 @code{itensor}は微分添字を上げる能力を所有しないこと、そしてそれらは常に共変として扱われることに注意すべきです。
172 以下の関数が添字付きオブジェクトを操作するためにテンソルパッケージの中で利用可能です。
173 現在、整理ルーチンに関して、添字付きオブジェクトがデフォルトで対称性を持たないことを仮定します。
174 これは、変数@code{allsym[false]}を@code{true}に設定することで上書きすることができます。
175 これによって、すべての添字付きオブジェクトを共変添字のリストと反変添字のリストに関して完全に対称に扱うようになります。
177 @code{itensor}パッケージは、一般にテンソルを不透明なオブジェクトとして扱います。
178 テンソル等式は、代数ルール、特に対称性と縮約ルールに基づいて操作されます。
179 加えて、@code{itensor}パッケージは、共変微分、曲率、ねじれ率を理解します。
180 計算は、@code{iframe_flag}変数の設定に依存して動枠の計量に関して実行されます。
183 @code{itensor}パッケージをロードし、計量名を指定し、いくつかの簡単な計算を実行する仕方を
187 (%i1) load("itensor");
188 (%o1) /share/tensor/itensor.lisp
191 (%i3) components(g([i,j],[]),p([i,j],[])*e([],[]))$
192 (%i4) ishow(g([k,l],[]))$
195 (%i5) ishow(diff(v([i],[]),t))$
199 (%i7) ishow(diff(v([i],[]),t))$
203 (%i8) ishow(idiff(v([i],[]),j))$
206 (%i9) ishow(extdiff(v([i],[]),j))$
211 (%i10) ishow(liediff(v,w([i],[])))$
215 (%i11) ishow(covdiff(v([i],[]),j))$
219 (%i12) ishow(ev(%,ichr2))$
221 (%t12) v - (g v (e p + e p - e p - e p
222 i,j %4 j %5,i ,i j %5 i j,%5 ,%5 i j
226 (%i13) iframe_flag:true;
228 (%i14) ishow(covdiff(v([i],[]),j))$
232 (%i15) ishow(ev(%,icc2))$
236 (%i16) ishow(radcan(ev(%,ifc2,ifc1)))$
238 (%t16) - (ifg v ifb + ifg v ifb - 2 v
239 %6 j %7 i %6 i j %7 i,j
244 (%i17) ishow(canform(s([i,j],[])-s([j,i])))$
247 (%i18) decsym(s,2,0,[sym(all)],[]);
249 (%i19) ishow(canform(s([i,j],[])-s([j,i])))$
251 (%i20) ishow(canform(a([i,j],[])+a([j,i])))$
254 (%i21) decsym(a,2,0,[anti(all)],[]);
256 (%i22) ishow(canform(a([i,j],[])+a([j,i])))$
260 @c end concepts itensor
262 @c -----------------------------------------------------------------------------
263 @node Functions and Variables for itensor, , Introduction to itensor, itensor
264 @section Functions and Variables for itensor
265 @subsection Managing indexed objects
266 @c -----------------------------------------------------------------------------
268 @c -----------------------------------------------------------------------------
270 @deffn {関数} dispcon (@var{tensor_1}, @var{tensor_2}, ...)
271 @deffnx {関数} dispcon (all)
273 @code{defcon}に与えられたような引数の縮約プロパティを表示します。
274 @code{dispcon (all)}は、定義された縮約プロパティすべてを表示します。
277 @category{Display functions}
282 @c -----------------------------------------------------------------------------
283 @deffn {関数} entertensor (@var{name})
286 任意の数のテンソル添字や微分添字を持つ@var{name}と呼ばれる添字付きオブジェクトを生成することを許す関数です。
287 単一添字または(nullもありえる)添字のリストが容認可能な入力です。
288 (@code{covdiff}の下の例を参照してください。)
291 @category{Package itensor}
295 @c -----------------------------------------------------------------------------
296 @deffn {関数} changename (@var{old}, @var{new}, @var{expr})
298 @var{expr}の中の@var{old}と呼ばれるすべての添字付きオブジェクトの名前を@var{new}に変えます。
299 @var{old}はシンボルまたは形式@code{[@var{name}, @var{m}, @var{n}]}のリストであり得ます。
300 後者の場合、@var{m}個の共変添字と@var{n}個の反変添字を持つ
301 @var{name}と呼ばれるそれらの添字付きオブジェクトだけが@var{new}にリネームされます。
304 @category{Package itensor}
308 @deffn {関数} listoftens
310 テンソル式の中のすべてのテンソルを添字が完備した形でリストします。
315 (%i6) ishow(a([i,j],[k])*b([u],[],v)+c([x,y],[])*d([],[])*e)$
319 (%i7) ishow(listoftens(%))$
321 (%t7) [a , b , c , d]
327 @category{Package itensor}
331 @c -----------------------------------------------------------------------------
332 @deffn {関数} ishow (@var{expr})
334 下付き添字としての共変添字と上付き添字としての反変添字を持つように
335 添字付きオブジェクトを持つ形で@var{expr}を表示します。
336 微分添字は、共変添字からコンマで区切られた下付き添字として表示されます。
337 (このドキュメント至る所の例を参照してください。)
340 @category{Package itensor}
344 @c -----------------------------------------------------------------------------
345 @deffn {関数} indices (@var{expr})
349 一番目は、@var{expr}の中の自由添字(一度だけ現れるもの)のリストです。
350 二番目は、@var{expr}の中のダミー添字(正確に二回現れるもの)のリストです。
354 (%i1) load("itensor");
355 (%o1) /share/tensor/itensor.lisp
356 (%i2) ishow(a([i,j],[k,l],m,n)*b([k,o],[j,m,p],q,r))$
361 (%o3) [[l, p, i, n, o, q, r], [k, j, m]]
365 同じ添字を二回以上含むテンソル積は構文的に認められていません。
366 @code{indices}は、これらの式を合理的な方法で扱おうとします;
367 しかしながら、そんな非合法な式上で動くようにコールされた時、その振る舞いは未定義と考えなければいけません。
370 @category{Package itensor}
374 @c -----------------------------------------------------------------------------
375 @deffn {関数} rename (@var{expr})
376 @deffnx {関数} rename (@var{expr}, @var{count})
378 もしオプションの二番目の引数が省略されたら、
380 しかし、各項に対して、集合@code{[%1, %2,...]}から選ばれたダミー添字を持つ式を返します。
381 そうでなければ、ダミー添字は@var{count}の値で始まるようインデックスされます。
382 積の中のそれぞれのダミー添字は異なります。
383 和に関しては、@code{rename}は各項毎にカウンタが再設定されるように和の中の各項上で作用します。
384 この方法で、@code{rename}はテンソル整理器として利用できます。
386 (もし@code{allsym}が@code{true}なら、)
388 @code{flipflag}の値に依存して共変または反変添字に関して、
390 もし@code{flipflag}が@code{false}なら、
391 添字は反変添字の順に従ってリネームされます。
392 もし@code{flipflag}が@code{true}なら、
393 リネームは共変添字の順に従って起こるでしょう。
394 2つのリネームの組み合わせた効果が、それ自身によって、
395 どちらか1つよりも更に式を簡単にすることがしばしば起こります。
399 (%i1) load("itensor");
400 (%o1) /share/tensor/itensor.lisp
403 (%i3) g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%4],[%3])*
404 ichr2([%2,%3],[u])*ichr2([%5,%6],[%1])*ichr2([%7,r],[%2])-
405 g([],[%4,%5])*g([],[%6,%7])*ichr2([%1,%2],[u])*
406 ichr2([%3,%5],[%1])*ichr2([%4,%6],[%3])*ichr2([%7,r],[%2]),noeval$
409 %4 %5 %6 %7 %3 u %1 %2
410 (%t4) g g ichr2 ichr2 ichr2 ichr2
411 %1 %4 %2 %3 %5 %6 %7 r
413 %4 %5 %6 %7 u %1 %3 %2
414 - g g ichr2 ichr2 ichr2 ichr2
415 %1 %2 %3 %5 %4 %6 %7 r
419 (%i6) ishow(rename(expr))$
420 %2 %5 %6 %7 %4 u %1 %3
421 (%t6) g g ichr2 ichr2 ichr2 ichr2
422 %1 %2 %3 %4 %5 %6 %7 r
424 %4 %5 %6 %7 u %1 %3 %2
425 - g g ichr2 ichr2 ichr2 ichr2
426 %1 %2 %3 %4 %5 %6 %7 r
427 (%i7) flipflag:false;
429 (%i8) rename(%th(2));
431 (%i9) ishow(rename(expr))$
432 %1 %2 %3 %4 %5 %6 %7 u
433 (%t9) g g ichr2 ichr2 ichr2 ichr2
434 %1 %6 %2 %3 %4 r %5 %7
436 %1 %2 %3 %4 %6 %5 %7 u
437 - g g ichr2 ichr2 ichr2 ichr2
438 %1 %3 %2 %6 %4 r %5 %7
442 @category{Package itensor}
446 @c THIS FUNCTION IS IN THE SHARE PACKAGE itensor.lisp
447 @c MOVE THIS DESCRIPTION TO Itensor.texi
449 @c -----------------------------------------------------------------------------
451 @deffn {関数} show (@var{expr})
452 下付き添字として共変インデックス、上付き添字として反変インデックスを持つよう、
453 インデックスされたオブジェクトと一緒に@code{expr}を表示します。
454 微分インデックスは下付き添字として表示され、
455 コンマによって共変インデックスと区別されます。
458 @category{Package itensor}
459 @category{Display functions}
464 @c -----------------------------------------------------------------------------
465 @defvr {オプション変数} flipflag
468 もし@code{false}なら反変添字の順に従って、
472 もし@code{flipflag}が@code{false}なら、
474 左から右に現れるよう反変添字のリストを形成します
475 (もし@code{true}なら共変添字について同様に)。
476 リストの最初のダミー添字は@code{%1}に、次は@code{%2}にというように、リネームされます。
477 そして、@code{rename}の後、並び替えが起こります。
478 (@code{rename}の下の例を参照してください。)
481 @category{Package itensor}
485 @c -----------------------------------------------------------------------------
486 @deffn {関数} defcon (@var{tensor_1})
487 @deffnx {関数} defcon (@var{tensor_1}, @var{tensor_2}, @var{tensor_3})
489 @var{tensor_1}と@var{tensor_2}の積の縮約が
490 適切な添字を持つ@var{tensor_3}に帰着するという
492 もし引数が@var{tensor_1}1つだけ与えれたなら、
493 , then the contraction of the product of
494 適切な添字を持つ任意の添字付きオブジェクト(@code{my_tensor}とします)との@var{tensor_1}の積の縮約はその名前、すなわち、@code{my_tensor}と、実行された縮約を反映した添字の新しい集合を持つ添字付きオブジェクトをもたらします。
495 例えば、もし@code{imetric:g}なら、@code{defcon(g)}は
496 計量テンソルとの縮約を通して添字の上げ下げを実行します。
497 1つ以上の@code{defcon}を同じ添字付きオブジェクトに関して与えることができます;
498 特定の縮約に関して適用する最新のものが使われます。
499 @code{contractions}は、
500 @code{defcon}で縮約プロパティを与えられたそれら添字付きオブジェクトのリストです。
503 @category{Package itensor}
507 @c -----------------------------------------------------------------------------
508 @deffn {関数} remcon (@var{tensor_1}, ..., @var{tensor_n})
509 @deffnx {関数} remcon (all)
510 @var{tensor_1}, ..., @var{tensor_n}からすべての縮約プロパティを取り除きます。
511 @code{remcon(all)}は、すべての添字付きオブジェクトから
515 @category{Package itensor}
519 @c -----------------------------------------------------------------------------
520 @deffn {関数} contract (@var{expr})
526 @code{defcon}関数に与えられた情報を使います。
528 @code{expr}は完全に展開されなければいけません。
534 @code{gcd}スイッチは@code{false}でなければいけません。
537 @category{Package itensor}
541 @c -----------------------------------------------------------------------------
542 @deffn {関数} indexed_tensor (@var{tensor})
545 @code{ichr1}, @code{ichr2}, @code{icurvature}とともにあるように存在する
546 @var{tensor}に成分を割り当てる前に実行されなければいけません。
547 @code{icurvature}の下の例を参照してください。
550 @category{Package itensor}
554 @c -----------------------------------------------------------------------------
555 @deffn {関数} components (@var{tensor}, @var{expr})
557 @var{tensor}の成分の値を与える式@var{expr}に添字値を割り当てることを許します。
558 その添字のすべてとともに起こるときはいつでも、これらは自動的にテンソルに代入されます。
559 テンソルは、形式@code{t([...],[...])}でなければいけません。
560 ここで形式@code{t([...],[...])}の中のリストのいずれかは空であり得えます。
562 @var{tensor}と同じ自由添字を持つ他のオブジェクトを含む任意の添字付き式であり得ます。
563 成分がダミー添字を含む計量テンソルへ値を割り当てるのに使われる時、
564 複数のダミー添字の生成を避けるようにこれらの添字を定義するように注意しなければいけません。
565 この割り当ての削除は関数@code{remcomps}に与えられます。
567 It is important to keep in mind that
568 @code{components}はテンソル価についてだけ知る必要があり、特別な添字順序について知る必要がないことを覚えておくことは重要です。
569 このように、成分を、例えば、@code{x([i,-j],[])}, @code{x([-j,i],[])}または
570 @code{x([i],[j])}すべてに割り当てることは、同じ結果、
572 価@code{(1,1)}を持つ@code{x}と名付けられたテンソルに割り当てられた
575 成分を、4つの方法で添字付き式に割り当てることができます。
576 そのうちの2つは@code{components}コマンドの使用を含みます:
581 (%i2) components(g([],[i,j]),e([],[i])*p([],[j]))$
582 (%i3) ishow(g([],[i,j]))$
592 (%i5) lg:-ident(4)$lg[1,1]:1$lg;
602 (%i6) components(g([i,j],[]),lg);
604 (%i7) ishow(g([i,j],[]))$
613 3) 関数として。Maxima関数を使って、添字に基づいたテンソルの成分を指定することができます。
615 もし@code{h}が同じ数の共変添字と反変添字を持ち、微分添字を持たないなら、@code{kdelta}を@code{h}に割り当て、そうでなければ、@code{g}を割り当てます:
619 (%i4) h(l1,l2,[l3]):=if length(l1)=length(l2) and length(l3)=0
620 then kdelta(l1,l2) else apply(g,append([l1,l2], l3))$
621 (%i5) ishow(h([i],[j]))$
625 (%i6) ishow(h([i,j],[k],l))$
631 4) Maximaのパターンマッチング機能、特に@code{defrule}と@code{applyb1}コマンド
636 (%i1) load("itensor");
637 (%o1) /share/tensor/itensor.lisp
638 (%i2) matchdeclare(l1,listp);
640 (%i3) defrule(r1,m(l1,[]),(i1:idummy(),
641 g([l1[1],l1[2]],[])*q([i1],[])*e([],[i1])))$
643 (%i4) defrule(r2,m([],l1),(i1:idummy(),
644 w([],[l1[1],l1[2]])*e([i1],[])*q([],[i1])))$
646 (%i5) ishow(m([i,n],[])*m([],[i,m]))$
652 (%i6) ishow(rename(applyb1(%,r1,r2)))$
659 @category{Package itensor}
663 @deffn {関数} remcomps (@var{tensor})
665 @code{components}関数で割り当てられたすべての値を
666 @var{tensor}からアンバインドします。
669 @category{Package itensor}
673 @c NEED LIST OF ARGUMENTS HERE
675 @c -----------------------------------------------------------------------------
676 @deffn {関数} showcomps (@var{tensor})
678 @code{components}コマンドを使って作られたように
681 行列が、@code{components}を使って
687 (%i1) load("ctensor");
688 (%o1) /share/tensor/ctensor.mac
689 (%i2) load("itensor");
690 (%o2) /share/tensor/itensor.lisp
691 (%i3) lg:matrix([sqrt(r/(r-2*m)),0,0,0],[0,r,0,0],
692 [0,0,sin(theta)*r,0],[0,0,0,sqrt((r-2*m)/r)]);
694 [ sqrt(-------) 0 0 0 ]
699 [ 0 0 r sin(theta) 0 ]
702 [ 0 0 0 sqrt(-------) ]
704 (%i4) components(g([i,j],[]),lg);
706 (%i5) showcomps(g([i,j],[]));
708 [ sqrt(-------) 0 0 0 ]
713 i j [ 0 0 r sin(theta) 0 ]
716 [ 0 0 0 sqrt(-------) ]
722 @code{showcomps}コマンドは
723 2よりも高い階数のテンソルの成分も表示することができます。
726 @category{Package itensor}
730 @c -----------------------------------------------------------------------------
731 @deffn {関数} idummy ()
734 @code{icounter}を1つ増やし、
735 形式@code{%n}の添字を値として返します。ここでnは正の整数です。
736 これは式を形成する際必要なダミー添字が既に使用中の添字とぶつからないことを保証します。
737 (@code{indices}の下の例を参照してください。)
740 @category{Package itensor}
744 @defvr {オプション変数} idummyx
748 (@code{indices}の下の例を参照してください。)
751 @category{Package itensor}
755 @c -----------------------------------------------------------------------------
756 @defvr {オプション変数} icounter
759 テンソルパッケージで次のダミー添字を生成する際使われる数値接尾を決定します。
760 接頭辞はオプション@code{idummy} (デフォルト: @code{%})で決定されます。
763 @category{Package itensor}
767 @c -----------------------------------------------------------------------------
768 @deffn {関数} kdelta (@var{L1}, @var{L2})
769 共変添字のリスト@var{L1}と反変添字のリスト@var{L2}を使って
770 @code{itensor}パッケージで定義された
771 一般化されたKroneckerのデルタ関数です。
772 @code{kdelta([i],[j])}は通常のKroneckerデルタを返します。
773 コマンド@code{ev(@var{expr},kdelta)}は
774 @code{kdelta([],[])}を多様体の次元に含む
779 @code{kdelta}が2つの共変添字だけ、または、2つの反変添字だけを持つことも許し、
780 事実上、共(反)変「単位行列」を供給します。
781 これは厳密にはプログラミング目的としてみなされ、
782 @code{kdelta([i,j],[])}が有効なテンソルオブジェクトだということを意味するつもりではありません。
785 @category{Package itensor}
789 @c -----------------------------------------------------------------------------
790 @deffn {関数} kdels (@var{L1}, @var{L2})
792 いくつかの計算で使われる、対称化されたKroneckerデルタ。
797 (%i1) load("itensor");
798 (%o1) /share/tensor/itensor.lisp
799 (%i2) kdelta([1,2],[2,1]);
801 (%i3) kdels([1,2],[2,1]);
803 (%i4) ishow(kdelta([a,b],[c,d]))$
805 (%t4) kdelta kdelta - kdelta kdelta
807 (%i4) ishow(kdels([a,b],[c,d]))$
809 (%t4) kdelta kdelta + kdelta kdelta
815 @category{Package itensor}
819 @c -----------------------------------------------------------------------------
820 @deffn {関数} levi_civita (@var{L})
821 もしリスト@var{L}が整数の偶置換から成るなら1を返し、
822 @var{L}が奇置換なら成るなら-1を返し、
823 @var{L}のいくつかの添字が繰り返しなら0を返す
824 置換(別名Levi-Civita)テンソルです。
827 @category{Package itensor}
831 @c -----------------------------------------------------------------------------
832 @deffn {関数} lc2kdt (@var{expr})
833 Levi-Civitaシンボルを含む式を整理し、可能ならこれらをKroneckerデルタ式に変換します。
834 この関数と単にLevi-Civitaシンボルを評価することの主な違いは、
835 直接評価はしばしば数値添字を含むKronecker式に帰着することです。
836 これは、更なる整理を妨げるので、しばしば望ましくないことです。
837 @code{lc2kdt}関数はこの問題を避けて、
838 @code{rename}や@code{contract}を使って更に容易に整理される式をもたらします。
842 (%i1) load("itensor");
843 (%o1) /share/tensor/itensor.lisp
844 (%i2) expr:ishow('levi_civita([],[i,j])
845 *'levi_civita([k,l],[])*a([j],[k]))$
847 (%t2) levi_civita a levi_civita
849 (%i3) ishow(ev(expr,levi_civita))$
851 (%t3) kdelta a kdelta
853 (%i4) ishow(ev(%,kdelta))$
855 (%t4) (kdelta kdelta - kdelta kdelta ) a
859 (kdelta kdelta - kdelta kdelta )
861 (%i5) ishow(lc2kdt(expr))$
863 (%t5) a kdelta kdelta - a kdelta kdelta
865 (%i6) ishow(contract(expand(%)))$
871 @code{lc2kdt}関数は時々計量テンソルを利用します。
872 もし前もって計量テンソルが@code{imetric}で定義されていなかったなら、
877 (%i7) expr:ishow('levi_civita([],[i,j])
878 *'levi_civita([],[k,l])*a([j,k],[]))$
881 (%t7) levi_civita levi_civita a
884 (%i8) ishow(lc2kdt(expr))$
885 Maxima encountered a Lisp error:
887 Error in $IMETRIC [or a callee]:
888 $IMETRIC [or a callee] requires less than two arguments.
890 Automatically continuing.
891 To reenable the Lisp debugger set *debugger-hook* to nil.
894 (%i10) ishow(lc2kdt(expr))$
895 %3 i k %4 j l %3 i l %4 j
896 (%t10) (g kdelta g kdelta - g kdelta g
901 (%i11) ishow(contract(expand(%)))$
909 @category{Package itensor}
913 @c HMM, WHICH CATEGORY DOES THIS FALL INTO -- FUNCTION, VARIABLE, OTHER ??
915 @c -----------------------------------------------------------------------------
918 未評価のLevi-Civitaシンボル(@code{levi_civita})を含む式のために使われる整理ルール。
920 たくさんの式を、@code{levi_civita}の評価より、より効率的に整理するのに使うことができます。
926 (%i1) load("itensor");
927 (%o1) /share/tensor/itensor.lisp
928 (%i2) el1:ishow('levi_civita([i,j,k],[])*a([],[i])*a([],[j]))$
930 (%t2) a a levi_civita
932 (%i3) el2:ishow('levi_civita([],[i,j,k])*a([i])*a([j]))$
934 (%t3) levi_civita a a
936 (%i4) canform(contract(expand(applyb1(el1,lc_l,lc_u))));
938 (%i5) canform(contract(expand(applyb1(el2,lc_l,lc_u))));
944 @category{Package itensor}
948 @c HMM, WHICH CATEGORY DOES THIS FALL INTO -- FUNCTION, VARIABLE, OTHER ??
950 @c -----------------------------------------------------------------------------
953 未評価のLevi-Civitaシンボル(@code{levi_civita})を含む式のために使われる整理ルール。
955 たくさんの式を、@code{levi_civita}の評価より、より効率的に整理するのに使うことができます。
956 詳しくは、@code{lc_l}を参照してください。
959 @category{Package itensor}
963 @c -----------------------------------------------------------------------------
964 @deffn {関数} canten (@var{expr})
965 名前を変えて(@code{rename}を参照してください)、ダミー添字を置換することで、
970 もし@code{canform}が要求された整理を実行する能力がない時だけ使われるはずです。
973 引数が添字が完全に対称な式の時だけ数学的に正確な結果を返します。
974 この理由から、@code{canten}は、
975 もし@code{allsym}が@code{true}に設定されてないなら
980 @category{Package itensor}
984 @c -----------------------------------------------------------------------------
985 @deffn {関数} concan (@var{expr})
986 @code{canten}に似ていますが、添字縮約も実行します。
989 @category{Package itensor}
993 @c -----------------------------------------------------------------------------
994 @subsection Tensor symmetries
995 @c -----------------------------------------------------------------------------
997 @c -----------------------------------------------------------------------------
998 @defvr {オプション変数} allsym
1000 デフォルト: @code{false}。
1001 もし@code{true}なら、すべての添字付きオブジェクトは共変、反変添字のすべてに関して対称と仮定されます。
1002 もし@code{false}なら、これらの添字に関して、いかなる種類の対称性も仮定されません。
1003 @code{iframe_flag}が@code{true}に設定されない限り、
1007 @category{Package itensor}
1011 @c -----------------------------------------------------------------------------
1012 @deffn {関数} decsym (@var{tensor}, @var{m}, @var{n}, [@var{cov_1}, @var{cov_2}, ...], [@var{contr_1}, @var{contr_2}, ...])
1014 @var{m}個の共変添字と@var{n}個の反変添字を持つ@var{tensor}に関する
1016 @var{cov_i}と@var{contr_i}は
1017 それぞれ、共変添字と反変添字の間の対称関係を表す擬似関数です。
1019 contravariant indices respectively. These are of the form
1020 形式@code{symoper(@var{index_1}, @var{index_2},...)}を取ります。
1022 @code{sym}, @code{anti}もしくは@code{cyc}のいずれかで、
1025 @var{tensor}の添字の位置を示す整数です。
1026 これは、@var{tensor}が@var{index_i}に関してそれぞれ対称、反対称、巡回であると宣言します。
1027 @code{symoper(all)}も対称条件に従う添字すべてを示す有効な形式です。
1029 5つの共変添字を持つオブジェクト@code{b}が与えられたとして、
1030 @code{decsym(b,5,3,[sym(1,2),anti(3,4)],[cyc(all)])}は、
1031 @code{b}が一番目と二番目の共変添字に対して対称であり、三番目、四番目の共変添字に対して反対称であり、反変添字すべてに対して巡回的であると宣言します。
1032 対称宣言のリストのどれかは空であり得ます。
1034 以下の例で示すように@code{canform}です。
1038 (%i1) load("itensor");
1039 (%o1) /share/tensor/itensor.lisp
1040 (%i2) expr:contract( expand( a([i1, j1, k1], [])
1041 *kdels([i, j, k], [i1, j1, k1])))$
1044 (%t3) a + a + a + a + a + a
1045 k j i k i j j k i j i k i k j i j k
1047 (%i4) decsym(a,3,0,[sym(all)],[]);
1049 (%i5) ishow(canform(expr))$
1052 (%i6) remsym(a,3,0);
1054 (%i7) decsym(a,3,0,[anti(all)],[]);
1056 (%i8) ishow(canform(expr))$
1058 (%i9) remsym(a,3,0);
1060 (%i10) decsym(a,3,0,[cyc(all)],[]);
1062 (%i11) ishow(canform(expr))$
1065 (%i12) dispsym(a,3,0);
1066 (%o12) [[cyc, [[1, 2, 3]], []]]
1071 @category{Package itensor}
1075 @c -----------------------------------------------------------------------------
1076 @deffn {関数} remsym (@var{tensor}, @var{m}, @var{n})
1077 @var{m}個の共変添字と@var{n}個の反変添字を持つ@var{tensor}から
1081 @category{Package itensor}
1085 @c -----------------------------------------------------------------------------
1086 @deffn {関数} canform (@var{expr})
1087 @deffnx {関数} canform (@var{expr}, @var{rename})
1089 それらに課せられた対称条件によって指令されたようにすべての添字を並べ替えることで、
1091 もし@code{allsym}が@code{true}なら、
1093 そうでなければ、@code{decsym}宣言が提供する対称情報が使われます。
1094 ダミー添字は@code{rename}関数に関するものと同じ方法でリネームされます。
1095 @code{canform}が大きな式に適用される時、
1096 計算にかなりの時間が費やされるかもしれません。
1097 この時間は最初に式に対して@code{rename}をコールすることで短くできます。
1098 @code{decsym}の下の例も参照してください。
1101 式を最も簡単な形式に完全に整理できないかもしれません。
1103 オプションの二番目のパラメータ@var{rename}は、
1104 もし@code{false}に設定されたなら、リネームを抑制します。
1107 @category{Package itensor}
1111 @c -----------------------------------------------------------------------------
1112 @subsection Indicial tensor calculus
1113 @c -----------------------------------------------------------------------------
1115 @c -----------------------------------------------------------------------------
1116 @deffn {関数} diff (@var{expr}, @var{v_1}, [@var{n_1}, [@var{v_2}, @var{n_2}] ...])
1118 @code{itensor}のための能力に関して拡張された
1120 It takes the derivative of
1121 @var{v_1}に関して @var{n_1}階、
1122 @var{v_2}に関して @var{n_2}階、
1123 という@var{expr}の微分を取ります。
1125 @var{v_i}が1から変数 @code{dim}の値までの整数であるように
1128 微分がリスト @code{vect_coords}の @var{v_i}番目の要素に関して実行されます。
1130 @code{vect_coords}がアトム変数にバインドされているなら、
1131 @var{v_i}が下付きしたその変数が
1134 座標名や、@code{x[1]}, @code{x[2]}, ... のような下付き名の配列を使うことを可能にします。
1137 添字付き変数に関する微分を計算する能力を@code{diff}に追加します。
1139 計量テンソルと、計量テンソルやその一階微分、二階微分に関する微分を含む
1142 重力理論のLagrange形式を考える時、
1144 作用原理からEinsteinテンソルと場の方程式を演繹することを可能にします。
1147 @category{Package itensor}
1151 @c -----------------------------------------------------------------------------
1152 @deffn {関数} idiff (@var{expr}, @var{v_1}, [@var{n_1}, [@var{v_2}, @var{n_2}] ...])
1154 独立変数に関して微分する@code{diff}と異なり、
1155 @code{idiff)}は座標に関して微分するのにつかうことができます。
1158 @var{v_i}を微分添字として追加することになります。
1159 @code{iframe_flag}が @code{true}に設定されていない限り
1162 @code{idiff}は計量テンソルの行列式も微分することができます。
1163 従って、もし @code{imetric}が
1164 @code{G}にバインドされていたら、
1165 @code{idiff(determinant(g),k)}は
1166 ダミー添字 @code{%i}が適当に選ばれて
1167 @code{2 * determinant(g) * ichr2([%i,k],[%i])}を返します。
1170 @category{Package itensor}
1174 @c -----------------------------------------------------------------------------
1175 @deffn {関数} liediff (@var{v}, @var{ten})
1177 ベクトル場 @var{v}に対してテンソル式 @var{ten}のLie微分を計算します。
1178 @var{ten}は任意の添字付きテンソル式でなければいけません;
1179 @var{v}はベクトル場の(添字なしの)名前でなければいけません。
1184 (%i1) load("itensor");
1185 (%o1) /share/tensor/itensor.lisp
1186 (%i2) ishow(liediff(v,a([i,j],[])*b([],[k],l)))$
1188 (%t2) b (v a + v a + v a )
1189 ,l i j,%2 ,j i %2 ,i %2 j
1192 + (v b - b v + v b ) a
1193 ,%1 l ,l ,%1 ,l ,%1 i j
1198 @category{Package itensor}
1202 @c -----------------------------------------------------------------------------
1203 @deffn {関数} rediff (@var{ten})
1205 テンソル式 @var{ten}の中の@code{idiff}コマンドすべてを評価します。
1208 @category{Package itensor}
1212 @c -----------------------------------------------------------------------------
1213 @deffn {関数} undiff (@var{expr})
1216 添字付きオブジェクトの微分すべてが@code{idiff}関数の名詞形で置き換えられた
1218 引数はもし微分が実行されていたらその添字付きオブジェクトをもたらします。
1220 @var{expr}を生じるある関数定義で置き換えて、
1221 @code{ev(@var{expr}, idiff)}で微分を実行したい時、
1226 @category{Package itensor}
1230 @c -----------------------------------------------------------------------------
1231 @deffn {関数} evundiff (@var{expr})
1233 @code{undiff}の実行と同値ですが、@code{ev}と @code{rediff}が続きます。
1236 微分形式で直接評価できない式を簡単に評価することです。
1240 (%i1) load("itensor");
1241 (%o1) /share/tensor/itensor.lisp
1242 (%i2) icurvature([i,j,k],[l],m);
1243 Maxima encountered a Lisp error:
1245 Error in $ICURVATURE [or a callee]:
1246 $ICURVATURE [or a callee] requires less than three arguments.
1248 Automatically continuing.
1249 To reenable the Lisp debugger set *debugger-hook* to nil.
1252 しかし、もし @code{icurvature}は名詞形で入っているなら、
1253 @code{evundiff}を使って評価できます:
1256 (%i3) ishow('icurvature([i,j,k],[l],m))$
1260 (%i4) ishow(evundiff(%))$
1262 (%t4) - ichr2 - ichr2 ichr2 - ichr2 ichr2
1263 i k,j m %1 j i k,m %1 j,m i k
1266 + ichr2 + ichr2 ichr2 + ichr2 ichr2
1267 i j,k m %1 k i j,m %1 k,m i j
1270 注意: Maximaの以前のバージョンでは、
1271 Christoffel記号の微分形式も評価できませんでした。
1273 だから @code{evundiff}はもはやこのような式に関しては不要です:
1278 (%i6) ishow(ichr2([i,j],[k],l))$
1281 j %3,i l i j,%3 l i %3,j l
1282 (%t6) -----------------------------------------
1287 ,l j %3,i i j,%3 i %3,j
1288 + -----------------------------------
1293 @category{Package itensor}
1297 @c -----------------------------------------------------------------------------
1298 @deffn {関数} flush (@var{expr}, @var{tensor_1}, @var{tensor_2}, ...)
1300 微分添字を持たない @var{tensor_i}をすべて0にします。
1303 @category{Package itensor}
1307 @c -----------------------------------------------------------------------------
1308 @deffn {関数} flushd (@var{expr}, @var{tensor_1}, @var{tensor_2}, ...)
1310 微分添字を持つ @var{tensor_i}をすべて0にします。
1313 @category{Package itensor}
1317 @c -----------------------------------------------------------------------------
1318 @deffn {関数} flushnd (@var{expr}, @var{tensor}, @var{n})
1321 @var{n}以上の微分添字を持つ微分されたオブジェクト @var{tensor}をすべて0にします。
1324 (%i1) load("itensor");
1325 (%o1) /share/tensor/itensor.lisp
1326 (%i2) ishow(a([i],[J,r],k,r)+a([i],[j,r,s],k,r,s))$
1330 (%i3) ishow(flushnd(%,a,3))$
1337 @category{Package itensor}
1341 @c -----------------------------------------------------------------------------
1342 @deffn {関数} coord (@var{tensor_1}, @var{tensor_2}, ...)
1345 その名前が@var{tensor_i}の1つである反変ベクトルの微分がKroneckerデルタをもたらす
1348 もし @code{coord(x)}が実行されたら、
1349 @code{idiff(x([],[i]),j)}は @code{kdelta([i],[j])}を与えます。
1350 @code{coord}はこのプロパティを持つ添字付きオブジェクトすべてのリストです。
1353 @category{Package itensor}
1357 @c -----------------------------------------------------------------------------
1358 @deffn {関数} remcoord (@var{tensor_1}, @var{tensor_2}, ...)
1359 @deffnx {関数} remcoord (all)
1362 関数 @code{coord}がもたらした座標微分プロパティを削除します。
1363 @code{remcoord(all)}は添字付きオブジェクトすべてからこのプロパティを削除します。
1366 @category{Package itensor}
1370 @c -----------------------------------------------------------------------------
1371 @deffn {関数} makebox (@var{expr})
1372 @code{show}と同じように @var{expr}を表示します;
1374 @var{expr}に現れるテンソル d'Alembert演算子はすべて記号 @code{[]}を使って示されます。
1375 例えば、 @code{[]p([m],[n])}は
1376 @code{g([],[i,j])*p([m],[n],i,j)}を表します。
1379 @category{Package itensor}
1383 @c -----------------------------------------------------------------------------
1384 @deffn {関数} conmetderiv (@var{expr}, @var{tensor})
1386 計量テンソルの共変と反変形式両方(現在の制約)の常微分を含む式を整理します。
1389 反変計量テンソルの微分をChristoffelシンボルに結びつけます:
1393 (%i1) load("itensor");
1394 (%o1) /share/tensor/itensor.lisp
1395 (%i2) ishow(g([],[a,b],c))$
1399 (%i3) ishow(conmetderiv(%,g))$
1401 (%t3) - g ichr2 - g ichr2
1406 @category{Package itensor}
1410 @c -----------------------------------------------------------------------------
1411 @deffn {関数} simpmetderiv (@var{expr})
1412 @deffnx {関数} simpmetderiv (@var{expr}[, @var{stop}])
1414 計量テンソルの微分の積を含む式を整理します。
1415 特に、 @code{simpmetderiv}は2つの恒等式を知っています:
1420 g g + g g = (g g ) = (kdelta ) = 0
1421 ,d bc bc,d bc ,d c ,d
1444 これはChristoffel記号の対称性の結果です。
1446 @code{simpmetderiv}関数はオプションパラメータを1つ取ります。
1448 積式の中の最初にうまくいった代入の後、関数が停止するようにします。
1449 @code{simpmetderiv}関数は
1450 ``正準''順序を積添字に適用する方法を決めるグローバル変数 @var{flipflag}も利用します。
1454 そうでなければ遂行困難か不可能な強力な式整理を達成するのに使うことができます。
1456 縮約式を得るために@code{simpmetderiv}の部分的な整理の特長を明示的に使う
1461 (%i1) load("itensor");
1462 (%o1) /share/tensor/itensor.lisp
1465 (%i3) ishow(g([],[a,b])*g([],[b,c])*g([a,b],[],d)*g([b,c],[],e))$
1469 (%i4) ishow(canform(%))$
1471 errexp1 has improper indices
1472 -- an error. Quitting. To debug this try debugmode(true);
1473 (%i5) ishow(simpmetderiv(%))$
1477 (%i6) flipflag:not flipflag;
1479 (%i7) ishow(simpmetderiv(%th(2)))$
1483 (%i8) flipflag:not flipflag;
1485 (%i9) ishow(simpmetderiv(%th(2),stop))$
1489 (%i10) ishow(contract(%))$
1497 @code{simpmetderiv}と @code{conmetderiv}を一緒に使う例として、
1498 @code{weyl.dem}も参照してください。
1501 @category{Package itensor}
1505 @c -----------------------------------------------------------------------------
1506 @deffn {関数} flush1deriv (@var{expr}, @var{tensor})
1509 微分添字を1つだけ持つ @var{tensor}をすべて0にします。
1512 @category{Package itensor}
1516 @c -----------------------------------------------------------------------------
1517 @subsection Tensors in curved spaces
1518 @c -----------------------------------------------------------------------------
1520 @c -----------------------------------------------------------------------------
1521 @deffn {関数} imetric (@var{g})
1522 @deffnx {システム変数} imetric
1524 変数 @code{imetric:@var{g}}を割り当てることで計量を指定します。
1526 コマンド @code{defcon(@var{g}),defcon(@var{g}, @var{g}, kdelta)}を実行することで
1527 計量 @var{g}の縮約プロパティが設定されます。
1528 (デフォルトではバインドされていない)変数 @code{imetric}は
1529 @code{imetric(@var{g})}コマンドが割り当てる計量にバインドされます。
1532 @category{Package itensor}
1536 @c -----------------------------------------------------------------------------
1537 @deffn {関数} idim (@var{n})
1539 与えられた次元でLevi-Civita記号の反対称プロパティも初期化します。
1542 @category{Package itensor}
1546 @c -----------------------------------------------------------------------------
1547 @deffn {関数} ichr1 ([@var{i}, @var{j}, @var{k}])
1548 以下の定義を介して第一種Christoffel記号をもたらします。
1554 特定の計量で Christoffel記号を評価するには、
1556 変数 @code{imetric}が名前を割り当てられなければいけません。
1559 @category{Package itensor}
1563 @c -----------------------------------------------------------------------------
1564 @deffn {関数} ichr2 ([@var{i}, @var{j}], [@var{k}])
1565 以下の定義を介して第二種Christoffel記号をもたらします。
1568 ichr2([i,j],[k]) = g (g + g - g )/2
1573 @category{Package itensor}
1577 @c -----------------------------------------------------------------------------
1578 @deffn {関数} icurvature ([@var{i}, @var{j}, @var{k}], [@var{h}])
1579 第二種Christoffel記号(@code{ichr2})を使った
1580 Riemann曲率テンソルをもたらします。
1584 icurvature = - ichr2 - ichr2 ichr2 + ichr2
1585 i j k i k,j %1 j i k i j,k
1592 @category{Package itensor}
1596 @c -----------------------------------------------------------------------------
1597 @deffn {関数} covdiff (@var{expr}, @var{v_1}, @var{v_2}, ...)
1598 第二種Christoffel記号(@code{ichr2})を使って、
1600 @var{expr}の共変微分をもたらします。
1602 @code{ev(@var{expr},ichr2)}を使わなければ行けません。
1606 (%i1) load("itensor");
1607 (%o1) /share/tensor/itensor.lisp
1608 (%i2) entertensor()$
1609 Enter tensor name: a;
1610 Enter a list of the covariant indices: [i,j];
1611 Enter a list of the contravariant indices: [k];
1612 Enter a list of the derivative indices: [];
1616 (%i3) ishow(covdiff(%,s))$
1618 (%t3) - a ichr2 - a ichr2 + a
1619 i %1 j s %1 j i s i j,s
1626 (%i5) ishow(ev(%th(2),ichr2))$
1629 i %1 s %4,j j s,%4 j %4,s
1630 (%t5) - ------------------------------------------
1635 %1 j s %3,i i s,%3 i %3,s
1636 - ------------------------------------------
1640 i j s %2,%1 %1 s,%2 %1 %2,s k
1641 + ------------------------------------------- + a
1648 @category{Package itensor}
1652 @c -----------------------------------------------------------------------------
1653 @deffn {関数} lorentz_gauge (@var{expr})
1654 反変添字と同一の微分添字を持つ @var{expr}の中で
1655 添字付きオブジェクトすべてに0を代入することで、
1659 @category{Package itensor}
1663 @c -----------------------------------------------------------------------------
1664 @deffn {関数} igeodesic_coords (@var{expr}, @var{name})
1666 @var{expr}内の、未微分 Christoffel記号と
1667 計量テンソルの一階微分を消すようにします。
1668 @code{igeodesic_coords}関数での @var{name}は
1669 (もし @var{expr})の中で現れるなら)
1670 計量 @var{name}を参照します。
1672 名前 @code{ichr1}か @code{ichr2}でコールされなければいけません。
1674 @code{igeodesic_coords}関数を使った、
1675 Riemann曲率テンソルが満たす巡回恒等式の検証を例示します。
1679 (%i1) load("itensor");
1680 (%o1) /share/tensor/itensor.lisp
1681 (%i2) ishow(icurvature([r,s,t],[u]))$
1683 (%t2) - ichr2 - ichr2 ichr2 + ichr2
1684 r t,s %1 s r t r s,t
1689 (%i3) ishow(igeodesic_coords(%,ichr2))$
1693 (%i4) ishow(igeodesic_coords(icurvature([r,s,t],[u]),ichr2)+
1694 igeodesic_coords(icurvature([s,t,r],[u]),ichr2)+
1695 igeodesic_coords(icurvature([t,r,s],[u]),ichr2))$
1697 (%t4) - ichr2 + ichr2 + ichr2 - ichr2
1698 t s,r t r,s s t,r s r,t
1709 @category{Package itensor}
1713 @c -----------------------------------------------------------------------------
1714 @subsection Moving frames
1715 @c -----------------------------------------------------------------------------
1718 動標構(moving frame)を使って計算を実行する能力があります。
1719 これらは直交標構(テトラド、四脚場)か任意系であり得ます。
1722 最初に@code{iframe_flag}を @code{true}に設定しなければいけません。
1725 Christoffel記号, @code{ichr1}と @code{ichr2}が
1726 もっと一般的な標構(frame)の接続係数
1727 @code{icc1}と @code{icc2}に置き換えられることになります。
1729 @code{covdiff}と @code{icurvature}の振る舞いが変わります。
1732 逆標枠場 (@code{ifri}, 双対基底四脚場)と
1733 標構計量(frame metric) @code{ifg}。
1734 標構計量は直交標構の単位行列、すなわち、
1735 Minkowski時空での直交標構のLorentz計量です。
1736 逆標枠場は標構基底(単位ベクトル)を定義します。
1737 標枠と標構計量に縮約プロパティが定義されます。
1739 @code{iframe_flag}がtrueなら、
1740 たくさんの @code{itensor}式が、
1741 @code{imetric}が上付き添字と下付き添字に関して定義する計量の代わりに
1742 標構計量 @code{ifg}を使います。
1744 重要: 変数 @code{iframe_flag}を @code{true}に設定することは
1745 @code{defcon}や @code{imetric}のコールによって定義された計量の縮約プロパティを
1748 @code{imetric}関数を呼び出さず、
1749 変数 @code{imetric}に名前を割り当てて計量を定義することが最良です。
1752 Maximaはこれら2つのテンソルを使って、
1753 接続係数 (@code{icc1}と @code{icc2})の一部を形成する
1754 標構係数 (@code{ifc1}と @code{ifc2})を定義します。
1759 (%i1) load("itensor");
1760 (%o1) /share/tensor/itensor.lisp
1761 (%i2) iframe_flag:true;
1763 (%i3) ishow(covdiff(v([],[i]),j))$
1767 (%i4) ishow(ev(%,icc2))$
1771 (%i5) ishow(ev(%,ifc2))$
1773 (%t5) v ifg ifc1 + v
1775 (%i6) ishow(ev(%,ifc1))$
1778 v ifg (ifb - ifb + ifb )
1779 j %2 %1 %2 %1 j %1 j %2 i
1780 (%t6) -------------------------------------------------- + v
1783 (%i7) ishow(ifb([a,b,c]))$
1785 (%t7) (ifri - ifri ) ifr ifr
1790 もし @code{iframe_bracket_form}フラグが @code{false}に設定されているなら
1791 標構ブラケット(frame bracket) (@code{ifb})を計算するのに代わりの方法が使われます:
1795 (%i8) block([iframe_bracket_form:false],ishow(ifb([a,b,c])))$
1797 (%t8) ifri (ifr ifr - ifr ifr )
1802 @c -----------------------------------------------------------------------------
1803 @deffn {関数} iframes ()
1806 @code{ifr}と @code{ifri}に関する縮約恒等式がいつも定義されます。
1807 as is the frame bracket (@code{ifb}),
1811 @category{Package itensor}
1815 @c -----------------------------------------------------------------------------
1818 標構ブラケット(frame bracket)。
1819 標構計量の接続係数への寄与が標構ブラケットを使って表されます:
1825 ifc1 = --------------------------------
1832 @code{frame_bracket_form}の値に依存して
1834 もし true (デフォルト)か、もし @code{itorsion_flag}が @code{true}なら:
1839 ifb = ifr ifr (ifri - ifri - ifri itr )
1840 abc b c a d,e a e,d a f d e
1850 ifb = (ifr ifr - ifr ifr ) ifri
1856 @category{Package itensor}
1861 @c -----------------------------------------------------------------------------
1865 @code{itensor}では、以下のように定義されます。
1869 icc1 = ichr1 - ikt1 - inmc1
1875 もし @code{iframe_flag}が trueなら、
1876 Christoffel記号 @code{ichr1}が
1877 標構接続係数 @code{ifc1}に置き換えられます。
1878 もし @code{itorsion_flag}が @code{false}なら、
1881 ねじれが標構ブラケットの一部として既に計算されているので、
1882 その時にも @code{ikt1}は省略されます。
1884 @code{inonmet_flag}が @code{false}なら、
1885 @code{inmc1}は存在しません。
1888 @category{Package itensor}
1892 @c -----------------------------------------------------------------------------
1896 @code{itensor}では、以下のように定義されます。
1901 icc2 = ichr2 - ikt2 - inmc2
1907 もし @code{iframe_flag}が trueなら、
1908 Christoffel記号 @code{ichr2}が
1909 標構接続係数 @code{ifc2}に置き換えられます。
1910 もし @code{itorsion_flag}が @code{false}なら、
1913 ねじれが標構ブラケットの一部として既に計算されているので、
1914 その時にも @code{ikt1}は省略されます。
1916 @code{inonmet_flag}が @code{false}なら、
1917 @code{inmc1}は存在しません。
1920 @category{Package itensor}
1924 @c -----------------------------------------------------------------------------
1927 (Ricci回転係数としても知られている)第一種標構係数。
1929 標構計量の第一種接続係数への寄与を表します。
1936 ifc1 = --------------------------------
1943 @category{Package itensor}
1947 @c -----------------------------------------------------------------------------
1951 このテンソルは標構計量の第一種接続係数への寄与を表します。
1952 必要に応じて、標構ブラケット (@code{ifb})の、
1953 適切な上付き、下付き添字での置換として定義されます:
1964 @category{Package itensor}
1971 標構計量(@code{ifg})を形成するために
1976 @category{Package itensor}
1980 @c -----------------------------------------------------------------------------
1984 (双対基底ベクトル)標構基底を指定します。
1986 標構に基づいた計算すべての基底を形成します。
1989 @category{Package itensor}
1993 @c -----------------------------------------------------------------------------
1997 @code{kdelta}のデフォルトですが、
1998 @code{components}を使って変えることができます。
2001 @category{Package itensor}
2005 @c -----------------------------------------------------------------------------
2009 標構計量 (@code{ifg})を @code{kdelta}に縮約します。
2012 @category{Package itensor}
2016 @c -----------------------------------------------------------------------------
2017 @defvr {オプション変数} iframe_bracket_form
2020 標構ブラケット (@code{ifb})が如何に計算されるか指定します。
2023 @category{Package itensor}
2027 @c -----------------------------------------------------------------------------
2028 @subsection Torsion and nonmetricity
2029 @c -----------------------------------------------------------------------------
2031 Maximaは今では、ねじれと非計量性を考慮することができます。
2032 フラグ @code{itorsion_flag}が @code{true}に設定されている時、
2036 フラグ @code{inonmet_flag}が trueの時、
2039 @c -----------------------------------------------------------------------------
2043 共形非計量性は計量テンソルの共変微分を通して定義されます。
2044 @code{inonmet_flag}が @code{true}に設定されている時
2045 通常零の計量テンソルの共変微分は以下のように評価されます:
2055 @category{Package itensor}
2059 @c -----------------------------------------------------------------------------
2067 g inm - inm g - g inm
2069 inmc1 = ------------------------------
2074 (もし標構計量を使うなら、@code{ifg}を @code{g}に代入します。)
2077 @category{Package itensor}
2081 @c -----------------------------------------------------------------------------
2085 もし @code{inonmet_flag}が @code{true}なら
2092 -inm kdelta - kdelta inm + g inm g
2094 inmc2 = -------------------------------------------
2099 (もし標構計量を使うなら、@code{ifg}を @code{g}に代入します。)
2102 @category{Package itensor}
2106 @c -----------------------------------------------------------------------------
2109 (コントーションとしても知られる)ねじれテンソルの共変置換。
2115 -g itr - g itr - itr g
2117 ikt1 = ----------------------------------
2122 (もし標構計量を使うなら、@code{ifg}を @code{g}に代入します。)
2125 @category{Package itensor}
2129 @c -----------------------------------------------------------------------------
2132 (コントーションとしても知られる)ねじれテンソルの共変置換。
2143 (もし標構計量を使うなら、@code{ifg}を @code{g}に代入します。)
2146 @category{Package itensor}
2150 @c -----------------------------------------------------------------------------
2155 ねじれを伴う計量に関してスカラー関数上の繰り返される共変微分は計算されません:
2158 (%i1) load("itensor");
2159 (%o1) /share/tensor/itensor.lisp
2162 (%i3) covdiff( covdiff( f( [], []), i), j)
2163 - covdiff( covdiff( f( [], []), j), i)$
2166 (%t4) f ichr2 - f ichr2
2170 (%i6) itorsion_flag:true;
2172 (%i7) covdiff( covdiff( f( [], []), i), j)
2173 - covdiff( covdiff( f( [], []), j), i)$
2176 (%t8) f icc2 - f icc2 - f + f
2177 ,%8 j i ,%6 i j ,j i ,i j
2178 (%i9) ishow(canform(%))$
2180 (%t9) f icc2 - f icc2
2182 (%i10) ishow(canform(ev(%,icc2)))$
2184 (%t10) f ikt2 - f ikt2
2186 (%i11) ishow(canform(ev(%,ikt2)))$
2188 (%t11) f g ikt1 - f g ikt1
2189 ,%2 i j %1 ,%2 j i %1
2190 (%i12) ishow(factor(canform(rename(expand(ev(%,ikt1))))))$
2194 (%t12) ------------------------------------
2196 (%i13) decsym(itr,2,1,[anti(all)],[]);
2198 (%i14) defcon(g,g,kdelta);
2200 (%i15) subst(g,nounify(g),%th(3))$
2201 (%i16) ishow(canform(contract(%)))$
2209 @category{Package itensor}
2213 @c -----------------------------------------------------------------------------
2214 @subsection Exterior algebra
2215 @c -----------------------------------------------------------------------------
2217 @code{itensor}パッケージは
2220 回数 (0,L)の完全反対称テンソル場は
2223 外積やウェッジ積として知られる乗算が定義されます。
2226 すべての作者がウェッジ積の定義に同意しません。
2227 何人の作者は反対称の概念に対応した定義を好みます:
2235 a /\ a = -----------
2240 p形式や q形式の積は以下のように定義されます。
2244 A /\ B = ------ D A B
2245 i1..ip j1..jq (p+q)! i1..ip j1..jq k1..kp l1..lq
2248 ここで、 @code{D}はKroneckerのデルタを表します。
2250 しかし、他の作者は容積要素の概念に対応する
2262 A /\ B = ----- D A B
2263 i1..ip j1..jq p! q! i1..ip j1..jq k1..kp l1..lq
2266 @code{itensor}はテンソル代数パッケージなので、
2267 これら2つの定義の前者がより自然なもののようです。
2268 しかし、多くの応用は後者の定義を使います。
2270 ウェッジ積の振る舞いを制御するフラグが実装されました:
2271 もし @code{igeowedge_flag}が @code{false} (デフォルト)なら、
2273 層でないなら,後者の"幾何的"定義が適用されます。
2277 @fnindex Wedge product
2281 ティルデ @code{~}で示されれます。
2285 共変添字すべてに関して反対称と宣言された階数 @code{l}の共変テンソルを含む式
2290 @code{igeowedge_flag}
2294 (%i1) load("itensor");
2295 (%o1) /share/tensor/itensor.lisp
2296 (%i2) ishow(a([i])~b([j]))$
2301 (%i3) decsym(a,2,0,[anti(all)],[]);
2303 (%i4) ishow(a([i,j])~b([k]))$
2306 (%t4) ---------------------------
2308 (%i5) igeowedge_flag:true;
2310 (%i6) ishow(a([i])~b([j]))$
2313 (%i7) ishow(a([i,j])~b([k]))$
2314 (%t7) a b + b a - a b
2319 @category{Package itensor}
2320 @category{Operators}
2324 @c -----------------------------------------------------------------------------
2327 @fnindex Contraction with a vector
2331 "ベクトルの縮約"二項演算子を示します。
2332 完全反対称共変テンソルが反変ベクトルと縮約される時、
2333 結果は、どの添字が縮約に使われるかに関わらず同じです。
2335 添字に無関係な方法で縮約演算子を定義することが可能です。
2337 @code{itensor}パッケージでは、
2339 文字通りの並べ順で最初の添字に対して実行されます。
2341 @code{|}演算子を含む式のより良い整理を保証します。
2345 (%i1) load("itensor");
2346 (%o1) /share/tensor/itensor.lisp
2347 (%i2) decsym(a,2,0,[anti(all)],[]);
2349 (%i3) ishow(a([i,j],[])|v)$
2353 (%i4) ishow(a([j,i],[])|v)$
2359 @code{|}演算子で使われるテンソルは
2360 は共変添字に対して完全反対称と宣言されなければいけないことが
2362 そうでないなら、結果は正しくありません。
2365 @category{Package itensor}
2366 @category{Operators}
2370 @c -----------------------------------------------------------------------------
2371 @deffn {関数} extdiff (@var{expr}, @var{i})
2374 @var{expr}の外積を計算します。
2376 偏微分演算子のウェッジ積で微分形式として定義されます。
2379 @code{igeowedge_flag}の設定で制御されます。
2383 (%i1) load("itensor");
2384 (%o1) /share/tensor/itensor.lisp
2385 (%i2) ishow(extdiff(v([i]),j))$
2390 (%i3) decsym(a,2,0,[anti(all)],[]);
2392 (%i4) ishow(extdiff(a([i,j]),k))$
2395 (%t4) ------------------------
2397 (%i5) igeowedge_flag:true;
2399 (%i6) ishow(extdiff(v([i]),j))$
2402 (%i7) ishow(extdiff(a([i,j]),k))$
2403 (%t7) - (a - a + a )
2409 @category{Package itensor}
2413 @c -----------------------------------------------------------------------------
2414 @deffn {関数} hodge (@var{expr})
2416 @var{expr}のHodge双対を計算します。
2421 (%i1) load("itensor");
2422 (%o1) /share/tensor/itensor.lisp
2429 (%i5) decsym(A,3,0,[anti(all)],[])$
2431 (%i6) ishow(A([i,j,k],[]))$
2434 (%i7) ishow(canform(hodge(%)))$
2438 (%t7) -----------------------------------------
2440 (%i8) ishow(canform(hodge(%)))$
2441 %1 %2 %3 %8 %4 %5 %6 %7
2442 (%t8) levi_civita levi_civita g
2445 %2 %107 %3 %108 %4 %8 %5 %6 %7
2450 (%i11) ishow(canform(contract(expand(%))))$
2457 @category{Package itensor}
2461 @c -----------------------------------------------------------------------------
2462 @defvr {オプション変数} igeowedge_flag
2463 デフォルト値: @code{false}
2465 ウェッジ積と外微分の振る舞いを制御します。
2466 @code{false} (デフォルト)に設定された時、
2468 完全反対称共変テンソル場のそれに対応します。
2473 @category{Package itensor}
2477 @c -----------------------------------------------------------------------------
2478 @subsection Exporting TeX expressions
2479 @c -----------------------------------------------------------------------------
2481 @code{itensor}パッケージは
2482 テンソル式をTexにエクスポートするための限定サポートを提供します。
2483 @code{itensor}式は関数コールとして現れるので、
2484 いつもの Maxima @code{tex}コマンドは
2486 代わりに@code{tentex}コマンドを試すことができます。
2487 これは、テンソル式を適切に添字が付けられたTeXオブジェクトに翻訳しようとします。
2489 @c -----------------------------------------------------------------------------
2490 @deffn {関数} tentex (@var{expr})
2493 @code{tentex}関数を使うには、
2494 最初に@code{tentex}をロードしなければいけません:
2498 (%i1) load("itensor");
2499 (%o1) /share/tensor/itensor.lisp
2500 (%i2) load("tentex");
2501 (%o2) /share/tensor/tentex.lisp
2504 (%i4) ishow(icurvature([j,k,l],[i]))$
2506 (%t4) ichr2 ichr2 - ichr2 ichr2 - ichr2
2507 j k m1 l j l m1 k j l,k
2513 $$\Gamma_@{j\,k@}^@{m_1@}\,\Gamma_@{l\,m_1@}^@{i@}-\Gamma_@{j\,l@}^@{m_1@}\,
2514 \Gamma_@{k\,m_1@}^@{i@}-\Gamma_@{j\,l,k@}^@{i@}+\Gamma_@{j\,k,l@}^@{i@}$$
2517 コンパイルエラーに導かれるTeX式でのパーセント符号の出現を避けるための、
2518 @code{idummyx}割り当ての使用に注意してください。
2520 注意せよ: このバージョンの@code{tentex}関数は幾分実験的です。
2523 @category{Package itensor}
2524 @category{TeX output}
2528 @c -----------------------------------------------------------------------------
2529 @subsection Interfacing with ctensor
2530 @c -----------------------------------------------------------------------------
2532 @code{itensor}パッケージは
2533 @code{ctensor}パッケージの文脈で実行することができる
2534 Maximaコードを生成する能力があります。
2535 この仕事を実行する関数は @code{ic_convert}です。
2537 @c -----------------------------------------------------------------------------
2538 @deffn {関数} ic_convert (@var{eqn})
2540 @code{itensor}方程式 @var{eqn}を
2541 @code{ctensor}割り当て文に変換します。
2542 添字付きオブジェクトが配列に変換される一方で、
2543 ダミー添字上の暗黙の和は明示的にされます。
2545 (配列下付き添字は添字付きオブジェクトの反変添字が続く共変の順です。)
2547 微分添字で下に添えられた @code{ct_coords}に対して取られる @code{diff}の名詞形に
2549 Christoffel記号 @code{ichr1}と @code{ichr2}は
2550 それぞれ、@code{lcs}と @code{mcs}に翻訳されます。
2551 もし @code{metricconvert}が @code{true}なら、
2552 2つの共変(反変)添字を持つ計量はすべて
2553 @code{lg} (@code{ug})にリネームされます。
2554 更に、 自由添字すべての上で足される@code{do}ループが導入されます。
2557 変換される割り当て分を評価することができます。
2561 (%i1) load("itensor");
2562 (%o1) /share/tensor/itensor.lisp
2563 (%i2) eqn:ishow(t([i,j],[k])=f([],[])*g([l,m],[])*a([],[m],j)
2568 (%i3) ic_convert(eqn);
2569 (%o3) for i thru dim do (for j thru dim do (
2571 t : f sum(sum(diff(a , ct_coords ) b
2574 g , l, 1, dim), m, 1, dim)))
2578 (%i5) metricconvert:true;
2580 (%i6) ic_convert(eqn);
2581 (%o6) for i thru dim do (for j thru dim do (
2583 t : f sum(sum(diff(a , ct_coords ) b
2586 lg , l, 1, dim), m, 1, dim)))
2591 @category{Package itensor}
2592 @category{Package ctensor}
2596 @c -----------------------------------------------------------------------------
2597 @subsection Reserved words
2598 @c -----------------------------------------------------------------------------
2600 以下の Maximaワードは @code{itensor}パッケージで内部的に使われているので、
2603 @c REFORMAT THIS TABLE USING TEXINFO MARKUP
2606 ------------------------------------------
2607 indices2() Internal version of indices()
2608 conti Lists contravariant indices
2609 covi Lists covariant indices of a indexed object
2610 deri Lists derivative indices of an indexed object
2611 name Returns the name of an indexed object