# Bauer-Fike Eigenvalue Sensitivity Bound¶

In :
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 :
D = np.diag(np.arange(6))
D

Out:
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 :
mu = 2.1

In :
mu * np.eye(6) - D

Out:
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 :
la.inv(mu * np.eye(6) - D).round(3)

Out:
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 :
la.norm(la.inv(mu * np.eye(6) - D), 2)

Out:
9.999999999999991

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

In :
la.norm(la.inv(mu * np.eye(6) - D), np.inf)

Out:
9.999999999999991
In :
1/ la.norm(la.inv(mu * np.eye(6) - D), 2)

Out:
0.10000000000000009

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