Toggle navigation
Egison
ドキュメント
デモ
オンライン・デモ
ポーカーの役判定
麻雀の上がり判定
双子素数の列挙
ツリー
グラフ
3-SATを解く乱択アルゴリズム
時系列データ解析
オンライン・ツール
オンライン Egison
オンライン・チュートリアル
数式処理
ブログ
コミュニティ
三次元超球面のリーマン曲率テンソル
Nov 30 2016
以下のコードは、`S^3`の
リーマン曲率テンソル
を計算しています。
declare symbol r, θ, φ, ψ: MathExpr -- Parameters def x : Vector MathExpr := [| θ, φ, ψ |] def X : Vector MathExpr := [| r * cos θ , r * sin θ * cos φ , r * sin θ * sin φ * cos ψ , r * sin θ * sin φ * sin ψ |] -- Local basis def e_i_j : Matrix MathExpr := ∂/∂ X_j x~i -- Metric tensors def g_i_j : Matrix MathExpr := generateTensor (\[x, y] -> V.* e_x_# e_y_#) [3, 3] --def g_i_j : Matrix MathExpr := generateTensor (\[a, b] -> V.* e_a e_b) [3, 3] def g~i~j : Matrix MathExpr := M.inverse g_#_# assertEqual "Metric tensor g_#_#" g_#_# [| [| r^2, 0, 0 |], [| 0, r^2 * (sin θ)^2, 0 |], [| 0, 0, r^2 * (sin θ)^2 * (sin φ)^2 |] |]_#_# -- Christoffel symbols def Γ_i_j_k : Tensor MathExpr := (1 / 2) * (∂/∂ g_i_k x~j + ∂/∂ g_i_j x~k - ∂/∂ g_j_k x~i) def Γ~i_j_k : Tensor MathExpr := withSymbols [m] g~i~m . Γ_m_j_k assertEqual "Christoffel symbols of the second kind Γ~1_#_#" Γ~1_#_# [| [| 0, 0, 0 |], [| 0, -1 * sin θ * cos θ, 0 |], [| 0, 0, -1 * sin θ * cos θ * (sin φ)^2 |] |]_#_# assertEqual "Christoffel symbols of the second kind Γ~2_#_#" Γ~2_#_# [| [| 0, (cos θ) / (sin θ), 0 |], [| (cos θ) / (sin θ), 0, 0 |], [| 0, 0, -1 * sin φ * cos φ |] |]_#_# assertEqual "Christoffel symbols of the second kind Γ~3_#_#" Γ~3_#_# [| [| 0, 0, (cos θ) / (sin θ) |], [| 0, 0, (cos φ) / (sin φ) |], [| (cos θ) / (sin θ), (cos φ) / (sin φ), 0 |] |]_#_# -- Riemann curvature def R~i_j_k_l : Tensor MathExpr := withSymbols [m] ∂/∂ Γ~i_j_l x~k - ∂/∂ Γ~i_j_k x~l + Γ~m_j_l . Γ~i_m_k - Γ~m_j_k . Γ~i_m_l assertEqual "Riemann curvature R~#_#_1_1" R~#_#_1_1 [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_1_2" R~#_#_1_2 [| [| 0, (sin θ)^2, 0 |], [| -1, 0, 0 |], [| 0, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_1_3" R~#_#_1_3 [| [| 0, 0, (sin θ)^2 * (sin φ)^2 |], [| 0, 0, 0 |], [| -1, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_2_1" R~#_#_2_1 [| [| 0, -1 * (sin θ)^2, 0 |], [| 1, 0, 0 |], [| 0, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_2_2" R~#_#_2_2 [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_2_3" R~#_#_2_3 [| [| 0, 0, 0 |], [| 0, 0, (sin θ)^2 * (sin φ)^2 |], [| 0, -1 * (sin θ)^2, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_3_1" R~#_#_3_1 [| [| 0, 0, -1 * (sin θ)^2 * (sin φ)^2 |], [| 0, 0, 0 |], [| 1, 0, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_3_2" R~#_#_3_2 [| [| 0, 0, 0 |], [| 0, 0, -1 * (sin θ)^2 * (sin φ)^2 |], [| 0, (sin θ)^2, 0 |] |]~#_# assertEqual "Riemann curvature R~#_#_3_3" R~#_#_3_3 [| [| 0, 0, 0 |], [| 0, 0, 0 |], [| 0, 0, 0 |] |]~#_# -- Ricci curvature def Ric_i_j : Tensor MathExpr := withSymbols [m] sum (contract R~m_i_m_j) assertEqual "Ricci curvature Ric_#_#" Ric_#_# [| [| 2, 0, 0 |], [| 0, 2 * (sin θ)^2, 0 |], [| 0, 0, 2 * (sin θ)^2 * (sin φ)^2 |] |]_#_# -- Scalar curvature def scalarCurvature : MathExpr := withSymbols [i, j] g~i~j . Ric_i_j assertEqual "scalar curvature" scalarCurvature (6 / r^2)
リンク
Egison 数学ノート目次に戻る
This website in other langauge:
English
,
日本語