Por qué la matriz es singular

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.

1. La matriz global es singular siempre

Incluso en una estructura perfectamente apoyada. No es un caso raro: es la teoría.

El ejemplo de toda la página
e1e2e3v1v2v3
KK sin condiciones de borde (6×6)
×10³
v1xv1zv2xv2zv3xv3z
v1x6.70682.5602-5.00000.0000-1.7068-2.5602
v1z2.56023.84020.00000.0000-2.5602-3.8402
v2x-5.00000.00006.7068-2.5602-1.70682.5602
v2z0.00000.0000-2.56023.84022.5602-3.8402
v3x-1.7068-2.5602-1.70682.56023.41350.0000
v3z-2.5602-3.84022.5602-3.84020.00007.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:

0007.178e+38.961e+31.605e+4

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.

2. Los tres movimientos que no cuestan energía

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.

Modo 1
Factor de escala: 1

Punteado: la posición original. Sólido: el movimiento, que no estira ninguna barra.

Modo 2
Factor de escala: 1

Punteado: la posición original. Sólido: el movimiento, que no estira ninguna barra.

Modo 3
Factor de escala: 1

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.

3. Los apoyos sacan esos modos

Tachar las filas y columnas de los grados de libertad restringidos es lo que vuelve invertible la matriz.

Con v1v_1 fijo y v2v_2 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.

KffK_{ff} con apoyos suficientes
×10³
v2xv3xv3z
v2x6.7068-1.70682.5602
v3x-1.70683.41350.0000
v3z2.56020.00007.6805
KffK_{ff} con los dos apoyos solo verticales
×10³
v1xv2xv3xv3z
v1x6.7068-5.0000-1.7068-2.5602
v2x-5.00006.7068-1.70682.5602
v3x-1.7068-1.70683.41350.0000
v3z-2.56022.56020.00007.6805
Apoyos suficientes: todos positivos
2.445e+35.366e+39.989e+3
Sin apoyo horizontal: vuelve a haber un cero
05.120e+35.551e+31.384e+4

4. Por qué el determinante no sirve para darse cuenta

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 EDeterminanteNúmero de condición
2e+71.311e+115.227e+0
2e+101.311e+205.227e+0

Multiplicar EE por 1000 multiplica el determinante por 1000n1000^n, 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.

5. Lo que hace un programa de cálculo

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 K=L⋅D⋅LTK = L \cdot D \cdot L^{T}, donde DD 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.

dj=kjj−∑k<jljk2 dkcon dj>0 para toda jd_j = k_{jj} - \sum_{k<j} l_{jk}^2 \, d_k \qquad \text{con } d_j > 0 \text{ para toda } j
Apoyos suficientes
v2x6.707e+3
v3x2.979e+3
v3z6.561e+3
Los 3 pivotes son positivos: estable.
Sin apoyo horizontal
v1x6.707e+3
v2x2.979e+3
v3x-9.09e-13
v3z—
Se detiene en v3x: con los anteriores ya fijados, a ese grado de libertad no le queda rigidez.

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 v3xv_3x, pero v3v_3 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.

6. Qué significa que sea singular

No es que no haya respuesta: es que hay dos respuestas posibles, y son muy distintas.

Como KK es simétrica, su imagen es el complemento ortogonal de su núcleo. O sea que K⋅U=FK \cdot U = F 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á:

Carga horizontal en un nudo
v1xv2xv3xv3z
10000

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.

Carga vertical en un nudo
v1xv2xv3xv3z
000-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 KffK_{ff} 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é.