注意:sympy.physics.vector
正在被重寫爲sympy.vector
。
我看來,該載體模塊真的不支持張量場,但可以使用N維陣列,例如:
In [6]: ta = Array([[Function("f_{0}{1}".format(j,i))(x,y,z) for i in range(1,4)
...: ] for j in range(1,4)])
In [7]: ta
Out[7]:
⎡f₁₁(x, y, z) f₁₂(x, y, z) f₁₃(x, y, z)⎤
⎢ ⎥
⎢f₂₁(x, y, z) f₂₂(x, y, z) f₂₃(x, y, z)⎥
⎢ ⎥
⎣f₃₁(x, y, z) f₃₂(x, y, z) f₃₃(x, y, z)⎦
In [9]: tensorcontraction(derive_by_array(ta, (x, y, z)), (0, 1))
Out[9]:
⎡∂ ∂ ∂ ∂ ∂
⎢──(f₁₁(x, y, z)) + ──(f₂₁(x, y, z)) + ──(f₃₁(x, y, z)) ──(f₁₂(x, y, z)) + ──
⎣∂x ∂y ∂z ∂x ∂y
∂ ∂ ∂ ∂
(f₂₂(x, y, z)) + ──(f₃₂(x, y, z)) ──(f₁₃(x, y, z)) + ──(f₂₃(x, y, z)) + ──(f₃
∂z ∂x ∂y ∂z
⎤
₃(x, y, z))⎥
⎦
在點6的秩被創建2陣列,在點9的相同的數組由另一個數組(x, y, z)
派生,因此創建了一個rank 3數組(形狀爲3x3x3)。此時tensorcontraction
收縮第一個和第二個軸,將結果減少到第一個數組(3個元素)。