Over the last few months we have seen how we can use a sequence of Householder transformations followed by a sequence of shifted Givens rotations to efficiently find the spectral decomposition of a symmetric real matrix

implying that the columns of

where

From a mathematical perspective the combination of Householder transformations and shifted Givens rotations is particularly appealing, converging on the spectral decomposition after relatively few matrix multiplications, but from an implementation perspective using

**M**, formed from a matrix**V**and a diagonal matrix**Λ**satisfying**M**×

**V**=

**V**×

**Λ**

implying that the columns of

**V**are the unit eigenvectors of**M**and their associated elements on the diagonal of**Λ**are their eigenvalues so that**V**×

**V**

^{T}=

**I**

where

**I**is the identity matrix, and therefore**M**=

**V**×

**Λ**×

**V**

^{T}

From a mathematical perspective the combination of Householder transformations and shifted Givens rotations is particularly appealing, converging on the spectral decomposition after relatively few matrix multiplications, but from an implementation perspective using

`ak.matrix`

multiplication operations is less than satisfactory since it wastefully creates new `ak.matrix`

objects at each step and so in this post we shall start to see how we can do better.
Full text...