Текст подпрограммы и версий
amz8r_p.zip , amz8e_p.zip
Тексты тестовых примеров
tamz8r_p.zip , tamz8e_p.zip

Подпрограмма:  AMZ8R (модуль AMZ8R_p)

Назначение

Преобразование симметричной разреженной матрицы из формата RR (C) U в формат RR (U) U.

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

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

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

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

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

procedure AMZ8R(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; var AD :Array of Real;
                N :Integer); 

Параметры

IA,JA,AN - на входе: заданные портрет и ненулевые элементы матрицы А в формате RR (С) U; на выходе: заданные портрет и ненулевые элементы верхнего треугольника матрицы А в формате RR (U) U;
АD - вещественный одномерный массив длины N, содержащий на выходе диагональные элементы матрицы А;
N - заданный порядок матрицы А (тип: целый).

Версии

AMZ8E - преобразование симметричной разреженной матрицы из формата RR (С) U в формат RR (U) U в режиме расширенной (Extended) точности; при этом параметры AN и AD должны иметь тип Extended.

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

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

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

Unit TAMZ8R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMZ8R_p;

function TAMZ8R: String; 

implementation

function TAMZ8R: String;
var
N,_i :Integer;
AD :Array [0..3] of Real;
const
IA :Array [0..4] of Integer = ( 1,3,4,7,10 );
JA :Array [0..8] of Integer = ( 4,1,3,4,2,3,4,3,1 );
AN :Array [0..8] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 );
begin
Result := '';

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

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

end.

Результаты:   

      IA   =  ( 1, 2, 3, 4, 4 )
      JA   =  ( 4, 3, 4,  4, 2, 3, 4, 3, 1 )
      AN  =  ( 1, 1, 1, 1,  1, 1, 1, 1, 1 )
      AD  =  ( 1, 0, 1, 1 )