Текст подпрограммы и версий
amtpr_c.zip , amtpd_c.zip
Тексты тестовых примеров
tamtpr_c.zip , tamtpd_c.zip

Подпрограмма:  amtpr_c

Назначение

Транспонирование прямоугольной разреженной матрицы, заданной в формате 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 )