%
% 按列存储 (IKJ型) 的 LU 分解: A = L*U
%
clearvars;
close all;

n = 100;
A = randn(n);  % 生成 n 阶随机矩阵

%%% 按列存储的 LU 分解
[L,U] = LU_IKJ(A); 

%%% 测试：计算相对误差  ||A - L*U|| / ||A||，这里用 F-范数
fprintf('relerr = %.4e\n', norm( A - L*U, 'fro') / norm(A,'fro') )


%%% 函数: 按行存储的 LU 分解
function [L,U] = LU_IKJ(A)
%
% 按行存储的 LU 分解 : A = L * U
%
[n,n] = size(A);
for i = 2 : n
    for k = 1 : i-1
        A(i,k) = A(i,k)/A(k,k);
        for j = k+1 : n
            A(i,j) = A(i,j) - A(i,k)*A(k,j);
        end
    end
end
U = triu(A);
L = A - U + eye(n);
end


