- •§ 4. Алгебра матриц
- •4.2. Вычисление собственных векторов и собственных значений матриц по методу данилевского
- •4.3. Вычисление собственных векторов и собственных значений симметрической матрицы методом якоби
- •4.4. Задача обращения матриц и вычисления главного определителя по схеме гаусса
- •4.5. Обращение симметрической матрицы методом квадратных корней
- •4.6. Обращение матрицы и решение системы линейных алгебраических уравнений
- •4.7. Умножение уплотненной симметрической матрицы на прямоугольную
- •4.8. Корректировка обратной матрицы после изменения одного элемента в прямой матрице
- •4.9. Матрица причинно-следственных отношений
4.5. Обращение симметрической матрицы методом квадратных корней
Для обратной матрицы X = A-1 справедливо равенство AX = BDX = E, где D - диагональная матрица с элементами d = ±1; E - единичная матрица; B - матрица, удовлетворяющая равенству A = BD, т.е. в некотором смысле достаточно близкая к матрице A. Следовательно, для нахождения матрицы X достаточно последовательно решить два матричных уравнения: BY=E и DX=Y (детали алгоритма метода квадратного корня см. в п. 3.4). Общий объем вычислений при этом составит ~2n арифметических операций. Уточнения приближения к обратной матрице в случае необходимости можно проводить, включая в алгоритм итерации
Xk = X k -1 (2E - AXk -1).
В работе Бахвалова (1973а) доказано, что при достаточно хорошем начальном приближении, когда выполняется неравенство ||E - AX0||<< 1, этот итерационный процесс быстро сходится.
В работе Фадеева [Фадеев, Фадеева, 1963] предложен другой алгоритм обращения симметрической матpицы с ненулевыми ведущими минорами на основе упрощенного варианта метода квадратных корней. Этот алгоритм построен таким образом, что в матрице A-1 заменяются n(n+1)/2 диагональных и наддиагональных элементов элементами матрицы A, при этом поддиагональные элементы матрицы A остаются неизменными. Преимущество такого подхода состоит в том, что требуется только n рабочих ячеек, не нужно никакой единичной матрицы, не извлекаются никакие квадратные корни, выполняется лишь n операций деления. При больших n количество операций умножения приближается к n3/2, что в несколько раз меньше, чем при использовании стандартного алгоритма.
Рассмотрим процедуру invers, построенную на основе такого упрощенного алгоритма.
Формальные параметры процедуры. Входные: n (тип integer) - порядок матрицы A; a[1:n, 1:n] (тип real) - исходная матрица. Выходные: a[1:n,1:n] (тип real) - матрица, размещенная на месте исходной матрицы a, в которой главная диагональ и наддиагональные элементы представляют собой элементы обратной матрицы A-1.
procedure invers (n: integer; var a mas2);
var y,p : real; i,j,k : integer;
v : array [1..n-1] of real;
begin
for k:=1 to n do
begin
{**** если a[1,1]=0, то выход ***}
if a[1,1]=0 then exit;
p:=1.0/a[1,1];
for i:=2 to n do
v[i-1]:=a[1,i];
for i:=1 to n-1 do
begin
a[i,n]:=-v[i]*p;
y:=-v[i]*p;
for j:=i to n-1 do
a[i,j]:=a[i+1,j+1]+v[j]*y
end ;
a[n,n]:=-p;
end ;
for i:=1 to n do
for j:=i to n do
a[i,j]:=-a[i,j]
end .
Приведенная процедура была получена путем перевода процедуры invers66 [Агеев и др., 1976] с языка ALGOL на язык PASCAL и проверена на тех же примерах, что и в подтверждениях к рассматриваемому алгоритму, приведенных в работах [Randel, Brouden, 1962; Caffrey, 1962]. В частности, для матрицы Вильсона
получено
.
Для матрицы пятого порядка, использованной в качестве теста в работе (Randel, Brouden, 1962), результат оказался следующим:
.
Результаты тестирования на IBM PC/AT-386 предлагаемых процедур соответствуют результатам, приведенным в работах [Randel, Brouden,1962; Caffrey, 1962] , с достаточной степенью точности ( < 10-5).
Замечание. В рамках приведенного алгоритма можно легко вычислять определитель исходной матрицы как результат последовательного перемножения значений главных элементов (на что указано и в работе [Caffrey, 1962]. Так, если aii, равный a[i, i], на каждом k-м шаге алгоритма является главным элементом матрицы порядка n, то определитель матрицы может быть вычислен довольно просто: как произведение ведущих элементов. Если при этом выполнялись перестановки столбцов или строк, то появляется сомножитель -1 в степени, равной числу выполненных перестановок.
