Entrar en la Ruta A (Ingeniería Civil) marca un momento de gran motivación para los estudiantes, ya que descubren que Python no solo sirve para procesar datos, sino que puede resolver problemas de álgebra y estática exactamente de la misma forma en que ellos lo hacen a mano en sus cuadernos.

Para ayudar a visualizar el concepto de la viga y las reacciones que los estudiantes programarán en la Sesión 2, he preparado un simulador interactivo. Esto les permitirá comprender el principio físico de equilibrio antes de pasar al código:

A continuación, se presenta la estructura limpia y detallada para la guía de esta semana 12.


Guía Semanal 12 (Ruta A): Álgebra Simbólica y Estática Básica con SymPy

Asignatura: Programación de Computadores

Especialidad: Ingeniería Civil

1. Introducción y Propósito

En el análisis estructural y la estática, muchas veces no tenemos todos los valores numéricos desde el principio. Frecuentemente planteamos ecuaciones con incógnitas (como las reacciones \(R_A\) o \(R_B\) en los apoyos de una viga) y luego las despejamos usando álgebra.

Hasta ahora, Python solo sabía trabajar con números definidos (como lo hace numpy). Esta semana introduciremos SymPy (Symbolic Python), una librería que le enseña a la computadora a hacer álgebra y cálculo simbólico, tratando las letras como variables matemáticas reales.

2. Resultados de Aprendizaje

  • Importar la librería sympy y declarar variables algebraicas (símbolos) en Python.
  • Plantear ecuaciones de equilibrio estático bidimensional (\(\\sum F_x = 0\), \(\\sum F_y = 0\)).
  • Resolver sistemas de ecuaciones lineales para encontrar valores de tensión en cables.
  • Utilizar el submódulo continuum_mechanics para modelar vigas isostáticas y calcular reacciones en los apoyos de forma automatizada.

3. Hoja de Ruta de la Sesión

Parte A: Variables Simbólicas y Ecuaciones de Equilibrio

Se debe explicar a los estudiantes la diferencia entre asignar una variable (x = 5) y declarar un símbolo (x = sp.symbols('x')).

Se implementará un ejercicio de una partícula en equilibrio (un semáforo sostenido por dos cables con diferentes ángulos). Los estudiantes deberán programar las sumatorias de fuerzas utilizando sp.cos() y sp.sin(), igualándolas a cero, para luego dejar que Python resuelva el sistema matricial mediante el comando sp.solve().

Código de aplicación en Colab/VSCode:

import sympy as sp

# 1. Declaramos nuestras incógnitas como Símbolos
T1, T2 = sp.symbols('T1 T2')

# 2. Planteamos las ecuaciones de equilibrio
eq_x = -T1 * sp.cos(sp.pi/4) + T2 * sp.cos(sp.pi/6)
eq_y = T1 * sp.sin(sp.pi/4) + T2 * sp.sin(sp.pi/6) - 100  # Asumiendo peso de 100 N

# 3. Resolvemos el sistema de ecuaciones
solucion = sp.solve([eq_x, eq_y], (T1, T2))

print(f"Tensión 1: {solucion[T1].evalf(4)} N")
print(f"Tensión 2: {solucion[T2].evalf(4)} N")

Parte B: Mecánica del Medio Continuo (Modelado de Vigas)

Para los estudiantes de Civil, el submódulo continuum_mechanics es revolucionario. Se les enseñará a instanciar la clase Beam (Viga) proporcionando su longitud, módulo de elasticidad (\(E\)) e inercia (\(I\)).

Modelarán una viga simplemente apoyada de 10 metros, con una carga puntual de 50 kN en el centro, y le enseñarán al código cuáles son sus condiciones de frontera (deflexión cero en los apoyos) para calcular las reacciones.

Código de aplicación en Colab/VSCode:

from sympy.physics.continuum_mechanics import Beam

# 1. Definimos las propiedades algebraicas
E, I = sp.symbols('E I')
mi_viga = Beam(10, E, I)

# 2. Declaramos las reacciones desconocidas
R_A, R_B = sp.symbols('R_A R_B')

# 3. Aplicamos cargas puntuales (orden -1)
mi_viga.apply_load(R_A, 0, -1)   # Reacción en x=0
mi_viga.apply_load(R_B, 10, -1)  # Reacción en x=10
mi_viga.apply_load(-50, 5, -1)   # Carga de 50 kN hacia abajo en x=5

# 4. Definimos los apoyos (Condiciones de frontera)
mi_viga.bc_deflection = [(0, 0), (10, 0)]

# 5. Calculamos el sistema
mi_viga.solve_for_reaction_loads(R_A, R_B)
print("Reacciones:", mi_viga.reaction_loads)

4. Actividades de Aprendizaje Guiado

Interacción con el Tutor IA

Para asimilar conceptualmente los parámetros de modelado estructural, los estudiantes usarán el siguiente prompt:

“Actúa como un Ingeniero Civil Senior experto en análisis estructural computacional. Estoy aprendiendo a usar la librería sympy en Python. 1) Explícame con una analogía sencilla cuál es la diferencia entre el cálculo numérico (con numpy) y el cálculo simbólico (con sympy). 2) En el módulo continuum_mechanics, cuando uso apply_load(), hay un parámetro llamado ‘orden’ (ej. -1 o -2). Explícame qué significan físicamente esos órdenes para cargas puntuales y momentos concentrados. 3) ¿Cómo plantearías conceptualmente una carga distribuida rectangular usando esta librería? Después hazme 3 preguntas teóricas de estática para verificar mi comprensión.”

5. Resumen Cognitivo (Para escritura a mano)

El esquema final para el cierre cognitivo de la sesión debe abordar:

  1. Fundamento de SymPy: Definición de cálculo simbólico y su utilidad frente al álgebra tradicional.
  2. Sintaxis Estructural: Explicación de la función sp.solve() para sistemas de ecuaciones y el rol de la clase Beam.
  3. Reflexión Profesional: Escribir una breve reflexión sobre cómo la programación moderniza y reduce errores en el trabajo del ingeniero calculista.
  4. Diagrama de Cuerpo Libre (Reverso de la hoja): El estudiante debe dibujar a mano la viga de 10 metros, ubicar la carga puntual, dibujar las reacciones calculadas por Python e identificar cómo cada elemento del dibujo se relaciona con una línea de código específica (apply_load).

Este enfoque deja a los estudiantes de Ingeniería Civil listos para la Semana 13, donde utilizaremos esta misma base simbólica para extraer las ecuaciones internas y graficar los diagramas de Fuerza Cortante y Momento Flector directamente en sus dashboards de Streamlit.