You are on page 1of 5

Q 5.

% assignment II. Q.5)


format long;
m = 50; n = 10;
t = linspace(0,1,m);
A = fliplr(vander(t));
A = A(:,1:n);
b = cos(4*t)';
x1 = A\b;
[Q,R] = cgs_qr(A);
x2 = R\(Q'*b);
[Q, R] = mgs_qr(A);
x3 = R\(Q'*b);
[W, R] = householder_qr(A);
Q = formQ(W);
Q = Q(:,1:n);
x4 = R\(Q'*b);
[U, S, V] = svd(A,0);
x5 = V*(S\(U'*b));
x = [x1, x2, x3, x4, x5];
column={'a0','a1','a2','a3','a4','a5','a6','a7','a8','a9'};
T = table(x1, x2, x3, x4, x5,'RowNames',column)

function [Q,R] = cgs_qr(A)


[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);
for k=1:n
Q(:,k) = A(:,k);
for j=1:k-1
R(j,k) = Q(:,j)'*A(:,k);
Q(:,k) = Q(:,k) - R(j,k)*Q(:,j);
end
R(k,k) = norm(Q(:,k));
Q(:,k) = Q(:,k)/R(k,k);
end

function [Q,R] = mgs_qr(A)

[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

You might also like