Вычислительные методы линейной алгебры. Горбаченко В.И - 38 стр.

UptoLike

38
местами. Затем вычисляются элементы
ri
u строки r матрицы U и
размещаются на местах элементов
ri
a . Вырожденность матрицы решаемой
системы определяется аналогично методу Гаусса с выбором главного
элемента по столбцу:
rr
a
ε
, где
15
10
ε
=
. При обнаружении вырожденности
матрицы выходная переменная
flag=0. Проверка правильности
разложения учитывает матрицу перестановок:
T
=
APLU. После расчета
матриц
L
и U функция forwsub реализует решение СЛАУ =L
y
Pb :
function x=forwsub(A,b)
% Решение системы линейных алгебраических уравнений
% с нижней треугольной матрицей
% Вход A - нижняя треугольная матрица размера nxn
% b - вектор размера nxn
% Выход x - решение система уравнений
n=length(b); % размер вектора
x=zeros(n,1); % формирование массива нулей nx1
x(1)=b(1)/A(1,1);
for k=2:n
x(k)=(b(k)-A(k,1:k-1)*x(1:k-1))/A(k,k);
end
Вектор решения x исходной системы получается как решение СЛАУ
=
Ux
y
с помощью уже рассмотренной функции
backsub.
Результаты работы программы имеют вид:
Матрица решаемой системы
A =
1 4 1 3
0 -1 3 -1
3 1 0 2
1 -2 5 1
Вектор правой части
b =
1
2
3
4
Результаты LU-разложения
L =
3.0000 0 0 0
1.0000 3.6667 0 0
1.0000 -2.3333 5.6364 0
0 -1.0000 3.2727 -1.4194
U =
1.0000 0.3333 0 0.6667
0 1.0000 0.2727 0.6364
0 0 1.0000 0.3226
местами. Затем вычисляются элементы uri строки           r матрицы U и
размещаются на местах элементов ari . Вырожденность матрицы решаемой
системы определяется аналогично методу Гаусса с выбором главного
элемента по столбцу: arr ≤ ε , где ε = 10−15 . При обнаружении вырожденности
матрицы    выходная    переменная    flag=0.      Проверка    правильности
разложения учитывает матрицу перестановок: A = P T LU . После расчета
матриц L и U функция forwsub реализует решение СЛАУ Ly = Pb :
function x=forwsub(A,b)
% Решение системы линейных алгебраических уравнений
% с нижней треугольной матрицей
% Вход A - нижняя треугольная матрица размера nxn
%       b - вектор размера nxn
% Выход x - решение система уравнений
n=length(b); % размер вектора
x=zeros(n,1); % формирование массива нулей nx1
x(1)=b(1)/A(1,1);
for k=2:n
    x(k)=(b(k)-A(k,1:k-1)*x(1:k-1))/A(k,k);
end
Вектор решения x исходной системы получается как решение СЛАУ Ux = y
с помощью уже рассмотренной функции backsub.
    Результаты работы программы имеют вид:
Матрица решаемой системы
A =
     1     4     1     3
     0    -1     3    -1
     3     1     0     2
     1    -2     5     1
Вектор правой части
b =
     1
     2
     3
     4
Результаты LU-разложения
L =
    3.0000         0         0              0
    1.0000    3.6667         0              0
    1.0000   -2.3333    5.6364              0
         0   -1.0000    3.2727        -1.4194
U =
    1.0000    0.3333         0         0.6667
         0    1.0000    0.2727         0.6364
         0         0    1.0000         0.3226

                                                                          38