Текст подпрограммы и версий
amtpr_p.zip , amtpe_p.zip
Тексты тестовых примеров
tamtpr_p.zip , tamtpe_p.zip

Подпрограмма:  AMTPR (модуль AMTPR_p)

Назначение

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

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

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

Пусть исходная прямоугольная матрица А размеров N на M задана в формате RR (С) U и пусть задан массив K = ( k1, k2,..., kN ), содержащий некоторую перестановку чисел ( 1, 2,..., N ), определяющую требуемую перестановку строк.

В результате работы подпрограммы AMTPR вычисляется транспортированная к А матрица в формате RR (С) О с переставленными в нужном порядке строками.

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

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

procedure AMTPR(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; N :Integer; M :Integer;
                var K :Array of Integer; var IAT :Array of Integer;
                var JAT :Array of Integer; var ANT :Array of Real); 

Параметры

IA,JA,AN - заданные портрет и ненулевые элементы транспонируемой матрицы А в формате RR (С) U;
N - заданное число строк транспонируемой матрицы А (тип: целый);
М - заданное число столбцов транспонируемой матрицы А (тип: целый);
К - целый одномерный массив длины N, компоненты которого содержат перестановку чисел ( 1, 2,..., N ), описывающую требуемую перестановку строк матрицы А;
IAT, JAT, -
     ANT  
вычисленные портрет и ненулевые элементы транспонированной матрицы в формате RR (С) O с переставленными в требуемом порядке строками;

Версии

AMTPE - транспонирование прямоугольной разреженной матрицы, заданной в формате RR (С) U, с одновременной перестановкой строк в режиме расширенной (Extended) точности; при этом параметры AN и ANT должны быть описаны как Extended.

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

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

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

Unit TAMTPR_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMTPR_p;

function TAMTPR: String; 

implementation

function TAMTPR: String;
var
N,M,_i :Integer;
IАТ :Array [0..6] of Integer;
JАТ :Array [0..12] of Integer;
ANT :Array [0..12] of Real;
const
IA :Array [0..5] of Integer = ( 1,4,6,8,11,14 );
JA :Array [0..12] of Integer = ( 5,6,3,4,1,3,4,4,3,1,2,6,5 );
K :Array [0..4] of Integer = ( 5,3,2,4,1 );
AN :Array [0..12] of Real = ( 15.0,16.0,13.0,24.0,21.0,33.0,34.0,44.0,43.0,
41.0,52.0,56.0,55.0 );
begin
Result := '';

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

N := 5;
M := 6;
AMTPR(IA,JA,AN,N,M,K,IAT,JAT,ANT);
Result := Result + Format('%s',[' IAT=']);
Result := Result + #$0D#$0A;
for _i:=0 to 6 do
 begin
  Result := Result + Format('%5d ',[IAT[_i]]);
  if ( ((_i+1) mod 7)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' JAT=']);
Result := Result + #$0D#$0A;
for _i:=0 to 12 do
 begin
  Result := Result + Format('%5d ',[JAT[_i]]);
  if ( ((_i+1) mod 13)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
Result := Result + Format('%s',[' ANT=']);
Result := Result + #$0D#$0A;
for _i:=0 to 12 do
 begin
  Result := Result + Format('%20.16f ',[ANT[_i]]);
  if ( ((_i+1) mod 5)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAMTPR',Result);  { вывод результатов в файл TAMTPR.res }
exit;
end;

end.

Результаты:   
  
      IAT  =  ( 1, 3, 4, 7, 10, 12, 14 )
      JAT  =  ( 3, 4, 1, 2, 4, 5, 2, 3, 4, 1, 5, 1, 5 )
      ANT =  ( 21, 41, 52, 33, 43, 13, 34, 24, 44, 55, 15, 56, 16 )