Текст подпрограммы и версий
adh3r_c.zip , adh3d_c.zip , adh3c_c.zip , ads3c_c.zip
Тексты тестовых примеров
tadh3r_c.zip , tadh3d_c.zip , tadh3c_c.zip , tads3c_c.zip

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

Назначение

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

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

Симметричная матрица  А, записанная в компактной форме, раскладывается в произведение А = L D LT, где  L - треугольная матрица c единичными диагональными элементами, LT - транспонированная к ней, а  D - блочнодиагональная матрица с блоками порядка 1 или 2. Определитель матрицы  А вычисляется как определитель матрицы  D и записывается в виде:

     det A  =  D1*2D2 ,    где  0.0625 ≤ D1 < 1 . 

Bunch J.R., Parlett B.N. Direct methods for solving symmetric indefinite systems of linear equations, siam J. Numer. Anal., v.8, No.4, 1971.

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

    int adh3r_c (real *a, real *d1, integer *d2, integer *ri, real
        *r__, integer *n)

Параметры

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

Версии

adh3d_c - вычисление определителя симметричной матрицы, заданной с удвоенной точностью в компактной форме, с использованием метода квадратного корня.
adh3c_c - вычисление определителя эрмитовой матрицы, заданной в компактной форме, с использованием метода квадратного корня.
ads3c_c - вычисление определителя симметричной комплексной матрицы, заданной в компактной форме, с использованием метода квадратного корня.

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

afh3r_c - треугольное разложение вещественной симметричной матрицы, заданной в компактной форме, с использованием метода квадратного корня (метода Холецкого).
afh3d_c - треугольное разложение вещественной симметричной матрицы, заданной с удвоенной точностью в компактной форме, с использованием метода квадратного корня (метода Холецкого).
afh3c_c - треугольное разложение неособенной эрмитовой матрицы с компактной формой представления методом квадратного корня.
afs3c_c - треугольное разложение неособенной симметричной комплексной матрицы с компактной формой представления методом квадратного корня.

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

  1. 

В подпрограмме adh3d_c массивы  a, r и переменная d1 имеют тип double.

  2.  В подпрограммах adh3c_c и ads3c_c массив  a и переменная  d1 имеют тип complex.

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

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

    /* Local variables */
    extern int adh3r_c(float *, float *, int *, float *, float *, int *);
    static int n;
    static float r__[3], d1;
    static int d2;
    static float ri[6];

    n = 3;
    adh3r_c(a, &d1, &d2, ri, r__, &n);

    printf("\n  %16.7e \n",d1);
    printf("\n  %5i \n",d2);
    return 0;
} /* main */


Результат:

       d1 = 0.609375 ,     d2 = 4 ,

  т.е.    det A  =  0.609375*24  =  9.75