ВУЗ:
Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »