在 sympy 中添加 Matrix 从 2x2 到 3x3
Adding Matrix in sympy from a 2x2 to a 3x3
所以我试图在 sympy 中将两个矩阵从 2x2 矩阵加到 3x3 矩阵,但我不太确定该怎么做!我想要实现的是:Wanted Result
将:K1 和 K2 相加。因为它们在总矩阵中的位置不同。我做了什么:
import sympy as sy
E,t = sy.symbols("E,t")
K1 = sy.Matrix([[17.5*E*t,-17.5*E*t],[-17.5*E*t,17.5*E*t]])
K2 = sy.Matrix([[12.5*E*t,-12.5*E*t],[-12.5*E*t,12.5*E*t]])
K_Total_Rad_1 = []
K_Total_Rad_2_1 = []
K_Total_Rad_2_2 = []
K_Total_Rad_3 = []
for i in range(len(K1)-2):
K_Total_Rad_1.append(K1[i])
for i in range(len(K2)-2):
K_Total_Rad_2_1.append(K1[i+2])
for i in range(len(K2)-2):
K_Total_Rad_2_2.append(K2[i])
for i in range(len(K2)-2):
K_Total_Rad_3.append(K2[i-2])
K_Total = sy.Matrix([K_Total_Rad_1, K_Total_Rad_2_2, K_Total_Rad_3])
K_Total
我显然知道这里的错误在于定义矩阵维度,但我不知道如何在 python 中执行此操作。希望有人能帮忙
如果我没记错的话,这是 FEM-like 刚度矩阵的“标准”表示法。
我会这样做:
import sympy as sy
E, t = sy.symbols("E, t")
K1 = sy.Matrix([[17.5*E*t,-17.5*E*t],[-17.5*E*t,17.5*E*t]])
K2 = sy.Matrix([[12.5*E*t,-12.5*E*t],[-12.5*E*t,12.5*E*t]])
K = sy.zeros(3)
K[:2, :2] = K1
K[1:, 1:] += K2
K
可能少了一些 pythonic 但更数学化:
import sympy as sy
E, t = sy.symbols( "E, t" )
K1 = sy.Matrix(
[
[ +17.5 * E * t, -17.5 * E * t ],
[ -17.5 * E * t, +17.5 * E * t ]
]
)
K2 = sy.Matrix(
[
[ +12.5 * E * t, -12.5 * E * t ],
[ -12.5 * E * t, +12.5 * E * t ]
]
)
A = sy.diag( 1, sy.Matrix( [ 1, 0 ] ) )
B = sy.diag( sy.Matrix( [ 0, 1 ] ), 1 )
K = A * K1 * A.T + B * K2 * B.T
所以我试图在 sympy 中将两个矩阵从 2x2 矩阵加到 3x3 矩阵,但我不太确定该怎么做!我想要实现的是:Wanted Result
将:K1 和 K2 相加。因为它们在总矩阵中的位置不同。我做了什么:
import sympy as sy
E,t = sy.symbols("E,t")
K1 = sy.Matrix([[17.5*E*t,-17.5*E*t],[-17.5*E*t,17.5*E*t]])
K2 = sy.Matrix([[12.5*E*t,-12.5*E*t],[-12.5*E*t,12.5*E*t]])
K_Total_Rad_1 = []
K_Total_Rad_2_1 = []
K_Total_Rad_2_2 = []
K_Total_Rad_3 = []
for i in range(len(K1)-2):
K_Total_Rad_1.append(K1[i])
for i in range(len(K2)-2):
K_Total_Rad_2_1.append(K1[i+2])
for i in range(len(K2)-2):
K_Total_Rad_2_2.append(K2[i])
for i in range(len(K2)-2):
K_Total_Rad_3.append(K2[i-2])
K_Total = sy.Matrix([K_Total_Rad_1, K_Total_Rad_2_2, K_Total_Rad_3])
K_Total
我显然知道这里的错误在于定义矩阵维度,但我不知道如何在 python 中执行此操作。希望有人能帮忙
如果我没记错的话,这是 FEM-like 刚度矩阵的“标准”表示法。
我会这样做:
import sympy as sy
E, t = sy.symbols("E, t")
K1 = sy.Matrix([[17.5*E*t,-17.5*E*t],[-17.5*E*t,17.5*E*t]])
K2 = sy.Matrix([[12.5*E*t,-12.5*E*t],[-12.5*E*t,12.5*E*t]])
K = sy.zeros(3)
K[:2, :2] = K1
K[1:, 1:] += K2
K
可能少了一些 pythonic 但更数学化:
import sympy as sy
E, t = sy.symbols( "E, t" )
K1 = sy.Matrix(
[
[ +17.5 * E * t, -17.5 * E * t ],
[ -17.5 * E * t, +17.5 * E * t ]
]
)
K2 = sy.Matrix(
[
[ +12.5 * E * t, -12.5 * E * t ],
[ -12.5 * E * t, +12.5 * E * t ]
]
)
A = sy.diag( 1, sy.Matrix( [ 1, 0 ] ) )
B = sy.diag( sy.Matrix( [ 0, 1 ] ), 1 )
K = A * K1 * A.T + B * K2 * B.T