www.pudn.com > starter.zip > mcholinc.m, change:2011-01-04,size:564b


function [R,tau] = mcholinc(H,verbose) 
% Computes Cholesky of H+tau*I, for suitably large tau that matrix is pd 
 
p = size(H,1); 
 
beta = norm(H,'fro'); 
if min(diag(H)) > 1e-12 
    tau = 0; 
else 
    if verbose 
        fprintf('Small Value on Diagonal, Adjusting Hessian\n'); 
    end 
    tau = max(beta/2,1e-12); 
end 
while 1 
    [R,posDef] = chol(H+tau*eye(p)); 
    if posDef == 0 
        break; 
    else 
        if verbose 
            fprintf('Cholesky Failed, Adjusting Hessian\n'); 
        end 
        tau = max(2*tau,beta/2); 
    end 
end