% % This script illustrates difference between % normal and highly non-normal matrices % with respect to small perturbations % d = [ones(20,1) ; 2*ones(60,1) ; 3*ones(40,1)]; n = length(d); b = randn(n,1); [Q,R] = qr(randn(n)); % % change value of tau here to vary non-normality % larger tau gives higher non-normality % % tau = 0; % tau = .05; % tau = .5; tau = input(' input tau between 0 and 1 ') gamma = input(' input gamma between 0 and .1 ') R = R*tau; for j = 1:n, R(j,j) = d(j); end A = Q*R*Q'; [Xa,Sa] = eig(A); % % generate a random matrix % B = randn(n); % % perturb the matrices % Bp = B + gamma*randn(n); [Xb,Sb] = eig(B); [Xbp,Sbp] = eig(Bp); Ap = A + gamma*randn(n); [Xap,Sap] = eig(Ap); sA = diag(Sa); sB = diag(Sb); sAp = diag(Sap); sBp = diag(Sbp); figure(1) plot(real(sA),imag(sA),'o','linewidth',1.5) hold on plot(real(d),imag(d),'r*','linewidth',1.5) disp('strike key') pause plot(real(sAp),imag(sAp),'go','linewidth',1.5) hold off XaCond = cond(Xa) figure(2) plot(real(sB),imag(sB),'o','linewidth',1.5) hold on disp('strike key') pause plot(real(sBp),imag(sBp),'go','linewidth',1.5) hold off XbCond = cond(Xb)