Maxima 5.46.0 Manual: Functions and Variables for ctensor

Previous: Introduction to ctensor, Up: ctensor [Contents][Index]

### 26.2 Functions and Variables for ctensor

#### 26.2.1 Initialization and setup

関数: csetup ()

  パッケージを初期化し、ユーザーに計量を対話的に入力可能にする `ctensor`(成分テンソル)パッケージの関数 より詳細は`ctensor`を参照してください。

  Package ctensor ·

関数: cmetric (dis)
関数: cmetric ()

  計量の逆元を計算し、将来の計算のためパッケージを設定する `ctensor`(成分テンソル)パッケージの関数

  もし`cframe_flag`が`false`なら、 関数は逆計量`ug`を(ユーザー定義の)行列`lg`から計算します。 計量の行列式も計算され、変数`gdet`に保存されます。 更に、パッケージは計量が対角的か調べ、結果に従って`diagmetric`の値を設定します。 もしオプション引数disが渡されて、それが`false`でないなら、 ユーザーは計量の逆元を見るように促されます。

  もし`cframe_flag`が`true`なら、 関数は`fri` (逆標構行列)と`lfg`(標構計量)の値が定義されていると考えます。 これらから、標構行列`fr`と逆標構計量`ufg`が計算されます。

  Package ctensor ·

関数: ct_coordsys (coordinate_system, extra_arg)
関数: ct_coordsys (coordinate_system)

  あらかじめ定義された座標系と計量を設定します。 引数coordinate_systemは以下のシンボルのいずれかです:

       SYMBOL             Dim Coordinates     Description/comments
       ------------------------------------------------------------------
       cartesian2d           2  [x,y]             Cartesian 2D 座標系
       polar                 2  [r,phi]           極座標系
       elliptic              2  [u,v]             楕円座標系
       confocalelliptic      2  [u,v]             共焦点楕円座標
       bipolar               2  [u,v]             二極座標系
       parabolic             2  [u,v]             放物座標系
       cartesian3d           3  [x,y,z]           Cartesian 3D 座標系
       polarcylindrical      3  [r,theta,z]       円筒z極2D
       ellipticcylindrical   3  [u,v,z]           円筒z楕円2D
       confocalellipsoidal   3  [u,v,w]           共焦点楕円
       bipolarcylindrical    3  [u,v,z]           円筒z二極2D
       paraboliccylindrical  3  [u,v,z]           円筒z放物2D
       paraboloidal          3  [u,v,phi]         Paraboloidal coords.
       conical               3  [u,v,w]           円錐座標
       toroidal              3  [u,v,phi]         環状座標
       spherical             3  [r,theta,phi]     球座標系
       oblatespheroidal      3  [u,v,phi]         偏球座標系
       oblatespheroidalsqrt  3  [u,v,phi]
       prolatespheroidal     3  [u,v,phi]         長形球座標系
       prolatespheroidalsqrt 3  [u,v,phi]
       ellipsoidal           3  [r,theta,phi]     楕円体座標系
       cartesian4d           4  [x,y,z,t]         Cartesian 4D 座標系
       spherical4d           4  [r,theta,eta,phi] 球 4D 座標系
       exteriorschwarzschild 4  [t,r,theta,phi]   Schwarzschild 計量
       interiorschwarzschild 4  [t,z,u,v]         内部 Schwarzschild 計量
       kerr_newman           4  [t,r,theta,phi]   荷電軸対称計量

  `coordinate_system`は 座標変数を含むリストが続く変換関数のリストでもあり得ます。 例えば、 以下のように球計量を指定できます:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
            r*sin(theta),[r,theta,phi]]);
      (%o2)                                done
      (%i3) lg:trigsimp(lg);
                                 [ 1  0         0        ]
                                 [                       ]
                                 [     2                 ]
      (%o3)                      [ 0  r         0        ]
                                 [                       ]
                                 [         2    2        ]
                                 [ 0  0   r  cos (theta) ]
      (%i4) ct_coords;
      (%o4)                           [r, theta, phi]
      (%i5) dim;
      (%o5)                                  3

  `cframe_flag`が `true`の時 変換関数も使うことができます:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) cframe_flag:true;
      (%o2)                                true
      (%i3) ct_coordsys([r*cos(theta)*cos(phi),r*cos(theta)*sin(phi),
            r*sin(theta),[r,theta,phi]]);
      (%o3)                                done
      (%i4) fri;
      (%o4)
       [cos(phi)cos(theta) -cos(phi) r sin(theta) -sin(phi) r cos(theta)]
       [                                                                ]
       [sin(phi)cos(theta) -sin(phi) r sin(theta)  cos(phi) r cos(theta)]
       [                                                                ]
       [    sin(theta)           r cos(theta)                0          ]

      (%i5) cmetric();
      (%o5)                                false
      (%i6) lg:trigsimp(lg);
                                 [ 1  0         0        ]
                                 [                       ]
                                 [     2                 ]
      (%o6)                      [ 0  r         0        ]
                                 [                       ]
                                 [         2    2        ]
                                 [ 0  0   r  cos (theta) ]

  オプションの引数 extra_argは以下のいずれかです:

  `cylindrical`は `ct_coordsys`に追加の極座標を結びつけるように言います。

  `minkowski`は `ct_coordsys`に 負の計量符号を持つ追加の座標を結びつけるように言います。

  `all`は `ct_coordsys`に 計量を設定した後、 `cmetric`と `christof(false)`をコールするように言います。

  もしグローバル変数 `verbose`が `true`に設定されているなら、 `ct_coordsys`は、 `cframe_flag`の値に依存して、 `dim`, `ct_coords`と、 `lg`か `lfg`のいずれかと `fri`の値を表示します。

  Package ctensor ·

関数: init_ctensor ()

  `ctensor`パッケージを初期化します。

  `init_ctensor`関数は`ctensor`パッケージを再初期化します。 それは`ctensor`が使う配列、行列すべてを削除し、 フラグすべてをリセットし、 `dim`を4にリセットし、 標構計量を Lorentz標構にリセットします。

  Package ctensor ·

