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.

Guía Semanal 13 (Ruta A): Diagramas de Cortante y Momento Flector con SymPy

Asignatura: Programación de Computadores Especialidad: Ingeniería Civil

1. Introducción y Propósito

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.

2. Resultados de Aprendizaje

  • Aplicar cargas distribuidas (uniformes) utilizando el parámetro de orden en apply_load().
  • Extraer las ecuaciones algebraicas de Fuerza Cortante \(V(x)\) y Momento Flector \(M(x)\).
  • Utilizar las funciones integradas de sympy para graficar los diagramas estructurales.

3. Hoja de Ruta de la Sesión

Parte A: Cargas Distribuidas y Ecuaciones Internas

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())

Parte B: Generación Automática de Diagramas

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!

4. Actividades de Aprendizaje Guiado

Interacción con el Tutor IA

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 sympy crees 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.”

5. Resumen Cognitivo (Para escritura a mano)

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.