Текст подпрограммы и версий
ast5r_c.zip , ast5d_c.zip
Тексты тестовых примеров
tast5r_c.zip , tast5d_c.zip

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

Назначение

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

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

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

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

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

              x1  =  b1
                               i -1
              xi  =  bi  -  ∑   uk i xk ,      i = 2, 3, ..., n
                              k =1 

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

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

Параметры

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

Версии

ast5d_c - решение разреженной линейной системы с нижней треугольной матрицей с единичной диагональю, представленной в виде верхней треугольной в формате RR (U) U в режиме удвоенной точности; при этом параметры un, x и b должны иметь тип 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 ast5r_c(int *, int *, float *, float *, int *, float *);
    static int n;
    static float x[4];

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

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


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