import numpy as np
def householder(A):
(r, c) = np.shape(A)
Q = np.identity(r)
R = np.copy(A)
for i in range(r - 1):
x = R[i:, i]
e = np.zeros_like(x)
e[0] = np.linalg.norm(x)
u = x - e
v = u / np.linalg.norm(u)
Q_i = np.identity(r)
Q_i[i:, i:] -= 2.0 * np.outer(v, v)
R = np.dot(Q_i, R)
Q = np.dot(Q, Q_i)
return (Q, R,c)
np.set_printoptions(precision=4, suppress=True)
A = eval(input('A='))
A = np.array(A,dtype=float)
b = eval(input('b='))
b = np.array(b,dtype=float)
(Q, R,c) = householder(A)
x=np.arange(c)
B = np.dot(Q.T,b)
x=np.linalg.solve(R,B)
print('Q:',Q)
print('R:',R)
print('x:',x)
#(made cheng)