function Gerschgorin2(A)

%GERSCHGORIN2 berechnet die Gerschgorin-Kreise einer Matrix
%
%  GERSCHGORIN2(A) berechnet fuer eine gegebene Matrix A
%  die Eigenwerte und Gerschgorin-Kreise nach Spalten
%  und Zeilen und stellt diese graphisch dar.
%
%  See also: eig, Gerschgorin

% Version Gerschgorin 2, 2008-06-24
% (p)+(c) 2008 Jens-Peter M. Zemke / Anleitung LAII

granularity = 300;
[n,k] = size(A);
% Berechnung des Spaltenvektors aequidistanter Werte
% auf dem Einheitskreis
circle = exp(linspace(0,2*pi,granularity)'*i);

% Berechnung der Eigenwerte von A
eigA = eig(A);

% Berechnung des Zeilenvektors der Diagonalelemente
m = diag(A)';
% Berechnung des Zeilenvektors der Spaltenradien
c = sum(abs(A-diag(m)));
% Berechnung des Zeilenvektors der Zeilenradien
r = sum(abs(A-diag(m)),2)';
% Berechnung der Gerschgorin-Kreise
e = ones(granularity,1);
S = e*m+circle*c;
Z = e*m+circle*r;

% Plot der Eigenwerte und Kreise fuer Spalten und Zeilen
plot(real(eigA),imag(eigA),'r+',...
     real(m),imag(m),'ko',...
     real(S(1)),imag(S(1)),'b-',...
     real(Z),imag(Z),'g-',...
     real(S),imag(S),'b-');

% Beschriftung des Plots
title('Gerschgorin-Kreise')
xlabel('Realteil der Eigenwerte')
ylabel('Imaginaerteil der Eigenwerte')
legend('Eigenwerte',...
       'Mittelpunkte',...
       'Spalten-Gerschgorin-Kreise',...
       'Zeilen-Gerschgorin-Kreise')

% Kreise sollten als solche erkennbar sein ;-)
axis equal
