Текст подпрограммы и версий
adt1r_c.zip , adt1d_c.zip , adt1c_c.zip
Тексты тестовых примеров
tadt1r_c.zip , tadt1d_c.zip , tadt1c_c.zip

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

Назначение

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

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

Для заданной в компактной форме вещественной треугольной матрицы А порядка N вычисляется определитель как произведение ее диагональных элементов и записывается в виде

     det A = D1*10D2,  где  1.0 ≤ D1 < 10.0.

Дж. Форсайт, М. Малькольм, К. Моулер. Машинные методы математических вычислений. М.: Мир, 1980.

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

    int adt1r_c (real *a, integer *n, real *det1, real *det2,
            integer *ierr)

Параметры

a - вектор длины n на (n+1)/2, в котором последовательно записаны столбцы (для верхней треугольной) или строки (для нижней треугольной) матрицы a (тип: вещественный);
n - порядок матрицы a (тип: целый);
det1 - вещественная переменная, содержащая на выходе мантиссу определителя;
det2 - вещественная переменная, содержащая на выходе десятичный порядок определителя;
ierr - целая переменная, содержащая на выходе информацию о прохождении счета, при этом:
ierr=65 - если n ≤ 0;
ierr=66 - если в процессе работы произошло переполнение (это говорит о том, что некоторые диагональные элементы матрицы a имеют порядок, равный  s - 1, где s - максимальный порядок для вещественных чисел на данной машине);
ierr=-k - где k - номер строки матрицы a с нулевым диагональным элементом (это свидетельствует о вырожденности матрицы a). Если таких строк несколько, то значение k равно номеру первой из них (см. замечания по использованию).

Версии

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

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

utafsi_c - подпрограмма выдачи диагностических сообщений.

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

  1. 

В подпрограмме adt1d_c массив a и переменные det1 и det2 имеют тип double.

  2. 

В подпрограмме adt1c_c массив a и переменная det1 имеют тип complex.

  3.  Если переменной ierr присваивается значение, отличное от нуля, то выдается соответствующее диагностическое сообщение, полагается det1 = 0.0,  det2 = 0.0 и происходит выход из подпрограммы.

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

int main(void)
{
    /* Local variables */
    static int ierr;
    extern int adt1r_c(float *, int *, float *, float *, int *);
    static float a[15];
    static int i__, j, k, na, naa;
    static float det1, det2;
    int i__1, i__2;

    na = 5;
    naa = 15;
    k = 0;
    i__1 = na;
    for (i__ = 1; i__ <= i__1; ++i__) {
        i__2 = i__;
        for (j = 1; j <= i__2; ++j) {
            ++k;
            a[k - 1] = (float) (i__ * 10 + j);
/* l3: */
        }
/* l4: */
    }
    adt1r_c(a, &na, &det1, &det2, &ierr);

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


Результаты:

        det1  =  1.932612
        det2  =  7.0