Текст подпрограммы и версий
ammmr_c.zip , ammmd_c.zip
Тексты тестовых примеров
tammmr_c.zip , tammmd_c.zip

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

Назначение

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

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

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

Подпрограмма ammmr_c выполняет умножение прямоугольной разреженной матрицы A с NR строками и NC столбцами, заданной в формате RR (C) U, на диагональную матрицу D порядка NR. Ненулевые элементы результирующей матрицы B = A * D размещаются в массиве AN. Портрет матрицы B совпадает с портретом матрицы A

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

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

    int ammmr_c (integer *ia, integer *ja, real *an, integer *nr,
            integer *nc, real *d)

Параметры

ia,ja,an - на входе: заданные портрет и ненулевые элементы матрицы A в формате RR (C) U; на выходе: an содержит ненулевые элементы матрицы B, а содержимое массивов ia и ja не меняется и определяет портрет матрицы B;
nr, nc - заданные значения числа строк и столбцов матриц A (и B) соответственно (тип: целый);
d - вещественный одномерный массив nr, содержащий элементы диагональной матрицы D

Версии

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

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

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

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

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

    /* Local variables */
    extern int ammmr_c(int *, int *, float *, int *, int *, float *);
    static int nc, nr;

    nr = 4;
    nc = 4;
    ammmr_c(ia, ja, an, &nr, &nc, d__);

    printf("\n  %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f \n",
           an[0], an[1], an[2], an[3], an[4], an[5], an[6], an[7], an[8]);
    return 0;
} /* main */

Результаты:   an  =  ( 5, 5, 5, 5, 5, 5, 5, 5, 5 )