A5 Scripts

P1

% P1
clc
randn('seed',0)

% n = 4 tests

disp('n = 4 examples')
disp(' ')
disp('norm(Q''*Q - I)   norm(Q''*A*Q - D)    norm(Q - I,''fro'')  ')
disp('------------------------------------------------------------')
I = eye(4,4);
for k=1:10
   A = randn(4,4); A = A-A';
   [Q,D] = skew34(A);
   eQ = norm(Q'*Q - I);
   eD = norm(Q'*A*Q - D);
   eI = norm(Q-I,'fro');
   disp(sprintf('  %10.3e        %10.3e           %10.3e',eQ,eD,eI))
end

disp(' ')
disp('n = 3 examples')
disp(' ')
disp('norm(Q''*Q - I)   norm(Q''*A*Q - D)    norm(Q - I,''fro'')  ')
disp('------------------------------------------------------------')
I = eye(3,3);
for k=1:10
   A = randn(3,3); A = A-A';
   [Q,D] = skew34(A);
   eQ = norm(Q'*Q - I);
   eD = norm(Q'*A*Q - D);
   eI = norm(Q-I,'fro');
   disp(sprintf('  %10.3e        %10.3e           %10.3e',eQ,eD,eI))
end


P2

% P2
% Tests SkewJacobi

randn('seed',0)
clc
tol = .000000000000001;
itmax = 25;

for n = 20:21
   
   A = randn(n,n); A = A - A'; A = A/norm(A,'fro');

   [Q,D,SweepHistory] = SkewJacobi(A,'skew34',tol,itmax);
   disp(' ')
   disp(sprintf('n = %2d  with skew34 ...',n))
   disp(' ')
   disp(' Sweep      BlockOff(A)')
   disp('--------------------------')
   for k = 1:length(SweepHistory)
      disp(sprintf('   %2d       % 10.3e',k,SweepHistory(k)))
   end
   disp(' ')
   disp(sprintf('norm(Q''*Q - I)   = %10.3e',norm(Q'*Q-eye(n,n))))
   disp(sprintf('norm(Q''*A*Q - D) = %10.3e',norm(Q'*A*Q - D)))

   [Q,D,SweepHistory] = SkewJacobi(A,'schur',tol,itmax);
   disp(' ')
   disp(sprintf('n = %2d  with Schur ...',n))
   disp(' ')
   disp(' Sweep      BlockOff(A)')
   disp('--------------------------')
   for k = 1:length(SweepHistory)
      disp(sprintf('   %2d       % 10.3e',k,SweepHistory(k)))
   end
   disp(' ')
   disp(sprintf('norm(Q''*Q - I)   = %10.3e',norm(Q'*Q-eye(n,n))))
   disp(sprintf('norm(Q''*A*Q - D) = %10.3e',norm(Q'*A*Q - D)))
   
end

P3

% P3
% Tests Special Schur

% Correctness

clc
randn('seed',0)
n = 10;
p = 3;
X = randn(n,p); B = randn(p,p); B = B+B';
[Q,D] = SpecialSchur(X,B);
[Q1,D1] = schur(eye(n,n)+X*B*X');
d = sort(diag(D));
d1 = sort(diag(D1));
error = norm(Q'*(eye(n,n)+X*B*X')*Q - D);
disp(sprintf('norm(Q''(I+XBX'')Q - D) = %10.3e',error))
errorQ = norm(Q'*Q - eye(n,n));
disp(sprintf('norm(Q''Q - eye(n,n) ) = %10.3e',errorQ))
disp(' ')
disp(' k           D(k,k)                D1(k,k)')
disp('-----------------------------------------------------')
for k=1:n
   disp(sprintf('%2.0d   %20.16f   %20.16f',k,d(k),d1(k)))
end

% Efficiency

nRepeat = 10; n = 300; p = 5;
X = randn(n,p);
B = randn(p,p); B = B+B';
tic 
for k=1:nRepeat
   [Q,D] = SpecialSchur(X,B);
end
t1 = toc;

tic 
for k=1:nRepeat
   [Q,D] = schur(eye(n,n)+X*B*X');
end
t2 = toc;

disp(' ')
disp(sprintf('n = %2.0d,  p = %2.0d',n,p))
disp(sprintf('Schur Time / SpecialSchur Time = %6.2f',t2/t1))
   




P4

% P4
% Tests GenEval

clc
randn('seed',0)
n = 10;

% Random ill-conditioned A and B ...

[Z,T] = qr(randn(n,n)); A = Z*diag((0:n-1)+.000001)*Z';
[Z,T] = qr(randn(n,n)); B = Z*diag((0:n-1)+.000001)*Z';

[X,lambda] = GenEval(A,B);

disp('  j            lambda(j)           norm( (A - lambda(j)*B)*X(:j))/norm(X(:,j))')
disp('------------------------------------------------------------------------------')
for j=1:n
   error = norm((A - lambda(j)*B)*X(:,j))/norm(X(:,j));
   disp(sprintf(' %2d  %27.15f                  %10.3e',j,lambda(j),error))
end