Текст подпрограммы и версий ammjr_p.zip , ammje_p.zip |
Тексты тестовых примеров tammjr_p.zip , tammje_p.zip |
Численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U .
Описание формата RR (C) U приведено в описании подпрограммы AMTSR .
Пусть в формате RR (C) U заданы матрица A размеров p на q и матрица B размеров q на r. Пусть известен также портрет результирующей матрицы C = A * B в формате RR (C) U, полученный, например, предварительно при помощи подпрограммы AMMIR. Подпрограмма AMMJR вычисляет ненулевые элементы матрицы C посредством алгоритма, изложенного в описании подпрограммы AMMIR .
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988.
procedure AMMJR(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; var IC :Array of Integer; var JC :Array of Integer; NP :Integer; NQ :Integer; NR :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; |
IC, JC - | заданный портрет результирующей матрицы C в формате RR (C) U; |
NP - | заданное число строк матрицы A (тип: целый); |
NQ - | заданное число столбцов матрицы A и строк матрицы B (тип: целый); |
NR - | заданное число столбцов матрицы B (тип: целый); |
CN - | вещественный одномерный массив, в котором помещаются вычисленные ненулевые элементы матрицы C согласно портрету IC, JC; |
X - | вещественный одномерный массив длины NR, используемый в подпрограмме в качестве рабочего. |
Версии
AMMJE - | численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U, в режиме расширенной (Extended) точности; при этом параметры AN, BN, CN и X должны иметь тип Extended. |
Вызываемые подпрограммы нет
Замечания по использованию нет
Unit TAMMJR_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AMMJR_p; function TAMMJR: String; implementation function TAMMJR: String; var NP,NQ,NR,_i :Integer; CN :Array [0..3] of Real; X :Array [0..2] of Real; const IA :Array [0..4] of Integer = ( 1,4,4,6,7 ); JA :Array [0..5] of Integer = ( 1,5,4,4,2,1 ); IB :Array [0..5] of Integer = ( 1,2,4,6,6,7 ); JB :Array [0..5] of Integer = ( 2,2,1,2,1,2 ); IC :Array [0..4] of Integer = ( 1,2,2,4,5 ); JC :Array [0..3] of Integer = ( 2,2,1,2 ); AN :Array [0..5] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0 ); BN :Array [0..5] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0 ); begin Result := ''; { ТЕСТ ДЛЯ ПОДПРОГРАММЫ AMMJR } NP := 4; NQ := 5; NR := 3; AMMJR(IA,JA,AN,IB,JB,BN,IC,JC,NP,NQ,NR,CN,X); Result := Result + Format('%s',[' CN=']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[CN[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TAMMJR',Result); { вывод результатов в файл TAMMJR.res } exit; end; end. Результаты: CN = ( 2, 1, 1, 1 )