#### 26.2.2 The tensors of curved space

`ctensor`パッケージの 主な目的は曲がった空間(時間)のテンソル、 最も顕著には一般相対性理論で使われるテンソルを計算することです。

計量基底が使われる時、 `ctensor`は以下のテンソルを計算できます:

     lg  -- ug
       \      \
        lcs -- mcs -- ric -- uric
                  \      \       \
                   \      tracer - ein -- lein
                    \
                     riem -- lriem -- weyl
                         \
                          uriem

`ctensor`は動標構を使って機能することもできます。 `cframe_flag`が `true`に設定されている時、 以下のテンソルを計算できます:

     lfg -- ufg
         \
     fri -- fr -- lcs -- mcs -- lriem -- ric -- uric
          \                       |  \      \       \
           lg -- ug               |   weyl   tracer - ein -- lein
                                  |\
                                  | riem
                                  |
                                  \uriem

関数: christof (dis)

  `ctensor` (成分テンソル)パッケージの関数。 各種Christoffel記号を計算します。 引数 disは どの結果をすぐに表示するか決めます。 第一種と第二種Christoffel記号は それぞれ配列 `lcs[i,j,k]`と `mcs[i,j,k]`に格納され、 最初の2つの添字に対して対称と定義されます。 もし `christof`の引数が `lcs`か `mcs`なら それぞれ、`lcs[i,j,k]`か `mcs[i,j,k]`の固有の非零値が 表示されます。 もし引数が `all`なら、 `lcs[i,j,k]`と `mcs[i,j,k]`の固有の非零値が表示されます。 もし引数が `false`なら、 要素の表示はされません。 配列要素 `mcs[i,j,k]`は 最後の添字が反変であるような方法で定義されます。

  Package ctensor ·

関数: ricci (dis)

  `ctensor` (成分テンソル)パッケージの関数。 `ricci`は Ricciテンソルの共変(対称)成分 `ric[i,j]`を計算します。 もし引数 disが `true`なら、 非零成分が表示されます。

  Package ctensor ·

関数: uricci (dis)

  この関数は最初にRicciテンソルの共変成分 `ric[i,j]`を計算します。 そして、混合 Ricciテンソルが反変計量テンソルを使って計算されます。 もし引数 disの値が `true`なら これらの(添字 `i`は共変で、添字 `j`は反変の)混合成分 `uric[i,j]` は直接表示されます。 そうでないなら、 `ricci(false)`は 結果を表示することなく、単に配列 `uric[i,j]`の要素を計算します。

  Package ctensor ·

関数: scurvature ()

  与えられた計量を持つ Riemannian多様体の (Ricciテンソルを縮約することで得られる)スカラ曲率を返します。

  Package ctensor ·

関数: einstein (dis)

  `ctensor` (成分テンソル)パッケージの関数。 `einstein`は、 (関数 `christof`と `ricci`を使って) Christoffel記号と Ricciテンソルを得られた後、 混合 Einsteinテンソルを計算します。 もし引数 disが `true`なら、 混合 Einsteinテンソル `ein[i,j]`の非零値が表示されます。 ここで `j`は反変添字です。 変数 `rateinstein`は これらの成分上の有理整理をもたらします。 もし `ratfac`が `true`なら、 成分は因数分解もされます。

  Package ctensor ·

関数: leinstein (dis)

  共変 Einsteinテンソル。 `leinstein`は 配列 `lein`に共変 Einsteinテンソルの値を格納します。 共変 Einsteinテンソルは、 計量テンソルを掛けることで 混合 Einsteinテンソル `ein`から計算されます。 もし引数 disが `true`なら、 共変 Einsteinテンソルの非零値が表示されます。

  Package ctensor ·

関数: riemann (dis)

  `ctensor` (成分テンソル)パッケージの関数。 `riemann`は 与えられた計量と対応するChristoffel記号から Riemann曲率テンソルを計算します。 以下の添字慣例が使われます:

                      l      _l       _l       _l   _m    _l   _m
       R[i,j,k,l] =  R    = |      - |      + |    |   - |    |
                      ijk     ij,k     ik,j     mk   ij    mj   ik

  この表記法は `itensor`パッケージとその `icurvature`関数で使われる表記法と 一致しています。 もしオプション引数 disが `true`なら、 固有の非零成分 `riem[i,j,k,l]`が表示されます。 Einsteinテンソルと同様に ユーザーが設定する様々なスイッチが Riemannテンソルの成分の整理を制御します。 もし `ratriemann`が `true`なら、 有理整理がされます。 もし `ratfac`が `true`なら、 成分のそれぞれは因数分解もされます。

  もし変数 `cframe_flag`が `false`なら、 Riemannテンソルは Christoffel記号から直接計算されます。 もし `cframe_flag`が `true`なら、 共変 Riemannテンソルは 標構場係数から最初に計算されます。

  Package ctensor ·

関数: lriemann (dis)

  共変 Riemannテンソル (`lriem[]`).

  配列 `lriem`として 共変 Riemannテンソルを計算します。 もし引数 disが `true`なら、 固有の非零値が表示されます。

  もし変数 `cframe_flag`が `true`なら、 共変 Riemannテンソルは 標構場係数から直接計算されます。 そうでないなら、 (3,1) Riemannテンソルが最初に計算されます。

  添字順序の情報は `riemann`を参照してください。

  Package ctensor ·

関数: uriemann (dis)

  配列要素 `uriem[i,j,k,l]`として Riemann曲率テンソルの反変成分を計算します。 もし disが `true`なら、これらが表示されます。

  Package ctensor ·

関数: rinvariant ()

  テンソル

      lriem[i,j,k,l]*uriem[i,j,k,l].

  を縮約することで得られるKretschmann不変量 (`kinvariant`)を形成します。

  このオブジェクトは非常に大きくなるかもしれないので、 自動的には整理されません。

  Package ctensor ·

