% Matlab code eigscat.m % For "Applied Numerical Linear Algebra", Question 4.14 % Written by James Demmel, Oct 25, 1995 % Modified, Jun 5, 1997 % Modified, Oct 15, 2004 % % Plot eigenvalues of a matrix and eigenvalues of % random perturbations of the same matrix. % This illustrates the sensitivity of eigenvalues to perturbations. % % Inputs: % a = input matrix % err = size of perturbation % m = number of perturbed matrices to compute % % Outputs: % Three plots where each symbol is the location of an eigenvalue of % a perturbed matrix: % 'o' marks the location of each unperturbed eigenvalue. % 'x' marks the location of each perturbed eigenvalue, where a % real perturbation matrix of norm err is added to a. % '.' marks the location of each perturbed eigenvalue, where a % complex perturbation % % Compute data % ea contains eigenvalues of unperturbed matrix a % er contains eigenvalues of matrix with real perturbations % ei contains eigenvalues of matrix with complex perturbations ea=conj(eig(a)'); er=ea; ei=ea; for i=1:m, r=rand(size(a))-.5; r=(err/norm(r))*r; er=[er,conj(eig(a+r))']; end j=sqrt(-1); for i=1:m, r=(rand(size(a))-.5)+j*(rand(size(a))-.5); r=(err/norm(r))*r; ei=[ei,conj(eig(a+r)')]; end % % Plot data axis('square'), hold off,plot(real(er),imag(er),'xr'),hold on,grid, plot(real(ea),imag(ea),'ok'),title('Real Perturbations'), disp('pause (hit return to continue)'),pause hold off,plot(real(ei),imag(ei),'.b'),hold on,grid, plot(real(ea),imag(ea),'ok'),title('Complex Perturbations'), disp('pause (hit return to continue)'),pause hold off,plot(real(ei),imag(ei),'.b'),hold on,grid, plot(real(er),imag(er),'xr'),plot(real(ea),imag(ea),'ok'), title('Real and Complex Perturbations') % % Compute and print condition numbers [n,n]=size(a); cnd=1; format short e, [v,d]=eig(a);for i=1:n, v(:,i)=v(:,i)/norm(v(:,i)); end vi=inv(v); for i=1:n, cnd(i)=norm(vi(i,:)); end disp(' Eigenvalues Condition Numbers'), [diag(d),cnd']