function [iter,eval,delta]=alfse(a,b,evect,adect,sour,eps) % find the solution of a fixed source eigenvalue problem defined as % (a-eval*b)*delta=sour using the inverse power method. The associated % eigenvalue problem is % (a-eval*b)*evect=0 % (a'-eval*b')*adect=0 % function [iter,eval,delta]=alfse(a,b,evect,adect,sour,eps) % (c) 2007 Alain Hebert, Polytechnique Montreal check=adect'*sour ; if abs(check) > eps error('the fixed source is not orthogonal to the adjoint eigenvector') end znum=adect'*a*evect ; zden=adect'*b*evect ; try a=inv(a) ; catch error('singular matrix') end % perform power iterations. iter=0 ; eval=znum/zden ; sour=a*sour ; n=size(a,2) ; delta=zeros(n,1) ; while true iter=iter+1 ; if iter > 300, error('unable to converge.'), end s1=adect'*b*delta ; gar=sour-(s1/zden)*evect+eval*a*b*delta ; err1=max(abs(gar)) ; err2=max(abs(gar-delta)) ; delta=gar ; if err2 <= err1*eps, break, end end