関数: weyl (dis)

  Weylの共形テンソルを計算します。 もし引数 disが `true`なら、 非零成分 `weyl[i,j,k,l]`がユーザーに表示されます。 そうでないなら、これらの成分は 単に計算され、格納されます。 もしスイッチ `ratweyl`が `true`に設定されているなら、 成分は有理整理されます; もし `ratfac`が `true`なら、 結果は因数分解もされます。

  Package ctensor ·

#### 26.2.3 Taylor series expansion

`ctensor`パッケージは 結果が Taylor級数近似であると仮定することで、結果を切り詰める機能を持ちます。 この振る舞いは `ctayswitch`変数で制御されます; trueに設定されている時、 結果を整理する際に `ctensor`は内部的に関数 `ctaylor`を利用します。

以下の `ctensor`関数が `ctaylor`関数を呼び出します:

        Function     Comments
        ---------------------------------
        christof()   For mcs only
        ricci()
        uricci()
        einstein()
        riemann()
        weyl()
        checkdiv()

関数: ctaylor ()

  `ctaylor`関数は、 `taylor`を使ってその後`ratdisrep`をコールすることで 引数をTaylor級数に変換することで、 引数を切り詰めます。 これは 展開変数 `ctayvar`に関してより高い項を落とす合わせ効果を持ちます。 落とす項の次数は`ctaypov`で定義されます; 級数展開が実行される点は `ctaypt`で指定されます。

  例として、 Minkowski計量の置換である簡単な計量を考えます。 追加の制約なしでは、 対角計量でさえ はるかに複雑すぎるEinsteinテンソルの式を生成します:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) ratfac:true;
      (%o2)                                true
      (%i3) derivabbrev:true;
      (%o3)                                true
      (%i4) ct_coords:[t,r,theta,phi];
      (%o4)                         [t, r, theta, phi]
      (%i5) lg:matrix([-1,0,0,0],[0,1,0,0],[0,0,r^2,0],
                      [0,0,0,r^2*sin(theta)^2]);
                              [ - 1  0  0         0        ]
                              [                            ]
                              [  0   1  0         0        ]
                              [                            ]
      (%o5)                   [          2                 ]
                              [  0   0  r         0        ]
                              [                            ]
                              [              2    2        ]
                              [  0   0  0   r  sin (theta) ]
      (%i6) h:matrix([h11,0,0,0],[0,h22,0,0],[0,0,h33,0],[0,0,0,h44]);
                                  [ h11   0    0    0  ]
                                  [                    ]
                                  [  0   h22   0    0  ]
      (%o6)                       [                    ]
                                  [  0    0   h33   0  ]
                                  [                    ]
                                  [  0    0    0   h44 ]
      (%i7) depends(l,r);
      (%o7)                               [l(r)]
      (%i8) lg:lg+l*h;
            [ h11 l - 1      0          0                 0            ]
            [                                                          ]
            [     0      h22 l + 1      0                 0            ]
            [                                                          ]
      (%o8) [                        2                                 ]
            [     0          0      r  + h33 l            0            ]
            [                                                          ]
            [                                    2    2                ]
            [     0          0          0       r  sin (theta) + h44 l ]
      (%i9) cmetric(false);
      (%o9)                                done
      (%i10) einstein(false);
      (%o10)                               done
      (%i11) ntermst(ein);
      [[1, 1], 62]
      [[1, 2], 0]
      [[1, 3], 0]
      [[1, 4], 0]
      [[2, 1], 0]
      [[2, 2], 24]
      [[2, 3], 0]
      [[2, 4], 0]
      [[3, 1], 0]
      [[3, 2], 0]
      [[3, 3], 46]
      [[3, 4], 0]
      [[4, 1], 0]
      [[4, 2], 0]
      [[4, 3], 0]
      [[4, 4], 46]
      (%o12)                               done

  しかし、もしこの例を 変数 `l`に対して線形という近似として 再研鑽するなら、 もっと簡潔な式を得ます:

      (%i14) ctayswitch:true;
      (%o14)                               true
      (%i15) ctayvar:l;
      (%o15)                                 l
      (%i16) ctaypov:1;
      (%o16)                                 1
      (%i17) ctaypt:0;
      (%o17)                                 0
      (%i18) christof(false);
      (%o18)                               done
      (%i19) ricci(false);
      (%o19)                               done
      (%i20) einstein(false);
      (%o20)                               done
      (%i21) ntermst(ein);
      [[1, 1], 6]
      [[1, 2], 0]
      [[1, 3], 0]
      [[1, 4], 0]
      [[2, 1], 0]
      [[2, 2], 13]
      [[2, 3], 2]
      [[2, 4], 0]
      [[3, 1], 0]
      [[3, 2], 2]
      [[3, 3], 9]
      [[3, 4], 0]
      [[4, 1], 0]
      [[4, 2], 0]
      [[4, 3], 0]
      [[4, 4], 9]
      (%o21)                               done
      (%i22) ratsimp(ein[1,1]);
                               2      2  4               2     2
      (%o22) - (((h11 h22 - h11 ) (l )  r  - 2 h33 l    r ) sin (theta)
                                    r               r r

                                  2               2      4    2
                    - 2 h44 l    r  - h33 h44 (l ) )/(4 r  sin (theta))
                             r r                r

  この能力は 例えば、 重力源から遠く、弱い場極限で取り組む時に 役に立つかもしれません。

  Package ctensor ·

#### 26.2.4 Frame fields

変数 `cframe_flag`が trueに設定している時、 `ctensor`パッケージは 動標構(moving frame)を使って計算を実行します。

関数: frame_bracket (fr, fri, diagframe)

  標構(frame)ブラケット (`fb[]`).

  以下の定義に従って標構ブラケットを計算します:

         c          c         c        d     e
      ifb   = ( ifri    - ifri    ) ifr   ifr
         ab         d,e       e,d      a     b

  Package ctensor ·

#### 26.2.5 Algebraic classification

`ctensor`の(2004年11月時点で)新しい特長は 4次元時空計量のPetrov分類を計算する能力です。 この機能のデモンストレーションは、 ファイル `share/tensor/petrov.dem`参照してください。

