МОСКОВСКИЙ ИНЖЕНЕРНО-ФИЗИЧЕСКИЙ ИНСТИТУТ

advertisement
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»
ОТЧЕТ
о выполнении задания по теме
"Системы линейных алгебраических уравнений"
по курсу
«ВЫЧИСЛИТЕЛЬНАЯ МАТЕМАТИКА»
выполнил студент группы А6-02
Логинов А.В.
Принял преподаватель
Москва, 2011г.
1
ЗАДАНИЕ
Дано: система линейных алгебраических уравнений Ax = b.
Исходные данные: матрица системы A и столбец правой части b.
Задание:
1. Написать программу на языке MATLAB, реализующую заданный метод решения
систем линейных алгебраических уравнений. В качестве входных параметров программы
должны выступать:
-матрица системы;
-вектор коэффициентов.
Программа должна возвращать вектор решения СЛАУ.
При этом программа должна содержать
-проверку на предмет вырожденности матрицы системы
2. При помощи программы найти решение СЛАУ для своего варианта задания (включая
пошаговые результаты выполнения алгоритмов).
Номер в группе: 10.
Кодировка задания: 10-2.
2
ВВЕДЕНИЕ
Одним из методов решения задачи Ax = b является метод разложения матрицы A на
треугольные матрицы, или метод LU-разложения. Преимуществом метода LUразложения по сравнению с методом Гаусса является возможность болеее простого
получения решений для различных векторов правой части системы.
Если все угловые миноры матрицы A отличны от нуля, тогда матрицу A можно
представить в виде A = LU, где L – нижнетреугольная, U – верхнетреугольная матрицы.
Система запишется в виде: LUx = b.
Прямой ход заключается в решении системы Lz = b, в результате находится вектор z.
Обратный ход включает решение системы Ux = z, что позволяет найти вектор x.
Формулы для определения матриц L и U записываются в виде:
j 1
lij  aij   lisu sj , i  j
s 1
j 1

1

uij   aij   lisu sj , i  j
lii 
s 1

3
Задание 1. Написать М-функцию, реализующую разложение матрицы A а
треугольные матрицы L и U.
% Разложение на треугольные матрицы
function [L, U, P] = findlu(A)
if det(A) ~= 0,
% Матрица A - невырожденная
[k, k] = size(A); % Определение размерности матрицы А
L = zeros(k);
% Формирование переменной для хранения матрицы L
U = eye(k);
% Формирование переменной для хранения матрицы U
P = eye(k,k);
% Формирование матрицы перестановок
%---Операции поддержки процесса визуализации--h1 = figure(1);
set(h1,'Renderer','zbuffer','Color',[1 1 1]);
SUBPLOT(2,1,1), h2 = mesh(L, 'FaceColor',[1 1 1]);
colormap(gray);
h3 = findobj('Type','Axes');
set(h3,'Color',[1 1 1],'XColor',[0 0 0],'YColor',[0 0 0], 'ZColor',[0 0 0]);
SUBPLOT(2,1,2), h2=mesh(U,'FaceColor',[1 1 1]);
h3 = findobj('Type', 'Axes');
set(h3,'Color',[1 1 1],'XColor',[0 0 0],'YColor',[0 0 0], 'ZColor',[0 0 0]);
%---------------------------------------------for i=1:k, % Процесс вычисления элементов матриц L и U
for j=1:k,
if i>=j,
% Вычисление элементов матрицы L
sm = 0;
% Начальное значение переменной для хранения суммы ряда
for m=1:(j-1)
sm = sm + L(i,m) * U(m,j); % Вычисление суммы ряда
end;
L(i,j) = A(i,j) - sm; % Вычисление элементов матрицы L
end;
if i<j,
% Вычисление элементов матрицы U
sm2 = 0; % Начальное значение переменной для хранения суммы ряда
for m=1:(i-1),
sm2 = sm2 + L(i,m) * U(m,j); % Вычисление суммы ряда
end;
U(i,j) = (A(i,j) - sm2) / L(i,i);
end;
end;
%---Визуализация матриц L и U--pause(0.1);
SUBPLOT(2,1,1), h2=mesh(L,'FaceColor',[1 1 1]);
h3 = findobj('Type','Axes');
set(h3,'Color',[1 1 1],'XColor',[0 0 0],'YColor',[0 0 0], 'ZColor',[0 0 0]);
SUBPLOT(2,1,2), h2=mesh(U,'FaceColor',[1 1 1]);
h3 = findobj('Type', 'Axes');
set(h3,'Color',[1 1 1],'XColor',[0 0 0],'YColor',[0 0 0], 'ZColor',[0 0 0]);
%--- --end;
else, % Матрица А - вырожденная
disp('Матрица вырожденная');
end; % Выход из программы.
end
Функция возвращает матрицы L и U, а также диагональную матрицу P размерности k,
равной размерности исходной матрицы А.
В процессе выполнения функция строит график, по оси z которого отображается
значение элемента матрицы с координатами (x,y).
4
Задание 2. Решить заданную СЛАУ с использованием LU-разложения.
Исходные матрицы:
A=
3 0 3
2 2 2
0 2 1
1 0 2
b=
0
2
3
2
0
2
1
3
Ввод матриц в консоль MATLAB
A = [3,0,3,0;2,2,2,2;0,2,1,1;1,0,2,3];
b = [0; 2; 3; 2];
Применение функции разложения к матрице A
[L,U,P] = findlu(A);
Промежуточные результаты
L=
U=
3 0 0 0
1
2 2 0 0
0
0 2 1 0
0
1 0 1 4
0
0
1
0
0
P=
1
0
0
0
1 0
0 1
1 -1
0 1
0
1
0
0
0
0
1
0
0
0
0
1
Вывод в виде графика
4
3
2
1
0
4
3.5
3
2.5
2
1.5
1
1.5
1
2
2.5
3
3.5
4
1
0.5
0
-0.5
-1
4
3.5
3
2.5
2
1.5
1
1.5
1
5
2
2.5
3
3.5
4
Расчет матриц, обратных к U и L
inv(U) =
1 0 -1 -1
0 1 0 -1
0 0 1 1
0 0 0 1
inv(L) =
0.3333
0
0
0
-0.3333 0.5000
0
0
0.6667 -1.0000 1.0000
0
-0.2500 0.2500 -0.2500 0.2500
Расчет конечного результата:
x = inv(U) * inv(L) * P * b
x=
-1.2500
0.7500
1.2500
0.2500
Проверка результата:
A*x =
0
2
3
2
6
ЗАКЛЮЧЕНИЕ
В данной работе изучалась програмная реализация решения СЛАУ методом LUразложения. В результате работы была написана функция разложения матрицы на
верхне- и инижнетреугольную матрицы, которая после была применена для решения
заданной системы уравнений. В отчете приводится листинг функции, а также
промежуточные и конечные результаты вычислений. Функция, согласно заданию,
проверяет исходную матрицу системы на невырожденность.
Эксперимент с данной системой (размерности 4) не выявил преимуществ
использования метода LU-разложения перед методом Гаусса решения СЛАУ с
использованием компьютера. Предположительно, результаты будут более заметны при
расчете систем, с матрицей большей размерности.
7
Download