Un ejemplo que une varias piezas con los datos de Torroja: la autocorrelación de un registro real, su Toeplitz, un modelo AR y la matriz de trayectoria de la misma señal.
Lee la medida 1 de la estación GS1 con leer_torroja y quédate con el eje vertical.
Calcula la autocorrelación hasta el retardo 100 con autocorrelacion y construye la matriz de Toeplitz \(101\times101\) con toeplitz. Calcula su número de condición y sus valores propios.
Ajusta un AR(\(p\)) con yule_walker para \(p=8\) y para \(p=32\) y calcula el error de predicción.
Construye la matriz de trayectoria de las 600 primeras muestras con \(L=100\) (hankel_trayectoria) y calcula sus valores singulares con svd.
Compara cuántos valores singulares superan el 1 % del mayor con el número de picos de la PSD de R1.
Ver el código
_, a, _ =leer_torroja(TORROJA *"s1_medida01.txt") # registro de GS1, como en A1.4x_pg = a[:, 3] .*1e3r_pg =autocorrelacion(x_pg, 100)T_pg =toeplitz(r_pg)Sp =svd(hankel_trayectoria(x_pg[1:600], 100)).Sn_sing =count(>(0.01* Sp[1]), Sp)(cond_T =cond(T_pg), min_eig =minimum(eigvals(Symmetric(T_pg))), valores_singulares_sobre_1pct = n_sing)
La Toeplitz de 101×101 tiene \(\kappa_2=\) 2,3e+07 y 76 valores singulares de la matriz de trayectoria superan el 1 % del mayor: mucho menos que 100, porque la señal real está dominada por unas pocas componentes (cada modo es un par de valores singulares). Es, de forma cuantitativa, la idea que sostiene a ERA y SSI.
El código de la pestaña Python no se ejecuta en la web: su versión probada está en python/matrices.py, con pruebas de pytest que la comparan con Julia mediante los datos comunes de referencia/matrices.json.
«Pídeselo a Claude»
TipPrompt
«Tengo un fichero de aceleraciones a 100 Hz (s1_medida01.txt, cuatro líneas de cabecera y luego hora y tres ejes). Con Julia y el paquete Resonancia: (1) lee el eje vertical; (2) construye la matriz de trayectoria con ventana L=100 y calcula sus valores singulares; (3) reconstruye la señal con SSA para r = 2, 4, 6 y 10; (4) dime cuántos componentes crees que hay y por qué. No inventes valores: si algo no sale, dilo.»
Verifica. (a) Que usa hankel_trayectoria, ssa y svd del paquete, no código copiado. (b) Que la matriz tiene \(L\times(N-L+1)\) elementos y que promedio_antidiagonal de la matriz de trayectoria devuelve la señal original. (c) Que el error de reconstrucción baja al subir \(r\) y se estabiliza donde acaban los valores singulares de señal. (d) Que su respuesta distingue componentes de modos físicos (cada modo da dos valores singulares). (e) Que no afirma como resultado ningún valor que no haya calculado.
Ejercicios
Los ejercicios cortos están intercalados en cada apartado. Estos tres integran varios.
Una amiga mide una aceleración durante 10 minutos y propone calcular la matriz de covarianza de las \(N\) muestras (\(N=60\,000\)) y su inversa para «blanquear» la señal. Explica por qué eso es una mala idea y cómo usarías la estructura de la matriz.
Señalo el tamaño (\(60\,000^2\) elementos) y el coste (\(O(N^3)\) de invertir, \(O(N^2)\) de guardar).
Reconozco que la covarianza de una señal estacionaria es de Toeplitz y que solo hacen falta \(N\) números (\(r_k\)).
Propongo un método estructurado (Levinson–Durbin, filtro AR o FFT) en lugar de la matriz completa.
Menciono el mal condicionamiento de la Toeplitz de una señal con picos espectrales.
La covarianza de una señal estacionaria es de Toeplitz: basta la autocorrelación \(r_0,\dots,r_{N-1}\) (60 000 números en vez de 3 600 millones). Blanquear equivale a filtrar con el AR\((p)\) ajustado por Yule–Walker: se resuelve con Levinson–Durbin en \(O(p^2)\) y se aplica con una convolución (rápida con la FFT). Además, la inversa explícita estaría mal condicionada si la señal tiene picos espectrales marcados.
Quieres identificar los polos de un sistema a partir de su respuesta impulsional medida. ¿Qué matriz construyes primero?
Una matriz de Hankel con los valores de la respuesta impulsional (ERA).
La matriz de Vandermonde de los instantes de medida.
Una matriz circulante con la respuesta impulsional.
La matriz de Gram de los modos.
La a. La matriz de Hankel de los parámetros de Markov se factoriza como observabilidad por controlabilidad, y su SVD y el desplazamiento de una muestra dan \(\widehat{\mathbf A}\) (ecuación 2 de A1.5), cuyos autovalores son los polos.
Resuelves un sistema con una matriz de \(\kappa_2=10^{8}\) en doble precisión (\(\varepsilon\approx10^{-16}\)). ¿Cuántas cifras decimales significativas esperas conservar en la solución, como mucho?
\(16-\log_{10}\kappa=16-8=8\) cifras (la cota \(\kappa\varepsilon\approx10^{-8}\) de error relativo). Es una cota superior: el error real puede ser menor.
La doy por superada si…
Qué no dice esta unidad
Los algoritmos de identificación (FDD, SSI, ERA completos, diagramas de estabilización) se desarrollan en M7.5–M7.9, con incertidumbre y validación; aquí solo se prepara la matemática y se muestra el caso ideal.
Los tiempos de la Tabla 1 de A1.3 son de un ordenador y una versión concretos; las tendencias son las generales.
La estimación de Yule–Walker de la sección de Torroja es dentro de la muestra; no se ha hecho validación cruzada.
Las implementaciones en JavaScript (SVD y autovalores por el método de Jacobi) son válidas para matrices pequeñas; no sustituyen a LAPACK.
Las cápsulas históricas se apoyan en las fuentes citadas; donde no se ha leído el original se dice.