%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% lanczos()
% This function iterates Arnoldi factorization by k steps
% for a symmetric matrix
% Input :
% A - Symmetric matrix to be factorized
% v1 - initial vector for V
% k - # of iterations
% tol - tolerance for breakdown
% Output
% T - k by k trigoanl matrix
% V - n by k Arnoldi matrix
% Sungwoo Park
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [T,V,w] = lanczos(A,v1,k,tol)
% Initialization
v0=0;
v1 = v1/norm(v1);
V = v1;
beta = 0;
alpha = 0;
T = spalloc(k,k,3*k);
% Compute norm of A
if issparse(A)
anorm = normest(A);
else
anorm = norm(A);
end
% Iterate k-steps Arnoldi
for j=1:k
w = A*v1 - beta*v0;
alpha= w'*v1;
T(j,j) = alpha;
w = w-alpha*v1;
beta= norm(w);
if j