関数: nptetrad ()

  Newman-Penroseヌルテトラド(null tetrad) (`np`)と上付き添字対応物 (`npi`)を計算します。 例えば、 `petrov`を参照してください。

  ヌルテトラドは 計量符号 (-,+,+,+)を持つ4次元直交標構計量が使われいるという仮定の上で 構成されます。 ヌルテトラドの成分は、 以下のように、 逆標構行列に関係します:

      np  = (fri  + fri ) / sqrt(2)
        1       1      2

      np  = (fri  - fri ) / sqrt(2)
        2       1      2

      np  = (fri  + %i fri ) / sqrt(2)
        3       3         4

      np  = (fri  - %i fri ) / sqrt(2)
        4       3         4

  Package ctensor ·

関数: psi (dis)

  5つの Newman-Penrose係数 `psi[0]`...`psi[4]`を計算します。 もし `dis`が `true`に設定されているなら、 係数が表示されます。 例は `petrov`を参照してください。

  これらの係数は 座標基底に関して、Weylテンソルから計算されます。 もし標構基底が使われるなら、 最初にWeylテンソルが座標基底に変換されます。 座標基底は計算に関して高価な手続きであり得ます。 この理由で、 いくつかの場合、 Weylテンソルを計算する前に まず座標基底を使うことはより都合がいいかも知れません。 しかし、 Newman-Penroseヌルテトラドを構成することは標構基底を要求することに注意してください。 それ故に、 重要な一連の計算は、標構基底で始めることができます。 標構基底は、後で (`cmetric`が自動的に計算する) `lg`と `ug`を計算するのに使われます。 この時点で、 Christoffel記号を計算し始める前に `cframe_flag`を falseに設定することで 座標基底に戻ることができます。 後の段階で標構基底に変えることは、 標構基底で計算したいくつか、座標基底でのいくつかと 2つを識別する方法がないまま、テンソルの混ざった状態で終わるかもしれないので、 矛盾する結果をもたらすかもしれません。

  Package ctensor ·

関数: petrov ()

  `psi[0]`...`psi[4]`で特徴付けられる 計量のPetrov分類を計算します。

  例えば、以下は Kerr計量の Petrov分類を得る方法を例示します:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) (cframe_flag:true,gcd:spmod,ctrgsimp:true,ratfac:true);
      (%o2)                                true
      (%i3) ct_coordsys(exteriorschwarzschild,all);
      (%o3)                                done
      (%i4) ug:invert(lg)$
      (%i5) weyl(false);
      (%o5)                                done
      (%i6) nptetrad(true);
      (%t6) np =

      [ sqrt(r - 2 m)           sqrt(r)                                 ]
      [---------------   ---------------------    0            0        ]
      [sqrt(2) sqrt(r)   sqrt(2) sqrt(r - 2 m)                          ]
      [                                                                 ]
      [ sqrt(r - 2 m)            sqrt(r)                                ]
      [---------------  - ---------------------   0            0        ]
      [sqrt(2) sqrt(r)    sqrt(2) sqrt(r - 2 m)                         ]
      [                                                                 ]
      [                                          r      %i r sin(theta) ]
      [       0                    0          -------   --------------- ]
      [                                       sqrt(2)       sqrt(2)     ]
      [                                                                 ]
      [                                          r       %i r sin(theta)]
      [       0                    0          -------  - ---------------]
      [                                       sqrt(2)        sqrt(2)    ]

                                   sqrt(r)         sqrt(r - 2 m)
      (%t7) npi = matrix([- ---------------------,---------------, 0, 0],
                            sqrt(2) sqrt(r - 2 m) sqrt(2) sqrt(r)

                sqrt(r)            sqrt(r - 2 m)
      [- ---------------------, - ---------------, 0, 0],
         sqrt(2) sqrt(r - 2 m)    sqrt(2) sqrt(r)

                 1               %i
      [0, 0, ---------, --------------------],
             sqrt(2) r  sqrt(2) r sin(theta)

                 1                 %i
      [0, 0, ---------, - --------------------])
             sqrt(2) r    sqrt(2) r sin(theta)

      (%o7)                                done
      (%i7) psi(true);
      (%t8)                              psi  = 0
                                            0

      (%t9)                              psi  = 0
                                            1

                                                m
      (%t10)                             psi  = --
                                            2    3
                                                r

      (%t11)                             psi  = 0
                                            3

      (%t12)                             psi  = 0
                                            4
      (%o12)                               done
      (%i12) petrov();
      (%o12)                                 D

  Petrov分類関数は以下の文献で発表されたアルゴリズムに基づいています。

  "Classifying geometries in general relativity: III Classification in practice" by Pollney, Skea, and d’Inverno, Class. Quant. Grav. 17 2885-2902 (2000).

  いくつかの簡単なテストケースを除いて、 2004年12月19日時点、実装はテストされていなく、 エラーを含みそうです。

  Package ctensor ·

#### 26.2.6 Torsion and nonmetricity

`ctensor`は ねじれ係数と非計量性係数を計算し、接続係数内に含める能力を持ちます。

ねじれ係数はゆーざーが供給するテンソル `tr`から計算されます。 `tr`は階数 (2,1)テンソルでなければいけません。 これから、 ねじれ係数 `kt`は以下の公式に従って計算されます:

                  m          m      m
           - g  tr   - g   tr   - tr   g
              im  kj    jm   ki     ij  km
    kt   = -------------------------------
      ijk                 2

      k     km
    kt   = g   kt
      ij         ijm

混合添字テンソルだけが計算され、配列 `kt`に格納されることに注意してください。

非計量性係数はユーザーが供給する非計量性ベクトル `nm`から計算されます。 これから、 非計量性係数 `nmc`は以下のように計算されます:

                 k    k        km
           -nm  D  - D  nm  + g   nm  g
       k      i  j    i   j         m  ij
    nmc  = ------------------------------
       ij                2

ここで、DはKroneckerのデルタを表します。

