% 固有値の計算

% 与えた固有値と固有ベクトルを持つ行列Aを作る
lambda1 =  2; u1 = (1/sqrt(5))*[1;-2;0];
lambda2 = -3; u2 = (1/3)*[2;1;2];
lambda3 =  5; u3 = 1/(3*sqrt(5))*[-4;-2;5];

A = lambda1*u1*u1' + lambda2*u2*u2' + lambda3*u3*u3';
fprintf("行列A\n");
A

% 計算Aの固有値をQR法で計算する

for iteration=1:40
    [Q,R] = qr(A);
    A = R*Q;
    if ismember(iteration, [5, 10, 20, 40])
        fprintf("%d回\n", iteration);
        A
    end
end
