AMTSR .

БЧА НИВЦ МГУ. AM20R_C. Умножение матриц и векторов
Текст подпрограммы и версий
am20r_c.zip , am20d_c.zip
Тексты тестовых примеров
tam20r_c.zip , tam20d_c.zip

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

Назначение

Умножение заданного вектора - строки на прямоугольную разреженную матрицу, заданную в формате RR (C) U

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

Описание формата RR (C) U приведено в описании подпрограммы amtsr_c .

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

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

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

    int am20r_c (integer *ia, integer *ja, real *an, real *b,
        integer *n, integer *m, real *c)

Параметры

   ia, ja -
      an  
заданные портрет и ненулевые элементы матрицы  A в формате RR (C) U;
b - вещественный одномерный массив длины  n, содержащий компоненты заданного заполненного  вектора - строки;
n - заданное число строк матрицы  A (тип: целый);
m - заданное число столбцов матрицы  A (тип: целый);
c - вещественный одномерный массив длины  m, содержащий компоненты результирующего  вектора - строки

Версии

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

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

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

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

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

    /* Local variables */
    extern int am20r_c(int *, int *, float *, float *, int *,
                       int *, float *);
    static float c__[6];
    static int m, n, i__;

    n = 4;
    m = 6;
    am20r_c(ia, ja, an, b, &n, &m, c__);

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


Результаты:    c__ = ( 2, 1, 5, 4, 6, - 1 )