Текст подпрограммы и версий ammmr_p.zip , ammme_p.zip |
Тексты тестовых примеров tammmr_p.zip , tammme_p.zip |
Умножение прямоугольной разреженной матрицы, заданной в формате 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 )