Текст подпрограммы и версий am21r_p.zip , am21e_p.zip |
Тексты тестовых примеров tam21r_p.zip , tam21e_p.zip |
Умножение симметричной разреженной матрицы, заданной в формате 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 )