|
Текст подпрограммы и версий 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 )