将 sympy 矩阵转换为两种形式 (sympy.diffgeom)
Converting sympy matrix to two-form (sympy.diffgeom)
有什么方法可以将对称 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_*
函数上使用该指标时,我遇到了同样的错误。
假设您的度量矩阵存储在变量 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] for i != j .
如果您有一个对称矩阵,并且您希望只添加一次非对角线元素,则为 i 添加一个 1/2 项! =j.
有什么方法可以将对称 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_*
函数上使用该指标时,我遇到了同样的错误。
假设您的度量矩阵存储在变量 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] for i != j .
如果您有一个对称矩阵,并且您希望只添加一次非对角线元素,则为 i 添加一个 1/2 项! =j.