El método de rigideces se enseña como una receta que termina en un número. Esta página es sobre lo que pasa cuando no termina — y sobre por qué eso no es una falla del programa sino una respuesta.
Incluso en una estructura perfectamente apoyada. No es un caso raro: es la teoría.
| v1x | v1z | v2x | v2z | v3x | v3z | |
|---|---|---|---|---|---|---|
| v1x | 6.7068 | 2.5602 | -5.0000 | 0.0000 | -1.7068 | -2.5602 |
| v1z | 2.5602 | 3.8402 | 0.0000 | 0.0000 | -2.5602 | -3.8402 |
| v2x | -5.0000 | 0.0000 | 6.7068 | -2.5602 | -1.7068 | 2.5602 |
| v2z | 0.0000 | 0.0000 | -2.5602 | 3.8402 | 2.5602 | -3.8402 |
| v3x | -1.7068 | -2.5602 | -1.7068 | 2.5602 | 3.4135 | 0.0000 |
| v3z | -2.5602 | -3.8402 | 2.5602 | -3.8402 | 0.0000 | 7.6805 |
Sus autovalores son la rigidez del sistema en cada dirección propia: cuánto cuesta cada movimiento posible. Y hay exactamente tres que valen cero:
Tres en el plano, seis en el espacio, y siempre los mismos tres: no dependen de cuántas barras tenga ni de cómo estén puestas. Poner apoyos es exactamente sacarle esos tres modos — ni uno más, porque cada apoyo de más vuelve la estructura hiperestática pero no cambia esto.
Un autovalor nulo no es un número raro: es un movimiento que se puede hacer gratis.
Cada uno de esos tres autovalores tiene su vector propio, y ese vector es un movimiento de la estructura. Dibujados, son los movimientos de cuerpo rígido de toda la vida — y lo que tienen en común es que ninguna barra cambia de longitud. Sin deformación no hay energía almacenada, y sin energía no hace falta ninguna fuerza para producirlos.
Punteado: la posición original. Sólido: el movimiento, que no estira ninguna barra.
Punteado: la posición original. Sólido: el movimiento, que no estira ninguna barra.
Punteado: la posición original. Sólido: el movimiento, que no estira ninguna barra.
Los que salen son combinaciones de las dos traslaciones y la rotación — cualquier base del mismo plano de movimientos sirve, porque lo que está definido es el espacio, no los tres vectores concretos.
Tachar las filas y columnas de los grados de libertad restringidos es lo que vuelve invertible la matriz.
Con fijo y sobre un rodillo quedan tres grados de libertad libres, y esa submatriz de 3×3 ya no tiene ningún autovalor nulo: es definida positiva. Cualquier movimiento cuesta energía, así que hay una sola configuración en equilibrio.
| v2x | v3x | v3z | |
|---|---|---|---|
| v2x | 6.7068 | -1.7068 | 2.5602 |
| v3x | -1.7068 | 3.4135 | 0.0000 |
| v3z | 2.5602 | 0.0000 | 7.6805 |
| v1x | v2x | v3x | v3z | |
|---|---|---|---|---|
| v1x | 6.7068 | -5.0000 | -1.7068 | -2.5602 |
| v2x | -5.0000 | 6.7068 | -1.7068 | 2.5602 |
| v3x | -1.7068 | -1.7068 | 3.4135 | 0.0000 |
| v3z | -2.5602 | 2.5602 | 0.0000 | 7.6805 |
Es el primer test que a uno se le ocurre, y es el equivocado.
En aritmética exacta el determinante de una matriz singular da cero. En punto flotante nunca: da 10⁻¹⁰, 10⁻¹⁶, lo que salga del redondeo. Y hay un problema peor, que no es de precisión sino de significado — el determinante depende de las unidades. Acá está la misma estructura, con el mismo apoyo y la misma estabilidad, cambiando solo el módulo de elasticidad:
| Módulo E | Determinante | Número de condición |
|---|---|---|
| 2e+7 | 1.311e+11 | 5.227e+0 |
| 2e+10 | 1.311e+20 | 5.227e+0 |
Multiplicar por 1000 multiplica el determinante por , y la estructura no se enteró. Un número que cambia doce órdenes de magnitud sin que cambie nada físico no puede ser el criterio. El número de condición, en cambio, es un cociente entre rigideces: es adimensional y ni se mueve.
No invierte la matriz: la factoriza. Y la factorización falla sola, en el lugar exacto.
Una matriz simétrica y definida positiva se factoriza como , donde son los pivotes. Es más rápido y más estable que invertir, pero lo importante acá es otra cosa: si la matriz deja de ser definida positiva, la factorización se detiene en un pivote nulo o negativo. El control de estabilidad no es un chequeo agregado encima del cálculo — es el cálculo, que no puede seguir.
| v2x | 6.707e+3 |
|---|---|
| v3x | 2.979e+3 |
| v3z | 6.561e+3 |
| v1x | 6.707e+3 |
|---|---|
| v2x | 2.979e+3 |
| v3x | -9.09e-13 |
| v3z | — |
Y como la factorización va en el orden de los grados de libertad, el pivote que falla señala un lugar, no un número abstracto. Por eso los programas comerciales no dicen «la matriz es singular» sino cosas como instability at joint 5, degree of freedom UX.
Con un matiz que conviene saber, y que se ve en el ejemplo de arriba: el pivote se apagó en , pero está perfectamente sujeto por sus dos barras. Lo que pasa es que el movimiento libre es de toda la estructura, y la factorización lo descubre recién al llegar al último grado horizontal: con los anteriores ya fijados, a ese no le queda rigidez propia. O sea que el pivote dice dónde se agota el cálculo, y eso coincide con el culpable solo cuando el culpable es un grado de libertad suelto de verdad — un nudo sin conectar, por ejemplo. En un mecanismo global no hay un culpable único, y el mensaje de un programa comercial tiene exactamente la misma letra chica.
No es que no haya respuesta: es que hay dos respuestas posibles, y son muy distintas.
Como es simétrica, su imagen es el complemento ortogonal de su núcleo. O sea que tiene solución si y solo si la carga es ortogonal a los modos nulos. De ahí salen los dos casos, y hay que mirar la carga para saber en cuál se está:
| v1x | v2x | v3x | v3z |
|---|---|---|---|
| 10 | 0 | 0 | 0 |
No hay equilibrio posible. La carga tiene componente en la dirección del movimiento libre (proyección 0.577), así que la estructura acelera. La estática no tiene nada que responder: es un problema de dinámica.
| v1x | v2x | v3x | v3z |
|---|---|---|---|
| 0 | 0 | 0 | -10 |
Infinitas soluciones. La carga es ortogonal al movimiento libre (proyección 0.000), así que hay equilibrio — pero en infinitas posiciones. Los esfuerzos quedan determinados; el desplazamiento, no.
El segundo caso explica algo que suena imposible: una estructura que «no se puede resolver» pero cuyos esfuerzos sí están determinados. Como el movimiento libre no deforma ninguna barra, sumarlo no cambia ninguna fuerza interna — lo único indeterminado es dónde queda parada.
Qué hace esta app, para no mentir: resuelve invirtiendo con mathjs y comprueba la estabilidad con el número de condición, no con la factorización de arriba. Es un sustituto razonable —detecta lo mismo— pero no es lo que haría un programa de cálculo serio, y los pivotes de esta página se calculan aparte solo para mostrarlos. Que la app resuelva factorizando es una mejora anotada, no algo que ya esté.