How to update cholesky decomposition of the normalized SPD matrix?
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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 Kommentare
Antworten (1)
SAI SRUJAN
am 25 Sep. 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 Kommentare
Siehe auch
Kategorien
Mehr zu Mathematics and Optimization finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!