Текст подпрограммы и версий
ast4r_c.zip , ast4d_c.zip
Тексты тестовых примеров
tast4r_c.zip , tast4d_c.zip

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

Назначение

Решение разреженной линейной системы с верхней треугольной матрицей с единичной диагональю, представленной в формате RR (U) U.

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

Описание формата RR (U) U приведено в описании подпрограммы am21r_c (индекс 18.8.16).

Пусть разреженная верхняя треугольная матрица  U порядка  N с единичной диагональю задана в строчном формате RR (U) U. Требуется найти решение линейной системы UX = B.

Решение систем такого вида осуществляется обратной подстановкой по следующим расчетным формулам:

              xn  =  bn
                                   n
              xi   =  bi  -    ∑      ui k xk ,       i = n - 1, ..., 2, 1
                                k= i +1 

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

    int ast4r_c (integer *iu, integer *ju, real *un, real *b,
            integer *n, real *x)

Параметры

iu, ju, -
         un  
заданные портрет и ненулевые элементы верхней треугольной матрицы  U с единичной диагональю в формате RR (U) U;
b - вещественный одномерный массив длины  n, содержащий компоненты вектора правой части системы;
n - заданный порядок системы (тип: целый);
x - вещественный одномерный массив длины  n, содержащий компоненты вычисленного вектора решения.

Версии

ast4d_c - решение разреженной линейной системы с верхней треугольной матрицей с единичной диагональю в режиме удвоенной точности; при этом параметры un, b и x должны иметь тип double.

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

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

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

int main(void)
{
    /* Initialized data */
    static int iu[5] = { 1,2,3,4,4 };
    static int ju[3] = { 4,3,4 };
    static float un[3] = { 1.f,1.f,1.f };
    static float b[4] = { 1.f,1.f,1.f,1.f };

    /* Local variables */
    extern int ast4r_c(int *, int *, float *, float *, int *, float *);
    static int n;
    static float x[4];

    n = 4;
    ast4r_c(iu, ju, un, b, &n, x);

    printf("\n  %5.0f %5.0f %5.0f %5.0f \n", x[0], x[1], x[2], x[3]);
    return 0;
} /* main */


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