Текст подпрограммы и версий
afh7r_p.zip , afh7e_p.zip ,
Тексты тестовых примеров
tafh7r_p.zip , tafh7e_p.zip

Подпрограмма:  AFH7R (модуль AFH7R_p)

Назначение

Численное треугольное разложение симметричной положительно определенной разреженной матрицы, заданной в формате RR (U) U.

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

Описания форматов RR (U) U и RR (U) О приведены в описаниях подпрограмм AM21R и ASH4R соответственно.

Пусть симметричная положительно определенная разреженная матрица А порядка N задана в формате RR (U) U. Подпрограмма AFH7R вычисляет элементы матрицы U по заданному ее портрету в формате RR (U) О, такую, что A = UTDU, где U - верхняя треугольная матрица с единичной диагональю, а D - диагональная матрица. Портрет матрицы U может быть предварительно получен при помощи подпрограммы AFH6R сначала в формате RR (U) U, а затем упорядочен в формат RR (U) О путем двухкратного применения подпрограммы AMTCR .

С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988.

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

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);

Параметры

IA, JA, -     AN, AD    заданные портрет и ненулевые элементы матрицы A в формате RR (U) U;
N - заданный порядок матрицы А (тип: целый);
IU, JU - заданный портрет матрицы U в формате RR (U) O;
UN - вещественный одномерный массив длины N, в который помещаются вычисленные ненулевые элементы матрицы U в соответствии с ее портретом;
DI - вещественный одномерный массив длины N, в который помещаются вычисленные элементы матрицы, обратной к диагональной матрице D разложения;
IP, IPU - целые одномерные массивы длины N, используемые в подпрограмме в качестве рабочих.

Версии

AFH7E - численное треугольное разложение симметричной положительно определенной разреженной матрицы, заданной в формате RR (U) U, в режиме расширенной (Extended) точности; при этом параметры AN, AD, UN и DI должны имет тип Extended.

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

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

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

Unit TAFH7R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH7R_p;

function TAFH7R: String;

implementation

function TAFH7R: String;
var
N,_i :Integer;
IP :Array [0..4] of Integer;
IUP :Array [0..4] of Integer;
UN :Array [0..3] of Real;
DI :Array [0..4] of Real;
const
IA :Array [0..5] of Integer = ( 1,2,3,4,5,5 );
JA :Array [0..3] of Integer = ( 5,5,5,5 );
IU :Array [0..5] of Integer = ( 1,2,3,4,5,5 );
JU :Array [0..3] of Integer = ( 5,5,5,5 );
AN :Array [0..3] of Real = ( 2.0,0.5,2.0,1.0 );
AD :Array [0..4] of Real = ( 16.0,0.625,3.0,0.5,4.0 );
begin
Result := '';  { результат функции }

{      ТЕСТ ДЛЯ ПОДПРОГРАММЫ AFH7R }

N := 5;
AFH7R(IA,JA,AN,AD,N,IU,JU,UN,DI,IP,IUP);
Result := Result + Format('%s',[' UN=']);
Result := Result + #$0D#$0A;
for _i:=0 to 3 do
 begin
  Result := Result + Format('%20.16f ',[UN[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' DI=']);
Result := Result + #$0D#$0A;
for _i:=0 to 4 do
 begin
  Result := Result + Format('%20.16f ',[DI[_i]]);
  if ( ((_i+1) mod 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAFH7R',Result);  { вывод результатов в файл TAFH7R.res }
exit;
end;

end.


Результаты:
   
 UN  =  .125000E+00, .800000E+00, .666667E+00, .200000E+01 
  DI  =  .625000E-01, .160000E+01, .333333E+00, .200000E+01, .600002E+02