Текст подпрограммы и версий am21r_c.zip , am21d_c.zip |
Тексты тестовых примеров tam21r_c.zip , tam21d_c.zip |
Умножение симметричной разреженной матрицы, заданной в формате RR (U) U, на заполненный вектор - столбец
Сокращенное название формата RR (U) U происходит от английского словосочетания "Row - wise Representation, Upper, Unordered" (строчное представление, верхний треугольник, неупорядоченное).
Данный формат используется для симметричных и верхних треугольных матриц, у которых большинство диагональных элементов отличны от нуля. В этом формате представляется только верхний треугольник матрицы (внутри каждой строки элементы могут храниться в произвольном порядке), а ее диагональные элементы хранятся в отдельном одномерном массиве.
Поясним данный формат на следующем примере. Пусть дана симметричная матрица A четвертого порядка:
1 2 3 4 1 | 0 1 2 3 | A = 2 | 1 1 2 3 | 3 | 2 2 2 3 | 4 | 3 3 3 3 |
Тогда в рассматриваемом формате представление матрицы A может иметь следующий вид:
IA = ( 1, 4, 6, 7; 7 ) JA = ( 4, 2, 3; 4, 3; 4 ) AN = ( 3, 1, 2; 3, 2; 3 ) AD = ( 0, 1, 2, 3 )
Правила формирования массивов IA, JA и AN аналогичны правилам формирования соответствующих массивов в формате RR (C) U, описание которого приведено в описании подпрограммы amtsr_c .
Подпрограмма am21r_c умножает симметричную разреженную матрицу A порядка N, заданную в формате RR (U) U, на заполненный вектор - столбец B длины N и помещает разультирующий заполненный вектор - столбец в одномерный массив C длины N
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int am21r_c (integer *ia, integer *ja, real *an, real *ad, real *b, integer *n, real *c)
Параметры
ia, ja, - an, ad | заданные портрет и ненулевые элементы матрицы a в формате rr (u) u; |
b - | вещественный одномерный массив n, содержащий компоненты заданного заполненного вектора - столбца; |
n - | заданный порядок матрицы a (тип: целый); |
c - | вещественный одномерный массив длины n, содержащий компоненты результирующего вектора - столбца |
Версии
am21d_c - | умножение симметричной разреженной матрицы, заданной в формате RR (U) U, на разреженный вектор - столбец в режиме удвоенной точности; при этом параметры an, ad, b и c должны иметь тип double |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int ia[5] = { 1,4,6,7,7 }; static int ja[6] = { 4,2,3,4,3,4 }; static float an[6] = { 3.f,1.f,2.f,3.f,2.f,3.f }; static float ad[4] = { 0.f,1.f,2.f,3.f }; static float b[4] = { 1.f,1.f,1.f,1.f }; /* Local variables */ extern int am21r_c(int *, int *, float *, float *, float *, int *, float *); static float c__[4]; static int n, i__; n = 4; am21r_c(ia, ja, an, ad, b, &n, c__); for (i__ = 1; i__ <= 4; ++i__) { printf("\n %6.0f \n", c__[i__-1]); } return 0; } /* main */ Результаты: c__ = ( 6, 7, 9, 12 )