在从2x2到3x3的符号中添加矩阵



所以我试图在sympy中将两个矩阵从2x2矩阵添加到3x3矩阵,但我真的不知道该怎么做!我想要实现的是:想要的结果

将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的刚度矩阵的符号。

我会这样做:

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

也许没有那么蟒蛇,但更具数学性:

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

最新更新