clear; clc;

% 输入参数：
% A：待进行QR分解的矩阵（m×n矩阵）
A = [1 2 3; 4 5 6; 7 8 9];  % 示例矩阵


[m, n] = size(A);
Q = eye(n);

for j = 1 : n - 1
    sigma = sign(A(j, j)) * norm(A(j:n, j), 2);
    u = A(j:n, j) + sigma * eye(n - j + 1, 1);
    beta = sigma * (sigma + A(j, j));
    I = eye(n - j + 1);
    Hj = I - 1 / beta * (u * u');
    Hk = blkdiag(eye(j - 1), Hj);
    Q = Q * Hk;
    A = Hk * A;
end
R = A;

% 输出结果：
% Q：正交矩阵（满足Q'=Q逆）
% R：上三角矩阵（满足A=Q*R）
Q, R