>> % Demonstration of the benefit of picking v1 = a1 + sign(a1(1))*norm(a1)*e1, >> % rather than v1 = a1 - norm(a1)*e1 for a 2-by-2 matrix. >> A = [1 1; 1e-9 1] A = 1.00000000000000 1.00000000000000 0.00000000100000 1.00000000000000 >> a1 = A(:,1) a1 = 1.00000000000000 0.00000000100000 >> % First, pick v1 = a1 - norm(a1)*e1 >> v1 = a1-norm(a1)*[1;0] v1 = 1.0e-09 * 0 1.00000000000000 >> v1'*v1 ans = 1.000000000000000e-18 >> v1*v1' ans = 1.0e-18 * 0 0 0 1.00000000000000 >> v1*v1'/(v1'*v1) ans = 0 0 0 1 >> Hv1 = eye(2)-2*v1*v1'/(v1'*v1) Hv1 = 1 0 0 -1 >> Hv1*A ans = 1.00000000000000 1.00000000000000 -0.00000000100000 -1.00000000000000 >> % Note: Hv1*A should be upper triangular: it is not! >> % Now, pick v1 = a1 + norm(a1)*e1 (i.e., v1 = v1 + sign(a1(1))*norm(a1)*e1 >> v1 = a1 + norm(a1)*[1;0] v1 = 2.00000000000000 0.00000000100000 >> v1*v1' ans = 4.00000000000000 0.00000000200000 0.00000000200000 0.00000000000000 >> v1'*v1 ans = 4 >> v1*v1'/(v1'*v1) ans = 1.00000000000000 0.00000000050000 0.00000000050000 0.00000000000000 >> Hv1 = eye(2)-2*v1*v1'/(v1'*v1) Hv1 = -1.00000000000000 -0.00000000100000 -0.00000000100000 1.00000000000000 >> Hv1*A ans = -1.00000000000000 -1.00000000100000 0 0.99999999900000 >> % Note: Hv1*A is now upper triangular