Текст подпрограммы и версий
amz8r_c.zip , amz8d_c.zip
Тексты тестовых примеров
tamz8r_c.zip , tamz8d_c.zip

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

Назначение

Преобразование симметричной разреженной матрицы из формата 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 )