Текст подпрограммы и версий
ammjr_c.zip , ammjd_c.zip
Тексты тестовых примеров
tammjr_c.zip , tammjd_c.zip

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

Назначение

Численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U

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

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

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

Пусть в формате RR (C) U заданы матрица A размеров  p  на  q  и матрица B размеров  q  на  r. Пусть известен также портрет результирующей матрицы C = A * B в формате RR (C) U, полученный, например, предварительно при помощи подпрограммы ammir_c. Подпрограмма ammjr_c вычисляет ненулевые элементы матрицы C посредством алгоритма, изложенного в описании подпрограммы ammir_c

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

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

    int ammjr_c (integer *ia, integer *ja, real *an, integer *ib,
            integer *jb, real *bn, integer *ic, integer *jc, integer *np,
            integer *nq, integer *nr, real *cn, real *x)

Параметры

   ia, ja -
      an  
заданные портрет и ненулевые элементы матрицы A в формате RR (C) U;
   ib, jb -
      bn  
заданные портрет и ненулевые элементы матрицы B в формате RR (C) U;
ic, jc - заданный портрет результирующей матрицы C в формате RR (C) U;
np - заданное число строк матрицы A (тип: целый);
nq - заданное число столбцов матрицы A и строк матрицы B (тип: целый);
nr - заданное число столбцов матрицы B (тип: целый);
cn - вещественный одномерный массив, в котором помещаются вычисленные ненулевые элементы матрицы C согласно портрету  ic, jc;
x - вещественный одномерный массив длины nr, используемый в подпрограмме в качестве рабочего

Версии

ammjd_c - численное умножение прямоугольных разреженных матриц, заданных в формате RR (C) U, в режиме удвоенной точности; при этом параметры an, bn, cn и x должны иметь тип double

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

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

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

int main(void)
{
    /* Initialized data */
    static int ia[5] = { 1,4,4,6,7 };
    static int ja[6] = { 1,5,4,4,2,1 };
    static int ib[6] = { 1,2,4,6,6,7 };
    static int jb[6] = { 2,2,1,2,1,2 };
    static int ic[5] = { 1,2,2,4,5 };
    static int jc[4] = { 2,2,1,2 };
    static float an[6] = { 1.f,1.f,1.f,1.f,1.f,1.f };
    static float bn[6] = { 1.f,1.f,1.f,1.f,1.f,1.f };

    /* Local variables */
    static float x[3];
    extern int ammjr_c(int *, int *, float *, int *, int *, float *, int *,
                       int *, int *, int *, int *, float *, float *);
    static float cn[4];
    static int np, nq, nr;

    np = 4;
    nq = 5;
    nr = 3;
    ammjr_c(ia, ja, an, ib, jb, bn, ic, jc, &np, &nq, &nr, cn, x);

    printf("\n  %5.0f %5.0f %5.0f %5.0f \n", cn[0], cn[1], cn[2], cn[3]);
    return 0;
} /* main */

Результаты:   cn  =  ( 2, 1, 1, 1 )