function gershdisc(A) % Spočte a vykreslí přesná vlastní čísla a Geršgorinovi kruhy pro matici A. error(nargchk(nargin,1,1)); if size(A,1) ~= size(A,2) error('Matrix should be square'); return; end % Počítáme přes řádky A jednotlivé kruhy: for i=1:size(A,1) h=real(A(i,i)); % souřadnice středu dává diag. prvek k=imag(A(i,i)); r=0; for j=1:size(A,1) % poloměr je suma mimodiag. prvků if i ~= j r=r+(norm(A(i,j))); end end N=256; % zvolíme body pro vykreslení kruhu t=(0:N)*2*pi/N; plot(r*cos(t)+h,r*sin(t)+k,'-'); % vykreslení Gerš. kruhu hold on; plot(h, k,'+'); % střed Gerš. kruhu end axis equal; % čtvercové osy pro vizualizaci % Výpočet přesných vl.č.: ev=eig(A); for i=1:size(ev) % vykreslení vl. č. rev=plot(real(ev(i)),imag(ev(i)),'ro'); end hold off; legend(rev,'Actual Eigenvalues'); end