НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ» ОТЧЕТ о выполнении задания по теме "Системы линейных алгебраических уравнений" по курсу «ВЫЧИСЛИТЕЛЬНАЯ МАТЕМАТИКА» выполнил студент группы А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