import numpy as np
from [Link] import solve
# Définir les paramètres du système
nb_noeuds = 4
nb_elements = 3
nb_ddl = 2 * nb_noeuds # Chaque nœud a 2 degrés de liberté (x et y)
# Coordonnées nodales (x, y)
coordonnees = [Link]([
[0, 0],
[4, 0],
[4, 3],
[8, 0]
])
# Connectivité des éléments et matrice de rigidité
elements = [Link]([
[0, 1],
[1, 2],
[1, 3]
])
# Propriétés du matériau et aire de la section transversale
E = 200e9 # Module de Young (Pa)
A = 0.01 # Aire de la section transversale (m^2)
# Assembler la matrice de rigidité globale
K_globale = [Link]((nb_ddl, nb_ddl))
for element in elements:
noeud_i, noeud_j = element
x_i, y_i = coordonnees[noeud_i]
x_j, y_j = coordonnees[noeud_j]
longueur = [Link]((x_j - x_i)**2 + (y_j - y_i)**2)
cos_theta = (x_j - x_i) / longueur
sin_theta = (y_j - y_i) / longueur
k_local = (E * A / longueur) * [Link]([
[cos_theta**2, cos_theta * sin_theta, -cos_theta**2, -cos_theta *
sin_theta],
[cos_theta * sin_theta, sin_theta**2, -cos_theta * sin_theta, -
sin_theta**2],
[-cos_theta**2, -cos_theta * sin_theta, cos_theta**2, cos_theta *
sin_theta],
[-cos_theta * sin_theta, -sin_theta**2, cos_theta * sin_theta,
sin_theta**2]
])
ddl_i = [2 * noeud_i, 2 * noeud_i + 1]
ddl_j = [2 * noeud_j, 2 * noeud_j + 1]
K_globale[np.ix_(ddl_i, ddl_i)] += k_local[:2, :2]
K_globale[np.ix_(ddl_i, ddl_j)] += k_local[:2, 2:]
K_globale[np.ix_(ddl_j, ddl_i)] += k_local[2:, :2]
K_globale[np.ix_(ddl_j, ddl_j)] += k_local[2:, 2:]
# Appliquer les conditions aux limites (contraintes de déplacement)
ddl_connus = [0, 1, 6] # Exemple de déplacements connus
K_reduite = [Link]([Link](K_globale, ddl_connus, axis=0), ddl_connus, axis=1)
# Vecteur de charges (forces)
F_charge = [Link](nb_ddl)
F_charge[7] = -10000 # Appliquer une force vers le bas au nœud 3
# Résoudre pour les déplacements
deplacements = [Link](nb_ddl)
ddl_inconnus = [2, 3, 4, 5, 8, 9]
deplacements[ddl_inconnus] = solve(K_reduite, F_charge[ddl_inconnus])
# Calculer les forces de réaction
F_reactions = [Link](K_globale[ddl_connus, :], deplacements)
print("Déplacements:")
print(deplacements)
print("Forces de réaction:")
print(F_reactions)