Текст подпрограммы и версий
adg1r_c.zip , adg1d_c.zip , adg1c_c.zip
Тексты тестовых примеров
tadg1r_c.zip , tadg1d_c.zip , tadg1c_c.zip

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

Назначение

Вычисление определителя матрицы методом Гаусса с выбором ведущего элемента по столбцу.

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

Для матрицы А выполняется разложение вида Q*А = L*U, где Q - матрица перестановок, L, U - треугольные матрицы и матрица L имеет единичные диагональные элементы. Определитель матрицы А вычисляется как произведение определителя матрицы Q и диагональных элементов матрицы U и записывается в виде:

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

В.В.Воеводин, Р.В.Петрина, Комплекс алгоритмов, основанных на преобразованиях Гаусса, в пакете линейной алгебры, Сб. "Численный анализ на ФОPТPАНе", вып.3, Изд-во МГУ, 1973.

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

    int adg1r_c (real *a, real *d1, integer *d2, integer *s,
            integer *n)

Параметры

a - вещественный двумерный массив размера n на n, в котором задается исходная матрица;
d1 - вещественная переменная, в которой запоминается мантисса определителя;
d2 - целая переменная, в которой запоминается двоичный порядок определителя;
is - целый вектор длины n, используемый как рабочий;
n - заданный порядок исходной матрицы (тип: целый).

Версии

adg1d_c - вычисление определителя матрицы, заданной с удвоенной точностью, методом Гаусса с выбором ведущего элемента по столбцу.
adg1c_c - вычисление определителя комплексной матрицы C с выбором ведущего элемента по столбцу.

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

afg1r_c - треугольное разложение матрицы методом Гаусса с выбором ведущего элемента по столбцу.
afg1d_c - треугольное разложение матрицы, заданной с удвоенной точностью, методом Гаусса с выбором ведущего элемента по столбцу.
afg1c_c - треугольное разложение комплексной матрицы методом Гаусса с выбором ведущего элемента по столбцу.

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

  1. 

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

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

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

int main(void)
{
    /* Initialized data */
    static float a[16] /* was [4][4] */ = { 5.f,7.f,6.f,5.f,7.f,10.f,8.f,7.f,
                                        6.f,8.f,10.f,9.f,5.f,7.f,9.f,10.f };

    /* Local variables */
    extern int adg1r_c(float *, float *, int *, float *, int *);
    static int n;
    static float s[4], d1;
    static int d2;

    n = 4;
    adg1r_c(a, &d1, &d2, s, &n);

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


Результат:

         d1 = 0.0625,  d2 = 4,
 т.е.  det a = 0.0625*24 = 1.