Текст подпрограммы и версий am19r_p.zip , am19e_p.zip |
Тексты тестовых примеров tam19r_p.zip , tam19e_p.zip |
Умножение прямоугольной разреженной матрицы, заданной в формате RR (C) U, на заполненный вектор - столбец.
Описание формата RR (C) U приведено в описании подпрограммы AMTSR .
Пусть заданы прямоугольная разреженная матрица A размеров N на M в формате RR (C) U и заполненный вектор - столбец B длины M. Подпрограмма AM19R вычисляет заполненный вектор - столбец C длины N, равный произведению матрицы A на вектор - столбец B .
С.Писсанецки. Технология разреженных матриц. -М.: Мир, 1988.
procedure AM19R(var IA :Array of Integer; var JA :Array of Integer; var AN :Array of Real; var B :Array of Real; N :Integer; M :Integer; var C :Array of Real);
Параметры
IA, JA - AN | заданные портрет и ненулевые элементы матрицы A в формате RR (C) U; |
B - | вещественный одномерный массив M, содержащий компоненты заданного заполненного вектора - столбца; |
N - | заданное число строк матрицы A (тип: целый); |
M - | заданное число столбцов матрицы A (тип: целый); |
C - | вещественный одномерный массив длины N, содержащий компоненты результирующего вектора. |
Версии
AM19E - | умножение прямоугольной разреженной матрицы, заданной в формате RR (C) U, на заполненный вектор - столбец в режиме расширенной (Extended) точности; при этом параметры AN, B и C должны быть описаны в режиме Extended. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
Unit TAM19R_p; interface uses SysUtils, Math, { Delphi } LStruct, Lfunc, UtRes_p, AM19R_p; function TAM19R: String; implementation function TAM19R: String; var N,M,_i :Integer; C :Array [0..3] 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 ); 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 ); B :Array [0..5] of Real = ( 1.0,1.0,1.0,1.0,1.0,1.0 ); begin Result := ''; { ТЕСТ ДЛЯ ПОДПРОГРАММЫ AM19R } N := 4; M := 6; AM19R(IA,JA,AN,B,N,M,C); Result := Result + Format('%s',[' C=']); Result := Result + #$0D#$0A; for _i:=0 to 3 do begin Result := Result + Format('%20.16f ',[C[_i]]); if ( ((_i+1) mod 4)=0 ) then Result := Result + #$0D#$0A; end; Result := Result + #$0D#$0A; UtRes('TAM19R',Result); { вывод результатов в файл TAM19R.res } exit; end; end. Результаты: C = ( 1, 17, - 3, 2 )