有没有办法将对称SymPy矩阵转换为双形式?
当我尝试使用
时sym.diffgeom.metric_to_Christoffel_1st(expr)
以下矩阵
Matrix([[a**2/(cos(theta) - cosh(eta))**2, 0, 0],
[0, a**2/(cos(theta) - cosh(eta))**2, 0],
[0, 0, a**2*sinh(eta)**2/(cos(theta) - cosh(eta))**2]])
我收到错误
ValueError: The input expression is not a two-form.
矩阵表达式是笛卡尔坐标和环形坐标之间转换的度量。当我尝试在其他sympy.diffgeom.metric_to_*
函数上使用指标时,我得到了同样的错误。
答案 0 :(得分:1)
假设您的指标矩阵存储在变量 m 中,您可以执行以下操作:
diff_forms = your_coord_system.base_oneforms()
metric_diff_form = sum([TensorProduct(di, dj)*m[i, j] for i, di in enumerate(diff_forms) for j, dj in enumerate(diff_forms)])
请注意,对于单一形式, TensorProduct(dx,dy)= -TensorProduct(dy,dx),这意味着如果您的矩阵不是对角线,则元素 m [i, j] 将总结为元素 m [i,j] i!= j 。
如果你有一个对称矩阵,并且你希望只添加一次非对角线元素,那么为 i!= j 添加一个 1/2 项。