`ctorsion_flag`が `true`に設定されている時、 `kt`の値が `christof`で計算された 混合添字付き接続係数から引かれ、 `mcs`に格納されます。 同様に、もし `cnonmet_flag`が `true`に設定されているなら、 `nmc`の値が 混合添字付き接続係数から引かれます。

もし必要なら、 `christof`は、 `kt`と `nm`を計算するために 関数 `contortion`と `nonmetricity`をコールします。

関数: contortion (tr)

  ねじれテンソル trから(2,1)コントーション(contortion)係数を計算します。

  Package ctensor ·

関数: nonmetricity (nm)

  非計量性ベクトル nmから(2,1)非計量性係数を計算します。

  Package ctensor ·

#### 26.2.7 Miscellaneous features

関数: ctransform (M)

  任意の平方対称行列 M上で座標変換を実行する `ctensor` (成分テンソル)パッケージの関数。 ユーザーは変換を定義する函数を入力しなければいけません。 (以前`transform`と呼ばれていました。)

  Package ctensor ·

関数: findde (A, n)

  n次元の平方配列 A要素に対応する 独自の(unique)微分方程式(式)のリストを返します。 現在、 nは2か3を指定できます `deindex`は これらの独自の微分方程式に従う Aの添字を含む グローバルリストです。 2次元配列であるEinsteinテンソル (`ein`)に関して、 もし以下の例で計量に関して計算するなら、 `findde`は以下の独立微分方程式を与えます:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) derivabbrev:true;
      (%o2)                                true
      (%i3) dim:4;
      (%o3)                                  4
      (%i4) lg:matrix([a, 0, 0, 0], [ 0, x^2, 0, 0],
                                    [0, 0, x^2*sin(y)^2, 0], [0,0,0,-d]);
                                [ a  0       0        0  ]
                                [                        ]
                                [     2                  ]
                                [ 0  x       0        0  ]
      (%o4)                     [                        ]
                                [         2    2         ]
                                [ 0  0   x  sin (y)   0  ]
                                [                        ]
                                [ 0  0       0       - d ]
      (%i5) depends([a,d],x);
      (%o5)                            [a(x), d(x)]
      (%i6) ct_coords:[x,y,z,t];
      (%o6)                            [x, y, z, t]
      (%i7) cmetric();
      (%o7)                                done
      (%i8) einstein(false);
      (%o8)                                done
      (%i9) findde(ein,2);
                                                  2
      (%o9) [d  x - a d + d, 2 a d d    x - a (d )  x - a  d d  x
              x                     x x         x        x    x

                                                    2          2
                                + 2 a d d   - 2 a  d , a  x + a  - a]
                                         x       x      x
      (%i10) deindex;
      (%o10)                     [[1, 1], [2, 2], [4, 4]]

  Package ctensor ·

関数: cograd ()

  スカラ関数の 共変勾配を計算します。 `contragrad`が以下で例示する例のように ユーザーは対応するベクトル名を選べます。

  Package ctensor ·

関数: contragrad ()

  スカラ関数の反変勾配を計算します。 Computes the contravariant gradient of a scalar function allowing Schwarzschild計量に関する以下の例が例示するように ユーザーは対応するベクトル名を選べます:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) derivabbrev:true;
      (%o2)                                true
      (%i3) ct_coordsys(exteriorschwarzschild,all);
      (%o3)                                done
      (%i4) depends(f,r);
      (%o4)                               [f(r)]
      (%i5) cograd(f,g1);
      (%o5)                                done
      (%i6) listarray(g1);
      (%o6)                            [0, f , 0, 0]
                                            r
      (%i7) contragrad(f,g2);
      (%o7)                                done
      (%i8) listarray(g2);
                                     f  r - 2 f  m
                                      r        r
      (%o8)                      [0, -------------, 0, 0]
                                           r

  Package ctensor ·

関数: dscalar ()

  依存性が関数に宣言されるとすぐ、 スカラ関数のテンソルd’Alembert演算子を計算します。 例えば:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) derivabbrev:true;
      (%o2)                                true
      (%i3) ct_coordsys(exteriorschwarzschild,all);
      (%o3)                                done
      (%i4) depends(p,r);
      (%o4)                               [p(r)]
      (%i5) factor(dscalar(p));

                                2
                          p    r  - 2 m p    r + 2 p  r - 2 m p
                           r r           r r        r          r
      (%o5)               --------------------------------------
                                             2
                                            r

  Package ctensor ·

関数: checkdiv ()

  ベクトル場(発散)の対応するn個の成分を印字することで (最初の添字が共変でなければいけない)混合二階テンソルの共変発散を計算します。 ここでn = `dim`です。 もし関数の引数が `g`なら、 Einsteinテンソルの発散が形成され、零にならなければいけません。 加えて、発散(ベクトル)は 配列名 `div`を与えられます。

  Package ctensor ·

関数: cgeodesic (dis)

  `ctensor` (成分テンソル)パッケージの関数。 `cgeodesic`は 与えられた計量での運動の測地方程式を計算します。 それらは配列 `geod[i]`に格納されます。 もし引数 disが `true`なら、 これらの方程式が表示されます。

  Package ctensor ·

関数: bdvac (f)

  Brans- Dicke重力理論の 真空場の方程式の 共変成分を生成します。 スカラ場は引数 fで指定されます。 fは、 例えば、`'p(x)`のように、 関数依存性を持つ(クォートされた)関数名でなければいけません。

  二階共変場テンソルの成分は配列 `bd`で表されます。

  Package ctensor ·

関数: invariant1 ()

  R^2の不変密度に関する 混合Euler- Lagrangeテンソル(場の方程式)を生成します。 場の方程式は `inv1`と名付けられた配列の成分です。

  Package ctensor ·

関数: invariant2 ()

  *** NOT YET IMPLEMENTED ***

  `ric[i,j]*uriem[i,j]`の不変密度に関する 混合Euler- Lagrangeテンソル(場の方程式)を生成します。 場の方程式は `inv2`と名付けられた配列の成分です。

  Package ctensor ·

