Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Kronecker Eigendecomposition

For a Kronecker product A⊗BA \otimes B, all eigenvalues and eigenvectors decompose per-factor:

λij=λiA⋅λjB,vij=viA⊗vjB\lambda_{ij} = \lambda_i^A \cdot \lambda_j^B, \qquad v_{ij} = v_i^A \otimes v_j^B

This means we can compute the full spectrum of an N×NN \times N matrix (N=n1n2N = n_1 n_2) by only decomposing two small matrices. gaussx exploits this for cholesky, sqrt, logdet, and inv.

Context

The Kronecker eigendecomposition is a special case of the tensor product spectral theorem. If A=UAΛAUA⊤A = U_A \Lambda_A U_A^\top and B=UBΛBUB⊤B = U_B \Lambda_B U_B^\top, then

A⊗B=(UA⊗UB) (ΛA⊗ΛB) (UA⊗UB)⊤.A \otimes B = (U_A \otimes U_B)\,(\Lambda_A \otimes \Lambda_B)\,(U_A \otimes U_B)^\top.

This result is foundational for:

  • GP inference on grids -- computing solves and log-determinants without forming the full N×NN \times N matrix (Saatci, 2012).
  • Solving Kronecker-structured linear systems -- reducing an NN-dimensional problem to two smaller per-factor problems.
  • Stochastic PDEs with separable operators -- exploiting product structure in spatial and temporal discretizations.

Setup: PSD Kronecker product

A: 8x8, B: 10x10
A kron B: 80x80 = 6,400 entries

Per-factor eigenvalues

Per-factor eigenvalues: 8 + 10 = 18 eigh calls
Dense eigenvalues: one 80x80 eigh call
Max eigenvalue error: 2.84e-13
<Figure size 1400x350 with 3 Axes>

Structured Cholesky

cholesky(A kron B) = cholesky(A) kron cholesky(B)

cholesky type: Kronecker
||L L^T - K||_max: 5.68e-14

Structured sqrt

sqrt(A kron B) = sqrt(A) kron sqrt(B)

sqrt type: Kronecker
||S S - K||_max: 4.41e-13

Structured logdet

log⁡∣A⊗B∣=n2log⁡∣A∣+n1log⁡∣B∣\log|A \otimes B| = n_2 \log|A| + n_1 \log|B|

Derivation. Using the Kronecker eigenvalues λij=λiAλjB\lambda_{ij} = \lambda_i^A \lambda_j^B:

log⁡∣A⊗B∣=∑i,jlog⁡(λiA λjB)=∑i,j(log⁡λiA+log⁡λjB)=n2∑ilog⁡λiA+n1∑jlog⁡λjB=n2log⁡∣A∣+n1log⁡∣B∣.\log|A \otimes B| = \sum_{i,j} \log(\lambda_i^A \, \lambda_j^B) = \sum_{i,j} \bigl(\log \lambda_i^A + \log \lambda_j^B\bigr) = n_2 \sum_i \log \lambda_i^A + n_1 \sum_j \log \lambda_j^B = n_2 \log|A| + n_1 \log|B|.
Structured logdet:  233.876851
Dense logdet:       233.876851
From eigenvalues:   233.876851

Summary

OperationDense costKronecker costSpeedup
EigenvaluesO(N^3)O(n1^3 + n2^3)~N/n_max
CholeskyO(N^3)O(n1^3 + n2^3)~N/n_max
LogdetO(N^3)O(n1^3 + n2^3)~N/n_max
SolveO(N^3)O(n1^3 + n2^3)~N/n_max

References

  • Van Loan, C. F. (2000). The ubiquitous Kronecker product. Journal of Computational and Applied Mathematics, 123, 85--100.
  • Saatci, Y. (2012). Scalable Inference for Structured Gaussian Process Models. PhD thesis, University of Cambridge.
  • Steeb, W.-H. (2011). Matrix Calculus and Kronecker Product. 2nd edition, World Scientific.