Текст подпрограммы и версий
ash2r_c.zip , ash2d_c.zip
Тексты тестовых примеров
tash2r_c.zip , tash2d_c.zip

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

Назначение

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

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

Подпрограмма ash2r_c вычисляет решение системы N линейных алгебраических уравнений А*x = b, где А - положительно определенная симметричная ленточная матрица, заданная в компактной форме, b - одномерный вектор правой части решаемой системы, методом квадратного корня (методом Холецкого).

В.В.Воеводин, Численные методы алгебры (теория и алгорифмы), Наука, М., 1966 .

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

    int ash2r_c (real *a, real *b, real *x, integer *n,
            integer *nc, integer *l, integer *ierr)

Параметры

a - вещественный двумерный массив размера n на (nc + 1), в котором содержится заданная матрица, записанная в компактной форме;
b - вектор длины n, в котором задается правая часть исходной системы (тип: вещественный);
x - вектор длины n, в котором содержится решение исходной системы (тип: вещественный);
n - порядок матрицы (тип: целый);
nc - число ненулевых диагоналей заданной матрицы по одну сторону от главной диагонали (тип:целый);
l - целая переменная, которая задает режим работы подпрограммы; при этом:
l = 1 - если система с данной матрицей решается впервые;
l ≠ 1 - если система с данной матрицей решается повторно;
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом:
ierr=65 - если заданная матрица не является положительно определенной.

Версии

ash2d_c - решение системы линейных алгебраических уравнений с положительно определенной симметричной ленточной матрицей, заданной в компактной форме, методом квадратного корня (методом Холецкого) с повышенной точностью.

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

utas10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы ash2r_c;
utas11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы ash2d_c;
afh2r_c - подпрограмма, реализующая треугольное разложение положительно определенной симметричной ленточной матрицы с компактной формой представления методом квадратного корня;
afh2d_c - подпрограмма, реализующая треугольное разложение положительно определенной симметричной ленточной матрицы с компактной формой представления методом квадратного корня с повышенной точностью.

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

 

При работе подпрограммы исходная матрица не сохраняется. На месте матрицы a помещается ее треугольное разложение, полученное программами afh2r_c, afh2d_c.

Подпрограммы ash2r_c и ash2d_c позволяют использовать вместо параметра x параметр b. Таким образом, в результате работы подпрограммы на место столбца правой части может быть помещено вычисленное решение.

Для подпрограммы ash2d_c параметры a, b, x должны иметь тип double.

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

int main(void)
{
    /* Initialized data */
    static float a[6] /* was [3][2] */ = { 0.f,2.f,12.f,1.f,25.f,56.f };
    static float b[3] = { 1.f,27.f,68.f };

    /* Local variables */
    static int ierr, i__;
    extern int ash2r_c(float *, float *, float *, int *, int *, int *, int *);
    static float x[3];

    for (i__ = 0; i__ <= 3; i__+=3) {
         printf("\n  %15.7e %15.7e %15.7e \n",
                a[i__], a[i__+1], a[i__+2]);
    }
    printf("\n  %5i \n", ierr);
    for (i__ = 1; i__ <= 3; ++i__) {
         printf("\n  %15.7e \n", x[i__-1]);
    }
    ash2r_c(a, b, x, &c__3, &c__1, &c__1, &ierr);

    printf("\n  %5i \n", ierr);
    for (i__ = 1; i__ <= 3; ++i__) {
         printf("\n  %15.7e \n", x[i__-1]);
    }
    return 0;
} /* main */


Результаты: 

      x = (-0.13178, 0.56589, 1.0930) ,
      ierr=0