如何在Python中计算变形梯度。 (在3D立方体中)

时间:2019-01-24 23:47:00

标签: python numpy math linear

我正在尝试在python上我人工变形的立方体上计算Large(Langrangian/Green) Strains。我在计算变形矩阵 F 时遇到麻烦:

enter image description here

未变形的立方体:

non deformed cube

变形的立方体:

deformed cube

多维数据集坐标是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。是否可以使用库来获取这些方程式? (或渐变?)

1 个答案:

答案 0 :(得分:2)

变形梯度F

变形梯度描述为:

Deformation Matrix

所以求解F将是:

F = dX \ dx

其中'\'是左矩阵除法,大约等于inv(A)* B。

这是具有9个变量和9个方程的线性代数问题。

绿色菌株E

来自http://www.continuummechanics.org/greenstrain.html

Green strain equations

使用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.   ]])