Текст подпрограммы и версий
am21r_p.zip , am21e_p.zip
Тексты тестовых примеров
tam21r_p.zip , tam21e_p.zip

Подпрограмма:  AM21R (модуль AM21R_p)

Назначение

Умножение симметричной разреженной матрицы, заданной в формате RR (U) U, на заполненный вектор - столбец.

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

Сокращенное название формата RR (U) U происходит от английского словосочетания "Row - wise Representation, Upper, Unordered" (строчное представление, верхний треугольник, неупорядоченное).

Данный формат используется для симметричных и верхних треугольных матриц, у которых большинство диагональных элементов отличны от нуля. В этом формате представляется только верхний треугольник матрицы (внутри каждой строки элементы могут храниться в произвольном порядке), а ее диагональные элементы хранятся в отдельном одномерном массиве.

Поясним данный формат на следующем примере. Пусть дана симметричная матрица  A четвертого порядка:

                               1     2     3     4

                     1     |   0     1     2     3   |
          A =     2     |   1     1     2     3   |
                     3     |   2     2     2     3   |
                     4     |   3     3     3     3   | 

Тогда в рассматриваемом формате представление матрицы  A может иметь следующий вид:

             IA  =  ( 1, 4, 6, 7;  7 )
             JA  =  ( 4, 2, 3;  4, 3;  4 )
            AN  =  ( 3, 1, 2;  3, 2;  3 )
            AD  =  ( 0, 1, 2, 3 ) 

Правила формирования массивов  IA, JA и AN аналогичны правилам формирования соответствующих массивов в формате RR (C) U, описание которого приведено в описании подпрограммы AMTSR .

Подпрограмма AM21R умножает симметричную разреженную матрицу  A порядка  N, заданную в формате RR (U) U, на заполненный вектор - столбец  B длины  N и помещает разультирующий заполненный вектор - столбец в одномерный массив  C длины  N .

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

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

procedure AM21R(var IA :Array of Integer; var JA :Array of Integer;
                var AN :Array of Real; var AD :Array of Real;
                var B :Array of Real; N :Integer;
                var C :Array of Real); 

Параметры

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

Версии

AM21E - умножение симметричной разреженной матрицы, заданной в формате RR (U) U, на разреженный  вектор - столбец в режиме расширенной (Extended) точности; при этом параметры AN, AD, B и C должны иметь тип Extended.

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

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

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

Unit TAM21R_p;
interface
uses
SysUtils, Math, { Delphi }
LStruct, Lfunc, UtRes_p, AM21R_p;

function TAM21R: String; 

implementation

function TAM21R: String;
var
N,_i :Integer;
C :Array [0..3] of Real;
const
IA :Array [0..4] of Integer = ( 1,4,6,7,7 );
JA :Array [0..5] of Integer = ( 4,2,3,4,3,4 );
AN :Array [0..5] of Real = ( 3.0,1.0,2.0,3.0,2.0,3.0 );
AD :Array [0..3] of Real = ( 0.0,1.0,2.0,3.0 );
B :Array [0..3] of Real = ( 1.0,1.0,1.0,1.0 );
begin
Result := '';

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

N := 4;
AM21R(IA,JA,AN,AD,B,N,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('TAM21R',Result);  { вывод результатов в файл TAM21R.res }
exit;
end;

end.

Результаты:    C = ( 6, 7, 9, 12 )