Текст подпрограммы и версий
afh3r_c.zip , afh3d_c.zip , afh3c_c.zip , afs3c_c.zip
Тексты тестовых примеров
tafh3r_c.zip , tafh3d_c.zip , tafh3c_c.zip , tafs3c_c.zip

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

Назначение

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

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

Подпрограмма afh3r_c реализует разложение неособенной симметричной матрицы А, записанной в компактной форме, в произведение А = L*D*LТ, где L - нижняя треугольная матрица с единичными диагональными элементами, LТ - транспортированная к ней, а D - блочно - диагональная матрица с блоками порядка 1 или 2.

Вunch J.R., Рarlett В.N., Direct methods for solving symmetric indefinite systems of linear equations, siam J. Numer. Аnal., Vol.8, No.4, December 1971.

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

    int afh3r_c (real *a, integer *n, integer *ir, real *r,
            integer *ierr)

Параметры

a - вещественный вектор длины n * (n + 1) / 2, который содержит исходную матрицу, записанную в компактной форме; в процессе работы в массиве a накапливаются элементы матриц L и D (см. замечания по использованию);
n - порядок заданной матрицы a (тип: целый);
ir - целый вектор длины 2n, в первых n компонентах которого запоминаются перестановки диагональных элементов, в последних - порядки блоков матрицы D;
r - вещественный вектор длины n, используемый как рабочий;
ierr - целая переменная, служащая для сообщения об ошибках, обнаруженных в процессе работы подпрограммы; при этом:
ierr=65 - если матрица является сингулярной.

Версии

afh3d_c - разложение неособенной симметричной матрицы с компактной формой представления методом квадратного корня с повышенной точностью.
afh3c_c - разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня;
afs3c_c - разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня.

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

utaf10_c - подпрограмма выдачи диагностических сообщений при работе подпрограмм afh3r_c, afh3c_c, afs3c_c .
utaf11_c - подпрограмма выдачи диагностических сообщений при работе подпрограмм afh3d_c, afh3p_c.

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

  1. 

Значения выходных матриц L и D помещаются в матрице A, причем

Ai i = Di i  ;

Ai+1 i = Di+1 i  ,  если  Di+1 i ≠ 0  (в этом случае Li+1 i = 0)

Ai+1 i = Li+1 i  ,  если  Di+1 i = 0

  2. 

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

  3.  Для подпрограмм afh3c_c, afs3c_c параметр a имеет тип complex.

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

int main(void)
{
    /* Initialized data */
    static float a[6] = { 1.f,.5f,-1.f,3.f,2.f,1.f };

    /* Local variables */
    static int ierr;
    extern int afh3r_c(float *, int *, int *, float *, int *);
    static int n, i__;
    static float r__[3];
    static int ir[6];

    n = 3;
    afh3r_c(a, &n, ir, r__, &ierr);

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


Результаты:

      a  =   (1., 3., 1., 0.69, -0.06, -1.22) , 
      ir(4)  =  2 ,  ir(5)  =  0 ,  ir(6)  =  1 ,  
      ierr  =  0