Es un excelente paso para los estudiantes de Ingeniería Civil. Llegar a la visualización de los Diagramas de Cortante y Momento Flector usando código les demostrará el inmenso poder de automatización que tienen en sus manos, ahorrándoles horas de trazado manual y cálculo de áreas.
Asignatura: Programación de Computadores Especialidad: Ingeniería Civil
La semana pasada descubrimos cómo Python, a través de la librería
sympy, puede hacer álgebra simbólica para calcular las
reacciones en los apoyos de una viga. Sin embargo, para diseñar la
cantidad de acero o el tamaño de la sección, el ingeniero calculista
necesita conocer qué ocurre dentro del material.
Esta semana utilizaremos Python para extraer las ecuaciones algebraicas de fuerzas internas y generar automáticamente los Diagramas de Fuerza Cortante (\(V\)) y Momento Flector (\(M\)), herramientas visuales obligatorias en el análisis estructural.
apply_load().sympy para
graficar los diagramas estructurales.Se recordará a los estudiantes que en la función
apply_load(valor, posicion, orden), el “orden” define
físicamente el tipo de carga: * Orden -2: Momento
concentrado (Giro). * Orden -1: Carga puntual. *
Orden 0: Carga distribuida uniforme (ej. peso propio o
una losa).
Modelaremos una viga de 6 metros, apoyada en los extremos (\(x=0\) y \(x=6\)), soportando una carga distribuida rectangular de 20 kN/m.
Código de aplicación en Colab/VSCode:
import sympy as sp
from sympy.physics.continuum_mechanics import Beam
# 1. Configuramos el entorno simbólico y la viga
E, I = sp.symbols('E I')
mi_viga = Beam(6, E, I) # Viga de 6 metros de longitud
# 2. Declaramos las reacciones en los apoyos (Incógnitas)
R_A, R_B = sp.symbols('R_A R_B')
# 3. Aplicamos las cargas
# Reacciones puntuales hacia arriba en los extremos (Orden -1)
mi_viga.apply_load(R_A, 0, -1)
mi_viga.apply_load(R_B, 6, -1)
# Carga distribuida de 20 kN/m hacia abajo (negativo) desde x=0 hasta x=6 (Orden 0)
mi_viga.apply_load(-20, 0, 0, end=6)
# 4. Definimos los apoyos (Deflexión cero en x=0 y x=6)
mi_viga.bc_deflection = [(0, 0), (6, 0)]
# 5. Resolvemos el equilibrio estático
mi_viga.solve_for_reaction_loads(R_A, R_B)
print("Reacciones calculadas (kN):", mi_viga.reaction_loads)
# 6. Extraemos las ecuaciones de fuerzas internas
print("\nEcuación de Fuerza Cortante V(x):")
sp.pprint(mi_viga.shear_force())
print("\nEcuación de Momento Flector M(x):")
sp.pprint(mi_viga.bending_moment())
Leer ecuaciones matemáticas largas es tedioso. La mayor ventaja del
módulo continuum_mechanics es su integración directa para
dibujar estos diagramas de forma nativa.
Código de aplicación en Colab/VSCode:
# Graficamos el Diagrama de Fuerza Cortante (V)
grafico_cortante = mi_viga.plot_shear_force()
# Graficamos el Diagrama de Momento Flector (M)
grafico_momento = mi_viga.plot_bending_moment()
# Nota: Observa cómo el momento máximo se ubica exactamente en el centro de la viga (x = 3m),
# donde la fuerza cortante cruza por cero. ¡Pura teoría estructural aplicada!
La relación entre la carga, el cortante y el momento es la base de la resistencia de materiales. Los estudiantes utilizarán el siguiente prompt para explorar la conexión matemática:
“Actúa como un Ingeniero Civil Senior y profesor de Resistencia de Materiales. Acabo de programar una viga con carga distribuida en Python y he generado los diagramas de cortante (V) y momento (M). 1) Explícame, usando el concepto de derivadas o integrales, cuál es la relación matemática estricta entre la curva de carga \(q(x)\), la curva de fuerza cortante \(V(x)\) y la curva de momento flector \(M(x)\). 2) ¿Por qué el momento flector siempre es máximo o mínimo exactamente en el punto donde la fuerza cortante es igual a cero? 3) Si quisiera programar una carga triangular en lugar de rectangular, ¿qué número de”orden” en
sympycrees que debería usar lógicamente, si la rectangular es orden 0? Después hazme 2 preguntas teóricas para verificar si comprendo cómo leer un diagrama de momento flector.”
El esquema final para el cierre cognitivo de la sesión debe
consolidar: 1. Declaración de Cargas: Diferenciación
entre el orden de carga para cargas puntuales (\(-1\)) y distribuidas (\(0\)) en sympy. 2.
Extracción de Ecuaciones: Utilidad de las funciones
shear_force() y bending_moment(). 3.
Reflexión Profesional: Una frase sobre cómo esta
herramienta permite enfocarse en analizar resultados e interpretar
comportamientos estructurales en lugar de gastar tiempo en carpintería
algebraica y cálculo de áreas. 4. Dibujo Analítico (Reverso de
la hoja): El estudiante debe dibujar a mano alzada los dos
diagramas generados por el código. Deben señalar explícitamente con una
flecha el valor máximo del Momento Flector y anotar la relación visual
que existe donde el Cortante se hace cero.