Análisis matricial de armaduras con Python

Anexo A

Referencia rápida de Python y NumPy

Este anexo reúne, para consultarlas rápidamente, todas las herramientas de Python que usamos en el libro. No está pensado para leerse de corrido: cada tabla indica el capítulo donde la herramienta se explica con detalle, y los ejemplos usan los mismos nombres que la calculadora.

A.1 Notebooks en Google Colab

A.2 Números, texto y resultados

Las operaciones aritméticas siguen las prioridades habituales: primero las potencias, después productos y divisiones, y por último sumas y restas. El operador %, que da el resto de una división, se usa en el capítulo 12.

Tabla A.1: Variables, operaciones y resultados.

CódigoQué haceCap.
area = 0.0020Crea o cambia una variable2
E = 2.0e8Notación científica: 2.0×1082.0 \times 10^{8}2
dx**2Potencia2
7 // 2División entera: 312
import mathCarga el módulo de matemática2
math.sqrt(x)Raíz cuadrada2
math.atan2(dy, dx)Ángulo en radianes, en su cuadrante2
math.degrees(a)Convierte radianes a grados2
abs(x)Valor absoluto3
round(x, 2)Redondea a 2 decimales7
print("L =", L)Muestra valores2
f"{L:.2f} m"Texto con un número de 2 decimales2
f"{g:>4}"Número alineado a la derecha en 4 espacios4
str(3)Convierte un número en texto10

A.3 Listas y diccionarios

Una lista guarda valores en orden y se consulta por posición, desde 0. Un diccionario guarda valores con nombre y se consulta por clave. En la calculadora, los nodos, las barras, los apoyos y las cargas son diccionarios cuyas claves son los números de nodo o de barra, desde 1, y cuyos valores son a su vez diccionarios.

Tabla A.2: Listas y diccionarios.

CódigoQué haceCap.
libres = [3, 5, 6]Crea una lista3
libres[0]Primer elemento (posición 0)3
len(libres)Cantidad de elementos3
libres.append(7)Agrega un elemento al final3
list(range(1, 9))Lista de 1 a 87
nodos = {1: {"x": 0.0}}Crea un diccionario anidado3
nodos[1]["x"]Valor de una clave3
cargas[3] = {"x": 20.0}Agrega o cambia una clave3
3 in cargas¿Existe la clave 3?3
nodos.items()Pares de clave y valor4
nodos.values()Solo los valores11
resultados.keys()Solo las claves12
dict(barra)Copia un diccionario10

A.4 Bucles y decisiones

Las instrucciones que se repiten o que dependen de una condición forman un bloque: van sangradas cuatro espacios debajo de una línea que termina en dos puntos.

Tabla A.3: Bucles, decisiones y comparaciones.

CódigoQué haceCap.
for n, b in barras.items():Recorre un diccionario4
for g in range(4):Repite para 0, 1, 2 y 37
for i, g in enumerate(gdl):Recorre con la posición7
total += LIgual que total = total + L4
if apoyo["x"]:Ejecuta si se cumple6
else:Si no se cumple6
==, !=, <, >=Comparaciones6
True, FalseValores lógicos3
and, not, not inCombinan condiciones12
NoneEl valor «nada»7

A.5 Funciones y errores

Una función recibe datos por sus parámetros y devuelve un resultado con return. Las variables creadas dentro de ella son locales: no existen fuera de la función.

Tabla A.4: Funciones y excepciones.

CódigoQué haceCap.
def rigidez_local(E, A, L):Define una función5
"""Documentación."""Explica qué hace la función5
return kDevuelve el resultado5
return {"U": U, "N": N}Devuelve varios resultados12
decimales=1Valor por omisión7
mostrar_vector(F, decimales=3)Argumento con nombre11
raise ValueError("...")Produce un error9
except ValueError:Atrapa un error9
isinstance(x, str)¿Es x un texto?10

A.6 NumPy

NumPy trabaja con arreglos de números: vectores y matrices. Sus índices, como los de las listas, empiezan en 0; la función indices de la calculadora (capítulo 6) traduce los grados de libertad, numerados desde 1, a esos índices.

Tabla A.5: Vectores y matrices con NumPy.

CódigoQué haceCap.
import numpy as npCarga NumPy5
np.array([[1, -1], [-1, 1]])Crea una matriz5
T.T @ k @ TTranspuesta y producto5
K.shapeDimensiones5
np.zeros((8, 8))Matriz nula de 8×88 \times 87
K[0, 1]Fila 0, columna 17
K[np.ix_(filas, cols)]Submatriz7
K[np.ix_(e, e)] += kEnsambla una barra7
F[0::2]Elementos 0, 2, 4, …8
np.allclose(k, k.T)¿Casi iguales?5
np.linalg.matrix_rank(K)Rango5
np.linalg.solve(K, F)Resuelve el sistema9
np.abs(U).max()Mayor desplazamiento9
np.set_printoptions(precision=1)Decimales5

A.7 Matplotlib

Cada gráfico se dibuja en unos ejes, ax, que pertenecen a una figura, fig. Primero se crean ambos, después se dibuja sobre los ejes y al final se muestra la figura.

Tabla A.6: Gráficos con Matplotlib.

CódigoQué haceCap.
import matplotlib.pyplot as pltCarga Matplotlib3
fig, ax = plt.subplots()Figura y ejes3
fig, (ax1, ax2) = plt.subplots(1, 2)Dos paneles11
ax.plot([x1, x2], [y1, y2])Dibuja una línea3
color="black", linewidth=2Color y grosor11
linestyle="--"Línea discontinua11
ax.text(x, y, "3")Escribe un texto4
ax.set_aspect("equal")Misma escala en xx e yy3
ax.set_title("Deformada")Título de los ejes3
ax.legend()Muestra la leyenda11
ax.axis("off")Oculta los ejes11
plt.show()Muestra la figura3