En la Semana 12, los civiles, aprendieron a modelar la viga y calcular las reacciones en los apoyos. Ahora, en la Semana 13, daremos el paso que todo ingeniero civil necesita: calcular las fuerzas internas y graficar los Diagramas de Fuerza Cortante (\(V\)) y Momento Flector (\(M\)). Además, introduciremos las cargas distribuidas, que son el pan de cada día en el diseño de losas y vigas reales.
Aquí tienes el cuaderno de la Semana 13 (Ruta A) completamente limpio y listo para Google Colab:
# SEMANA 13 (Ruta A): Diagramas de Cortante y Momento Flector con SymPy
**Especialidad:** Ingeniería Civil
**Asignatura:** Programación de Computadores con Python
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 viga, el ingeniero calculista necesita conocer qué ocurre *dentro* del material.
Esta semana utilizaremos Python para extraer las ecuaciones de fuerzas internas y generar automáticamente los Diagramas de Fuerza Cortante y Momento Flector, herramientas visuales obligatorias en el análisis estructural.
**Objetivos 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.
## SESIÓN 1: Cargas Distribuidas y Fuerzas Internas
**Ampliando nuestro modelo de cargas:**
Recordemos que en la función `apply_load(valor, posicion, orden)`, el "orden" define el tipo de carga físicamente:
* Orden `-2`: Momento concentrado (Giro).
* Orden `-1`: Carga puntual (ej. una columna apoyada sobre la viga).
* Orden `0`: Carga distribuida uniforme (ej. el peso propio de la viga o una losa).
Vamos a modelar una viga de 6 metros, simplemente apoyada en los extremos ($x=0$ y $x=6$), que soporta una **carga distribuida rectangular** de 20 kN/m a lo largo de toda su longitud.
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())
---
## SESIÓN 2: Generación Automática de Diagramas
Leer ecuaciones matemáticas largas puede ser tedioso. La mayor ventaja del módulo `continuum_mechanics` es que trae incorporada la conexión con `matplotlib` para dibujar los diagramas de cortante y momento automáticamente.
Ejecuta la siguiente celda. Verás cómo Python genera los gráficos exactos que te tomaría valiosos minutos dibujar a mano usando el método de las áreas o integración geométrica.
# 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!
---
### 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. Pregúntale a tu asistente cómo se relacionan mediante el cálculo diferencial:
> **PROMPT DE APRENDIZAJE - SEMANA 13 (CIVIL):**
> 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.
---
## ACTIVIDAD FINAL: Hoja "Estudia y Aprende"
Sintetiza la aplicación de la programación en el diseño estructural:
> **PROMPT GLOBAL DE CIERRE:**
> Actúa como tutor experto en Análisis Estructural Computacional con Python. Elabora un RESUMEN BREVE que cumpla estas condiciones:
> 1. Debe caber en UNA SOLA HOJA escrita a mano.
> 2. Lenguaje claro, técnico y orientado exclusivamente a Ingeniería Civil.
> 3. Debe incluir: Cómo se declaran las cargas distribuidas en `sympy`, la importancia de las funciones `shear_force()` y `bending_moment()`, y la ventaja de automatizar los diagramas gráficos con Python.
> 4. Pensado para que yo lo escriba comprendiendo lo esencial.
> Al final agrega una frase de reflexión sobre cómo esta herramienta te permite enfocarte en analizar resultados en lugar de gastar tiempo en carpintería algebraica.
**Instrucción para el estudiante:** En el reverso de tu hoja, dibuja a mano alzada los dos diagramas que te arrojó el código de la Sesión 2. Señala con una flecha el valor máximo del Momento Flector y anota su valor aproximado según el gráfico.
Con esto, las dos rutas de especialidad (Civil por un lado, y Agrícola/Agroindustrial por el otro) ya tienen listos sus “motores de cálculo”, esos bloques de código potentes que resuelven los problemas específicos de sus disciplinas.
El escenario está listo para la Semana 14, donde ambos grupos volverán a unirse metodológicamente. En esa semana tomaremos estos algoritmos especializados de Colab, los llevaremos a VSCode, y los conectaremos con los botones y gráficas de Streamlit para comenzar a darle forma a sus Proyectos Finales.