Código

Validar una fórmula de flecha de viga contra una referencia citada

Implementa la flecha a medio vano de Euler–Bernoulli para viga simplemente apoyada con carga uniforme, compruébala con identidades de escala y rechaza tratar un coeficiente sin citar como salida de ingeniería.

Una fórmula de viga en un script solo es tan buena como la referencia detrás del coeficiente. Este tutorial implementa un resultado elemental — flecha a medio vano de una viga prismática de Euler–Bernoulli simplemente apoyada bajo carga uniforme —, cita una clase de fuentes de libro de texto y comprueba la implementación con identidades que no exigen copiar tablas de una norma de edificación.

El objetivo es un hábito de verificación: fórmula, cita, sistema de unidades, comprobación independiente. No es el diseño de un miembro, no es una verificación de norma y no sustituye a OpenSees ni a un análisis con licencia.

El resultado citado

Para un vano simplemente apoyado L, EI constante, carga uniforme w por unidad de longitud, pequeñas flechas, cinemática de Euler–Bernoulli (las secciones planas permanecen planas, sin deformación por cortante), la magnitud de la flecha transversal a medio vano es:

δ = 5 w L⁴ / (384 E I)

Ruta de comprobación: fórmula citada, unidades coherentes, luego identidades de escala
Diagram source
flowchart LR
  cite[Fórmula citada] --> units[Unidades SI coherentes]
  units --> run[Ejecutar el script]
  run --> scale[Identidades de escala]
  scale --> keep[Conservar el coeficiente]

Esa expresión es estándar en resistencia de materiales elemental. Cita la edición de tu estante, por ejemplo Timoshenko y Gere, Mechanics of Materials, en el capítulo de flecha de vigas. No pegues páginas escaneadas del libro ni comentarios con copyright. No sustituyas esta cita por un extracto de tabla AISC, Eurocódigo o NSR.

Un problema distinto — carga puntual P a medio vano en la misma viga — tiene δ = P L³ / (48 E I). Mezclar 5/384 con una carga puntual (o 1/48 con una carga uniforme) es un error silencioso habitual. El script de abajo toma w y rechaza un argumento P para que los dos casos no se colapsen por accidente.

Requisitos previos

  • Python 3 (solo stdlib)
  • Unidades SI claras: w en N/m, L en m, E en Pa, I en m⁴, δ en m
  • El tutorial de unidades si te tienta mezclar mm y m

Implementación

from __future__ import annotations


def midspan_uniform_ss(w: float, L: float, E: float, I: float) -> float:
    """Euler–Bernoulli midspan |δ| for simple supports and uniform w.

    Referee: Timoshenko & Gere, Mechanics of Materials (elementary beam
    deflection). Not a building-code clause.
    """
    if min(w, L, E, I) <= 0.0:
        raise ValueError("w, L, E, I must be positive")
    return 5.0 * w * L**4 / (384.0 * E * I)


def scaling_checks(w: float, L: float, E: float, I: float, atol_rel: float = 1e-12) -> None:
    d = midspan_uniform_ss(w, L, E, I)
    d_ei = midspan_uniform_ss(w, L, 2.0 * E, I)
    d_l = midspan_uniform_ss(w, 2.0 * L, E, I)
    d_w = midspan_uniform_ss(2.0 * w, L, E, I)

    def rel(a: float, b: float) -> float:
        return abs(a - b) / abs(b)

    if rel(d_ei, d / 2.0) > atol_rel:
        raise SystemExit("doubling EI must halve δ")
    if rel(d_w, 2.0 * d) > atol_rel:
        raise SystemExit("doubling w must double δ")
    if rel(d_l, 16.0 * d) > atol_rel:
        raise SystemExit("doubling L must multiply δ by 16 (L^4)")


if __name__ == "__main__":
    # Documented SI example — not a designed section.
    w = 10_000.0    # N/m
    L = 6.0         # m
    E = 2.0e11      # Pa
    I = 8.0e-5      # m⁴
    delta_m = midspan_uniform_ss(w, L, E, I)
    scaling_checks(w, L, E, I)
    print(f"δ = {delta_m:.6e} m  ({delta_m * 1e3:.3f} mm)")
    print("scaling identities passed")

La impresión de esta tupla concreta está en el orden de 10 mm. Si ves metros o nanómetros, el conjunto de unidades está mal. Esa afirmación de orden de magnitud es un bound de cordura, no un pasa/no pasa contra un límite de flecha de norma.

