Eigenwerbestimmung mittels Gerschgorin-Kreisscheiben

  • Gegeben: Matrix $A \in M(n \times n)$
  • Gesucht: Ungefähre Lage der Eigenwerte

In [1]:
# input matrix A
A = matrix([
    [3, 1],
    [2, -2]
])
#

In [2]:
m, n = A.dimensions()
assert m == n, "A must be n x n"

Mittelpunkte der Kreisscheiben sind die Werte $a_{i,i}$ der Hauptdiagonale.


In [3]:
show([A[i,i] for i in range(n)])


Radien der Kreisscheiben:

$$ r_i = - a_{i,i} + \sum_{j = 1}^{n} a_{i,j} $$$$ c_i = - a_{i,i} + \sum_{j = 1}^{n} a_{j,i} $$

In [4]:
Rs = []  # row sums
Cs = []  # column sums
for i in range(n):
    r = sum([A[i, j] for j in range(n) if i != j])
    Rs.append(r)
    c = sum([A[j, i] for j in range(n) if i != j])
    Cs.append(c)
show(Rs)



In [5]:
show(Cs)


Kreisscheibe

$$ R_i = \{ z \in \mathbb{C} \mid |z - a_{i,i}| \leq r_i \} $$

In [6]:
center_points = [[A[i,i], 0] for i in range(n)]
scatter_plot(center_points) + sum([ circle(cp, Rs[i]) for i, cp in enumerate(center_points) ])


Out[6]:

Kreisscheibe

$$ C_i = \{ z \in \mathbb{C} \mid |z - a_{i,i}| \leq c_i \} $$

In [7]:
scatter_plot(center_points) + sum([ circle(cp, Cs[i]) for i, cp in enumerate(center_points) ])


Out[7]:

In [ ]: