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.
Asignatura: Programación de Computadores
Especialidad: Ingeniería Civil
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.
sympy y declarar variables
algebraicas (símbolos) en Python.continuum_mechanics para modelar
vigas isostáticas y calcular reacciones en los apoyos de forma
automatizada.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")
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)
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
sympyen 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 usoapply_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.”
El esquema final para el cierre cognitivo de la sesión debe abordar:
sp.solve() para sistemas de ecuaciones y el rol de la clase
Beam.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.