AMTSR .
Текст подпрограммы и версий am20r_c.zip , am20d_c.zip |
Тексты тестовых примеров tam20r_c.zip , tam20d_c.zip |
Умножение заданного вектора - строки на прямоугольную разреженную матрицу, заданную в формате 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 )