Текст подпрограммы и версий
ammlr_c.zip , ammld_c.zip
Тексты тестовых примеров
tammlr_c.zip , tammld_c.zip

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

Назначение

Численное умножение обратной для нижней треугольной разреженной матрицы с единичной диагональю, заданной в формате RR (L) U, на прямоугольную разреженную матрицу, заданную в формате RR (C) U

Математическое описание

Форматы RR (L) U и RR (C) U приведены в описаниях подпрограмм ammkr_c и amtsr_c .

Данная операция эквивалентна следующей:

                    X  =  U -TB , 

где B - прямоугольная разреженная матрица с NR строками и NC столбцами в формате RR (C) U и U - верхняя треугольная матрица порядка NR в формате RR (L) U.

Алгоритм, реализованный в подпрограмме ammlr_c, приведен в описании подпрограммы ammkr_c .

С.Писсанецки. Технология разреженных матриц. - М.: Мир, 1988

Использование

    int ammlr_c (integer *iut, integer *jut, real *unt,
            integer *ib, integer *jb, real *bn, integer *nr, integer *nc,
            integer *ix, integer *jx, real *xn, real *p)

Параметры

iut, jut, -
      unt  
заданные портрет и ненулевые элементы матрицы UT в формате RR (L) U;
ib,jb,bn - заданные портрет и ненулевые элементы матрицы B в формате RR (C) U;
nr - заданный порядок матрицы UT и число строк матриц B и X (тип: целый);
nc - заданное число столбцов матриц B и X (тип: целый);
ix, jx - заданный портрет результирующей матрицы X в формате RR (C) U;
xn - вещественный одномерный массив, содержащий вычисленные ненулевые элементы матрицы X в соответствии с заданным ее портретом  ix и jx;
p - вещественный одномерный массив длины nc, используемый в подпрограмме в качестве рабочего

Версии:

ammld_c - численное умножение обратной для нижней треугольной разреженной матрицы с единичной диагональю, заданной в формате RR (L) U, на прямоугольную разреженную матрицу, заданную в формате RR (C) U, в режиме удвоенной точности; при этом параметры unt, bn, xn и p должны иметь тип double

Вызываемые подпрограммы: нет

Замечания по использованию: нет

Пример использования

int main(void)
{
    /* Initialized data */
    static int iut[5] = { 1,1,1,2,4 };
    static int jut[3] = { 2,3,1 };
    static int ib[5] = { 1,3,4,5,6 };
    static int jb[5] = { 3,1,2,1,3 };
    static float unt[3] = { 1.f,1.f,1.f };
    static float bn[5] = { 1.f,1.f,1.f,1.f,1.f };
    static int ix[5] = { 1,3,4,6,9 };
    static int jx[8] = { 3,1,2,1,2,3,1,2 };

    /* Local variables */
    static float p[3];
    extern int ammlr_c(int *, int *, float *, int *, int *, float *, int *,
                       int *, int *, int *, float *, float *);
    static int nc, nr;
    static float xn[8];

    nr = 4;
    nc = 3;
    ammlr_c(iut, jut, unt, ib, jb, bn, &nr, &nc, ix, jx, xn, p);

    printf("\n  %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f %5.0f \n",
           xn[0], xn[1], xn[2], xn[3], xn[4], xn[5], xn[6], xn[7]);
    return 0;
} /* main */

Результаты:    xn  =  ( 1, 1, 1, 1, - 1, 0, - 2, 1 )