Текст подпрограммы и версий
afh6r_p.zip
Тексты тестовых примеров
tafh6r_p.zip

Подпрограмма:  AFH6R (модуль AFH6R_p)

Назначение

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

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

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

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

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

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

procedure AFH6R(var IA :Array of Integer; var JA :Array of Integer;
                N :Integer; var IU :Array of Integer;
                var JU :Array of Integer; var IP :Array of Integer);

Параметры

IA, JA - заданный портрет матрицы А;
N - заданный порядок матрицы А (тип: целый);
IU, JU - вычисленный портрет матрицы U;
IP - целый одномерный массив длины N, используемый в подпрограмме в качестве рабочего.

Версии: нет

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

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

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

Unit TAFH6R_p;
interface
uses
SysUtils, Math, { Delphi }
Lstruct, Lfunc, UtRes_p, AFH6R_p;

function TAFH6R: String;

implementation

function TAFH6R: String;
var
N,_i :Integer;
IU :Array [0..5] of Integer;
JU :Array [0..3] of Integer;
IP :Array [0..4] of Integer;
const
IA :Array [0..5] of Integer = ( 1,2,3,4,5,5 );
JA :Array [0..3] of Integer = ( 5,5,5,5 );
begin
Result := '';  { результат функции }

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

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

end.


Результаты:

       IU  =  ( 1, 2, 3, 4, 5, 5 )
       JU  =  ( 5, 5, 5, 5 )