Текст подпрограммы и версий amz8r_c.zip , amz8d_c.zip |
Тексты тестовых примеров tamz8r_c.zip , tamz8d_c.zip |
Преобразование симметричной разреженной матрицы из формата RR (C) U в формат RR (U) U.
Описание форматов RR (С) U и RR (U) U приведены в описаниях подпрограмм amtsr_c и am21r_c .
Подпрограмма amz8r_c предназначена для формирования компактного представления симметричной матрицы А порядка N, заданной в формате RR (С) U, в виде верхнего треугольника и диагонали, т.е. в формате RR (U) U. Новое представление матрицы А формируется в тех же массивах, в которых задана исходная матрица.
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int amz8r_c (integer *ia, integer *ja, real *an, real *ad, integer *n)
Параметры
ia,ja,an - | на входе: заданные портрет и ненулевые элементы матрицы A в формате RR (C) U; на выходе: заданные портрет и ненулевые элементы верхнего треугольника матрицы A в формате RR (U) U; |
ad - | вещественный одномерный массив длины n, содержащий на выходе диагональные элементы матрицы A; |
n - | заданный порядок матрицы A (тип: целый); |
Версии
amz8d_c - | преобразование симметричной разреженной матрицы из формата RR (C) U в формат RR (U) U в режиме удвоенной точности; при этом параметры an и ad должны иметь тип 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 }; /* Local variables */ extern int amz8r_c(int *, int *, float *, float *, int *); static int n; static float ad[4]; n = 4; amz8r_c(ia, ja, an, ad, &n); printf("\n %5i %5i %5i %5i %5i \n", ia[0], ia[1], ia[2], ia[3], ia[4]); printf("\n %5i %5i %5i %5i %5i \n", ja[0], ja[1], ja[2], ja[3], ja[4]); printf("\n %5i %5i %5i %5i \n", ja[5], ja[6], ja[7], ja[8]); 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]); printf("\n %5.0f %5.0f %5.0f %5.0f \n", ad[0], ad[1], ad[2], ad[3]); return 0; } /* main */ Результаты: ia = ( 1, 2, 3, 4, 4 ) ja = ( 4, 3, 4, 4, 2, 3, 4, 3, 1 ) an = ( 1, 1, 1, 1, 1, 1, 1, 1, 1 ) ad = ( 1, 0, 1, 1 )