How to update cholesky decomposition of the normalized SPD matrix?
4 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(1 个)
SAI SRUJAN
2024-9-25
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!