Cómo Calcular una Viga simplemente apoyada con Python
- José Alfonso Ortiz González

- 22 may
- 2 Min. de lectura
Actualizado: 5 jun
Introducción:
En el análisis estructural, desde el aula hasta el campo profesional,es fundamental saber determinar reacciones en los apoyos, y trazar los diagramas de fuerza cortante y momento deflector.
En el artículo de esta semana abordaremos cómo utilizar Python, junto a las bibliotecas sympy , matplotlib, y numpy, para resolver una viga simplemente apoyada, con una carga puntual. Este método te permitirá simplificar el proceso, verificar resultados y visualizar comportamientos.
Fundamentos teóricos:
Debemos comenzar por traer a nuestra memoria un par de ecuaciones de estática.

De estas ecuaciones obtenemos:

Con estas reacciones ya podemos determinar el comportamiento interno de una viga.
Automatizando con python:
Primero instalar las librerías:
pip install sympy matplotlib numpycalculo de reacciones simbólicas:
import sympy as sp
# variables simbólicas
x,L,a,P= sp.symbols("x L a P")
RA, RB= sp.symbols(" Ra Rb")
#Ecuaciones de equilibrio
eq_m = sp.Eq(RB * L, P * (L - a))
eq_f = sp.Eq(RA + RB, P)
#Solucion simbolica
sol = sp.solve([eq_m, eq_f], (RA, RB))
RA_sol = sol[RA]
RB_sol = sol[RB]
print("Reacción en A:", RA_sol)
print("Reacción en B:", RB_sol)Definición de funciones para cortante y momento:
Estas funciones nos permitirán conocer los valores internos en cualquier punto de la viga.
def cortante(x_val, RA, P, a):
return RA if x_val < a else RA - P
def momento(x_val, RA, P, a):
return RA * x_val if x_val < a else RA * x_val - P * (x_val - a)Visualizando diagramas:
Supondremos un caso: Una viga de diez metros con una carga de 1000 N a 4 metros del apoyo izquierdo.
import numpy as np
import matplotlib.pyplot as plt
# Datos
L_val = 10
a_val = 4
P_val = 1000
RA_val = float(RA_sol.subs({L: L_val, a: a_val, P: P_val}))
RB_val = float(RB_sol.subs({L: L_val, a: a_val, P: P_val}))
# Puntos a evaluar
x_vals = np.linspace(0, L_val, 500)
V = [cortante(x, RA_val, P_val, a_val) for x in x_vals]
M = [momento(x, RA_val, P_val, a_val) for x in x_vals]
# Gráficas
plt.figure(figsize=(12, 5))
# Cortante
plt.subplot(1, 2, 1)
plt.plot(x_vals, V, label="Cortante", color='steelblue')
plt.title("Diagrama de Fuerza Cortante")
plt.xlabel("x (m)")
plt.ylabel("V (N)")
plt.grid(True)
# Momento
plt.subplot(1, 2, 2)
plt.plot(x_vals, M, label="Momento", color='darkorange')
plt.title("Diagrama de Momento Flector")
plt.xlabel("x (m)")
plt.ylabel("M (N·m)")
plt.grid(True)
plt.tight_layout()
plt.show()
Resultados esperados:
Fuerza Cortante:
Constante entre apoyos, con un salto en el punto de carga.
Momento flector:
comportamiento lineal por tramos, alcanzando su máximo bajo la carga puntual.
Conclusión:
Python a demostrado ser una herramienta poderosa para nosotros como ingenieros o estudiantes de ingeniería. El poder automatizar el análisis en vigas nos permite mejorar aspectos como la productividad, reducir errores, y facilitar la comprensión visual del comportamiento.
Este ejemplo nos demuestra que con unas pocas líneas de código podemos obtener resultados exactos, visuales y reutilizables. Además de ser una gran alternativa al software costoso, Sobre todo en entornos EDUCATIVOS.



Comentarios