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