Mathematicaでスカラー曲率リッチテンソルとクリストッフェル記号を計算する方法は?



How Calculate Scalar Curvature Ricci Tensor



解決:

総論

一般相対性理論では、4次元のローレンツ多様体で動作します。つまり、署名$(+、-、-、-)$または$(-、+、+、+)$の計量テンソル$ g $があります。これらの署名は数学的に同等であり、前者を選択するための物理的に関連する理由がいくつかあるにもかかわらず、特定の非常に形式的な側面のために後者を選択します。任意の点の近傍で、ローカルチャート$ xx =(x ^ {1}、x ^ {2}、x ^ {3}、x ^ {4})$を選択します。ここで、計量テンソルは実関数$で表されます。 g _ { alpha beta}(x ^ { mu})$ ie $ g = g _ { alpha beta}(x ^ { mu})dx ^ { alpha} otimes dx ^ { beta} $ (テンソルを表すための従来の$ 0,1,2,3 $とは異なり、インデックスを$ 1,2,3,4 $で列挙します。Mathematicaによるテーブルとそのエントリへのアクセスパート例:[[1,1]])。ここで、アインシュタインの縮約記を仮定すると、次のオブジェクトが必要です。

  • 逆距離$ g ^ { mu nu} $ :(つまり、$ g ^ { mu nu} g _ { nu alpha} = delta ^ { mu} _ { alpha}) quad $(InverseMetric [g] [[μ、ν]])
  • クリストッフェル記号(第2種)$ Gamma ^ { mu} _ { phantom { mu} nu sigma} = frac {1} {2} g ^ { mu alpha} left { frac { partial g _ { alpha nu}} { partial x ^ { sigma}} + frac { partial g _ { alpha sigma}} { partial x ^ { nu}}- frac { partial g _ { nu sigma}} { partial x ^ { alpha}} right } quad $(ChristoffelSymbol [g、xx] [[μ、ν、σ]])
  • リーマンテンソル$ R ^ { mu} _ { phantom { mu} nu lambda sigma} = partial _ { lambda} Gamma ^ { mu} _ { phantom { mu} nu sigma}- partial _ { sigma} Gamma ^ { mu} _ { phantom { mu} nu lambda} + Gamma ^ { mu} _ { phantom { mu} rho lambda } Gamma ^ { rho} _ { phantom { mu} nu sigma}- Gamma ^ { mu} _ { phantom { mu} rho sigma} Gamma ^ { rho} _ {ファントム{ mu} nu ラムダ} quad $



    ((リーマン曲率テンソル[g、xx] [[μ、ν、λ、σ]])

  • リッチテンソル$ R _ { mu nu} = R ^ { lambda} _ { phantom { lambda} mu lambda nu} quad $(RicciTensor [g、xx] [[μ、ν]])



  • リッチスカラー$ R = R ^ { mu} _ { phantom { lambda} mu} quad $(RicciScalar [g、xx])

簡単な実装

次の順序でジオメトリックオブジェクトを定義すると便利です(これはパッケージを開発するためのフレームになる場合があります)。

InverseMetric [g _]:= Simplify [Inverse [g]] ChristoffelSymbol [g_、xx _]:= Block [{n、ig、res}、n = 4; ig = InverseMetric [g]; res = Table [(1/2)* Sum [ig [[i、s]] *(-D [g [[j、k]]、xx [[s]]] + D [g [[j、s ]]、xx [[k]]] + D [g [[s、k]]、xx [[j]]])、{s、1、n}]、{i、1、n}、{j 、1、n}、{k、1、n}]; Simplify [res]] RiemannTensor [g_、xx _]:= Block [{n、Chr、res}、n = 4; Chr = ChristoffelSymbol [g、xx]; res = Table [D [Chr [[i、k、m]]、xx [[l]]]-D [Chr [[i、k、l]]、xx [[m]]] + Sum [Chr [ [i、s、l]] * Chr [[s、k、m]]、{s、1、n}]-合計[Chr [[i、s、m​​]] * Chr [[s、k、l ]]、{s、1、n}]、{i、1、n}、{k、1、n}、{l、1、n}、{m、1、n}]; Simplify [res]] RicciTensor [g_、xx _]:= Block [{Rie、res、n}、n = 4; Rie = RiemannTensor [g、xx]; res = Table [Sum [Rie [[s、i、s、j]]、{s、1、n}]、{i、1、n}、{j、1、n}]; Simplify [res]] RicciScalar [g_、xx _]:= Block [{Ricc、ig、res、n}、n = 4; Ricc = RicciTensor [g、xx]; ig = InverseMetric [g]; res = Sum [ig [[s、i]] Ricc [[s、i]]、{s、1、n}、{i、1、n}];単純化[res]]

この方法に従って、別の興味深い幾何学的オブジェクトを定義できます。ワイルテンソル$ C _ { mu nu lambda sigma} = R _ { mu nu lambda sigma}- left(g _ { mu [ lambda} R _ { nu] sigma} -g_ { nu [ lambda} R _ { sigma] mu} right)+ frac {1} {3} R g _ { mu [ lambda} g _ { nu] sigma} $

静的な球対称時空のためのシュワルツシルトのような仮説

具体的な例から始めるために、4次元静的球対称ローレンツ時空の座標と計量テンソルを定義しましょう。



xx = {t、x、θ、}}; g = {{-E ^(2ν[x])、0、0、0}、{0、E ^(2λ[x])、0、0}、{0、0、x ^ 2、0 }、{0、0、0、x ^ 2 Sin [θ] ^ 2}};

