我正在尝试在python上我人工变形的立方体上计算Large(Langrangian/Green) Strains。我在计算变形矩阵 F 时遇到麻烦:
多维数据集坐标是x1和x2
x1 = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.0, 0.0, 1.0],[0.0, 1.0, 1.0], [1.0, 1.0, 1.0]]
x2 = [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [1.0, 1.0, 0.0], [0.0, 0.0, 1.0], [1.5, 0.0, 1.5],[0.0, 1.5, 1.5], [2.0, 2.0, 2.0]]
global_coords[0] = x1
global_coords[1] = x2
def positions_at_t(global_coords, t):
gc = np.array(global_coords)
new_coords = gc[0] + t*(gc[1] - gc[0])
return list(new_coords)
gc[1]-g[2]
随时间变化,就像我们上面看到的那样。但是问题在于它是在8x3矩阵中定义的,因为我们期望变形梯度为3x3。
他在此站点上生成方程式,该方程式定义了(x,y,z)中点的移动,然后相对于(X,Y,Z)进行微分以获得F。是否可以使用库来获取这些方程式? (或渐变?)
答案 0 :(得分:2)
变形梯度描述为:
所以求解F将是:
F = dX \ dx
其中'\'是左矩阵除法,大约等于inv(A)* B。
这是具有9个变量和9个方程的线性代数问题。
来自http://www.continuummechanics.org/greenstrain.html:
使用numpy在python中实现此功能类似
dx = x1
dX = x2
F = np.linalg.solve(dX[5:],dx[5:])
C = F.T @ F
E = .5*(C-np.identity(3))
E
(output:)array([[ 1.5 , 0.125, -0.125],
[ 0.125, 1.5 , -0.125],
[-0.125, -0.125, 0. ]])