FEM_SD_11.18 转python

1.一维静态问题(1D Static Problems)
弹簧单元刚度矩阵组装与求解(Spring Element Stiffness Matrix Assembly and Solution)


import numpy as np

# 定义弹簧刚度
k = np.array([100, 200])

# 初始化单元连接、全局刚度矩阵等
elem_con = np.array([[1, 2], [2, 3]])
elem = elem_con.shape[0]
nodes = elem + 1
K = np.zeros((nodes, nodes))

# 组装刚度矩阵
for i in range(elem):
    ke = k[i] * np.array([[1, -1], [-1, 1]])
    node1 = elem_con[i, 0] - 1  # MATLAB索引从1开始,Python从0开始
    node2 = elem_con[i, 1] - 1
    K[node1, node1] += ke[0, 0]
    K[node1, node2] += ke[0, 1]
    K[node2, node1] += ke[1, 0]
    K[node2, node2] += ke[1, 1]

# 定义力和位移向量
P = -15
F = np.array([P, 0, 0])
d = np.zeros(nodes)

# 求解位移
d[0:2] = np.linalg.solve(K[0:2, 0:2], F[0:2])

# 计算反力和单元内力
F = K @ d
del1 = d[0:2]
del2 = d[1:3]  # 注意Python索引,这里应该是1:3而不是2:3
kel1 = k[0] * np.array([[1, -1], [-1, 1]])
kel2 = k[1] * np.array([[1, -1], [-1, 1]])
fel1 = kel1 @ del1
fel2 = kel2 @ del2

# 输出结果
print("Displacement vector d:", d)
print("Reaction force vector F:", F)
print("Element 1 internal force fel1:", fel1)
print("Element 2 internal force fel2:", fel2)

posted @ 2024-12-05 19:11  redufa  阅读(17)  评论(0)    收藏  举报