関数: bimetric ()

  *** NOT YET IMPLEMENTED ***

  Rosenの二計量(bimetric)理論の場の方程式を生成します。 場の方程式は `rosen`と名付けられた配列の成分です。

  Package ctensor ·

#### 26.2.8 Utility functions

関数: diagmatrixp (M)

  もし Mが対角行列か対角 (2D) 配列なら `true`を返します。

  Package ctensor ·Predicate functions ·

関数: symmetricp (M)

  もし Mが対称行列か対称 (2D) 配列なら `true`を返します。

  Package ctensor ·Predicate functions ·

関数: ntermst (f)

  ユーザーに 二重に下付き添字テンソル(配列) fの「サイズ」のquick pictureを与えます。 二番目の要素が 一番目の要素が指定する成分のNTERMSに対応する2つの要素のリストを印字します。 この方法で、 非零式をすばやく見つけて整理を試みることが可能です。

  Package ctensor ·

関数: cdisplay (ten)

  多次元配列で表されるように、 テンソル tenの要素すべてを表示します。 他のタイプの変数はもちろん、 階数0と1のテンソルが `ldisplay`を使ったように表示されます。 階数2のテンソルは 2次元行列として表示され、 より高い階数のテンソルは2次元行列のリストとして表示されます。 例えば、 Schwarzschild計量のRiemannテンソルは以下のように見ることができます:

      (%i1) load("ctensor");
      (%o1)       /share/tensor/ctensor.mac
      (%i2) ratfac:true;
      (%o2)                                true
      (%i3) ct_coordsys(exteriorschwarzschild,all);
      (%o3)                                done
      (%i4) riemann(false);
      (%o4)                                done
      (%i5) cdisplay(riem);
                [ 0               0                   0           0     ]
                [                                                       ]
                [                              2                        ]
                [      3 m (r - 2 m)   m    2 m                         ]
                [ 0  - ------------- + -- - ----      0           0     ]
                [            4          3     4                         ]
                [           r          r     r                          ]
                [                                                       ]
      riem    = [                                m (r - 2 m)            ]
          1, 1  [ 0               0              -----------      0     ]
                [                                     4                 ]
                [                                    r                  ]
                [                                                       ]
                [                                           m (r - 2 m) ]
                [ 0               0                   0     ----------- ]
                [                                                4      ]
                [                                               r       ]

                                      [    2 m (r - 2 m)       ]
                                      [ 0  -------------  0  0 ]
                                      [          4             ]
                                      [         r              ]
                           riem     = [                        ]
                               1, 2   [ 0        0        0  0 ]
                                      [                        ]
                                      [ 0        0        0  0 ]
                                      [                        ]
                                      [ 0        0        0  0 ]

                                      [         m (r - 2 m)    ]
                                      [ 0  0  - -----------  0 ]
                                      [              4         ]
                                      [             r          ]
                           riem     = [                        ]
                               1, 3   [ 0  0        0        0 ]
                                      [                        ]
                                      [ 0  0        0        0 ]
                                      [                        ]
                                      [ 0  0        0        0 ]

                                      [            m (r - 2 m) ]
                                      [ 0  0  0  - ----------- ]
                                      [                 4      ]
                                      [                r       ]
                           riem     = [                        ]
                               1, 4   [ 0  0  0        0       ]
                                      [                        ]
                                      [ 0  0  0        0       ]
                                      [                        ]
                                      [ 0  0  0        0       ]

                                     [       0         0  0  0 ]
                                     [                         ]
                                     [       2 m               ]
                                     [ - ------------  0  0  0 ]
                          riem     = [    2                    ]
                              2, 1   [   r  (r - 2 m)          ]
                                     [                         ]
                                     [       0         0  0  0 ]
                                     [                         ]
                                     [       0         0  0  0 ]

                   [     2 m                                         ]
                   [ ------------  0        0               0        ]
                   [  2                                              ]
                   [ r  (r - 2 m)                                    ]
                   [                                                 ]
                   [      0        0        0               0        ]
                   [                                                 ]
        riem     = [                         m                       ]
            2, 2   [      0        0  - ------------        0        ]
                   [                     2                           ]
                   [                    r  (r - 2 m)                 ]
                   [                                                 ]
                   [                                         m       ]
                   [      0        0        0         - ------------ ]
                   [                                     2           ]
                   [                                    r  (r - 2 m) ]

                                      [ 0  0       0        0 ]
                                      [                       ]
                                      [            m          ]
                                      [ 0  0  ------------  0 ]
                           riem     = [        2              ]
                               2, 3   [       r  (r - 2 m)    ]
                                      [                       ]
                                      [ 0  0       0        0 ]
                                      [                       ]
                                      [ 0  0       0        0 ]

                                      [ 0  0  0       0       ]
                                      [                       ]
                                      [               m       ]
                                      [ 0  0  0  ------------ ]
                           riem     = [           2           ]
                               2, 4   [          r  (r - 2 m) ]
                                      [                       ]
                                      [ 0  0  0       0       ]
                                      [                       ]
                                      [ 0  0  0       0       ]

                                            [ 0  0  0  0 ]
                                            [            ]
                                            [ 0  0  0  0 ]
                                            [            ]
                                 riem     = [ m          ]
                                     3, 1   [ -  0  0  0 ]
                                            [ r          ]
                                            [            ]
                                            [ 0  0  0  0 ]

                                            [ 0  0  0  0 ]
                                            [            ]
                                            [ 0  0  0  0 ]
                                            [            ]
                                 riem     = [    m       ]
                                     3, 2   [ 0  -  0  0 ]
                                            [    r       ]
                                            [            ]
                                            [ 0  0  0  0 ]

                                     [   m                      ]
                                     [ - -   0   0       0      ]
                                     [   r                      ]
                                     [                          ]
                                     [        m                 ]
                                     [  0   - -  0       0      ]
                          riem     = [        r                 ]
                              3, 3   [                          ]
                                     [  0    0   0       0      ]
                                     [                          ]
                                     [              2 m - r     ]
                                     [  0    0   0  ------- + 1 ]
                                     [                 r        ]

                                          [ 0  0  0    0   ]
                                          [                ]
                                          [ 0  0  0    0   ]
                                          [                ]
                               riem     = [            2 m ]
                                   3, 4   [ 0  0  0  - --- ]
                                          [             r  ]
                                          [                ]
                                          [ 0  0  0    0   ]

                                      [       0        0  0  0 ]
                                      [                        ]
                                      [       0        0  0  0 ]
                                      [                        ]
                           riem     = [       0        0  0  0 ]
                               4, 1   [                        ]
                                      [      2                 ]
                                      [ m sin (theta)          ]
                                      [ -------------  0  0  0 ]
                                      [       r                ]

                                      [ 0        0        0  0 ]
                                      [                        ]
                                      [ 0        0        0  0 ]
                                      [                        ]
                           riem     = [ 0        0        0  0 ]
                               4, 2   [                        ]
                                      [         2              ]
                                      [    m sin (theta)       ]
                                      [ 0  -------------  0  0 ]
                                      [          r             ]

                                    [ 0  0          0          0 ]
                                    [                            ]
                                    [ 0  0          0          0 ]
                                    [                            ]
                         riem     = [ 0  0          0          0 ]
                             4, 3   [                            ]
                                    [                2           ]
                                    [         2 m sin (theta)    ]
                                    [ 0  0  - ---------------  0 ]
                                    [                r           ]

                 [        2                                             ]
                 [   m sin (theta)                                      ]
                 [ - -------------         0                0         0 ]
                 [         r                                            ]
                 [                                                      ]
                 [                         2                            ]
                 [                    m sin (theta)                     ]
      riem     = [        0         - -------------         0         0 ]
          4, 4   [                          r                           ]
                 [                                                      ]
                 [                                          2           ]
                 [                                   2 m sin (theta)    ]
                 [        0                0         ---------------  0 ]
                 [                                          r           ]
                 [                                                      ]
                 [        0                0                0         0 ]

      (%o5)                                done

  Package ctensor ·

