Текст подпрограммы и версий ammmr_c.zip , ammmd_c.zip |
Тексты тестовых примеров tammmr_c.zip , tammmd_c.zip |
Умножение прямоугольной разреженной матрицы, заданной в формате 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 )