Notas de Ingeniería

Automatización y programación Análisis estructural N.º 02

Automatizar una viga con Python, desde cero

Serie: Automatizar el cálculo con Python · Parte 1 de 6

Resumen. Todos calculamos alguna vez una viga simplemente apoyada a mano. En esta primera parte la pasamos a Python, línea por línea, y vemos lo que una calculadora no hace: calcular veinte vigas en un segundo.

En la universidad todos resolvimos la misma viga muchas veces: simplemente apoyada, con una carga repartida y quizás una carga puntual. Fórmula, calculadora, resultado. En la oficina pasa algo parecido, pero con veinte vigas distintas, y cada vez que cambia una carga o una luz hay que repetir todo.

Ahí es donde la programación ayuda. Python no sabe más ingeniería que tú: es una calculadora que recuerda lo que le enseñaste y lo repite sin cansarse ni equivocarse en el tercer decimal.

Esta nota es la primera de una serie que va de lo simple a lo complejo. Hoy vamos a hacer cuatro cosas:

  1. recordar las fórmulas de la viga;
  2. escribirlas en Python, línea por línea;
  3. calcular una viga;
  4. calcular varias vigas a la vez, que es donde se gana tiempo.

No necesitas saber programar. Si nunca usaste Python, al final te digo cómo correr el script.

wPLEI
La viga de esta nota: simplemente apoyada, carga repartida w en toda la luz L y carga puntual P al centro.

Las fórmulas de siempre

Para una viga simplemente apoyada de luz LL, con carga repartida ww en toda la luz y una carga puntual PP al centro, el momento máximo está al centro y vale:

M=wL28+PL4M = \frac{w L^2}{8} + \frac{P L}{4}

El cortante máximo está en los apoyos:

V=wL2+P2V = \frac{w L}{2} + \frac{P}{2}

Y la flecha al centro, que depende de la rigidez EIEI de la sección:

δ=5 wL4384 EI+PL348 EI\delta = \frac{5\, w L^4}{384\, EI} + \frac{P L^3}{48\, EI}

Fíjate en los exponentes: el momento crece con L2L^2, pero la flecha crece con L4L^4. Vamos a volver a esto.

Las mismas fórmulas en Python

En Python, una función es un bloque que recibe datos y devuelve resultados. Es la forma de “enseñarle” un cálculo:

def viga_simple(L, w, P, EI):
    """Devuelve momento máximo, cortante máximo y flecha al centro."""
    M = w * L**2 / 8 + P * L / 4                                  # kN·m
    V = w * L / 2 + P / 2                                         # kN
    flecha = 5 * w * L**4 / (384 * EI) + P * L**3 / (48 * EI)     # m
    return M, V, flecha

Léelo como si fuera una hoja de cálculo:

  • def viga_simple(L, w, P, EI): dice “esta función necesita luz, carga repartida, carga puntual y rigidez”.
  • L**2 es L2L^2. El doble asterisco es la potencia.
  • Lo que va después de # es un comentario: Python lo ignora, pero a ti te recuerda las unidades.
  • return entrega los tres resultados.

Un consejo que me ahorró muchos errores: elige un sistema de unidades y anótalo arriba del archivo. Aquí todo va en kN y m. Así el momento sale en kN·m y la flecha en metros, sin conversiones escondidas.

Una viga

Ahora los datos. Una viga de concreto de 30 × 60 cm, con 20 kN/m repartidos y 30 kN al centro:

w = 20.0              # carga repartida, kN/m
P = 30.0              # carga puntual al centro, kN
b, h = 0.30, 0.60     # sección, m
E = 25_000_000        # módulo de elasticidad, kPa (25 000 MPa)
I = b * h**3 / 12     # inercia, m⁴
EI = E * I            # kN·m²

M, V, f = viga_simple(6.0, w, P, EI)
print(f"M = {M:.0f} kN·m,  V = {V:.0f} kN,  flecha = {f*1000:.1f} mm")

Y Python responde:

M = 135 kN·m,  V = 75 kN,  flecha = 3.5 mm

Puedes verificarlo con calculadora: 20⋅62/8+30⋅6/4=90+45=13520 \cdot 6^2/8 + 30 \cdot 6/4 = 90 + 45 = 135 kN·m. Siempre comprueba la primera corrida a mano. Si coincide, ya puedes confiar en el script para las demás.

Muchas vigas: lo que la calculadora no hace

Aquí está la ganancia. Con un for, Python repite el cálculo para cada luz de una lista:

for L in [4, 5, 6, 7, 8]:
    M, V, f = viga_simple(L, w, P, EI)
    print(f"L = {L} m:  M = {M:.0f} kN·m,  flecha = {f*1000:.1f} mm")
Luz (m)MM (kN·m)VV (kN)Flecha (mm)LL/flecha
470550.8≈ 5 000
5100651.8≈ 2 800
6135753.5≈ 1 700
7175856.2≈ 1 100
82209510.3≈ 780

Mira la tabla. Si la luz se duplica, de 4 a 8 m, el momento se multiplica por 3, pero la flecha se multiplica por 13. Es el L4L^4 de la fórmula, ahora con números concretos. A mano, ese patrón cuesta verlo; con cinco filas en una tabla salta a la vista.

Una advertencia honesta: la flecha está calculada con la inercia de la sección sin fisurar. Una viga de concreto real se fisura y además se deforma con el tiempo, así que la flecha real es varias veces mayor. Lo veremos más adelante en la serie.

Cómo correr el script

  1. Instala Python desde python.org (marca “Add Python to PATH” en el instalador).
  2. Descarga el script de esta nota, más abajo.
  3. Abre una terminal en la carpeta del archivo y escribe python viga-01.py.

Cambia los datos (la carga, la sección, la lista de luces) y vuelve a correrlo. Así se aprende: tocando.

Lo que sigue

En la parte 2 vamos a dibujar los diagramas de momento y cortante para cualquier combinación de cargas, no solo la carga al centro.

Automatizar no es saber más fórmulas. Es escribir bien una vez la que ya sabes y dejar que la máquina la repita.

Descargar el script de esta nota ↓ viga-01.py

Sobre el autor

Yordan Rocio Maldonado

Ingeniero estructural, especialista en sísmica y puentes. CIP 215845

Contenido educativo y referencial. Las opiniones son mías y no representan a ningún empleador. Para un proyecto real manda el criterio del ingeniero responsable y la norma vigente.

← Volver a las notas