% コレスキー分解
% n次の正方行列Aのコレスキー分解A = U'*Uを計算するピボット型アルゴリズム

A = [ 4,  2, -2,  2;...
      2, 10,  2, -5;...
     -2,  2,  3, -4 
      2, -5, -4, 10 ];
n = 4;

U = zeros(n,n);
for k=1:n
    % 行列Uの計算
    U(k,k) = sqrt(A(k,k));
    U(k,k+1:n) = A(k,k+1:n)/U(k,k);
    % 行列Aの更新
    A(k+1:n,k+1:n) = A(k+1:n,k+1:n) - U(k,k+1:n)'*U(k,k+1:n);
end

U
fprintf("U'*U\n");
U'*U
