How to update cholesky decomposition of the normalized SPD matrix?
    12 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
function [L] = cholupdate(L,x)
    p = length(x);
    for k=1:p
        r = sqrt(L(k,k)^2 + x(k)^2);
        c = r / L(k, k);
        s = x(k) / L(k, k);
        L(k, k) = r;
        L(k+1:p,k) = (L(k+1:p,k) + s*x(k+1:p)) / c;
        x(k+1:p) = c*x(k+1:p) - s*L(k+1:p,k);
    end
end
Get SPD matrix and factorize it:
H = J'*J
L = chol(H)';
L_updated = cholupdate(L, new_J_row');
It works well. But how can I modify algorithm when I need to do normalization of the SPD matrix?
% normalization
n = 1 ./ sqrt(diag(H));
Hn = diag(n) * H * diag(n);
Ln = chol(Hn)';
Ln_updated = ???
0 comentarios
Respuestas (1)
  SAI SRUJAN
      
 el 25 de Sept. de 2024
        Hi Vlad,
Updating the Cholesky decomposition of a normalized symmetric positive definite (SPD) matrix involves a couple of additional steps compared to the standard update. When you normalize an SPD matrix, you are essentially scaling it, which affects both the matrix and its Cholesky factor.
Please go through the following code sample to proceed further,
% normalization
n = 1 ./ sqrt(diag(H));
Hn = diag(n) * H * diag(n);
Ln = chol(Hn)';
% To update with a new row new_J_row, first normalize the new row:
new_J_row_normalized = new_J_row .* n';
Ln_updated = cholupdate(Ln, new_J_row_normalized');
For a comprehensive understanding of the "chol" function in MATLAB, please refer to the following documentation. 
I hope this helps!
0 comentarios
Ver también
Categorías
				Más información sobre Mathematics and Optimization en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!