Bauer-Fike Eigenvalue Sensitivity Bound

In [2]:
import numpy as np
import numpy.linalg as la

In the Bauer-Fike eigenvalue sensitivity bound, an important observation is that, given a diagonalized matrix $$X^{- 1} A X = D$$ that is perturbed by an additive perturbation $E$ $$X^{- 1} (A + E) X = D + F,$$ and if we suppose that $\mu$ is an eigenvalue of $A+E$ (and $D+F$), we have $$\|(\mu I - D)^{- 1}\|^{- 1} = | \mu - \lambda _k |,$$ where $\lambda_k$ is the eigenvalue of $A$ (diagonal entry of $D$) closest to $\mu$.

This notebook illustrates this latter fact. To that end, let the following be $D$:

In [4]:
D = np.diag(np.arange(6))
D
Out[4]:
array([[0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0],
       [0, 0, 2, 0, 0, 0],
       [0, 0, 0, 3, 0, 0],
       [0, 0, 0, 0, 4, 0],
       [0, 0, 0, 0, 0, 5]])
In [5]:
mu = 2.1
In [6]:
mu * np.eye(6) - D
Out[6]:
array([[ 2.1,  0. ,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  1.1,  0. ,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0.1,  0. ,  0. ,  0. ],
       [ 0. ,  0. ,  0. , -0.9,  0. ,  0. ],
       [ 0. ,  0. ,  0. ,  0. , -1.9,  0. ],
       [ 0. ,  0. ,  0. ,  0. ,  0. , -2.9]])
In [9]:
la.inv(mu * np.eye(6) - D).round(3)
Out[9]:
array([[ 0.476,  0.   ,  0.   ,  0.   ,  0.   ,  0.   ],
       [ 0.   ,  0.909,  0.   ,  0.   ,  0.   ,  0.   ],
       [ 0.   ,  0.   , 10.   ,  0.   ,  0.   ,  0.   ],
       [-0.   , -0.   , -0.   , -1.111, -0.   , -0.   ],
       [-0.   , -0.   , -0.   , -0.   , -0.526, -0.   ],
       [-0.   , -0.   , -0.   , -0.   , -0.   , -0.345]])
In [10]:
la.norm(la.inv(mu * np.eye(6) - D), 2)
Out[10]:
9.999999999999991

The actual norm doesn't matter--the norm of a diagonal matrix has to be the biggest (abs. value) diagonal entry:

In [11]:
la.norm(la.inv(mu * np.eye(6) - D), np.inf)
Out[11]:
9.999999999999991
In [12]:
1/ la.norm(la.inv(mu * np.eye(6) - D), 2)
Out[12]:
0.10000000000000009

Note that this matches the distance between $\mu$ and the closest entry of $D$.