Текст подпрограммы и версий ( Фортран )
adb1r.zip   adb1d.zip   adb1c.zip
Тексты тестовых примеров ( Фортран )
tadb1r.zip   tadb1d.zip   tadb1c.zip
Текст подпрограммы и версий ( Си )
adb1r_c.zip   adb1d_c.zip   adb1c_c.zip
Тексты тестовых примеров ( Си )
tadb1r_c.zip   tadb1d_c.zip   tadb1c_c.zip
Текст подпрограммы и версий ( Паскаль )
adb1r_p.zip   adb1e_p.zip   adb1c_p.zip
Тексты тестовых примеров ( Паскаль )
tadb1r_p.zip   tadb1e_p.zip   tadb1c_p.zip

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

Назначение

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

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

Для заданной в компактной форме ленточной вещественной матрицы А порядка N выполняется треугольная факторизация L - 1 * А = U, где U - верхняя треугольная ленточная матрица, вычисляется величина, обратная числу обусловленности матрицы А

           RCOND = 1/( || A ||1 * || A-1 ||1 ) ,

 где   || A ||1 = maxj = 1, ..., N { | a1 j | + | a2 j | + ...+ | aN j | } ,

а затем вычисляется определитель матрицы А как произведение диагональных элементов матрицы U, умноженное на (-1)I, где I - число выполненных в процессе факторизации перестановок.

Определитель записывается в виде:

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

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

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

    SUBROUTINE  ADB1R (A, MA, N, ML, MU, NLEAD, DET1, DET2,
                                             RCOND, Z, IERR)

Параметры

A - вещественный двумерный массив размера МА на N, в первых МL+МU+1 столбцах которого задается в компактном виде исходная ленточная матрица порядка N; на выходе в первых МL столбцах массива находятся нижние кодиагонали ленточной матрицы L1* ... *LN - 1 ( Li ,  i = 1, ..., N - 1 суть элементарные матрицы исключения метода Гаусса ), в следующих МL+МU+1 столбцах содержится в компактном виде матрица U (см. замечания по использованию);
MA - первая размерность массива А в вызывающей программе (тип: целый);
N - порядок матрицы А (тип: целый);
ML - число нижних кодиагоналей матрицы А (тип: целый);
MU - число верхних кодиагоналей матрицы А (тип: целый);
NLEAD - целый вектор длины N, содержащий на выходе информацию о выполненных в ходе факторизации перестановках (см. замечания по использованию);
DET1 - вещественная переменная, содержащая на выходе мантиссу определителя;
DET2 - вещественная переменная, содержащая на выходе десятичный порядок определителя;
RCOND - вещественная переменная, содержащая на выходе вычисленное значение величины, обратной числу обусловленности матрицы А;
Z - вещественный рабочий вектор длины N;
IERR - целая переменная, содержащая на выходе информацию о прохождении счета, при этом:
IЕRR=65 - если МА ≤ 0 или N ≤ 0;
IЕRR=66 - если в процессе работы произошло переполнение (это говорит о том, что либо ||А||1, либо некоторые элементы матрицы U превосходят по абсолютной величине максимальное представимое на данной машине число);
IЕRR=-К - если в результате факторизации в К-ой строке матрицы U диагональный элемент равен нулю (свидетельствует о вырожденности матрицы А). Если таких строк у матрицы U несколько, то значение K полагается равным номеру последней из них.

Версии

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

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

AFB2R - подпрограмма треугольной факторизации и оценки числа обусловленности ленточной матрицы.
UTAFSI - подпрограмма выдачи диагностических сообщений.

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

  1. 

В подпрограмме АDВ1D массивы А, Z и переменные RСОND, DЕТ1 и DЕТ2 имеют тип DОUВLЕ РRЕСISIОN, для треугольного разложения и оценки числа обусловленности ленточной матрицы А вызывается подпрограмма АFВ2D.

  2. 

В подпрограмме АDВ1С массивы А и Z и переменная DЕТ1 имеют тип СОМРLЕХ, для треугольного разложения и оценки числа обусловленности ленточной матрицы А вызывается подпрограмма АFВ2С.

  3. 

На выходе К - ый элемент вектора NLЕАD равен номеру строки, переставленной на К - ом шаге факторизации с К - ой строкой матрицы А. Поскольку факторизация Гаусса требует N - 1 шагов, то NLЕАD (N) = N

  4. 

Так как в результате выполненных в ходе факторизации перестановок число верхних кодиагоналей матрицы U равно МL+МU, а также в силу некоторых конструктивных особенностей подпрограммы, для правильной ее работы необходимо выполнение условия МА ≥ N > МU+2*МL+1.

   

Если же МU+2*МL+1 ≥ N, то имеет смысл, задав матрицу А не в компактной, а в полной форме, обратиться к подпрограмме АDG2R.

  5. 

Если вырабатывается значение переменной IЕRR, отличное от нуля, то выдается соответствующее диагностическое сообщение, полагается RСОND = 0.0, DЕТ1 = 0.0, DЕТ2 = 0.0 и происходит выход из подпрограммы.

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

       DIMENSION A(5, 5), Z(5), NLEAD(5)
       MA = 5
       N = 5
       ML = 1
       MU = 1
       DO 4 I = 1, MA
       J0 = MAX0(1, I-ML)
       J1 = MIN0(N, I+MU)
       DO 3 J = J0, J1
       K = J-I+ML+1
       A(I, K) = FLOAT(I*10+J)
    3 CONTINUE
    4 CONTINUE
       CALL  ADB1R (A, MA, N, ML, MU, NLEAD, DET1, DET2,
                                 RCOND, Z, IERR)

Результаты:

           |    0         21.0     22.0     23.0     0 |
           | -0.524    32.0     33.0     34.0     0 |
    A = | -0.015    43.0     44.0     45.0     0 |
           |  0.292    54.0     55.0        0       0 |
           | -0.228    0.569      0         0       0 |

       NLEAD = (2, 3, 4, 5, 5)
       RCOND = 1.47362E-03
       DET1 = 8.88360
       DET2 = 5.0