- •§ 3. Методы решения систем линейных и нелинейных уравнений
- •§ 3. Методы решения систем линейных и нелинейных уравнений
- •3.1. Метод исключения гаусса для систем линейных уравнений
- •3.2. Метод главных элементов
- •3.3. Решение систем нелинейных уравнений методом ньютона
- •3.4. Решение систем линейных уравнений методом квадратного корня
- •3.5. Решение систем линейных уравнений методом итераций
- •3.6. Решение систем линейных уравнений методом зейделя
- •§ 4. Алгебра матриц
- •4.1. Вычисление собственных векторов и собственных значений матриц по методу крылова
3.4. Решение систем линейных уравнений методом квадратного корня
Метод квадратного корня основан на представлении матрицы А, составленной из коэффициентов системы в форме произведения треугольных матриц, что позволят свести решение заданной системы к последовательному решению двух систем с треугольными матрицами.
Метод квадратного корня применяется для решения системы линейных уравнений, коэффициенты которой образуют эрмитову симметрическую матрицу (эрмитова матрица совпадает с комплексно-сопряженной транспонированной A* = A).
Представим матрицу А в виде А = S*D S, где S - верхняя треугольная матрица с положительными элементами на главной диагонали; S*- транспонированная к матрице S; D- диагональная матрица, на диагонали которой находятся числа (+1) или (— 1).
Если матрицы S и D найдены, то заданная система AХ= = F может быть решена следующим путем:
AX = S* D S X = (S* D) S X = B Y = F, (1.28)
где S*D = В есть нижняя треугольная матрица и Y = S X - вспомогательный вектор.
Таким образом, решение системы АX = F равносильно решению двух треугольных систем ВY = F и SX =Y.
Пусть S
= (sik)
при i
> k и sik
0, sii
> 0;
S* = (
);
D = =(dik), d
=
1;
i k. Тогда
из сравнения матриц А
и S*DS
получим
.
Ограничение в сумме получается из учета того факта, что в матрице S ниже главной диагонали элементы обращаются в нуль. Последнее равенство можно переписать несколько иначе, приняв для определенности k = min(k, l):
;
,
откуда окончательно получим формулы для вычисления элементов матриц S и D:
(1.29)
Единственным условием возможности определения sik является skk 0. Для построения матриц полагаем k = 1 и последовательно вычисляем все элементы первой строки s по формуле (1.29); затем полагаем k = 2 - и определяем элементы второй строки и т.д. Когда k = n, тогда найдены все элементы матриц S и D, а следовательно и S*. Затем последовательно выполняем вычисления (1.28):
S* Z = F; D Y = Z; S X = Y
обычным ходом по формулам
(1.30)
при i = 2, 3, ..., n.
Попутно заметим, что определитель матрицы А можно вычислить из выражения
.
(1.31)
Этот метод экономичен, требует n3/3 арифметических действий и при больших n ( n > 50) вдвое быстрее метода Гаусса. Если за основу процедуры принять алгоритм П5.6 Дьяконова [1987], то тогда метод квадратного корня может быть реализован c помощью следующей процедуры:
procedure KVK (M, N : integer;
aa: array of real; bb : array of real;
var C: array of real);
type mas1=array [0..4] of real;
mas=array [0..4] of mas1;
var a : mas; j, k, i : integer; s, c1 : real;
begin
i := 0;
for j := 1 to m do
for k := 1 to n do
begin Inc (i); a[j,k] := aa [i]; end;
for j := 1 to N do
begin
for k := j to N do
begin
s := 0.0;
for i := 1 to M do s := s + a[i,j] * a[i,k];
c[k] := s;
end;
c1 := 0.0;
for i := 1 to M do с1 := c1 + a[i,j]*Bb[i];
for i := j to N do a[i,j] := c[i];
c[J] := c1;
end;
a[1,1] := sqrt (a[1,1]);
for j := 2 to N do a[1,j] := a[j,1] / a[1,1];
for i := 2 to n do
begin
s := 0.0;
for k := 1 to i-1 dо s := s + a[k,i]*a[k,i];
a[i,i] := sqrt (a[i,i] - S);
for j := i+1 to N do
begin
s := 0.0;
for k := 1 to i-1 do
S := S + A[K,I]*A[K,J];
A[I,J] := (A[J,I] - S) / A[I,I];
end;
end;
c[1] := c[1] / a[1,1];
for i := 2 to N do
begin s := 0.0;
for k := 1 to i-1do
s := s + a[k,i] * c[k];
c[i] := (c[i] - s) / a[i,i];
end;
c[n] := c[n] / a[n,n];
for i := n-1 downto 1 do
begin s := 0.0;
for k := i+1 to N do s := s + a[i,k] * c[k];
c[i] := (c[i] - s) / a[i,i];
end;
еnd.
Формальные параметры процедуры.Входные: m, N (тип integer) - m уравнений и n неизвестных определяют размер матрицы А. Для этой процедуры обязательно выполнение m > n, т.е. количество уравнений должно быть больше количества неизвестных (система переопределена), предельный разрешенный случай m = n; а - матрица, составленная из коэффициентов при неизвестных; В - массив, составленный из столбца свободных членов. Выходные: С - массив, в котором содержится решение системы.
Для проверки правильности работы процедуры решалась система 4´4 линейных уравнений методом квадратных корней с точностью 0.0001:
0.68X1 + 0.05X2 + 0.11X3 + 0.08X4 = 2.15 ;
0.05X1 + 0.13X2 + 0.27X3 + 0.80X4 = 0.44 ;
0.11X1 + 0.27X2 + 0.28X3 + 0.06X4 = 0.83 ;
0.08X1 + 0.80X2 + 0.06X3 + 0.12X4 = 1.16 ,
решение которой, полученное методом квадратных корней, будет следующим
Х 1 = 2.97; Х2 = 1.11; Х3 = 0.74; Х4 = -0.07.