それでは計算してみましょうRicciScalar:

RicciScalar [g、xx]

ここに画像の説明を入力してください

解決したい場合真空時空(シュワルツシルト時空など)のアインシュタイン方程式は、方程式を解く必要があります。RicciTensor [g、xx] == 0。

RicciTensor [g、xx]

ここに画像の説明を入力してください

ここで、2つの独立した方程式を選択する必要があります。

eqs = {λ '[x](2 +xν' [x])-x(ν '[x] ^ 2 +ν' '[x])、-1 + E ^(2λ[x])+ x(λ '[x]-ν' [x])};

そして、常微分方程式のこのシステムを解きます:

eqs [[1]] == 0; eqs [[2]] == 0;

適切な境界条件で。シュワルツシルトソリューションの場合、g-> g0無限大、ここでg0はミンコフスキー計量です。

ド・ジッター時空

たとえばを見つけましょう。ド・ジッター時空のスカラー曲率(aは定数です):

Clear [g] g = {{-(1-x ^ 2 / a ^ 2)、0、0、0}、{0、1 /(1-x ^ 2 / a ^ 2)、0、0}、 {0、0、x ^ 2、0}、{0、0、0、x ^ 2Sin [θ] ^ 2}}; RicciScalar [g、xx] 
12 / a ^ 2

したがって、ド・ジッター時空は一定のスカラー曲率を持っていることを示しました。


私はグーグル経由でこの質問に出くわしました。私を使用していただきありがとうございますTensoriaCalcパッケージ!

私の回答はおそらく遅すぎますが、あなたが引用した問題は信じています

シンボルテンソルは保護されています。
シンボルTensorTypeは保護されています。
シンボルTensorNameは保護されています。

あなたがロードしたからですTensoriaCalcが同じカーネルセッションで複数回。

パッケージを書くとき、私はしなければなりませんでしたパッケージで使用されているすべての記号を保護します。テンソル、メトリックなど。これは、外部ユーザーがそれらの定義を変更できないことを意味します。そうしないと、不整合が発生します。これがロードする理由ですTensoriaCalcは、本質的にこれらのシンボルをもう一度定義しようとしているため、エラーが複数回発生します。

お役に立てれば。


これはテンソルを計算するためのスターターかもしれません。

partialDer [T_、vars _]:= D [T、#]&/ @ vars // christoffelSymbols [metric_、coord _]:= Module [{dg = partialDer [metric、coord]、inverse = Simplify [Inverse [metric]] }、inverse。(Transpose [dg、{2、1、3}] + Transpose [dg、{3、2、1}] --dg)/ 2 //簡略化] curvTensor [christ_、var _]:= Module [{ temp1、temp2、i、h、j、k、s、n}、n =長さ[var]; temp1 [i_、h_、j_、k _]:= D [christ [[i、h、j]]、var [[k]]]; temp2 [i_、h_、j_、k _]:= temp1 [i、h、k、j] -temp1 [i、h、j、k] + Sum [christ [[s、h、k]] christ [[i 、s、j]]-christ [[s、h、j]] christ [[i、s、k]]、{s、n}]; Simplify [Table [temp2 [i、h、j、k]、{i、n}、{h、n}、{j、n}、{k、n}]]] ricciTensor [curv _]:= Module [{ k、j、n}、n =長さ[curv [[1、1]]]; Table [Sum [curv [[k、i、k、j]]、{k、n}]、{i、n}、{j、n}] // ExpandAll //簡略化]

使用される関数の使用法は次のとおりです。

partialDer :: useage = 'partialDer [T、vars]は、テンソルTの偏導関数!( * SubscriptBox [( [PartialD] )、(i )] )Tのリストを作成しますに関してリスト 'vars 'の変数。生成されたリストの最初のインデックスは微分インデックスになります。 christoffelSymbols :: useage = 'christoffelSymbols [metric、vars]は、リスト変数の変数とメトリック Tensorメトリックを持つ Christoffel-Symbols christ  [LeftDoubleBracket] i、j、k   [RightDoubleBracket]を提供します。最初のインデックスは 'upper 'インデックスになります。 curvTensor :: useage = 'curvTensor [christ、vars]は、変数varsを使用してChristoffel シンボル' christ  'を取得し、リーマン曲率テンソルを計算します。最初のインデックスは\ 'upper \ [CloseCurlyDoubleQuote]インデックスになります。 ricciTensor :: useage = 'ricciTensor [curv]はRiemanncurvarture  tensor ' curv  'を取り、Ricciテンソル'を計算します

まず、計量テンソルを与える必要があります gM および変数リスト だれの を使用してから、クリストッフェル記号、リーマン曲率テンソル、およびリッチテンソルを計算します。

vars = {u、v}; gM = {{1、0}、{0、Sin [u] ^ 2}}; christ = christoffelSymbols [gM、vars] curv = curvTensor [christ、vars] ricciTensor [curv]

出力:

{{{0、0}、{0、-Cos [u] Sin [u]}}、{{0、Cot [u]}、{Cot [u]、0}}}

{{{{0、0}、{0、0}}、{{0、Sin [u] ^ 2}、{-Sin [u] ^ 2、0}}}、{{{0、-1} 、{1、0}}、{{0、0}、{0、0}}}}

{{1、0}、{0、Sin [u] ^ 2}}

これは、3次元および4次元のテンソルでも機能します。例を小さくしたかっただけです。