Текст подпрограммы и версий
asb1r_c.zip , asb1d_c.zip
Тексты тестовых примеров
tasb1r_c.zip , tasb1d_c.zip

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

Назначение

Решение системы линейных алгебраических уравнений с ленточной матрицей, заданной в компактной форме, c выбором ведущего элемента по столбцу.

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

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

Дж.Х.Уилкинсон, Алгебраическая проблема собственных значений, "Наука", М., 1970.

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

    int asb1r_c (real *a, real *b, real *x, integer *n, integer *
        nlc, integer *nuc, integer *l, real *r, integer *ierr)

Параметры

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

Версии

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

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

utbf10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы asb1r_c;
utbf11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы asb1d_c;
afb1r_c - треугольное разложение ленточной матрицы, заданной в компактной форме, с выбором ведущего элемента по столбцу;
afb1d_c - треугольное разложение ленточной матрицы, заданной в компактной форме, с удвоенной точностью (выбор ведущего элемента по столбцу).

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

 

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

Подпрограммы asb1r_c и asb1d_c позволяют использовать вместо параметра x параметр b.

При использовании подпрограмм asb1r_c и asb1d_c в цикле значение параметра r должно оставаться неизменным (см. описание подпрограммы afb1r_c).

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

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

int main(void)
{
    /* Initialized data */
    static float b[3] = { 7.f,38.f,2.f };
    static float a[9] /* was [3][3] */ = { 0.f,-1.f,10.f,1.f,22.f,18.f,3.f,
                                           5.f,0.f };
    /* Local variables */
    static int ierr, i__;
    extern int asb1r_c(float *, float *, float *, int *, int *,
                       int *, int *, float *, int *);
    static float r__[6]  /* was [3][2] */, x[3];

    for (i__ = 1; i__ <= 9; ++i__) {
         printf("\n  %16.7e \n", a[i__-1]);
    }
    for (i__ = 1; i__ <= 3; ++i__) {
         printf("\n  %16.7e \n", b[i__-1]);
    }
    asb1r_c(a, b, x, &c__3, &c__1, &c__1, &c__1, r__, &ierr);

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


Результаты:

      x  =   (1., 2., -1.), 
      ierr = 0