WHAT WE DID ON MARCH 14

Approximately, I mean ...

Contents

Example of a large sparse matrix

We define a NxN sparse matrix, with 4 in the diagonal, -2 in the upper diagonal and -1 in the lower diagonal

N=100;
A=sparse([1:N 1:N-1 2:N], [1:N 2:N 1:N-1],...
         [4*ones(1,N) -2*ones(1,N-1) -1*ones(1,N-1)],N,N);
spy(A)
B=full(A);    % filled with zeros
whos A B    % storage needed for A and B
  Name        Size             Bytes  Class     Attributes

  A         100x100             5576  double    sparse    
  B         100x100            80000  double              

Example of a linear operator

This example continues the previous one. The operator D is equivalent to multiplication by A, but it is independent of the size N

D = @(x) 4*x-2*[x(2:end);0]-[0;x(1:end-1)];
x=randn(N,1);
norm(A*x-D(x))
ans =
    3.961178668390469e-015

Example of a matrix free operator

The function MatrixFreePowerMethod is the power method code adapted to work with operators.

MatrixFreePowerMethod(D,randn(10,1),1e-10,1000)

% The eigenvalue corresponds to the 10 x 10 version of the matrix A

type MatrixFreePowerMethod
ans =
   6.713855940010093

function [lnew,x]=MatrixFreePowerMethod(A,x0,tol,itMax)

% [lnew,x]=MatrixFreePowerMethod(A,x0,tol,itMax)
%
% Input:
%      A    : handle to a matrix-vector multiplication routine
%      x0   : column vector with n components
%      tol  : relative tolerance for stopping criterion
%      itMax: maximum number of iterations
% Output:
%      lnew : approximate eigenvalue
%      x    : approximate eigenvector (column vector)
%
% Last modified: March 13, 2014

y=A(x0);
lold=Inf;
for n=1:itMax
    x=(1/norm(y))*y;
    y=A(x);
    lnew=dot(x,y);
    if abs(lnew-lold)<tol*abs(lnew)
        return
    end
    lold=lnew;
end
display('Maximum number of iterations reached without convergence');
lnew=[];
x=[];
return