|
Текст подпрограммы и версий 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 )