関数: deleten (L, n)

  n番目の要素を削除したLから成る新しいリストを返します。

  Package ctensor ·

#### 26.2.9 Variables used by `ctensor`

オプション変数: dim

  デフォルト値: 4

  `ctensor` (成分テンソル)パッケージのオプション。 `dim`は デフォルト4の多様体の次元です。 コマンド `dim: n`は 次元を任意の別の値 `n`に再設定します。

  Package ctensor ·

オプション変数: diagmetric

  デフォルト値: `false`

  `ctensor` (成分テンソル)パッケージのオプション。 もし `diagmetric`が `true`なら、 特殊なルーチンが 計量の対角性を考慮して (計量テンソルを明示的に含む)幾何的オブジェクトすべてを 計算します。 もちろん、実行時間短縮になります。 注意: もし対角計量が指定されたら、 `csetup`は自動的にこのオプションを設定します。

  Package ctensor ·

オプション変数: ctrgsimp

  テンソルを計算する時、三角関数整理を使うようにします。 現在、 `ctrgsimp`は 動標構を含む計算だけに影響します。

  Package ctensor ·Simplification flags and variables ·

オプション変数: cframe_flag

  計算を ホロノミック(holonomic)計量と対比して動標構に関係して実行するようにします。 標構は逆標構配列 `fri`と標構計量 `lfg`で定義されます。 Cartesian標構を使う計算に関して、 `lfg`は適切な次元の単位行列でなければいけません; Lorentz標構での計算に関して、 `lfg`は適切な符号を持たなければいけません。

  Package ctensor ·

オプション変数: ctorsion_flag

  コントーションテンソルが 接続係数の計算に含まれるようにします。 コントーションテンソル自体は ユーザーが提供するテンソル `tr`から `contortion`によって計算されます。

  Package ctensor ·

オプション変数: cnonmet_flag

  非計量性係数が 接続係数の計算に含まれるようにします。 コントーションテンソルは ユーザーが提供する非計量性ベクトル `nm`から 関数 `nonmetricity`によって計算されます。

  Package ctensor ·

オプション変数: ctayswitch

  もし `true`に設定されているなら、 いくつかの `ctensor`計算が Taylor級数展開を使って実行されるようにします。 現在、 `christof`, `ricci`, `uricci`, `einstein`, `weyl`がこの設定を考慮します。

  Package ctensor ·

オプション変数: ctayvar

  `ctayswitch`が `true`に設定されているなら Taylor級数展開で使われる変数。

  Package ctensor ·

オプション変数: ctaypov

  `ctayswitch`が `true`に設定されている時 Taylor級数展開で使われる最大べき数

  Package ctensor ·

オプション変数: ctaypt

  `ctayswitch`が `true`に設定されている時 Taylor級数展開が実行される点。

  Package ctensor ·

システム変数: gdet

  計量テンソル `lg`の行列式。 `cframe_flag`が `false`に設定されている時、 `cmetric`によって計算されます。

  Package ctensor ·

オプション変数: ratchristof

  `christof`が有理整理を適用するようにします。

  Package ctensor ·

オプション変数: rateinstein

  デフォルト値: `true`

  もし `true`なら、 Einsteinテンソルの非零成分上で 有理整理が実行されます; もし `ratfac`が `true`なら、 成分は因数分解もされます。

  Package ctensor ·

オプション変数: ratriemann

  デフォルト値: `true`

  Riemannテンソルの整理を制御するスイッチの1つです; もし `true`なら、 有理整理がされます; もし `ratfac`が `true`なら、 成分それぞれは因数分解もされます。

  Package ctensor ·

オプション変数: ratweyl

  デフォルト値: `true`

  もし `true`なら、 このスイッチは, `weyl`関数が Weylテンソルの値に有理整理を適用するようにします。 もし`ratfac`が `true`なら、 成分は因数分解もされます。

  Package ctensor ·

変数: lfg

  共変標構計量。 デフォルトでは、 符号 (+,+,+,-)を持つ4次元Lorentz標構に初期化されます。 `cframe_flag`が `true`の時使われます。

  Package ctensor ·

