Текст подпрограммы и версий
afh0r_p.zip , afh0e_p.zip , afh0c_p.zip
Тексты тестовых примеров
tafh0r_p.zip , tafh0e_p.zip , tafh0c_p.zip

Подпрограмма:  AFH0R (модуль AFH0R_p)

Назначение

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

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

Подпрограмма AFH0R осуществляет разложение симметричной матрицы размера N*N в произведение А = UTDU, где U - верхняя треугольная матрица, на главной диагонали которой стоят единицы, D - диагональная матрица, с помощью модифицированного метода квадратного корня.

Предполагается, что главные миноры матрицы А отличны от нуля.

R.S.Мartin, G.Рeters, J.Н.Wilkinson, Symmetric Decomposition of a Рositive Definite Мatrix, Numer. Матн, 7, 1965.

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

procedure AFH7R(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; var AD :Array of Real;
                N :Integer; var IU :Array of Integer;
                var JU :Array of Integer; var UN :Array of Real;
                var DI :Array of Real; var IP :Array of Integer;
                var IUP :Array of Integer);

Параметры

A - вещественный двумерный массив размера N*N, содержащий исходную симметричную матрицу; в результате работы подпрограммы над главной диагональю матрицы А запоминается верхняя треугольная матрица U без диагональных элементов; нижняя треугольная часть матрицы А, включая главную диагональ, сохраняется;
S - вещественный вектор длины N, в котором запоминаются величины, обратные диагональным элементам матрицы D;
N - порядок исходной симметричной матрицы А (тип: целый).

Версии

AFH0E - треугольное разложение симметричной матрицы, заданной с расширенной (Extended) точностью, модифицированным методом квадратного корня.
AFH0C - треугольное разложение эрмитовой матрицы А, вида А = U*DU модифицированным методом квадратного корня.

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

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

  1. 

В подпрограмме АFН0E параметры А, S имеют тип Extended.

  2.  В подпрограмме АFН0С параметр А имеет тип Complex.

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

Unit TAFH0R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH0R_p;

function TAFH0R: String;

implementation

function TAFH0R: String;
var
N,I,J,_i :Integer;
A2 :Array [0..24] of Real;
A :Array [0..24] of Real;
S :Array [0..4] of Real;
label
_10;
begin
Result := '';  { результат функции }
N := 5;
for I:=1 to 5 do
 begin
  for J:=I to 5 do
   begin
    A[(I-1)+(J-1)*5] := I;
_10:
    A[(J-1)+(I-1)*5] := I;
   end;
 end;
Result := Result + #$0D#$0A;
for _i:=0 to 24 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;
AFH0R(A,S,N);
Result := Result + #$0D#$0A;
for I:=1 to 5 do
 begin
  for J:=1 to 5 do
   begin
    Result := Result + Format('%20.16f ',[A[(I-1)+(J-1)*5]]) + #$0D#$0A;
   end;
 end;
Result := Result + #$0D#$0A;
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[S[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAFH0R',Result);  { вывод результатов в файл TAFH0R.res }
exit;
end;

end.


Результаты:

          | 1. 1. 1. 1. 1. |                   | 1. |
          | 1. 2. 1. 1. 1. |                   | 1. |
A  =   | 1. 2. 3. 1  1. | ,       S  =   | 1. |  , 
          | 1. 2. 3. 4. 1. |                   | 1. |
          | 1. 2. 3. 4. 5. |                   | 1. |

   это означает, что

          | 1. 1. 1. 1. 1. |                   | 1. 0  0  0  0  |
          | 0. 1. 1. 1. 1. |                   | 0  1. 0  0  0  |
U  =   | 0. 0. 1. 1. 1. | ,       D  =   | 0  0  1. 0  0  | .
          | 0. 0. 0. 1. 1. |                   | 0  0  0  1. 0  |
          | 0. 0. 0. 0. 1. |                   | 0  0  0  0  1. |