AAE-NA-Labs/Direct Methods for Solving Linear Systems/Alg4_back_substitution.m

33 lines
649 B
Mathematica
Raw Normal View History

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.
[m, n] = size(U);
if U ~= triu(U)
2021-03-14 18:40:53 +01:00
error('Matrix U is not upper triangular!')
end
if m ~= n
error('Matrix is not squared!')
end
if length(b) ~= m
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-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
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);
end
end