Белорусский государственный университет
информатики и радиоэлектроники
Курсовой проект
По курсу: Линейная алгебра и аналитическая геометрия
Тема: “ Исследование систем линейных уравнений неполного ранга и
минимальным по Евклидовой норме решением”
Лабкович О. А.
Борзенков А. В.
Пусть задана система m линейных алгебраических уравнений с n неизвестными общего вида (СЛАУ) в матричной форме:
A*X = B
где
| | |
A – основная матрица системы (или матрица коэффициентов при неизвестных)
X – вектор-столбец решений системы (вектор неизвестных)
B – вектор свободных коэффициентов
Решением системы такого вида называется всякий n – компонентный вектор-столбец X, обращающий матричное уравнение в тождество (равенство).
Найдём решение с помощью метода последовательных исключений Жордана-Гаусса, который заключается в последовательном исключении неизвестных. Дополнительно выделим из множества решений вектор-решения минимальный по Евклидовой норме.
В MatLab стандартная функция rref(A), …/matlab/toolbox/matlab/matfun/rref.m, приводит матрицу A к треугольному виду на основе классического метода исключения Гаусса с частичным выбором ведущего элемента. В данной функции реализуется следующий код: который, не меняя местами столбцы матрицы системы, приводит матрицу к диагональному виду, работая только со строками(таким образом, использование этой функции не приведетк ошибкам).
% Loop over the entire matrix.
% Перебор каждого элемента матрицы
i = 1;
j = 1;
jb = [];
while (i <= m) & (j <= n)
% Find value and index of largest element in the remainder of column j.
% Найти значение и индекс самого большого элемента в остатке от колонки j.
[p,k] = max(abs(A(i:m,j))); k = k+i-1;
if (p <= tol)
% The column is negligible, zero it out.
% Если остаток колонки незначителен, то обнуление остатка и переход на следующую иттерацию.
A(i:m,j) = zeros(m-i+1,1);
j = j + 1;
else
% Remember column index
% Запоминание индекса колонки
jb = [jb j];
% Swap i-th and k-th rows.
% Поменияем месками i-ую и j-ую строки.
A([i k],j:n) = A([k i],j:n);
% Divide the pivot row by the pivot element.
% Деление элементов текущей строки на текущий элемент
A(i,j:n) = A(i,j:n)/A(i,j);
% Subtract multiples of the pivot row from all the other rows.
% Вычесть элементы текущей строки из всех других строк, начиная с j-го элемента.
for k = [1:i-1 i+1:m]
A(k,j:n) = A(k,j:n) - A(k,j)*A(i,j:n);
end
i = i + 1;
j = j + 1;
end
end
Для этого, с помощью элементарных преобразований над строками и перестановки столбцов расширенную матрицу системы A|B (матрица, образованная добавлением столбца свободных коэффициентов B к основной матрице системы A) приведём к виду:
Необходимо отметить, что коэффициенты
Тогда вектор-решения состоит из следующих компонент
Заменим
Подставляя различные числовые значения вместо
Теперь из множества полученных решений необходимо выделить минимальное по Евклидовой норме, то есть найти соответствующие значения
Евклидова норма:
Т.к. функция является положительно определенной квадратичной функцией, то частные производные по всем переменным являются линейными функциями от этих переменных:
Таким образом условием минимума функции
i = 1..n-m
| | |
Построим матричную форму этой системы:
| |
| |
|
Решая эту систему получим искомое значение коэффициентов
В MatLab: C = E \ D;
Откуда вектор минимального по норме решения равен
Пример1 (Ex1.m)
Вектор решения | Норма вектора решений | Невязка |
Пример 10.
Расширенная матрица системы:
Получили диагональную матрицу. Откуда
При
Для нахождения минимальных решений составим функцию и найдём её производную:
Тогда
Пример 2.
Расширенная матрица системы:
Получили диагональную матрицу. Откуда общее решение
При
Для нахождения минимальных решений составим функцию и найдём её частные производные:
Тогда
»
A =
1 -3 6 -5 0
4 2 1 10 2
2 0 -9 1 6
B =
3
5
7
- - = = 1 = = - -
Стандартное решение посредствам системы MatLab X = A\B
X =
0
0
0.5427
0.0513
1.9722
Невязка Eps =
1.0e-015 *
0.8882
0
0
Евклидова норма N =
2.0462
- - = = 2 = = - -
Решение MatLab c первоначальной диагонализацией по методу Гауса
X =
0
0
0.5427
0.0513
1.9722
Невязка Eps =
1.0e-015 *
0
-0.2220
0.0555
Евклидова норма N =
2.0462
- - = = 3 = = - -
Решение системы функцией SLAE
Вектор решения минимизированный по евклидовой норме
0.8957
-0.4673
0.1265
0.0113
1.0560
Евклидова норма вектора решений
1.4669
Невязка Eps =
1.0e-015 *
0.4441
0
0
% SLAE % The decision of System of the linear algebraic equations % Решение системы линейных уравнений с минимизацией % вектора решения по евклидовой норме. % % Входные параметры: % A - матрица коэффициентов системы % B - вектор столбец решения системы % Выходные параметры: % X - вектор решений (A * X = B), минимизированный по норме % N - Евклидова норма % Eps - невязка B - A*X
function [X, N] = SLAE(A, B)
if (nargin < 2) error('Необходимо ввести матрицу системы и вектор свободных коэффициентов'); end;
%Если матрица коэффициентов системы нулевая, %то вывод сообщения об ошибки и выход if (A == 0) error('Неправильное задание параметров'); end
% m - число строк, n - число столбцов [m, n] = size(A);
%Проверка на совместность системы if rank(A) ~= rank([A, B]) disp('Система не совместна'); for i = 1 : n