www.gusucode.com > SAE RBM 程序MATLAB源码代码实现的一个关于sae的例子 > minFunc/mcholinc.m

    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