Текст подпрограммы и версий
am21r_c.zip , am21d_c.zip
Тексты тестовых примеров
tam21r_c.zip , tam21d_c.zip

Подпрограмма:  am21r_c

Назначение

Умножение симметричной разреженной матрицы, заданной в формате 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_c .

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

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

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

    int am21r_c (integer *ia, integer *ja, real *an, real *ad,
        real *b, integer *n, real *c)

Параметры

 ia, ja, -
 an, ad 
заданные портрет и ненулевые элементы матрицы a в формате rr (u) u;
b - вещественный одномерный массив n, содержащий компоненты заданного заполненного  вектора - столбца;
n - заданный порядок матрицы a (тип: целый);
c - вещественный одномерный массив длины n, содержащий компоненты результирующего  вектора - столбца

Версии

am21d_c - умножение симметричной разреженной матрицы, заданной в формате RR (U) U, на разреженный  вектор - столбец в режиме удвоенной точности; при этом параметры an, ad, b и c должны иметь тип double

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

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

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

int main(void)
{
    /* Initialized data */
    static int ia[5] = { 1,4,6,7,7 };
    static int ja[6] = { 4,2,3,4,3,4 };
    static float an[6] = { 3.f,1.f,2.f,3.f,2.f,3.f };
    static float ad[4] = { 0.f,1.f,2.f,3.f };
    static float b[4] = { 1.f,1.f,1.f,1.f };

    /* Local variables */
    extern int am21r_c(int *, int *, float *, float *, float *,
                       int *, float *);
    static float c__[4];
    static int n, i__;

    n = 4;
    am21r_c(ia, ja, an, ad, b, &n, c__);

    for (i__ = 1; i__ <= 4; ++i__) {
         printf("\n  %6.0f \n", c__[i__-1]);
    }
    return 0;
} /* main */


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