1function [L, w] = chol_updown (L, sigma, w) 2%CHOL_UPDOWN update or downdate a Cholesky factorization. 3% Example: 4% [L, w] = chol_updown (L, sigma, w) 5% See also: cs_demo 6 7% Copyright 2006-2012, Timothy A. Davis, http://www.suitesparse.com 8 9beta = 1 ; 10n = size (L,1) ; 11if (n == 1) 12 L = sqrt (L*L'+sigma*w*w') ; 13 return ; 14end 15for k = 1:n 16 alpha = w(k) / L(k,k) ; 17 beta2 = sqrt (beta^2 + sigma*alpha^2) ; 18 gamma = sigma * alpha / (beta2 * beta) ; 19 if (sigma > 0) 20 % update 21 delta = beta / beta2 ; 22 L (k,k) = delta * L (k,k) + gamma * w (k) ; 23 w1 = w (k+1:n) ; 24 w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ; 25 L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w1 ; 26 else 27 % downdate 28 delta = beta2 / beta ; 29 L (k,k) = delta * L (k,k) ; 30 w (k+1:n) = w (k+1:n) - alpha * L (k+1:n,k) ; 31 L (k+1:n,k) = delta * L (k+1:n,k) + gamma * w (k+1:n) ; 32 end 33 w (k) = alpha ; 34 beta = beta2 ; 35end 36