Текст подпрограммы и версий ama8r_c.zip , ama8d_c.zip |
Тексты тестовых примеров tama8r_c.zip , tama8d_c.zip |
Численное сложение двух прямоугольных разреженных матриц, заданных в формате RR (C) U.
Описание формата RR (C) U приведено в описании подпрограммы amtsr_c .
Пусть заданы прямоугольные разреженные матрицы A и B размеров N на M в формате RR (C) U и портрет матрицы C, равной A + B, также в формате RR (C) U, который может быть получен подпрограммой ama7r_c на символическом этапе сложения. Подпрограмма ama8r_c по этим исходным данным вычисляет ненулевые элементы матрицы C
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int ama8r_c (integer *ia, integer *ja, real *an, integer *ib, integer *jb, real *bn, integer *n, integer *m, integer *ic, integer *jc, real *cn, real *x)
Параметры
ia, ja - an | заданные портрет и ненулевые элементы матрицы A в формате RR (C) U; |
ib, jb - bn | заданные портрет и ненулевые элементы матрицы B в формате RR (C) U; |
n - | заданное число строк матриц A, B и C (тип: целый); |
m - | заданное число столбцов матриц A, B и C (тип: целый). |
ic, jc - | заданный портрет матрицы C = A + B в формате RR (C) U; |
cn - | вещественный одномерный массив, в котором формируются ненулевые элементы матрицы c согласно портрету ic, jc; |
x - | вещественный массив длины m, используемый в подпрограмме в качестве рабочего |
Версии:
ama8d_c - | численное сложение двух прямоугольных разреженных матриц, заданных в формате RR (C) U, в режиме удвоенной точности; при этом параметры an, bn и cn должны быть описаны как 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 int ib[5] = { 1,4,5,8,10 }; static int jb[9] = { 1,6,3,5,4,2,1,2,3 }; static int ic[5] = { 1,5,9,13,16 }; static int jc[15] = { 5,3,1,6,4,3,1,5,1,6,4,2,4,2,3 }; 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 bn[9] = { 1.f,5.f,-1.f,-2.f,2.f,6.f,4.f,-1.f,1.f }; /* Local variables */ extern int ama8r_c(int *, int *, float *, int *, int *, float *, int *, int *, int *, int *, float *, float *); static int m, n, i__; static float x[6], cn[15]; n = 4; m = 6; ama8r_c(ia, ja, an, ib, jb, bn, &n, &m, ic, jc, cn, x); for (i__ = 0; i__ <= 10; i__+= 5) { printf("\n %4.0f %4.0f %4.0f %4.0f %4.0f \n", cn[i__], cn[i__+1], cn[i__+2], cn[i__+3], cn[i__+4]); } return 0; } /* main */ Результаты: cn = ( - 1, 1, 1, 5, 3, 3, 4, 5, 2, - 1, 2, 6, 1, 0, 1 )