Professional Documents
Culture Documents
[m,n] = size(A);
if m<n,
fprintf('ERROR: A should be an m-by-n matrix with m >= n.\n');
end
Q = zeros(m,n);
R = zeros(n,n);
Q = A;
for j=1:n
R(j,j) = norm(Q(:,j));
Q(:,j) = Q(:,j)/R(j,j);
for k=j+1:n
R(j,k) = Q(:,j)'*Q(:,k);
Q(:,k) = Q(:,k) - R(j,k)*Q(:,j);
end
end
function [W, R] = householder_qr(A)
[m, n] = size(A);
if (m<n)
error('number of rows cannot be smaller than number of columns.');
end
W = zeros(m,n);
for k=1:n
x = A(k:m, k);
if (x(1)>=0)
sgn = 1;
else
sgn = -1;
end
v = sgn*norm(x,2)*eye(m-k+1,1)+x;
v = v/norm(v,2);
A(k:m, k:n) = A(k:m, k:n) - 2*v*v'*A(k:m, k:n);
W(k:m,k) = v;
end
R = A(1:n,:);
end
function Q = formQ(W)
[m, n] = size(W);
if (m<n)
error('number of rows cannot be smaller than number of columns.');
end
Q = eye(m,m);
for k = 1:m
Q(:,k) = formQx(W,Q(:,k));
end
end
function y = formQx(W, x)
[m, n] = size(W);
if (m<n)
error('number of rows cannot be smaller than number of columns.');
end
if (~isvector(x))
error('x must be a vector.');
elseif (length(x) ~= m)
error('length of x must agree with the number of rows for W.');
end
for k = n:-1:1
x(k:m) = x(k:m)-2*W(k:m,k)*(W(k:m,k)'*x(k:m));
end
y = x;
end
Results:
8.
%assignment II. 8
m=60; %matrix size
for i=1:m
for j=1:m
if i==j
A(i,j)=1;
elseif i>j
A(i,j)=-1;
else
A(i,j)=0;
end
end
end
A(1:m,m)=1;
C=cond(A) %8.a) 2 norm conditional number
x1=randn(m,1);
% 8.b) Solving the linear system Ax=b
b=A*x1;
x2=A\b;
e1=x1-x2;
n1=norm(e1,2)
% 8.c) solving by QR Factorisation
[Q,R]=qr(A);
x3= R\Q'*b;
e2=x1-x3;
n2=norm(e2,2)
Results
C=
26.8035
n1 =
1.0403
n2 =
2.0760e-14