Текст подпрограммы и версий
ama8r_p.zip , ama8e_p.zip
Тексты тестовых примеров
tama8r_p.zip , tama8e_p.zip

Подпрограмма:  AMA8R (модуль AMA8R_p)

Назначение

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

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

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

Пусть заданы прямоугольные разреженные матрицы A и B размеров N на M в формате RR (C) U и портрет матрицы C, равной A + B, также в формате RR (C) U, который может быть получен подпрограммой AMA7R на символическом этапе сложения. Подпрограмма AMA8R по этим исходным данным вычисляет ненулевые элементы матрицы C .

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

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

procedure AMA8R(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; var IB :Array of Integer;
                var JB :Array of Integer; var BN :Array of Real;
                N :Integer; M :Integer; var IC :Array of Integer;
                var JC :Array of Integer; var CN :Array of Real;
                var X :Array of Real); 

Параметры

   IA, JA -
      AN  
заданные портрет и ненулевые элементы матрицы A в формате RR (C) U;
   IB, JB -
      BN  
заданные портрет и ненулевые элементы матрицы B в формате RR (C) U;
N - заданное число строк матриц A, B и C (тип: целый);
M - заданное число столбцов матриц A, B и C (тип: целый).
IC, JC - заданный портрет матрицы C = A + B в формате RR (C) U;
CN - вещественный одномерный массив, в котором формируются ненулевые элементы матрицы C согласно портрету  IC, JC;
X - вещественный массив длины M, используемый в подпрограмме в качестве рабочего.

Версии:

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

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

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

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

Unit TAMA8R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMA8R_p;

function TAMA8R: String; 

implementation

function TAMA8R: String;
var
N,M,_i :Integer;
CN :Array [0..14] of Real;
X :Array [0..5] of Real;
const
IA :Array [0..4] of Integer = ( 1,3,7,9,11 );
JA :Array [0..9] of Integer = ( 5,3,4,3,1,5,1,6,4,2 );
IB :Array [0..4] of Integer = ( 1,4,5,8,10 );
JB :Array [0..8] of Integer = ( 1,6,3,5,4,2,1,2,3 );
IC :Array [0..4] of Integer = ( 1,5,9,13,16 );
JC :Array [0..14] of Integer = ( 5,3,1,6,4,3,1,5,1,6,4,2,4,2,3 );
AN :Array [0..9] of Real = ( -1.0,2.0,3.0,3.0,4.0,7.0,-2.0,-1.0,1.0,1.0 );
BN :Array [0..8] of Real = ( 1.0,5.0,-1.0,-2.0,2.0,6.0,4.0,-1.0,1.0 );
begin
Result := '';

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

N := 4;
M := 6;
AMA8R(IA,JA,AN,IB,JB,BN,N,M,IC,JC,CN,X);
Result := Result + Format('%s',[' CN=']);
Result := Result + #$0D#$0A;
for _i:=0 to 14 do
 begin
  Result := Result + Format('%20.16f ',[CN[_i]]);
  if ( ((_i+1) mod 15)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAMA8R',Result);  { вывод результатов в файл TAMA8R.res }
exit;
end;

end.

Результаты:

      CN = ( - 1, 1, 1, 5, 3, 3, 4, 5, 2, - 1, 2, 6, 1, 0, 1 )