Текст подпрограммы и версий
afh3r_p.zip , afh3e_p.zip , afh3c_p.zip , afs3c_p.zip
Тексты тестовых примеров
tafh3r_p.zip , tafh3e_p.zip , tafh3c_p.zip , tafs3c_p.zip

Подпрограмма:  AFH3R (модуль AFH3R_p)

Назначение

Треугольное разложение неособенной симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня.

Математическое описание

Подпрограмма AFH3R реализует разложение неособенной симметричной матрицы А, записанной в компактной форме, в произведение А = L*D*LТ, где L - нижняя треугольная матрица с единичными диагональными элементами, LТ - транспортированная к ней, а D - блочно - диагональная матрица с блоками порядка 1 или 2.

Вunch J.R., Рarlett В.N., Direct methods for solving symmetric indefinite systems of linear equations, SIАМ J. Numer. Аnal., Vol.8, No.4, December 1971.

Использование

procedure AFH3R(var A :Array of Real; N :Integer;
                var IR :Array of Integer; var R :Array of Real;
                var IERR :Integer);

Параметры

A - вещественный вектор длины N * (N + 1) / 2, который содержит исходную матрицу, записанную в компактной форме; в процессе работы в массиве А накапливаются элементы матриц L и D (см. замечания по использованию);
N - порядок заданной матрицы А (тип: целый);
IR - целый вектор длины 2N, в первых N компонентах которого запоминаются перестановки диагональных элементов, в последних - порядки блоков матрицы D;
R - вещественный вектор длины N, используемый как рабочий;
IERR - целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом:
IЕRR=65 - если матрица является сингулярной.

Версии

AFH3E - разложение неособенной симметричной матрицы с компактной формой представления методом квадратного корня с расширенной (Extended) точностью.
AFH3C - разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня;
AFS3C - разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня.

Вызываемые подпрограммы

UTAF10 - подпрограмма выдачи диагностических сообщений при работе подпрограмм АFН3R, AFH3C, AFS3C .
UTAF11 - подпрограмма выдачи диагностических сообщений при работе подпрограмм АFН3E, AFH3Z.

Замечания по использованию

  1. 

Значения выходных матриц L и D помещаются в матрице А, причем

ai i = di i  ;

ai+1 i = di+1 i  ,  если  di+1 i ≠ 0  (в этом случае li+1 i = 0)

ai+1 i = li+1 i  ,  если  di+1 i = 0

  2. 

Для подпрограммы АFН3E параметры А, R должны иметь тип Extended.

  3.  Для подпрограмм АFН3С, АFS3С параметр А имеет тип Complex.

Пример использования

Unit TAFH3R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH3R_p;

function TAFH3R: String;

implementation

function TAFH3R: String;
var
N,_i,IERR :Integer;
IR :Array [0..5] of Integer;
R :Array [0..2] of Real;
const
A :Array [0..5] of Real = ( 1.0,0.5,-1.0,3.0,2.0,1.0 );
begin
ResuLT := '';  { РЕЗУЛЬТАТ ФУНКЦИИ }
N := 3;
AFH3R(A,N,IR,R,IERR);
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begin
  Result := Result + Format('%20.16f ',[A[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 5 do
 begIN
  Result := Result + Format('%5d ',[IR[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAFH3R',Result);  { вывод результатов в файл TAFH3R.res }
exit;
end;

end.


Результаты:

      A  =   (1., 3., 1., 0.69, -0.06, -1.22) , 
      IR(4)  =  2 ,  IR(5)  =  0 ,  IR(6)  =  1 ,  
      IERR  =  0