Copyright (C) 2019 Andreas Kloeckner
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$:
D = np.diag(np.arange(6))
D
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]])
mu = 2.1
mu * np.eye(6) - D
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]])
la.inv(mu * np.eye(6) - D).round(3)
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]])
la.norm(la.inv(mu * np.eye(6) - D), 2)
9.999999999999991
The actual norm doesn't matter--the norm of a diagonal matrix has to be the biggest (abs. value) diagonal entry:
la.norm(la.inv(mu * np.eye(6) - D), np.inf)
9.999999999999991
1/ la.norm(la.inv(mu * np.eye(6) - D), 2)
0.10000000000000009
Note that this matches the distance between $\mu$ and the closest entry of $D$.