Текст подпрограммы и версий amtpr_c.zip , amtpd_c.zip |
Тексты тестовых примеров tamtpr_c.zip , tamtpd_c.zip |
Транспонирование прямоугольной разреженной матрицы, заданной в формате RR (C) U, с одновременной перестановкой строк.
Описание форматов RR (С) U и RR (С) О приведены в описании подпрограммы amtsr_c .
Пусть исходная прямоугольная матрица А размеров N на M задана в формате RR (С) U и пусть задан массив K = ( k1, k2,..., kN ), содержащий некоторую перестановку чисел ( 1, 2,..., N ), определяющую требуемую перестановку строк.
В результате работы подпрограммы amtpr_c вычисляется транспортированная к А матрица в формате RR (С) О с переставленными в нужном порядке строками.
С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988
int amtpr_c (integer *ia, integer *ja, real *an, integer *n, integer *m, integer *k, integer *iat, integer *jat, real *ant)
Параметры
ia,ja,an - | заданные портрет и ненулевые элементы транспонируемой матрицы A в формате RR (C) U; |
n - | заданное число строк транспонируемой матрицы A (тип: целый); |
m - | заданное число столбцов транспонируемой матрицы A (тип: целый); |
k - | целый одномерный массив длины n, компоненты которого содержат перестановку чисел ( 1, 2,..., n ), описывающую требуемую перестановку строк матрицы A; |
iat, jat, - ant | вычисленные портрет и ненулевые элементы транспонированной матрицы в формате RR (C) O с переставленными в требуемом порядке строками; |
Версии
amtpd_c - | транспонирование прямоугольной разреженной матрицы, заданной в формате RR (C) U, с одновременной перестановкой строк в режиме удвоенной точности; при этом параметры an и ant должны быть описаны как double. |
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static int ia[6] = { 1,4,6,8,11,14 }; static int ja[13] = { 5,6,3,4,1,3,4,4,3,1,2,6,5 }; static int k[5] = { 5,3,2,4,1 }; static float an[13] = { 15.f,16.f,13.f,24.f,21.f,33.f,34.f,44.f,43.f, 41.f,52.f,56.f,55.f }; /* Local variables */ static int m, n; extern int amtpr_c(int *, int *, float *, int *, int *, int *, int *, int *, float *); static int iat[7], jat[13]; static float ant[13]; n = 5; m = 6; amtpr_c(ia, ja, an, &n, &m, k, iat, jat, ant); printf("\n %5i %5i %5i %5i %5i %5i %5i \n", iat[0], iat[1], iat[2], iat[3], iat[4], iat[5], iat[6]); printf("\n %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i %5i \n", jat[0], jat[1], jat[2], jat[3], jat[4], jat[5], jat[6], jat[7], jat[8], jat[9], jat[10], jat[11], jat[12]); printf("\n %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f \n", ant[0], ant[1], ant[2], ant[3], ant[4], ant[5], ant[6]); printf("\n %5.1f %5.1f %5.1f %5.1f %5.1f %5.1f \n", ant[7], ant[8], ant[9], ant[10], ant[11], ant[12]); return 0; } /* main */ Результаты: iat = ( 1, 3, 4, 7, 10, 12, 14 ) jat = ( 3, 4, 1, 2, 4, 5, 2, 3, 4, 1, 5, 1, 5 ) ant = ( 21, 41, 52, 33, 43, 13, 34, 24, 44, 55, 15, 56, 16 )