Code Python - Calcul EF Barre 1D
import numpy as np
# Données du problème
E = 2 * 10**6
H = 0.004
L = 8
B = 0.01
A = B * H
U_impose = 5000 # Déplacement imposé au milieu
# Matrice de rigidité élémentaire
def element_stiffness(E, A, Le):
return (E * A) / Le * [Link]([[1, -1],
[-1, 1]])
# Assemblage de la matrice globale
def assemble_global_stiffness(N):
Le = L / N
k = element_stiffness(E, A, Le)
size = N + 1
K_global = [Link]((size, size))
for i in range(N):
K_global[i:i+2, i:i+2] += k
return K_global
# Résolution avec déplacement imposé
def solve_system(N):
K = assemble_global_stiffness(N)
size = N + 1
F_global = [Link](size)
# Conditions aux limites
fixed_dofs = [0, size-1, N//2] # extrémités + milieu
u = [Link](size)
u[N//2] = U_impose
free_dofs = [i for i in range(size) if i not in fixed_dofs]
# Réduction du système
K_ff = K[np.ix_(free_dofs, free_dofs)]
K_fc = K[np.ix_(free_dofs, fixed_dofs)]
F_f = F_global[free_dofs] - K_fc @ u[fixed_dofs]
# Résolution
u[free_dofs] = [Link](K_ff, F_f)
return u
# Programme principal
for N in [2, 4, 8, 16]:
U = solve_system(N)
print(f"\nNombre d'éléments = {N}")
print("Déplacements nodaux (m) :")
print(U)