Comprobación numérica independiente

El tutorial compañero de OpenSees (opensees-first-elastic-model) es un voladizo con carga en la punta. Esa forma cerrada es P L³ / (3 E I), no 5 w L⁴ / (384 E I). Para comprobar esta fórmula en un solver debes modelar apoyos simples y una carga uniforme, y luego comparar uy a medio vano con midspan_uniform_ss. No afirmes que el tutorial del voladizo ya verificó este caso.

Si construyes ese modelo de OpenSees, conserva geometría Linear, un elasticBeamColumn prismático (varios segmentos si aplicas cargas nodales equivalentes, o una carga de elemento si tu build soporta -beamUniform), pins que restrinjan los GDL correctos y el mismo conjunto SI. Un solo elemento cúbico con solo nodos de extremo no puede representar una carga uniforme verdadera a menos que la carga se aplique como carga de elemento que la formulación soporte.

Validación

  1. Cita. El coeficiente 5/384 está escrito junto a Timoshenko y Gere (u otro texto de resistencia de materiales que realmente poseas). Una fracción sin citar de una ventana de chat no está validada.
  2. Identidades de escala. δ escala con w, con 1/EI y con L⁴. Siguen de la misma ecuación de Euler–Bernoulli; si fallan, la implementación está mal aunque un solo ejemplo numérico «se vea razonable».
  3. Trampa de fórmula equivocada. Evaluar P L³ / (48 E I) con P = w L no recupera 5 w L⁴ / (384 E I). w L como una sola fuerza a medio vano es otro camino de carga. Conserva un test que afirme que las dos expresiones difieren.
  4. Unidades. Repite la evaluación en N-mm y convierte δ a mm; los resultados SI y N-mm deben coincidir (véase unit-conversion-pitfalls-civil-scripts).
  5. Signo. La fórmula de arriba es una magnitud. Un GDL de solver puede ser negativo. Compara valores absolutos solo después de haber comprobado la dirección de la carga.

Errores habituales

  • Usar 5/384 para un voladizo, o P L³ / (3 E I) para apoyos simples.
  • Tomar I de un catálogo en mm⁴ y L en metros.
  • Aplicar factores de carga o φ/Ω dentro de la «comprobación de fórmula». La verificación del álgebra va primero; los factores de fiabilidad son otra capa.
  • Dejar que un asistente reescriba el coeficiente «para vigas I» o «para hormigón». El resultado de Euler–Bernoulli de arriba no es específico del tipo de sección; es cinemático y constitutivo bajo los supuestos declarados.

Limitaciones

  • Sin deformación por cortante (viga de Timoshenko), sin alabeo, sin torsión, sin fisuración, sin acción compuesta.
  • Prismática, estáticamente determinada, w uniforme, elástica lineal, pendientes pequeñas.
  • Los apoyos son pins ideales. Asiento, apoyos elásticos y continuidad en varios vanos necesitan otras soluciones (distribución de momentos, pendiente-deflexión o un solver).
  • No es una comprobación de servicio contra un tope de flecha de norma. Esos topes, combinaciones de carga y patrones de sobrecarga viven en la norma vigente — cita la norma por designación y cláusula sin citar texto con copyright.
  • La dinámica (masa, periodo, espectros) queda fuera de esta página. Chopra, Dynamics of Structures (content id chopra-dynamics-of-structures), es el siguiente paso teórico habitual; no reemplaza esta identidad estática.

Contexto profesional

Los ingenieros firman modelos, no compleciones de chat. Un ayudante de fórmulas pertenece a un repositorio con la cita en el docstring, los tests de escala en CI y una nota de que los miembros de producción necesitan el método de análisis del proyecto y la norma en vigor. Si no puedes nombrar la referencia de 5/384, no envíes la función.

Referencias

  • Timoshenko, S. P., y Gere, J. M. Mechanics of Materials. Viga simplemente apoyada, carga uniforme, flecha a medio vano 5 w L⁴ / (384 E I). Usa la edición que tengas; no reproduzcas extractos largos.
  • Hibbeler, R. C. Structural Analysis o Mechanics of Materials — tablas elementales equivalentes en muchas ediciones; sigue citando en lugar de copiar.
  • Documentación de OpenSeesPy, para un modelo numérico independiente de un problema de contorno distinto a menos que reconstruyas apoyos simples y carga uniforme a propósito.