1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| function x = householder(A, b)
[m,n] = size(A);
Q = eye(m);
for k=1:n
s=(norm(A(k:m,k)));
if A(k,k) < 0
s=-s;
endif
v(1:k-1) = 0;
v(k) = A(k,k)+s;
A(k,k) = -s;
v(k+1:m)=A(k+1:m,k);
A(k+1:m,k)=0;
p=s*v(k);
for j = k+1:n
t=v(k:m)*A(k:m,j)/p;
A(k:m,j)=A(k:m,j)'-t*v(k:m);
endfor
t=((v(k:m)*b(k:m))/p);
b(k:m)=b(k:m)'-(t*v(k:m));
for j=k+1:n
t=v(k:m)*Q(k:m,j)/p;
Q(k:m,j)=Q(k:m,j)'-t*v(k:m);
endfor
endfor
x = zeros(n,1);
for i=n:-1:1
suma=0;
for j=(i+1):n
suma+=A(i,j)*x(j);
endfor
x(i)=(b(i)-suma)/A(i,i);
endfor
endfunction |
Partager