www.gusucode.com > 矩阵计算工具箱 - mctoolbox源码程序 > matrixcomp\gersh.m

    function  [G, e] = gersh(A, noplot)
%GERSH    Gershgorin disks.
%         GERSH(A) draws the Gershgorin disks for the square matrix A.
%         The eigenvalues are plotted as crosses `x'.
%         Alternative usage: [G, E] = GERSH(A, 1) suppresses the plot
%         and returns the data in G, with A's eigenvalues in E.
%
%         Try GERSH(GALLERY('LESP',N)) and GERSH(GALLERY('SMOKE',N)).

if diff(size(A)), error('Matrix must be square.'), end

n = length(A);
m = 40;
G = zeros(m,n);

d = diag(A);
r = sum( abs( A-diag(d) )' )';
e = eig(A);

radvec = exp(i * linspace(0,2*pi,m)');

for j=1:n
    G(:,j) = d(j)*ones(m,1) + r(j)*radvec;
end

if nargin < 2

   ax = cpltaxes(G(:));
   for j=1:n
       plot(real(G(:,j)), imag(G(:,j)),'-')      % Plot the disks.
       hold on
   end
   plot(real(e), imag(e), 'x')    % Plot the eigenvalues too.
   axis(ax)
   axis('square')
   hold off

end