2021-03-13 13:42:56 +01:00
|
|
|
function b = Alg4_back_substitution(U,b)
|
2021-03-14 18:40:53 +01:00
|
|
|
% Argorithm 4: Back Substitution
|
|
|
|
% b = Alg4_back_substitution(U,b) returns vetor b with solution to the
|
|
|
|
% Ux = b.
|
2021-03-06 14:15:22 +01:00
|
|
|
|
2021-03-13 17:46:26 +01:00
|
|
|
[m, n] = size(U);
|
|
|
|
|
|
|
|
if U ~= triu(U)
|
2021-03-14 18:40:53 +01:00
|
|
|
error('Matrix U is not upper triangular!')
|
2021-03-13 17:46:26 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
if m ~= n
|
2021-03-06 14:15:22 +01:00
|
|
|
error('Matrix is not squared!')
|
|
|
|
end
|
|
|
|
|
2021-03-13 17:46:26 +01:00
|
|
|
if length(b) ~= m
|
2021-03-06 14:15:22 +01:00
|
|
|
error('Vector b has wrong length!')
|
|
|
|
end
|
|
|
|
|
2021-03-14 18:40:53 +01:00
|
|
|
if det(U) < eps
|
|
|
|
error('Matrix is not nonsingular!')
|
|
|
|
end
|
2021-03-06 14:15:22 +01:00
|
|
|
|
2021-03-07 22:56:18 +01:00
|
|
|
|
2021-03-14 18:40:53 +01:00
|
|
|
% The following algorithm is based on the Algrotihm 3.1.2 from [2].
|
|
|
|
|
|
|
|
% b(m, :) so that matrices are also accepted
|
2021-03-13 17:46:26 +01:00
|
|
|
b(m, :) = b(m, :)/U(m, m);
|
|
|
|
for i = m-1:-1:1
|
|
|
|
b(i, :) = (b(i, :) - U(i, i+1 : m)*b(i+1 : m, :))/U(i, i);
|
2021-03-06 14:15:22 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|