変数: ufg

  逆標構計量。 `cframe_flag`が `true`に設定されているなら、 `cmetric`がコールされた時 `lfg`から計算されます。

  Package ctensor ·

変数: riem

  (3,1) Riemannテンソル。 関数 `riemann`が呼び出された時計算されます。 添字順序についての情報については、 `riemann`の記述を参照してください。

  もし `cframe_flag`が `true`なら、 `riem`は 共変Riemannテンソル `lriem`から計算されます。

  Package ctensor ·

変数: lriem

  共変Riemannテンソル。 `lriemann`が計算します。

  Package ctensor ·

変数: uriem

  反変Riemannテンソル。

  Package ctensor ·

変数: ric

  混合Ricciテンソル。 `ricci`が計算します。

  Package ctensor ·

変数: uric

  反変Ricciテンソル。 `ricci`が計算します。

  Package ctensor ·

変数: lg

  計量テンソル。 このテンソルは 他の計算が実行される前に (`dim`掛け `dim`行列として)指定されなければいけません。

  Package ctensor ·

変数: ug

  計量テンソルの逆元。 `cmetric`が計算します。

  Package ctensor ·

変数: weyl

  Weylテンソル。 `weyl`が計算します。

  Package ctensor ·

変数: fb

  `frame_bracket`によって計算される、 標構ブラケット係数。

  Package ctensor ·

変数: kinvariant

  Kretchmann不変量。 `rinvariant`が計算します。

  Package ctensor ·

変数: np

  Newman-Penroseヌルテトラド。 `nptetrad`が計算します。

  Package ctensor ·

変数: npi

  上付き添字 Newman-Penroseヌルテトラド。 `nptetrad`が計算します。 `ug.np`として定義されます。 積 `np.transpose(npi)`は定数です:

      (%i39) trigsimp(np.transpose(npi));
                                    [  0   - 1  0  0 ]
                                    [                ]
                                    [ - 1   0   0  0 ]
      (%o39)                        [                ]
                                    [  0    0   0  1 ]
                                    [                ]
                                    [  0    0   1  0 ]

  Package ctensor ·

変数: tr

  ユーザーが提供するねじれを表す階数3のテンソル `contortion`が使います。

  Package ctensor ·

変数: kt

  コントーションテンソル。 `contortion`が `tr`から計算します。

  Package ctensor ·

変数: nm

  ユーザーが提供する非計量性ベクトル。 `nonmetricity`が使います。

  Package ctensor ·

変数: nmc

  `nonmetricity`が `nm`から計算する 非計量性係数。

  Package ctensor ·

システム変数: tensorkill

  テンソルパッケージが初期化されたかを示す変数。 `csetup`が設定し使います。 `init_ctensor`が再設定します。

  Package ctensor ·

オプション変数: ct_coords

  デフォルト値: `[]`

  `ctensor` (成分テンソル)パッケージのオプション。 `ct_coords`は座標のリストを含みます。 関数 `csetup`がコールされる時通常定義される一方、 割り当て `ct_coords: [j1, j2, ..., jn]`で座標を再定義できます。 ここで、jは新しい座標名です。 `csetup`も参照してください。

  Package ctensor ·

#### 26.2.10 Reserved names

`ctensor`パッケージによって 以下の名前が内部的に使われます。 なので再定義してはいけません:

      Name         Description
      ---------------------------------------------------------------------
      _lg()        Evaluates to lfg if frame metric used, lg otherwise
      _ug()        Evaluates to ufg if frame metric used, ug otherwise
      cleanup()    Removes items drom the deindex list
      contract4()  Used by psi()
      filemet()    Used by csetup() when reading the metric from a file
      findde1()    Used by findde()
      findde2()    Used by findde()
      findde3()    Used by findde()
      kdelt()      Kronecker-delta (not generalized)
      newmet()     Used by csetup() for setting up a metric interactively
      setflags()   Used by init_ctensor()
      readvalue()
      resimp()
      sermet()     Used by csetup() for entering a metric as Taylor-series
      txyzsum()
      tmetric()    Frame metric, used by cmetric() when cframe_flag:true
      triemann()   Riemann-tensor in frame base, used when cframe_flag:true
      tricci()     Ricci-tensor in frame base, used when cframe_flag:true
      trrc()       Ricci rotation coefficients, used by christof()
      yesp()

#### 26.2.11 Changes

2004年11月に `ctensor`パッケージは広範囲に渡って書き直されました。 多くの関数と変数は、パッケージにMacsymaの商用版との互換性を持たせるために、 リネームされました。

      New Name     Old Name        Description
      ---------------------------------------------------------------------
      ctaylor()    DLGTAYLOR()     Taylor-series expansion of an expression
      lgeod[]      EM              Geodesic equations
      ein[]        G[]             Mixed Einstein-tensor
      ric[]        LR[]            Mixed Ricci-tensor
      ricci()      LRICCICOM()     Compute the mixed Ricci-tensor
      ctaypov      MINP            Maximum power in Taylor-series expansion
      cgeodesic()  MOTION          Compute geodesic equations
      ct_coords    OMEGA           Metric coordinates
      ctayvar      PARAM           Taylor-series expansion variable
      lriem[]      R[]             Covariant Riemann-tensor
      uriemann()   RAISERIEMANN()  Compute the contravariant Riemann-tensor
      ratriemann   RATRIEMAN       Rational simplif. of the Riemann-tensor
      uric[]       RICCI[]         Contravariant Ricci-tensor
      uricci()     RICCICOM()      Compute the contravariant Ricci-tensor
      cmetric()    SETMETRIC()     Set up the metric
      ctaypt       TAYPT           Point for Taylor-series expansion
      ctayswitch   TAYSWITCH       Taylor-series setting switch
      csetup()     TSETUP()        Start interactive setup session
      ctransform() TTRANSFORM()    Interactive coordinate transformation
      uriem[]      UR[]            Contravariant Riemann-tensor
      weyl[]       W[]             (3,1) Weyl-tensor

Previous: Introduction to ctensor, Up: ctensor [Contents][Index]