Текст подпрограммы и версий
ammmr_p.zip , ammme_p.zip
Тексты тестовых примеров
tammmr_p.zip , tammme_p.zip

Подпрограмма:  AMMMR (модуль AMMMR_p)

Назначение

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

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

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

Подпрограмма AMMMR выполняет умножение прямоугольной разреженной матрицы A с NR строками и NC столбцами, заданной в формате RR (C) U, на диагональную матрицу D порядка NR. Ненулевые элементы результирующей матрицы B = A * D размещаются в массиве AN. Портрет матрицы B совпадает с портретом матрицы A .

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

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

procedure AMMMR(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; NR :Integer; NC :Integer;
                var D :Array of Real); 

Параметры

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

Версии

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

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

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

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

Unit TAMMMR_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AMMMR_p;

function TAMMMR: String; 

implementation

function TAMMMR: String;
var
NR,NC,_i :Integer;
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 );
D :Array [0..3] of Real = ( 5.0,5.0,5.0,5.0 );
begin
Result := '';

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

NR := 4;
NC := 4;
AMMMR(IA,JA,AN,NR,NC,D);
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 4)=0 )
   then Result := Result + #$0D#$0A;
 end;
Result := Result + #$0D#$0A;
UtRes('TAMMMR',Result);  { вывод результатов в файл TAMMMR.res }
exit;
end;

end.

Результаты:   AN  =  ( 5, 5, 5, 5, 5, 5, 5, 5, 5 )